From 63a5af116dbac28c402ebf869fda31a7ed30633a Mon Sep 17 00:00:00 2001
From: rafalp <kontakt@rpiton.com>
Date: Sun, 15 Jan 2023 15:15:05 +0100
Subject: [PATCH] Fix posts feed markup

---
 .../src/components/post-feed/post/body.js     |   1 -
 .../src/components/post-feed/post/index.js    |   8 +-
 frontend/src/components/profile/root.js       |   5 +-
 frontend/src/style/misago/post-feed.less      |   3 +
 misago/static/misago/css/misago.css           |   2 +-
 misago/static/misago/css/misago.css.map       |   2 +-
 misago/static/misago/js/misago.js             |   2 +-
 misago/static/misago/js/misago.js.map         |   2 +-
 misago/templates/misago/profile/feed.html     | 108 +++++++++---------
 9 files changed, 70 insertions(+), 63 deletions(-)

diff --git a/frontend/src/components/post-feed/post/body.js b/frontend/src/components/post-feed/post/body.js
index 0224d72043..da1a90308d 100644
--- a/frontend/src/components/post-feed/post/body.js
+++ b/frontend/src/components/post-feed/post/body.js
@@ -1,6 +1,5 @@
 import React from "react"
 import MisagoMarkup from "misago/components/misago-markup"
-import escapeHtml from "misago/utils/escape-html"
 
 export default function (props) {
   if (props.post.content) {
diff --git a/frontend/src/components/post-feed/post/index.js b/frontend/src/components/post-feed/post/index.js
index ed6800a5f9..1ef6a83739 100644
--- a/frontend/src/components/post-feed/post/index.js
+++ b/frontend/src/components/post-feed/post/index.js
@@ -15,9 +15,11 @@ export default function ({ post, poster }) {
     <li className={className} id={"post-" + post.id}>
       <div className="panel panel-default panel-post">
         <div className="panel-body">
-          <PostSide post={post} poster={user} />
-          <Header post={post} />
-          <Body post={post} />
+          <div className="panel-content">
+            <PostSide post={post} poster={user} />
+            <Header post={post} />
+            <Body post={post} />
+          </div>
         </div>
       </div>
     </li>
diff --git a/frontend/src/components/profile/root.js b/frontend/src/components/profile/root.js
index 69109ab326..4ca84f03f2 100644
--- a/frontend/src/components/profile/root.js
+++ b/frontend/src/components/profile/root.js
@@ -74,13 +74,14 @@ const getModeration = (profile, user) => {
     delete: false,
   }
 
-  if (user.is_anonumous) return moderation
+  if (user.is_anonymouse) return moderation
 
   moderation.rename = profile.acl.can_rename
   moderation.avatar = profile.acl.can_moderate_avatar
   moderation.delete = profile.acl.can_delete
-  moderation.available =
+  moderation.available = (
     moderation.rename || moderation.avatar || moderation.delete
+  )
 
   return moderation
 }
diff --git a/frontend/src/style/misago/post-feed.less b/frontend/src/style/misago/post-feed.less
index 60cdf9e6de..1b799e776f 100644
--- a/frontend/src/style/misago/post-feed.less
+++ b/frontend/src/style/misago/post-feed.less
@@ -3,6 +3,9 @@
 // --------------------------------------------------
 
 .post-feed .post-side {
+  width: 100%;
+  padding-right: 0;
+
   .media-heading {
     margin: 0px;
 
diff --git a/misago/static/misago/css/misago.css b/misago/static/misago/css/misago.css
index 8fc1164173..5e09f28f54 100644
--- a/misago/static/misago/css/misago.css
+++ b/misago/static/misago/css/misago.css
@@ -1,3 +1,3 @@
 /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;font-family:sans-serif}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}
-/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{background:transparent!important;box-shadow:none!important;color:#000!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{-webkit-tap-highlight-color:rgba(0,0,0,0);font-size:10px}body{background-color:#fff;color:#172b4d;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#0065ff;text-decoration:none}a:focus,a:hover{color:#0747a6;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{background-color:#fff;border:1px solid #ddd;border-radius:4px;display:inline-block;height:auto;line-height:1.42857143;max-width:100%;padding:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{border:0;border-top:1px solid #ebecf0;margin-bottom:20px;margin-top:20px}.sr-only{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{color:inherit;font-family:inherit;font-weight:500;line-height:1.1}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{color:#7a869a;font-weight:400;line-height:1}.h1,.h2,.h3,h1,h2,h3{margin-bottom:10px;margin-top:20px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-bottom:10px;margin-top:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{font-size:16px;font-weight:300;line-height:1.4;margin-bottom:20px}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#7a869a}.text-primary{color:#0052cc}a.text-primary:focus,a.text-primary:hover{color:#003d99}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{background-color:#0052cc;color:#fff}a.bg-primary:focus,a.bg-primary:hover{background-color:#003d99}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{border-bottom:1px solid #ebecf0;margin:40px 0 20px;padding-bottom:9px}ol,ul{margin-bottom:10px;margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-inline,.list-unstyled{list-style:none;padding-left:0}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-bottom:20px;margin-top:0}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:700px){.dl-horizontal dt{clear:left;float:left;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap;width:160px}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help}.initialism{font-size:90%;text-transform:uppercase}blockquote{border-left:5px solid #ebecf0;font-size:17.5px;margin:0 0 20px;padding:10px 20px}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{color:#7a869a;display:block;font-size:80%;line-height:1.42857143}blockquote .small:before,blockquote footer:before,blockquote small:before{content:"\2014 \00A0"}.blockquote-reverse,blockquote.pull-right{border-left:0;border-right:5px solid #ebecf0;padding-left:0;padding-right:15px;text-align:right}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:""}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:"\00A0 \2014"}address{font-style:normal;line-height:1.42857143;margin-bottom:20px}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Courier New,monospace}code{background-color:#f9f2f4;border-radius:4px;color:#c7254e}code,kbd{font-size:90%;padding:2px 4px}kbd{background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);color:#fff}kbd kbd{box-shadow:none;font-size:100%;font-weight:700;padding:0}pre{word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px;color:#344563;display:block;font-size:13px;line-height:1.42857143;margin:0 0 10px;padding:9.5px;word-break:break-all}pre code{background-color:transparent;border-radius:0;color:inherit;font-size:inherit;padding:0;white-space:pre-wrap}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.row-no-gutters{margin-left:0;margin-right:0}.row-no-gutters [class*=col-]{padding-left:0;padding-right:0}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{min-height:1px;padding-left:15px;padding-right:15px;position:relative}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}table col[class*=col-]{display:table-column;float:none;position:static}table td[class*=col-],table th[class*=col-]{display:table-cell;float:none;position:static}caption{color:#7a869a;padding-bottom:8px;padding-top:8px}caption,th{text-align:left}.table{margin-bottom:20px;max-width:100%;width:100%}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{border-top:1px solid #ddd;line-height:1.42857143;padding:8px;vertical-align:top}.table>thead>tr>th{border-bottom:2px solid #ddd;vertical-align:bottom}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;margin-bottom:15px;overflow-y:hidden;width:100%}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{margin:0;min-width:0}fieldset,legend{border:0;padding:0}legend{border-bottom:1px solid #e5e5e5;color:#344563;display:block;font-size:21px;line-height:inherit;margin-bottom:20px;width:100%}label{display:inline-block;font-weight:700;margin-bottom:5px;max-width:100%}input[type=search]{-webkit-appearance:none;appearance:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{line-height:normal;margin:4px 0 0;margin-top:1px\9}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{padding-top:7px}.form-control,output{color:#172b4d;display:block;font-size:14px;line-height:1.42857143}.form-control{background-color:#fff;background-image:none;border:1px solid #ced0da;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);height:34px;padding:6px 12px;-webkit-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-o-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}.form-control:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);outline:0}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#ebecf0;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{display:block;margin-bottom:10px;margin-top:10px;position:relative}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.checkbox label,.radio label{cursor:pointer;font-weight:400;margin-bottom:0;min-height:20px;padding-left:20px}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{margin-left:-20px;margin-top:4px\9;position:absolute}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{cursor:pointer;display:inline-block;font-weight:400;margin-bottom:0;padding-left:20px;position:relative;vertical-align:middle}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-left:10px;margin-top:0}.form-control-static{margin-bottom:0;min-height:34px;padding-bottom:7px;padding-top:7px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 10px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 10px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{font-size:12px;height:30px;line-height:1.5;min-height:32px;padding:6px 10px}.input-lg{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 16px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 16px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{font-size:18px;height:46px;line-height:1.3333333;min-height:38px;padding:11px 16px}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{display:block;height:34px;line-height:34px;pointer-events:none;position:absolute;right:0;text-align:center;top:0;width:34px;z-index:2}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{height:46px;line-height:46px;width:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{height:30px;line-height:30px;width:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{background-color:#dff0d8;border-color:#3c763d;color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{background-color:#fcf8e3;border-color:#8a6d3b;color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{background-color:#f2dede;border-color:#a94442;color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{color:#3462af;display:block;margin-bottom:10px;margin-top:5px}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;vertical-align:middle;width:auto}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-bottom:0;margin-top:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{margin-left:0;position:relative}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-bottom:0;margin-top:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{margin-bottom:0;padding-top:7px;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{font-size:18px;padding-top:11px}.form-horizontal .form-group-sm .control-label{font-size:12px;padding-top:6px}}.btn{background-image:none;border:1px solid transparent;border-radius:4px;cursor:pointer;display:inline-block;font-size:14px;font-weight:400;line-height:1.42857143;margin-bottom:0;padding:6px 12px;text-align:center;touch-action:manipulation;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#172b4d;text-decoration:none}.btn.active,.btn:active{background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125);outline:0}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{-webkit-box-shadow:none;box-shadow:none;cursor:not-allowed;filter:alpha(opacity=65);opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{background-color:#ebecf0;border-color:#ccc;color:#172b4d}.btn-default.focus,.btn-default:focus{background-color:#ced0da;border-color:#8c8c8c;color:#172b4d}.btn-default:hover{background-color:#ced0da;border-color:#adadad;color:#172b4d}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-color:#ced0da;background-image:none;border-color:#adadad;color:#172b4d}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{background-color:#b9bdcb;border-color:#8c8c8c;color:#172b4d}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#ebecf0;border-color:#ccc}.btn-default .badge{background-color:#172b4d;color:#ebecf0}.btn-primary{background-color:#6554c0;border-color:#5643b7;color:#fff}.btn-primary.focus,.btn-primary:focus{background-color:#4d3da4;border-color:#2a215a;color:#fff}.btn-primary:hover{background-color:#4d3da4;border-color:#41338a;color:#fff}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-color:#4d3da4;background-image:none;border-color:#41338a;color:#fff}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{background-color:#41338a;border-color:#2a215a;color:#fff}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#6554c0;border-color:#5643b7}.btn-primary .badge{background-color:#fff;color:#6554c0}.btn-success{background-color:#00c853;border-color:#00af48;color:#fff}.btn-success.focus,.btn-success:focus{background-color:#00953e;border-color:#002f14;color:#fff}.btn-success:hover{background-color:#00953e;border-color:#00712f;color:#fff}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-color:#00953e;background-image:none;border-color:#00712f;color:#fff}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{background-color:#00712f;border-color:#002f14;color:#fff}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#00c853;border-color:#00af48}.btn-success .badge{background-color:#fff;color:#00c853}.btn-info{background-color:#3d5afe;border-color:#2444fe;color:#fff}.btn-info.focus,.btn-info:focus{background-color:#0a2ffe;border-color:#0119a1;color:#fff}.btn-info:hover{background-color:#0a2ffe;border-color:#0123e3;color:#fff}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-color:#0a2ffe;background-image:none;border-color:#0123e3;color:#fff}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{background-color:#0123e3;border-color:#0119a1;color:#fff}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#3d5afe;border-color:#2444fe}.btn-info .badge{background-color:#fff;color:#3d5afe}.btn-warning{background-color:#ffab00;border-color:#e69a00;color:#fff}.btn-warning.focus,.btn-warning:focus{background-color:#cc8900;border-color:#640;color:#fff}.btn-warning:hover{background-color:#cc8900;border-color:#a87100;color:#fff}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-color:#cc8900;background-image:none;border-color:#a87100;color:#fff}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{background-color:#a87100;border-color:#640;color:#fff}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#ffab00;border-color:#e69a00}.btn-warning .badge{background-color:#fff;color:#ffab00}.btn-danger{background-color:#ef5350;border-color:#ed3c39;color:#fff}.btn-danger.focus,.btn-danger:focus{background-color:#eb2521;border-color:#98110e;color:#fff}.btn-danger:hover{background-color:#eb2521;border-color:#d51713;color:#fff}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-color:#eb2521;background-image:none;border-color:#d51713;color:#fff}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{background-color:#d51713;border-color:#98110e;color:#fff}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#ef5350;border-color:#ed3c39}.btn-danger .badge{background-color:#fff;color:#ef5350}.btn-link{border-radius:0;color:#0065ff;font-weight:400}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{background-color:transparent;color:#0747a6;text-decoration:underline}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#7a869a;text-decoration:none}.btn-group-lg>.btn,.btn-lg{border-radius:6px;font-size:18px;line-height:1.3333333;padding:10px 16px}.btn-group-sm>.btn,.btn-sm{border-radius:3px;font-size:12px;line-height:1.5;padding:5px 10px}.btn-group-xs>.btn,.btn-xs{border-radius:3px;font-size:12px;line-height:1.5;padding:1px 5px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;position:relative;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px dashed;border-top:4px solid\9;display:inline-block;height:0;margin-left:2px;vertical-align:middle;width:0}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{background-clip:padding-box;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);display:none;float:left;font-size:14px;left:0;list-style:none;margin:2px 0 0;min-width:160px;padding:5px 0;position:absolute;text-align:left;top:100%;z-index:1000}.dropdown-menu.pull-right{left:auto;right:0}.dropdown-menu .divider{background-color:#ebecf0;height:1px;margin:9px 0;overflow:hidden}.dropdown-menu>li>a{clear:both;color:#172b4d;display:block;font-weight:400;line-height:1.42857143;padding:3px 20px;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#ebecf0;color:#172b4d;text-decoration:none}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#172b4d;color:#fff;outline:0;text-decoration:none}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#7a869a}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{background-color:transparent;background-image:none;cursor:not-allowed;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);text-decoration:none}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{color:#7a869a;display:block;font-size:12px;line-height:1.42857143;padding:3px 20px;white-space:nowrap}.dropdown-backdrop{bottom:0;left:0;position:fixed;right:0;top:0;z-index:990}.pull-right>.dropdown-menu{left:auto;right:0}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-bottom:4px dashed;border-bottom:4px solid\9;border-top:0;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{bottom:100%;margin-bottom:2px;top:auto}@media (min-width:700px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.nav{list-style:none;margin-bottom:0;padding-left:0}.nav>li,.nav>li>a{display:block;position:relative}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{background-color:#ebecf0;text-decoration:none}.nav>li.disabled>a{color:#7a869a}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{background-color:transparent;color:#7a869a;cursor:not-allowed;text-decoration:none}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#ebecf0;border-color:#0065ff}.nav .nav-divider{background-color:#e5e5e5;height:1px;margin:9px 0;overflow:hidden}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{border:1px solid transparent;border-radius:4px 4px 0 0;line-height:1.42857143;margin-right:2px}.nav-tabs>li>a:hover{border-color:#ebecf0 #ebecf0 #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{background-color:#fff;border:1px solid;border-color:#ddd #ddd transparent;color:#5e6c84;cursor:default}.nav-tabs.nav-justified{border-bottom:0;width:100%}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{left:auto;top:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{border-radius:4px;margin-right:0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#0065ff;color:#fff}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-left:0;margin-top:2px}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{left:auto;top:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{border-radius:4px;margin-right:0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px}.navbar{border:1px solid transparent;margin-bottom:20px;min-height:54px;position:relative}@media (min-width:700px){.navbar{border-radius:4px}.navbar-header{float:left}}.navbar-collapse{-webkit-overflow-scrolling:touch;border-top:1px solid transparent;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1);overflow-x:visible;padding-left:15px;padding-right:15px}.navbar-collapse.in{overflow-y:auto}@media (min-width:700px){.navbar-collapse{border-top:0;box-shadow:none;width:auto}.navbar-collapse.collapse{display:block!important;height:auto!important;overflow:visible!important;padding-bottom:0}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-bottom,.navbar-fixed-top{left:0;position:fixed;right:0;z-index:1030}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}@media (min-width:700px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{border-width:0 0 1px;top:0}.navbar-fixed-bottom{border-width:1px 0 0;bottom:0;margin-bottom:0}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-left:-15px;margin-right:-15px}@media (min-width:700px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-left:0;margin-right:0}}.navbar-static-top{border-width:0 0 1px;z-index:1000}@media (min-width:700px){.navbar-static-top{border-radius:0}}.navbar-brand{float:left;font-size:18px;height:54px;line-height:20px;padding:17px 15px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:700px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px;float:right;margin-bottom:10px;margin-right:15px;margin-top:10px;padding:9px 10px;position:relative}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{border-radius:1px;display:block;height:2px;width:22px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:700px){.navbar-toggle{display:none}}.navbar-nav{margin:8.5px -15px}.navbar-nav>li>a{line-height:20px;padding-bottom:10px;padding-top:10px}@media (max-width:699px){.navbar-nav .open .dropdown-menu{background-color:transparent;border:0;box-shadow:none;float:none;margin-top:0;position:static;width:auto}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:700px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-bottom:17px;padding-top:17px}}.navbar-form{border-bottom:1px solid transparent;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1),0 1px 0 hsla(0,0%,100%,.1);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1),0 1px 0 hsla(0,0%,100%,.1);margin:10px -15px;padding:10px 15px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;vertical-align:middle;width:auto}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-bottom:0;margin-top:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{margin-left:0;position:relative}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:699px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:700px){.navbar-form{border:0;-webkit-box-shadow:none;box-shadow:none;margin-left:0;margin-right:0;padding-bottom:0;padding-top:0;width:auto}}.navbar-nav>li>.dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:4px;border-top-right-radius:4px;margin-bottom:0}.navbar-btn{margin-bottom:10px;margin-top:10px}.navbar-btn.btn-sm{margin-bottom:12px;margin-top:12px}.navbar-btn.btn-xs{margin-bottom:16px;margin-top:16px}.navbar-text{margin-bottom:17px;margin-top:17px}@media (min-width:700px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#fff;border-color:#c1c7d0}.navbar-default .navbar-brand{color:#344563}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{background-color:transparent;color:#344563}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#8993a4}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{background-color:transparent;color:#505f79}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{background-color:#dfe1e6;color:#6b778c}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{background-color:transparent;color:#c1c7d0}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#dfe1e6;color:#6b778c}@media (max-width:699px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#8993a4}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{background-color:transparent;color:#505f79}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#dfe1e6;color:#6b778c}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{background-color:transparent;color:#c1c7d0}}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#c1c7d0}.navbar-default .navbar-link{color:#8993a4}.navbar-default .navbar-link:hover{color:#505f79}.navbar-default .btn-link{color:#8993a4}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#505f79}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#c1c7d0}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#a5aebb}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{background-color:transparent;color:#fff}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#a5aebb}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:transparent;color:#fff}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#080808;color:#fff}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{background-color:transparent;color:#444}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#080808;color:#fff}@media (max-width:699px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#a5aebb}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:transparent;color:#fff}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#080808;color:#fff}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{background-color:transparent;color:#444}}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-link{color:#a5aebb}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#a5aebb}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{background-color:#f5f5f5;border-radius:4px;list-style:none;margin-bottom:20px;padding:8px 15px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{color:#ccc;content:"/\00a0";padding:0 5px}.breadcrumb>.active{color:#7a869a}.alert{border:1px solid transparent;border-radius:4px;margin-bottom:20px;padding:15px}.alert h4{color:inherit;margin-top:0}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{color:inherit;position:relative;right:-21px;top:-2px}.alert-success{background-color:#00875a;border-color:#00875a;color:#fff}.alert-success hr{border-top-color:#006e49}.alert-success .alert-link{color:#e6e6e6}.alert-info{background-color:#448aff;border-color:#448aff;color:#fff}.alert-info hr{border-top-color:#2a7aff}.alert-info .alert-link{color:#e6e6e6}.alert-warning{background-color:#ff8b00;border-color:#ff8b00;color:#fff}.alert-warning hr{border-top-color:#e67d00}.alert-warning .alert-link{color:#e6e6e6}.alert-danger{background-color:#de350b;border-color:#de350b;color:#fff}.alert-danger hr{border-top-color:#c62f0a}.alert-danger .alert-link{color:#e6e6e6}.label{border-radius:.25em;color:#fff;display:inline;font-size:75%;font-weight:700;line-height:1;padding:.2em .6em .3em;text-align:center;vertical-align:baseline;white-space:nowrap}a.label:focus,a.label:hover{color:#fff;cursor:pointer;text-decoration:none}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#7a869a}.label-default[href]:focus,.label-default[href]:hover{background-color:#616d80}.label-primary{background-color:#0052cc}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#003d99}.label-success{background-color:#36b37e}.label-success[href]:focus,.label-success[href]:hover{background-color:#2a8c62}.label-info{background-color:#3d5afe}.label-info[href]:focus,.label-info[href]:hover{background-color:#0a2ffe}.label-warning{background-color:#ffab00}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#cc8900}.label-danger{background-color:#ff5630}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#fc2e00}@-webkit-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}.progress{background-color:#ebecf0;border-radius:3px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);height:20px;margin-bottom:20px;overflow:hidden}.progress-bar{background-color:#6554c0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);color:#fff;float:left;font-size:12px;height:100%;line-height:20px;text-align:center;-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease;width:0}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#36b37e}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.progress-bar-info{background-color:#3d5afe}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.progress-bar-warning{background-color:#ffab00}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.progress-bar-danger{background-color:#ff5630}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.btn-group,.btn-group-vertical{display:inline-block;position:relative;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{float:left;position:relative}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;max-width:100%;width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-left:0;margin-top:-1px}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:4px;border-top-right-radius:4px}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:0;border-top-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{border-collapse:separate;display:table;table-layout:fixed;width:100%}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{clip:rect(0,0,0,0);pointer-events:none;position:absolute}.input-group{border-collapse:separate;display:table;position:relative}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{float:left;margin-bottom:0;position:relative;width:100%;z-index:2}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 16px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 10px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{vertical-align:middle;white-space:nowrap;width:1%}.input-group-addon{background-color:#ebecf0;border:1px solid #ced0da;border-radius:4px;color:#172b4d;font-size:14px;font-weight:400;line-height:1;padding:6px 12px;text-align:center}.input-group-addon.input-sm{border-radius:3px;font-size:12px;padding:5px 10px}.input-group-addon.input-lg{border-radius:6px;font-size:18px;padding:10px 16px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn,.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px;z-index:2}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-bottom:5px;margin-top:0}.media-list{list-style:none;padding-left:0}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{background-color:#fff;border:1px solid #ebecf0;display:block;margin-bottom:-1px;padding:10px 15px;position:relative}.list-group-item:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.list-group-item:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px;margin-bottom:0}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#ebecf0;color:#7a869a;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#7a869a}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{background-color:#fff;border-color:#ebecf0;color:#0065ff;z-index:2}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#fff}a.list-group-item,button.list-group-item{color:#7a869a}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{background-color:#fff;color:#172b4d;text-decoration:none}button.list-group-item{text-align:left;width:100%}.list-group-item-success{background-color:#dff0d8;color:#3c763d}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{background-color:#d0e9c6;color:#3c763d}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{background-color:#3c763d;border-color:#3c763d;color:#fff}.list-group-item-info{background-color:#d9edf7;color:#31708f}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{background-color:#c4e3f3;color:#31708f}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{background-color:#31708f;border-color:#31708f;color:#fff}.list-group-item-warning{background-color:#fcf8e3;color:#8a6d3b}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{background-color:#faf2cc;color:#8a6d3b}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{background-color:#8a6d3b;border-color:#8a6d3b;color:#fff}.list-group-item-danger{background-color:#f2dede;color:#a94442}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{background-color:#ebcccc;color:#a94442}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{background-color:#a94442;border-color:#a94442;color:#fff}.list-group-item-heading{margin-bottom:5px;margin-top:0}.list-group-item-text{line-height:1.3;margin-bottom:0}.panel{background-color:#fff;border:1px solid transparent;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05);margin-bottom:20px}.panel-body{padding:15px}.panel-heading{border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px;padding:14px 15px}.panel-heading>.dropdown .dropdown-toggle,.panel-title{color:inherit}.panel-title{font-size:16px;margin-bottom:0;margin-top:0}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{background-color:#fff;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-top:1px solid #ebecf0;padding:14px 15px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-radius:0;border-width:1px 0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{border-radius:4px;margin-bottom:0}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ebecf0}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ebecf0}.panel-default{border-color:#ddd}.panel-default>.panel-heading{background-color:#fff;border-color:#ddd;color:#344563}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{background-color:#344563;color:#fff}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#0052cc}.panel-primary>.panel-heading{background-color:#0052cc;border-color:#0052cc;color:#fff}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#0052cc}.panel-primary>.panel-heading .badge{background-color:#fff;color:#0052cc}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#0052cc}.panel-success{border-color:#36b37e}.panel-success>.panel-heading{background-color:#dff0d8;border-color:#36b37e;color:#3c763d}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#36b37e}.panel-success>.panel-heading .badge{background-color:#3c763d;color:#dff0d8}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#36b37e}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{background-color:#31708f;color:#d9edf7}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{background-color:#8a6d3b;color:#fcf8e3}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ff5630}.panel-danger>.panel-heading{background-color:#f2dede;border-color:#ff5630;color:#a94442}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ff5630}.panel-danger>.panel-heading .badge{background-color:#a94442;color:#f2dede}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ff5630}.pager{list-style:none;margin:20px 0;padding-left:0;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{background-color:#fff;border:1px solid #ddd;border-radius:15px;display:inline-block;padding:5px 14px}.pager li>a:focus,.pager li>a:hover{background-color:#ebecf0;text-decoration:none}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{background-color:#fff;color:#7a869a;cursor:not-allowed}.pagination{border-radius:4px;display:inline-block;margin:20px 0;padding-left:0}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{background-color:#fff;border:1px solid #ddd;color:#0065ff;float:left;line-height:1.42857143;margin-left:-1px;padding:6px 12px;position:relative;text-decoration:none}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{background-color:#ebecf0;border-color:#ddd;color:#0747a6;z-index:2}.pagination>li:first-child>a,.pagination>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px;margin-left:0}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{background-color:#0052cc;border-color:#0052cc;color:#fff;cursor:default;z-index:3}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{background-color:#fff;border-color:#ddd;color:#7a869a;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{font-size:18px;line-height:1.3333333;padding:10px 16px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{font-size:12px;line-height:1.5;padding:5px 10px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.embed-responsive{display:block;height:0;overflow:hidden;padding:0;position:relative}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{border:0;bottom:0;height:100%;left:0;position:absolute;top:0;width:100%}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{background-color:#fff;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);margin-bottom:20px;min-height:20px;padding:19px}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{border-radius:6px;padding:24px}.well-sm{border-radius:3px;padding:9px}.close{color:#000;filter:alpha(opacity=20);float:right;font-size:21px;font-weight:700;line-height:1;opacity:.2;text-shadow:0 1px 0 #fff}.close:focus,.close:hover{color:#000;cursor:pointer;filter:alpha(opacity=50);opacity:.5;text-decoration:none}button.close{-webkit-appearance:none;appearance:none;background:transparent;border:0;cursor:pointer;padding:0}.badge{background-color:#7a869a;border-radius:10px;color:#fff;display:inline-block;font-size:12px;font-weight:700;line-height:1;min-width:10px;padding:3px 7px;text-align:center;vertical-align:middle;white-space:nowrap}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{padding:1px 5px;top:0}a.badge:focus,a.badge:hover{color:#fff;cursor:pointer;text-decoration:none}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{background-color:#fff;color:#0065ff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.modal,.modal-open{overflow:hidden}.modal{-webkit-overflow-scrolling:touch;bottom:0;display:none;left:0;outline:0;position:fixed;right:0;top:0;z-index:1050}.modal.fade .modal-dialog{-webkit-transform:translateY(-25%);-ms-transform:translateY(-25%);-o-transform:translateY(-25%);transform:translateY(-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0);-ms-transform:translate(0);-o-transform:translate(0);transform:translate(0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{margin:10px;position:relative;width:auto}.modal-content{background-clip:padding-box;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0;position:relative}.modal-backdrop{background-color:#091e42;bottom:0;left:0;position:fixed;right:0;top:0;z-index:1040}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{border-bottom:1px solid #ced0da;padding:15px}.modal-header .close{margin-top:-2px}.modal-title{line-height:1.42857143;margin:0}.modal-body{padding:15px;position:relative}.modal-footer{border-top:1px solid #ced0da;padding:15px;text-align:right}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{height:50px;overflow:scroll;position:absolute;top:-9999px;width:50px}@media (min-width:768px){.modal-dialog{margin:30px auto;width:600px}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.agreement-footer:after,.agreement-footer:before,.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.agreement-footer:after,.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{background-color:transparent;border:0;color:transparent;font:0/0 a;text-shadow:none}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}@media screen and (max-width:991px){body,html{overflow-x:hidden}}@media screen and (min-width:992px){.md-margin-top-no{margin-top:0!important}}@media screen and (min-width:768px) and (max-width:991px){.sm-margin-top{margin-top:20px!important}.sm-margin-top-no{margin-top:0!important}.sm-margin-top-half{margin-top:6.6px!important}.sm-align-row-buttons{margin-top:5px!important}}@media screen and (max-width:767px){.xs-margin-top{margin-top:20px!important}.xs-margin-top-half{margin-top:6.6px!important}}.flex-row{display:block;margin:0 -15px}.flex-row-section{align-items:center;display:flex;flex:1}.flex-row-section+.flex-row-section{margin-top:20px}.flex-row-col{flex:1;padding:0 15px}@media screen and (min-width:768px){.flex-row{align-items:center;display:flex}.flex-row-section+.flex-row-section{margin:0}.flex-row-col,.flex-row-section{align-items:center;flex:0}.flex-row-section.flex-row-section-auto,.flex-row-section.flex-row-section-auto>.flex-row-col{flex:1}}.flex-row-col-shrink{flex:0!important}.auth-message{background-color:#ebecf0;left:0;padding:20px 0;position:fixed;top:-100%;transition:top .3s ease;width:100%;z-index:1070}.auth-message.show{bottom:auto;top:0}.auth-message p{color:#172b4d;padding:5px 0}@media screen and (max-width:991px){.auth-message{text-align:center}.auth-message .btn{font-size:18px;padding:10px 16px}}.alerts-snackbar{font-size:18px;pointer-events:none;position:fixed;text-align:center;top:-100%;transition:top .3s ease;width:100%;z-index:1060}.alerts-snackbar.in{top:0;transition:top .2s ease}.alerts-snackbar p{border-radius:0 0 4px 4px;display:inline-block;margin:0;pointer-events:all}.agreement-overlay{background-color:rgba(9,30,66,.5);height:100%;left:0;overflow-x:scroll;position:fixed;top:0;width:100%;z-index:1060}.agreement-overlay .container{max-width:900px;padding:20px 30px}.agreement-content{background-clip:padding-box;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0;padding:10px 16px}.agreement-header{border-bottom:1px solid #ebecf0;padding:10px 0}.agreement-header h2{margin-top:0}.agreement-header p{margin:0;padding:0}.agreement-body{padding:20px 0}.agreement-body p.lead{margin:0;padding:0}.agreement-footer{border-top:1px solid #ced0da;padding:10px 0;text-align:right}.agreement-footer .btn+.btn{margin-bottom:0;margin-left:5px}.agreement-footer .btn-group .btn+.btn{margin-left:-1px}.agreement-footer .btn-block+.btn-block{margin-left:0}body.agreement-overlay-visible{overflow:hidden}.loader{height:49px;text-align:center;width:100%}.loader.loader-spaced{margin:40px 0}.loader-spinning-wheel{animation:cssload-spin 575ms linear infinite;-o-animation:cssload-spin 575ms linear infinite;-ms-animation:cssload-spin 575ms linear infinite;-webkit-animation:cssload-spin 575ms linear infinite;-moz-animation:cssload-spin 575ms linear infinite;border-color:#7a869a transparent;border-radius:50%;border-style:solid;border-width:3px;height:49px;margin:0 auto;width:49px}@keyframes cssload-spin{to{transform:rotate(1turn)}}@-o-keyframes cssload-spin{to{-o-transform:rotate(1turn);transform:rotate(1turn)}}@-ms-keyframes cssload-spin{to{-ms-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes cssload-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-moz-keyframes cssload-spin{to{-moz-transform:rotate(1turn);transform:rotate(1turn)}}.navbar{margin-bottom:0}.navbar .navbar-full .navbar-brand{font-size:21px;padding-bottom:11px;padding-top:11px}.navbar .navbar-full .navbar-brand>*{display:inline-block;vertical-align:middle}.navbar .navbar-full .navbar-brand img{height:32px;margin-right:6px}.navbar .navbar-full .navbar-nav>li>a{font-size:16.8px}.navbar .navbar-full .navbar-icon{color:#8993a4;display:block;height:54px;padding:13px 15px;position:relative}.navbar .navbar-full .navbar-icon:focus,.navbar .navbar-full .navbar-icon:hover{background-color:transparent;color:#505f79}.navbar .navbar-full .navbar-icon .material-icon{font-size:28px;height:28px;line-height:28px;width:28px}.navbar .navbar-full .navbar-icon .badge{background-color:#ff5630;font-size:9px;position:absolute;right:6px;top:6px}.navbar .navbar-full .open .navbar-icon,.navbar .navbar-full .open .navbar-icon:focus,.navbar .navbar-full .open .navbar-icon:hover{background-color:#dfe1e6;color:#6b778c}.navbar .navbar-full .nav-guest,.navbar .navbar-full .nav-user{float:right}.navbar .navbar-full .nav-guest .navbar-btn,.navbar .navbar-full .nav-user .navbar-btn{margin-left:15px}.navbar .navbar-full .nav-user .dropdown-toggle{padding:10px}.navbar .navbar-full .nav-user .dropdown-toggle img{height:34px;width:34px}.navbar ul.navbar-compact-nav{border-collapse:collapse;display:table;margin:0;table-layout:fixed;width:100%}.navbar ul.navbar-compact-nav>li{display:table-cell;width:100%}.navbar ul.navbar-compact-nav>li>a,.navbar ul.navbar-compact-nav>li>button{background:none;border:none;color:#8993a4;display:block;padding-bottom:13px;padding-top:13px;text-align:center;width:100%}.navbar ul.navbar-compact-nav>li>a.active,.navbar ul.navbar-compact-nav>li>a:focus,.navbar ul.navbar-compact-nav>li>a:hover,.navbar ul.navbar-compact-nav>li>button.active,.navbar ul.navbar-compact-nav>li>button:focus,.navbar ul.navbar-compact-nav>li>button:hover{background-color:#dfe1e6;color:#6b778c}.navbar ul.navbar-compact-nav>li>a>img,.navbar ul.navbar-compact-nav>li>button>img{height:24px;width:24px}.navbar ul.navbar-compact-nav>li>button{display:inline-block}.navbar ul.navbar-compact-nav>li>a>.material-icon{font-size:24px;line-height:24px}@media (max-width:700px){.navbar.navbar-misago{min-height:auto}}.navbar-misago .navbar-desktop-nav{display:none}@media (min-width:700px){.navbar-misago ul.navbar-compact-nav{display:none}.navbar-misago .navbar-desktop-nav{display:block}}.nav-side>a>.material-icon{bottom:1px;font-size:24px;height:24px;line-height:24px;margin:-5px 10px -5px -5px;position:relative;width:24px}.nav-side>a .badge{position:relative;top:1px}.nav-pills>li>a{align-items:center;display:flex;padding:5px 10px}.nav-pills>li>a .material-icon{margin-right:3px}.nav-pills>li>a,.nav-pills>li>a:link,.nav-pills>li>a:visited{background-color:#ebecf0;color:#344563}.nav-pills>li>a:active,.nav-pills>li>a:focus,.nav-pills>li>a:hover{background-color:#dcdee5;color:#344563}.nav-pills>li.active>a,.nav-pills>li.active>a:active,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:link,.nav-pills>li.active>a:visited{background-color:#344563;color:#fff}.nav-container .btn-block{margin-bottom:20px}.nav-container .nav{margin-bottom:30px;margin-right:-10px}.nav-container li{margin-bottom:10px;margin-right:10px}.breadcrumbs{display:block;margin-bottom:10px;padding:0}.breadcrumbs-item{display:inline-block;list-style:none;margin-bottom:10px;margin-right:15px;padding:0}.breadcrumbs-item a{align-items:center;display:flex;text-decoration:none}.breadcrumbs-item a,.breadcrumbs-item a:visited{color:#5e6c84}.breadcrumbs-item a:focus,.breadcrumbs-item a:hover{color:#172b4d}.breadcrumbs-item a:focus .breadcrumbs-item-name,.breadcrumbs-item a:hover .breadcrumbs-item-name{text-decoration:underline}.breadcrumbs-item a:active{color:#172b4d}.breadcrumbs-item .material-icon{margin-right:4px}@font-face{font-family:Material Icons;font-style:normal;font-weight:400;src:url(../fonts/MaterialIcons-Regular.eot);src:local("Material Icons"),local("MaterialIcons-Regular"),url(../fonts/MaterialIcons-Regular.woff2) format("woff2"),url(../fonts/MaterialIcons-Regular.woff) format("woff"),url(../fonts/MaterialIcons-Regular.ttf) format("truetype")}.material-icon{word-wrap:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga";direction:ltr;display:inline-block;font-family:Material Icons;font-style:normal;font-weight:400;height:1em;letter-spacing:normal;line-height:1;text-align:center;text-rendering:optimizeLegibility;text-transform:none;vertical-align:middle;white-space:nowrap;width:1em}.modal-toolbar{background:#ebecf0;border-bottom:1px solid #ced0da;overflow:auto;padding:6px 12px}.modal-toolbar .pull-left{margin-right:8px}.modal-toolbar p{margin-bottom:0;padding:5px 0}@media screen and (max-width:991px){.modal-message{text-align:center}.modal-message .message-icon{margin:30px}.modal-message .message-icon .material-icon{font-size:160px}}@media screen and (min-width:992px){.modal-message .modal-body{padding-bottom:30px;padding-top:20px}.modal-message .message-icon{float:left;left:7px;position:relative}.modal-message .message-icon .material-icon{font-size:50px}.modal-message .message-body{margin-left:75px;margin-top:10px}.modal-message .message-body p{margin-top:20px}.modal-message .message-body .lead{margin-bottom:0;margin-top:0}}.modal-loader{padding:50px 0}.modal-loader .loader{height:80px;text-align:center;width:100%}.modal-loader .loader-spinning-wheel{height:80px;width:80px}.modal-body .form-group{min-height:34px}.list-item-errors{margin-bottom:20px}.list-errored-items li:last-child .list-item-errors{margin-bottom:0}.modal-post-likers .media-list{margin:0}.modal-post-likers .item-title{display:block}.has-feedback .material-icon.form-control-feedback{font-size:1.42857143;line-height:1.42857143;right:24px;top:6px}.well.well-form.well-done{font-size:18px;text-align:center}.well.well-form.well-done .message-icon{font-size:90px;line-height:90px;margin-bottom:10px}.well.well-form.well-done .message-body{margin-bottom:20px}.well.well-form.well-noscript{font-size:18px;text-align:center}.well.well-form.well-noscript .message-icon{font-size:90px;line-height:90px;margin-bottom:10px}.btn.btn-select,.btn.btn-yes-no{background:transparent;border:1px solid #ced0da}.btn.btn-select .material-icon,.btn.btn-yes-no .material-icon{bottom:1px;font-size:20px;height:20px;line-height:20px;margin:-4px 8px -4px 0;position:relative;width:20px}@media screen and (max-width:767px){.btn.btn-yes-no{overflow:auto;width:100%}.btn.btn-yes-no .material-icon{float:left;margin-top:1px}.btn.btn-yes-no .btn-text{display:block;margin-left:30px;text-align:left;white-space:normal}}input.hidden-file-upload{left:-9999px;position:absolute;top:-9999px}.form-search{position:relative}.form-search .form-control{padding-right:30px}.form-search .material-icon{color:#7a869a;font-size:24px;line-height:24px;pointer-events:none;position:absolute;right:5px;top:5px}.btn.btn-loading,.btn.btn-loading:active,.btn.btn-loading:focus,.btn.btn-loading:hover,.btn.btn-loading:link,.btn.btn-loading:visited{color:transparent}.btn.btn-loading .loader,.btn.btn-loading:active .loader,.btn.btn-loading:focus .loader,.btn.btn-loading:hover .loader,.btn.btn-loading:link .loader,.btn.btn-loading:visited .loader{height:20px;margin-top:-20px}.btn.btn-loading .loader>div,.btn.btn-loading:active .loader>div,.btn.btn-loading:focus .loader>div,.btn.btn-loading:hover .loader>div,.btn.btn-loading:link .loader>div,.btn.btn-loading:visited .loader>div{height:20px;width:20px}.btn.btn-loading.btn-default .loader>div{border-bottom-color:#172b4d;border-top-color:#172b4d}.btn.btn-loading.btn-danger .loader>div,.btn.btn-loading.btn-info .loader>div,.btn.btn-loading.btn-primary .loader>div,.btn.btn-loading.btn-success .loader>div,.btn.btn-loading.btn-warning .loader>div{border-bottom-color:#fff;border-top-color:#fff}.btn .material-icon{bottom:1px;margin-right:3px;position:relative}.btn-icon .material-icon{font-size:20px;height:20px;line-height:20px;margin:-1px -4px;width:20px}.btn-icon .btn-text{margin-left:10px}.btn-icon .btn-text-left{margin-right:10px}.btn-block.btn-icon{padding-left:0;padding-right:0}.dropdown-menu>li>.btn-link,.dropdown-menu>li>a,.modal-menu>li>.btn-link,.modal-menu>li>a{border:none;clear:both;color:#172b4d;display:block;float:none;font-weight:400;line-height:1.42857143;padding:6px 20px;text-align:left;white-space:nowrap;width:100%}.dropdown-menu>li>.btn-link:active,.dropdown-menu>li>.btn-link:focus,.dropdown-menu>li>.btn-link:hover,.dropdown-menu>li>a:active,.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover,.modal-menu>li>.btn-link:active,.modal-menu>li>.btn-link:focus,.modal-menu>li>.btn-link:hover,.modal-menu>li>a:active,.modal-menu>li>a:focus,.modal-menu>li>a:hover{background-color:#ebecf0;color:#172b4d;text-decoration:none}.dropdown-menu>li>.btn-link:disabled,.dropdown-menu>li>a:disabled,.modal-menu>li>.btn-link:disabled,.modal-menu>li>a:disabled{color:rgba(23,43,77,.5)}.dropdown-menu>li>.btn-link .material-icon,.dropdown-menu>li>a .material-icon,.modal-menu>li>.btn-link .material-icon,.modal-menu>li>a .material-icon{bottom:1px;font-size:18px;margin:-2px 7px -2px 0;position:relative}.dropdown-menu>li>.btn-link .badge,.dropdown-menu>li>a .badge,.modal-menu>li>.btn-link .badge,.modal-menu>li>a .badge{float:right;position:relative;top:1px}.modal-menu{margin:20px 0;padding:0}.modal-menu>li{list-style:none;margin:6.66666667px 0;padding:0}.dropdown-menu{min-width:210px}.dropdown-menu .dropdown-footer{padding:6px 20px}.dropdown-menu .dropdown-buttons{padding:2px 20px 7px}.dropdown-menu .dropdown-buttons .btn{margin:4px 0}.mobile-dropdown{position:relative}.compact-nav.open>.dropdown-menu,.mobile-dropdown.open>.dropdown-menu{border:none;border-radius:0;display:block;margin:0;width:100%}.user-dropdown .guest-preview{text-align:center}.user-dropdown .guest-preview .row{margin:0}.navbar .user-dropdown{width:240px}.user-dropdown .dropdown-header{font-size:18px;padding:6px 20px}.user-dropdown .dropdown-header strong{font-weight:400}@media screen and (min-width:992px){.category-picker .dropdown-menu{width:300px}}.category-picker .dropdown-menu>li>.btn-link{word-wrap:break-word;white-space:normal}@media screen and (max-width:767px){.dropdown-menu.stick-to-bottom{border:none;border-radius:0;bottom:0;-webkit-box-shadow:0 0 30px #7a869a;box-shadow:0 0 30px #7a869a;clear:both;margin:0;max-height:300px;overflow-y:auto;padding:0 0 20px;position:fixed;top:auto;width:100%}.dropdown-menu.stick-to-bottom li{clear:both;float:none;margin:0}.dropdown-menu.stick-to-bottom li>.btn,.dropdown-menu.stick-to-bottom li>a{border-bottom:1px solid #ebecf0;padding-bottom:15px;padding-top:15px}}.category-label{border-radius:.25em;padding:.2em .6em .3em}.category-label-color,.category-label-color:active,.category-label-color:focus,.category-label-color:hover,.category-label-color:link,.category-label-color:visited{color:#fff}.category-label-no-color,.category-label-no-color:active,.category-label-no-color:focus,.category-label-no-color:hover,.category-label-no-color:link,.category-label-no-color:visited{background-color:#ebecf0;color:#344563}.thread-flags{margin:0;opacity:.8;padding:0}.thread-flags,.thread-flags li{align-items:center;display:flex}.thread-flags li{border-radius:3px;cursor:default;height:20px;justify-content:center;list-style-type:none;width:20px}.thread-flags li+li{margin-left:7.5px}.thread-flags .material-icon{font-size:16px;line-height:16px}.thread-flag-pinned-globally{background:#dbeafe;color:#2563eb}.thread-flag-pinned-locally{background:#dbeafe;color:#3b82f6}.thread-flag-answered{background:#d9f99d;color:#4d7c0f}.thread-flag-poll{background:#f5d0fe;color:#c026d3}.thread-flag-unapproved{background:#dc2626;color:#fff}.thread-flag-closed{background:#fecaca;color:#dc2626}.thread-flag-hidden{background:#64748b;color:#fff}.threads-replies{align-items:center;color:#5e6c84;display:flex;font-size:16px;font-weight:700}.threads-replies .material-icon{margin-right:7.5px;transform:matrix(-1,0,0,1,0,0)}.thread-user-card{align-items:center;display:flex}.thread-user-card-media{flex:0;margin-right:15px}.thread-user-card-media img{border-radius:3px}.thread-user-card-body{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.navbar-misago .dropdown-menu.dropdown-search-results{left:auto;margin:0;padding-top:0;right:0;width:400px}.dropdown-search-results .form-group{margin:0;padding:12px}li.dropdown-search-message{text-align:center}.dropdown-search-thread{width:100%}.dropdown-search-thread h5{margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dropdown-search-thread small{display:block;margin:4px 0 0}.page-header{margin:10px 0 0}.page-header-banner-bg-overlay{padding:20px 0}.page-header h1{margin:0;overflow-wrap:break-word}.page-container{padding-top:20px}@media screen and (max-width:991px){.panel-message-body{text-align:center}.panel-message-body .message-icon{margin:30px}.panel-message-body .message-icon .material-icon{font-size:160px}}@media screen and (min-width:992px){.panel-message-body{padding:20px 20px 30px}.panel-message-body .message-icon{float:left}.panel-message-body .message-icon .material-icon{font-size:50px}.panel-message-body .message-body{margin-left:65px;margin-top:10px}.panel-message-body .message-body .lead{margin-bottom:0}.panel-message-body .message-body .help-block{margin-top:13.2px}}.panel-body-loading{padding:0;text-align:center}.misago-footer{margin-bottom:50px;margin-top:30px}.misago-footer .footer-content{padding-top:30px}.misago-footer .noscript-message .material-icon{bottom:1px;font-size:18px;position:relative}.ui-preview{-webkit-animation:ui-preview-animation 1s linear infinite;-o-animation:ui-preview-animation 1s linear infinite;animation:ui-preview-animation 1s linear infinite;color:#ebecf0}@keyframes ui-preview-animation{0%{filter:alpha(opacity=100);opacity:1}50%{filter:alpha(opacity=10);opacity:.1}to{filter:alpha(opacity=100);opacity:1}}.ui-preview-text{background:#ebecf0;border-radius:100px;display:inline-block;height:14px;position:relative;top:3px}.ui-preview-paragraph .ui-preview-text{margin-right:6px}.ui-preview-paragraph .ui-preview-text:last-child{margin-right:0}.ui-preview-img{background:#ebecf0;border-radius:5px}.pager-undercontent{margin-top:-20px}.pager-more{text-align:center}@media screen and (min-width:992px){.pager-more .btn{padding-left:20px;padding-right:20px}}.misago-pagination{display:flex}.misago-pagination .btn{display:block;width:100%}.misago-pagination .btn+.btn{margin-left:30px}@media screen and (max-width:767px){.toolbar-item .misago-pagination{flex:1}}.panel-poll h2{margin-top:0}.poll-select-choice .btn,.poll-select-choice .btn:active,.poll-select-choice .btn:focus,.poll-select-choice .btn:hover{background:transparent;border:transparent;-webkit-box-shadow:none;box-shadow:none;margin:6px 0;outline:none;padding:0 0 0 6px;text-align:left}.poll-select-choice .btn .material-icon{line-heigh:28px;color:#ced0da;font-size:28px;height:28px;margin-right:6px;width:28px}.poll-select-choice .btn.btn-selected .material-icon{color:#0052cc}.poll-help{font-size:12px}.poll-chart-selected .material-icon{line-heigh:14px;bottom:1px;color:#36b37e;font-size:14px;height:14px;margin-right:4px;position:relative;width:14px}.poll-options{margin-bottom:0}@media screen and (max-width:767px){.poll-options{margin-top:-6px}.poll-options .btn{margin:6px 0}}.user-status.user-banned .status-icon{color:#ff5630}.user-status.user-online .status-icon{color:#36b37e}.user-status.user-offline .status-icon{color:#7a869a}@media screen and (min-width:768px){.user-card{text-align:center}}.user-card-small-avatar img{height:auto;width:100%}@media screen and (min-width:768px){.user-card-small-avatar{display:none}}@media screen and (max-width:767px){.user-card-avatar{display:none}}.toolbar{display:block;margin:0 -15px}.toolbar-section{display:flex;flex:1;justify-items:center;margin-bottom:20px}.toolbar-item{flex:1;padding:0 15px}.toolbar-item h3,.toolbar-item p{margin:0}.toolbar-item-shrink{flex:0}.toolbar-spacer{display:none}@media screen and (min-width:768px){.toolbar{display:flex}.toolbar-item,.toolbar-section{align-items:center;flex:0}.toolbar-section.toolbar-section-auto,.toolbar-section.toolbar-section-auto .toolbar-item{flex:1}.toolbar-spacer{display:block;flex:1}.toolbar-item .form-search{width:250px}}@media screen and (max-width:767px){.toolbar-item p{text-align:center}}abbr{border:none!important}.item-title{text-decoration:none}.item-title,a.item-title:active,a.item-title:hover,a.item-title:link,a.item-title:visited{color:#172b4d;font-weight:700}a.item-title:hover{text-decoration:underline}.message-line{text-align:center}.message-line .material-icon{font-size:20px;height:20px;line-height:20px;margin-right:6.66666667px;width:20px}.text-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.misago-markup h1,.misago-markup h2,.misago-markup h3,.misago-markup h4,.misago-markup h5,.misago-markup h6,.misago-markup p{word-wrap:break-word}.misago-markup h1,.misago-markup h2,.misago-markup h3,.misago-markup h4,.misago-markup h5,.misago-markup h6{margin-top:40px}.misago-markup blockquote>*,.misago-markup>*{margin:20px 0}.misago-markup blockquote>:first-child,.misago-markup>:first-child{margin-top:0}.misago-markup blockquote>:last-child,.misago-markup>:last-child{margin-bottom:0}.misago-markup img{max-height:500px;max-width:100%}.misago-markup .quote-block,.misago-markup blockquote{background:#ebecf0;border:none;font-size:14px}.misago-markup .quote-block .quote-heading,.misago-markup blockquote .quote-heading{border-bottom:1px solid #d4d6df;font-size:12px;font-weight:700;padding:10px 20px}.misago-markup>.quote-block,.misago-markup>blockquote{border:1px solid #d4d6df}.misago-markup .quote-body{background:#fff;margin:0;padding:20px}.misago-markup .quote-body>.quote-block,.misago-markup .quote-body>blockquote{border:1px solid #d4d6df}.misago-markup .spoiler-block{background:#ebecf0;font-size:14px}.misago-markup>.spoiler-block{border:1px solid #d4d6df;position:relative}.misago-markup .spoiler-body{background:#fff;margin:0;padding:20px}.misago-markup .spoiler-overlay{background:#fff}.misago-markup .spoiler-block.revealed .spoiler-overlay{display:none}.misago-markup ul,.misago-markup ul li{list-style-type:square}.misago-markup ol,.misago-markup ol li{list-style-type:decimal}.misago-markup pre{background:#eee;border:none;color:#000;overflow:hidden;padding:10px}.misago-markup pre code.hljs{margin:-10px;padding:9.5px}.modal-change-avatar .modal-avatar-index .avatar-preview{border-radius:6px;height:200px;margin:0 auto;overflow:hidden;position:relative;width:200px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader{display:none;height:100px;position:absolute;top:50px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel{border-color:#fff transparent;border-width:10px;height:100px;width:100px}.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading img{filter:alpha(opacity=33);opacity:.33}.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading .loader{display:block}@media (max-width:699px){.modal-change-avatar .modal-avatar-index .avatar-preview{height:150px;margin-bottom:20px;width:150px}.modal-change-avatar .modal-avatar-index .avatar-preview img{height:150px;width:150px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader{height:100px;top:25px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel{height:100px;width:100px}}.modal-change-avatar .modal-avatar-index .btn{text-align:left}.modal-change-avatar .modal-avatar-upload{text-align:center}.modal-change-avatar .modal-avatar-upload .btn-pick-file{background:transparent;border:2px solid #ebecf0;border-radius:6px;-webkit-box-shadow:none;box-shadow:none;color:#7a869a;font-size:18px;padding:10px 24px;text-align:center}.modal-change-avatar .modal-avatar-upload .btn-pick-file>.material-icon{display:block;font-size:50px;height:50px;margin:0 auto 13.2px;width:50px}.modal-change-avatar .modal-avatar-upload .btn-pick-file:active,.modal-change-avatar .modal-avatar-upload .btn-pick-file:hover{border-color:#0052cc;color:#0052cc}.modal-change-avatar .modal-avatar-upload .text-muted{margin-top:13.2px}.modal-change-avatar .modal-avatar-upload .upload-progress img{border-radius:4px;margin-bottom:20px;max-height:80px;width:auto}.modal-change-avatar .modal-avatar-upload .upload-progress .progress{margin:0 auto;width:70%}.modal-avatar-crop .crop-form{margin:0 auto}.modal-avatar-crop .crop-form .cropit-image-zoom-input{-webkit-appearance:none;border:1px solid #fff;margin-top:10px;width:100%}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-runnable-track{background:#ebecf0;border:none;border-radius:3px;height:8px;width:100%}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-thumb{-webkit-appearance:none;background:#7a869a;border:none;border-radius:50%;height:20px;margin-top:-6px;width:20px}.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus{outline:none}.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-webkit-slider-runnable-track{background:#ebecf0}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-track{background:#ebecf0;border:none;border-radius:4px;height:8px;width:100%}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-thumb{background:#7a869a;border:none;border-radius:50%;height:20px;width:20px}.modal-avatar-crop .crop-form .cropit-image-zoom-input:-moz-focusring{outline:1px solid #fff;outline-offset:-1px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-track{background:transparent;border-color:transparent;border-width:8px 0;color:transparent;height:8px;width:100%}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-lower,.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-upper{background:#ebecf0;border-radius:16px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-thumb{background:#7a869a;border:none;border-radius:50%;height:20px;width:20px}.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-lower,.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-upper{background:#ebecf0}.modal-change-avatar .modal-avatar-gallery{padding-bottom:0}.modal-change-avatar .modal-avatar-gallery .avatars-gallery{margin-bottom:20px}.modal-change-avatar .modal-avatar-gallery .avatars-gallery h3{margin-top:0}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .row{margin-bottom:10px}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn{background:none;border:2px solid #ebecf0;border-radius:6px;padding:2px;position:relative}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:focus,.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:hover{border-color:#7a869a}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn.avatar-selected,.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:active{border-color:#0065ff}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn img{border-radius:4px;height:auto;width:100%}.category-main .read-status .material-icon{color:#ebecf0}.category-main .read-status.item-new .material-icon{color:#0052cc}.category-last-thread .media-heading a{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;width:290px}@media screen and (max-width:991px){.category-last-thread .media-heading a{width:275px}}@media screen and (max-width:767px){.category-last-thread .media-heading a{width:260px}}.category-thread-message .material-icon{font-size:28px;height:28px;line-height:28px;width:28px}.category-thread-message p{margin:0}.list-inline.subcategories-list{margin-top:-10px;overflow:auto}.list-inline.subcategories-list li{display:block;float:left}.list-inline.subcategories-list li a,.list-inline.subcategories-list li a:active,.list-inline.subcategories-list li a:focus,.list-inline.subcategories-list li a:hover,.list-inline.subcategories-list li a:link,.list-inline.subcategories-list li a:visited{background-color:#ebecf0;border:1px solid #dcdee5;border-radius:4px;color:#5e6c84;display:inline-block;margin-top:10px;padding:6px 12px}.list-inline.subcategories-list li a:active,.list-inline.subcategories-list li a:hover,.list-inline.subcategories-list li:focus{background-color:#dcdee5;color:#172b4d;text-decoration:none}.row.subcategories-list .btn{margin-top:20px;text-align:left}#posting-placeholder{background-color:#ebecf0;display:none;margin-bottom:-30px;margin-top:30px;padding:20px 0;transition:height .3s}#posting-placeholder.slide-in{display:block}#posting-placeholder .first-row{margin-bottom:20px}#posting-placeholder .first-row .form-control{border:1px solid #bfc2cf}#posting-placeholder .first-row .posting-options .btn{padding-bottom:4px;padding-top:4px}#posting-placeholder .first-row .posting-options .btn .btn-text{margin-left:5px;position:relative;top:1px}#posting-placeholder .first-row .posting-options .material-icon{font-size:14px;height:24px;line-height:14px;margin-right:0;position:relative;text-align:center;top:5px;width:14px}.posting-ui-preview{padding:20px 0;position:relative}.posting-ui-preview .form-control{box-shadow:none;resize:none}.posting-loader{text-align:center}.posting-loader .loader{height:100px}.posting-loader .loader .loader-spinning-wheel{height:100px;width:100px}.posting-message{text-align:center}.posting-message .material-icon{font-size:28px;height:28px;line-height:28px;margin-right:6.66666667px;position:relative;top:-1px;width:28px}.posting-message .message-body p{font-size:18px}.editor-border{background-color:#fff;border:1px solid #bfc2cf;border-radius:4px}.editor-border .form-control{border:none;resize:none}.editor-border .form-control,.editor-border .form-control:active,.editor-border .form-control:focus{-webkit-box-shadow:none;box-shadow:none}.editor-footer{border-top:1px solid #bfc2cf;overflow:auto;padding:6px 12px}.editor-footer .pull-left{margin-right:12px}.editor-footer .pull-right{margin-left:12px}.editor-footer .btn-icon .material-icon{margin-bottom:-2px}@media screen and (max-width:991px){.editor-footer .buttons-list{float:none!important;margin:0 0 10px}.editor-footer .buttons-list .btn{display:inline-block;float:none!important;margin:6.66666667px}.editor-footer .btn-protect .btn-text{margin-left:10px}.editor-footer .btn-protect .material-icon{bottom:2px;font-size:14px;height:14px;line-height:14px;position:relative;width:14px}}@media screen and (min-width:768px) and (max-width:991px){.buttons-list .btn:first-child{margin-left:0}}@media screen and (max-width:767px){.buttons-list{text-align:center}.buttons-list .btn-protect{display:block;float:none!important;margin:10px 0 0;width:100%}}.editor-attachments-list{margin:0;padding:0}.editor-attachments-list li{margin:0}.editor-attachment-complete{border-top:1px solid #bfc2cf;padding:6px 12px 6px 0}.editor-attachment-complete .editor-attachment-image{float:left;width:50px}.editor-attachment-complete .editor-attachment-image a{background-position:50%;background-size:cover;border-radius:3px;display:block;height:36px;margin:0 auto;width:36px}.editor-attachment-complete .editor-attachment-icon{float:left;text-align:center;width:50px}.editor-attachment-complete .editor-attachment-icon .material-icon{font-size:28px;height:28px;line-height:28px;position:relative;top:2px;width:28px}.editor-attachment-complete .editor-attachment-details{margin-left:50px}.editor-attachment-complete .editor-attachment-details h4,.editor-attachment-complete .editor-attachment-details p{font-size:14px;margin:0;padding:0}.editor-attachment-complete .editor-attachment-details p{color:#7a869a;font-size:12px;margin-top:3px}.editor-attachment-complete .editor-attachment-details abbr{white-space:nowrap}@media screen and (min-width:768px){.editor-attachment-actions{padding-top:3px}}@media screen and (max-width:767px){.editor-attachment-actions{padding-left:12px;padding-right:12px}}.editor-attachment-error{border-top:1px solid #bfc2cf;padding:6px 12px 6px 0}.editor-attachment-error-icon{float:left;text-align:center;width:50px}.editor-attachment-error-icon .material-icon{font-size:28px;height:28px;line-height:28px;position:relative;top:2px;width:28px}.editor-attachment-error-message{margin-left:50px;padding:6px 0;position:relative}.editor-attachment-error-message h4,.editor-attachment-error-message p{font-size:14px;margin:0;padding:0}.editor-attachment-error-message p{font-size:12px;margin-top:3px}.editor-attachment-error-message .btn{position:absolute;right:12px;top:9px}@media screen and (max-width:767px){.editor-attachment-error-message .btn{display:block;margin-top:10px;position:static}}.editor-attachment-progress-bar{background:#bfc2cf;overflow:auto}.editor-attachment-progress{background:#0052cc;float:left;height:1px}.editor-attachment-upload-message{margin:0;padding:6px 12px}#editor-upload-field{left:-1000px;position:absolute;top:-1000px}.atwho-view ul li img{border-radius:3px;height:20px;margin-right:4.66666667px;width:20px}.participant-card .btn-user,.participant-card .dropdown.open .btn-user{margin-bottom:20px}.participant-card .btn-user,.participant-card .btn-user:focus,.participant-card .btn-user:focus:active,.participant-card .btn-user:hover,.participant-card .dropdown.open .btn-user,.participant-card .dropdown.open .btn-user:focus,.participant-card .dropdown.open .btn-user:focus:active,.participant-card .dropdown.open .btn-user:hover{overflow:hidden;padding:0;text-align:left}.participant-card .btn-user img,.participant-card .dropdown.open .btn-user img{background-color:#fff;height:34px;margin-right:8px;width:34px}.panel-participants p{margin:7px 0 0}.poll-choices-control .list-group-item{padding:0}.poll-choices-control .list-group-item .btn{background:transparent;border:transparent;float:left;height:28px;margin:0 2px -29px;padding:0;position:relative;top:3px;width:28px}.poll-choices-control .list-group-item .btn .material-icon{font-size:28px;height:28px;line-height:28px;width:28px}.poll-choices-control input,.poll-choices-control input:active,.poll-choices-control input:focus{background:transparent;border:none;-webkit-box-shadow:none;box-shadow:none;margin-left:30px;outline:none;padding:6px 12px;width:100%}.posts-list{clear:both;margin:0;padding:0}.posts-list li{list-style:none;margin:0;padding:0}@media screen and (min-width:992px){.panel-post .panel-body{display:flex}.post-side{flex-shrink:0;padding-right:15px;width:260px}.panel-content{flex:1 0}}.post-side{font-size:12px}.post-side .media{margin:0}.post-side .poster-avatar{height:36px;width:36px}@media screen and (min-width:992px){.post-side .poster-avatar{height:82px;margin-top:4px;width:82px}}.post-side .user-status{margin-right:4px}.post-side .media-heading{display:block;font-size:14px;margin:-1px 0 0}.post-side .media-heading .user-status{margin-left:2px;margin-right:0}.post-side .pull-right{margin-left:16px}@media screen and (min-width:992px){.post-side .media-heading{font-size:18px;margin-top:3px}.post-side .media-heading .user-status{display:none}.post-side .user-title{margin-bottom:5px;margin-top:4px}.post-side .user-postcount,.post-side .user-status{display:block}}.post-heading{height:36px}@media screen and (max-width:991px){.post-heading{margin-top:10px}}.post-heading .pull-right{margin-left:16px}.post-heading .label{font-size:14px;font-weight:400;margin-top:6px}.post-heading .label-unread{background-color:#36b37e;color:#fff}@media screen and (min-width:992px){.post-side .pull-right{display:none}}@media screen and (max-width:991px){.post-heading .pull-right{display:none}}.post-body{padding-bottom:30px;padding-top:20px}.post-status-message{overflow:auto}.post-status-message .material-icon{float:left;font-size:28px;line-height:28px}.post-status-message p{margin:4px 0 0 36px}.post-status-best-answer{background-color:#36b37e;color:#fff}.post-status-hidden{background-color:#ff5630;color:#fff}.post-status-unapproved{background-color:#0052cc;color:#fff}.post-status-protected{background-color:#5e6c84;color:#fff}.post-footer .pull-left{margin-right:16px}.post-footer .pull-right{margin-left:16px}.post-footer p{margin-bottom:0;padding-bottom:6px;padding-top:7px}.post-attachments{border-top:1px solid #ebecf0;padding:6px 16px}.post-attachments abbr{white-space:nowrap}.post-attachments .attachment-name{word-wrap:break-word}.post-attachments .row>div{margin:10px 0}.post-attachments .post-attachment-preview{float:left;height:40px;text-align:center;width:40px}.post-attachments .post-attachment{margin-left:52px}.post-attachments .post-thumbnail{background-position:50%;background-size:cover;border-radius:3px;display:block;height:40px;width:40px}.post-attachments .material-icon{font-size:28px;height:28px;line-height:28px;position:relative;top:5px;width:28px}.post-attachments .material-icon:active,.post-attachments .material-icon:focus,.post-attachments .material-icon:hover,.post-attachments .material-icon:link,.post-attachments .material-icon:visited{color:#172b4d;text-decoration:none}.post-attachments .post-attachment-description{color:#7a869a;font-size:12px;margin:0;padding:0}.post-feed .post-side .media-heading{font-size:14px;margin:0}.post-feed .post-side .user-title{font-size:12px;margin:0}.post-feed .post-side .btn{display:inline-block}.post-feed .post-side img{height:36px;margin-top:0;width:36px}.post-feed .post-heading{height:auto;margin:10px 0}.post-feed .post-heading .btn{word-wrap:break-word;margin-right:16px;max-width:100%;text-align:left;white-space:normal}.posts-list .event{color:#7a869a;margin-bottom:20px}.posts-list .event .event-body{align-items:flex-start;display:flex}.posts-list .event-label{margin-left:51px}.posts-list .event-label .label-unread{background-color:#36b37e;color:#fff}.posts-list .event .event-icon{padding-right:15px}.posts-list .event .event-icon .event-icon-bg{align-items:center;background:#ebecf0;border-radius:4px;color:#5e6c84;display:flex;height:36px;justify-content:center;width:36px}.posts-list .event .event-icon .material-icon{align-items:center;display:flex;font-size:28px;justify-content:center}.posts-list .event .event-content{flex:1 0}.posts-list .event .event-message{font-size:18px;margin-bottom:5px}.posts-list .event .event-info{font-size:12px;margin:0}.posts-list .event .event-info li{margin-right:12px}.posts-list .event .event-info li:last-child{margin-right:0}.posts-list .event .event-controls .btn-link{border:0;font-size:12px;margin:0 12px 0 0;padding:0}.posts-list .event .event-controls .btn-link:last-child{margin-right:0}@media screen and (max-width:767px){.posts-list .event .event-info{margin-top:5px}.posts-list .event .event-controls{clear:both;margin-top:5px}.posts-list .event .event-controls .btn-link{font-size:14px;margin-right:20px}.posts-list .event .event-controls .btn-link:last-child{margin-right:0}}@media screen and (min-width:992px){.posts-list .event .event-icon{display:flex;flex-shrink:0;justify-content:flex-end;width:275px}.event-content{flex:1 0}.posts-list .event-label{margin-left:275px}}.post-changelog-diff{margin:0;padding:0}.post-changelog-diff .list-unstyled{margin:5px 0;padding:0}.post-changelog-diff .diff-item{padding:5px 10px}.post-changelog-diff .diff-item-sub{color:#ff5630}.post-changelog-diff .diff-item-add{color:#36b37e}.post-changelog-toolbar .row{margin-left:-12px;margin-right:-12px}@media screen and (max-width:767px){.page-error .message-panel,.page-message .message-panel,.post-changelog-toolbar .post-change-label{text-align:center}.page-error .message-icon,.page-message .message-icon{font-size:80px;margin:30px}}@media screen and (min-width:768px){.page-error .message-panel,.page-message .message-panel{margin:60px auto;max-width:779.35px;overflow:auto}.page-error .message-icon,.page-message .message-icon{float:left}.page-error .message-icon .material-icon,.page-message .message-icon .material-icon{font-size:80px}.page-error .message-body,.page-message .message-body{font-size:18px;margin-left:100px;margin-top:16px}.page-error .message-body p.lead,.page-message .message-body p.lead{font-size:36px}}.threads-list{margin-bottom:20px}.threads-list-item{align-items:center;display:flex}.threads-list-item img{height:32px;width:32px}.threads-list-item-top-row{flex:1}.threads-list-item-bottom-row,.threads-list-item-top-row{align-items:center;display:flex;justify-content:center}.threads-list-item-col-icon{padding-right:15px}.threads-list-icon{align-items:center;border-radius:3px;display:flex;font-size:16px;height:32px;justify-content:center;line-height:16px;width:32px}.threads-list-icon:active,.threads-list-icon:focus,.threads-list-icon:hover,.threads-list-icon:link,.threads-list-icon:visited{background-color:#ebecf0;color:#7a869a;text-decoration:none}.threads-list-icon-new:active,.threads-list-icon-new:focus,.threads-list-icon-new:hover,.threads-list-icon-new:link,.threads-list-icon-new:visited{background-color:#0052cc;color:#fff}.threads-list-item-col-title{flex:1}a.threads-list-item-title:active,a.threads-list-item-title:focus,a.threads-list-item-title:hover,a.threads-list-item-title:link,a.threads-list-item-title:visited{color:#172b4d;font-size:16px;overflow-wrap:break-word}a.threads-list-item-title-sm{font-size:18px}a.threads-list-item-title-sm:active,a.threads-list-item-title-sm:focus,a.threads-list-item-title-sm:hover,a.threads-list-item-title-sm:link,a.threads-list-item-title-sm:visited{color:#5e6c84;overflow-wrap:break-word}a.threads-list-item-title-new:active,a.threads-list-item-title-new:focus,a.threads-list-item-title-new:hover,a.threads-list-item-title-new:link,a.threads-list-item-title-new:visited{color:#172b4d}.threads-list-item-col-flags{padding-left:15px}.threads-list-item .thread-flags{opacity:.8}.threads-list-item:focus .thread-flags,.threads-list-item:hover .thread-flags{opacity:1}.threads-list-item-col-category{padding-left:15px;white-space:nowrap}.threads-list-category-label{border-radius:3px;font-size:12px;font-weight:700;padding:3px 6px}.threads-list-category-label,.threads-list-category-label:active,.threads-list-category-label:focus,.threads-list-category-label:hover,.threads-list-category-label:link,.threads-list-category-label:visited{background:#ebecf0;color:#344563;text-decoration:none}.threads-list-category-label.threads-list-category-label-color,.threads-list-category-label.threads-list-category-label-color:active,.threads-list-category-label.threads-list-category-label-color:focus,.threads-list-category-label.threads-list-category-label-color:hover,.threads-list-category-label.threads-list-category-label-color:link,.threads-list-category-label.threads-list-category-label-color:visited{background:var(--label-color);color:#fff}.threads-list-item-parent-category{border-radius:3px 0 0 3px;margin-right:2px}.threads-list-item-parent-category+.threads-list-category-label{border-radius:0 3px 3px 0}.threads-list-item-col-replies{padding-left:15px;width:80px}.threads-list-item-col-last-poster{padding-left:15px}.threads-list-item-col-last-poster img{border-radius:3px}.threads-list-item-col-last-activity{overflow:hidden;padding-left:15px;text-overflow:ellipsis;white-space:nowrap;width:120px}.threads-list-item-col-last-activity a:active,.threads-list-item-col-last-activity a:focus,.threads-list-item-col-last-activity a:hover,.threads-list-item-col-last-activity a:link,.threads-list-item-col-last-activity a:visited{color:#344563;font-size:16px}.threads-list-item-col-checkbox,.threads-list-item-col-subscription{padding-left:15px}.threads-list-item-col-checkbox-sm,.threads-list-item-title-sm{display:none}@media screen and (max-width:767px){.threads-list{margin-left:-15px;margin-right:-15px}.threads-list .list-group,.threads-list .list-group-item{border-left:0;border-radius:0;border-right:0}.threads-list-item-title{display:none}.threads-list-item-title-sm{display:inline-block}.threads-list-item-col-icon{display:none}}@media screen and (max-width:991px){.threads-list-item{display:block}.threads-list-item img{height:20px;width:20px}.threads-list-item-top-row{align-items:start;margin-bottom:7.5px}.threads-list-item-bottom-row{flex:0;justify-content:end}.threads-list-item-bottom-row>div{padding:0 0 0 15px;width:auto}.threads-list-item-col-checkbox,.threads-list-item-col-subscription{display:none}.threads-list-item-col-checkbox-sm{display:block;padding-left:15px}.threads-list-item-col-checkbox-sm .btn-icon{padding:4px}.threads-list-item-col-checkbox-sm .btn-icon .material-icon{font-size:16px}}.threads-list-item-is-busy .btn-icon{animation:busy .75s linear infinite;opacity:.8}@keyframes busy{50%{opacity:.5}}.threads-list-update-prompt{padding:0}.threads-list-update-prompt-btn{background:#d6e7ff;border:none;border-radius:3px 3px 0 0;color:#003d99;padding:10px 16px}.threads-list-update-prompt-btn:focus,.threads-list-update-prompt-btn:hover{background:#e6f0ff;color:#0052cc}.threads-list-update-prompt-btn:active{background:#b3d1ff;color:#06f}.active-posters li{display:block;overflow:auto}.active-posters .rank-user-avatar{float:left}@media screen and (max-width:991px){.active-posters .rank-user-avatar{height:42px}.active-posters .rank-user-avatar img{height:36px;position:relative;top:3px;width:36px}}.active-posters .rank-user{float:left;margin-top:3px}@media screen and (max-width:991px){.active-posters .rank-user{margin-left:13.2px;width:40%}}@media screen and (max-width:767px){.active-posters .rank-user{float:none;margin-left:50px;width:auto}}@media screen and (min-width:992px){.active-posters .rank-user{margin-left:16px;width:25%}.active-posters .rank-user .user-name{font-size:18px}}.active-posters .user-details{font-family:Sans-Serif;overflow:auto}.active-posters .user-details .rank-name,.active-posters .user-details .user-status,.active-posters .user-details .user-title{display:block;float:left;font-size:12px;margin-right:3px}@media screen and (min-width:992px){.active-posters .user-details .rank-name,.active-posters .user-details .user-status,.active-posters .user-details .user-title{margin-right:8px}}.active-posters .user-details .user-title{margin-right:0}@media screen and (min-width:992px){.active-posters .user-details{overflow:visible}.active-posters .user-details .rank-name,.active-posters .user-details .user-title{height:14px;overflow:hidden;position:relative;top:1px;vertical-align:baseline}}@media screen and (max-width:767px){.active-posters .user-details{margin-top:3px}.active-posters .user-details .rank-name,.active-posters .user-details .user-title{font-weight:400}}.active-posters .user-status{overflow:auto;position:relative;top:1px}.active-posters .user-status span{display:block;float:left}@media screen and (min-width:992px){.active-posters .user-status{height:14px;overflow:hidden}}.active-posters .user-status .status-icon{position:relative}@media screen and (max-width:991px){.active-posters .user-status .status-icon{font-size:12px;height:12px;line-height:12px;top:0;width:12px}}@media screen and (min-width:992px){.active-posters .user-status .status-icon{font-size:13px;height:13px;line-height:13px;margin-right:3px;top:1px;width:13px}}.active-posters .rank-name .ui-preview-text,.active-posters .status-label.ui-preview-text,.active-posters .user-title .ui-preview-text{font-size:11px;height:11px;line-height:11px;position:relative;top:2px}.active-posters .rank-name .ui-preview-text,.active-posters .user-title .ui-preview-text{position:static}.active-posters .rank-position small,.active-posters .rank-position strong,.active-posters .rank-posts-counted small,.active-posters .rank-posts-counted strong,.active-posters .rank-posts-total small,.active-posters .rank-posts-total strong{display:block}@media screen and (max-width:991px){.active-posters .rank-position,.active-posters .rank-posts-counted,.active-posters .rank-posts-total{overflow:auto}.active-posters .rank-position small,.active-posters .rank-position strong,.active-posters .rank-posts-counted small,.active-posters .rank-posts-counted strong,.active-posters .rank-posts-total small,.active-posters .rank-posts-total strong{float:left;font-size:10.5px}.active-posters .rank-position strong,.active-posters .rank-posts-counted strong,.active-posters .rank-posts-total strong{margin-right:3px;min-width:30px;text-align:right}.active-posters .rank-position .ui-preview-text,.active-posters .rank-posts-counted .ui-preview-text,.active-posters .rank-posts-total .ui-preview-text{font-size:8px;height:8px;line-height:8px;position:relative;top:-1px}}@media screen and (min-width:992px){.active-posters .rank-position,.active-posters .rank-posts-counted,.active-posters .rank-posts-total{float:left;font-size:18px;margin-top:3px;text-align:center;width:23%}.active-posters .rank-position small,.active-posters .rank-posts-counted small,.active-posters .rank-posts-total small{font-size:12px;font-weight:400}}.user-compact-stats .rank-position small,.user-compact-stats .rank-position strong,.user-compact-stats .rank-posts-counted small,.user-compact-stats .rank-posts-counted strong{display:inline-block;float:none}.user-compact-stats .rank-position strong,.user-compact-stats .rank-posts-counted strong{min-width:auto}.user-compact-stats .rank-position small,.user-compact-stats .rank-posts-counted small{margin-right:20px}@media screen and (min-width:768px) and (max-width:991px){.active-posters .rank-position{margin-top:6px}.active-posters .rank-posts-total{display:none}}.profile-page-header-avatar{margin:20px 0;text-align:center}.profile-page-header-avatar .user-avatar{border-radius:4px}.profile-data-list{display:block;font-size:12px;margin:0 -12px;padding:0}.profile-data-list li{display:inline-block;list-style:none;padding:5px 12px}.profile-data-list .status-icon{bottom:1px;margin-right:3px;position:relative}.profile-data-list .user-account-disabled{color:#ff5630;font-weight:700}@media screen and (min-width:768px){.profile-page-header{align-items:flex-end;display:flex}.profile-page-header-avatar{margin:0 30px 0 0}}@media screen and (min-width:992px){.profile-page-header-avatar{margin-top:-54px;position:relative;top:54px}.profile-page-header-details{padding-left:158px}.profile-data-list{font-size:14px}.username-history li{display:block;overflow:auto}}.username-history .change-avatar{float:left}.username-history .change-avatar a,.username-history .change-avatar span{margin-right:10px}.username-history .change-avatar a img,.username-history .change-avatar span img{height:42px;width:42px}@media screen and (min-width:992px){.username-history .change-avatar a img,.username-history .change-avatar span img{bottom:1px;height:18px;position:relative;width:18px}.username-history .change-author{float:left;width:30%}}.username-history .change{min-height:20px;overflow:auto}.username-history .change span{display:block;float:left}.username-history .change .material-icon{margin:0 7px;position:relative;top:4px}@media screen and (min-width:992px){.username-history .change{float:left;width:40%}.username-history .change-date{float:left;width:20%}}.search-footer p{color:#5e6c84;font-size:12px;margin-top:20px;text-align:center}@media screen and (min-width:768px){.page-search-form{padding-top:40px}}@media screen and (min-width:992px){.page-search-form{padding-bottom:40px}.page-search-form h1{position:relative;top:5px}.page-search-form .form-group{margin-bottom:0}}.hljs{background:#eee;color:#000;display:block;overflow-x:auto;padding:.5em}.hljs-addition,.hljs-attribute,.hljs-emphasis,.hljs-link{color:#070}.hljs-emphasis{font-style:italic}.hljs-deletion,.hljs-string,.hljs-strong{color:#d14}.hljs-strong{font-weight:700}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-section,.hljs-title{color:#900}.hljs-class .hljs-title,.hljs-type{color:#458}.hljs-template-variable,.hljs-variable{color:#369}.hljs-bullet{color:#970}.hljs-meta{color:#34b}.hljs-code,.hljs-keyword,.hljs-literal,.hljs-number,.hljs-selector-tag{color:#099}.hljs-regexp{background-color:#fff0ff;color:#808}.hljs-symbol{color:#990073}.hljs-name,.hljs-selector-class,.hljs-selector-id,.hljs-tag{color:#070}.atwho-view{background:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:0 0 5px rgba(0,0,0,.1);color:#000;display:none;left:0;margin-top:18px;min-width:120px;position:absolute;top:0;z-index:11110!important}.atwho-view .atwho-header{border-bottom:1px solid #eaeff1;color:#6f8092;cursor:pointer;font-size:11px;font-weight:700;margin:5px;padding:5px}.atwho-view .atwho-header .small{color:#6f8092;float:right;font-size:12px;font-weight:400;margin-right:-5px;padding-top:2px}.atwho-view .atwho-header:hover{cursor:default}.atwho-view .cur{background:#36f;color:#fff}.atwho-view .cur small{color:#fff}.atwho-view strong{color:#36f}.atwho-view .cur strong{color:#fff;font:700}.atwho-view ul{list-style:none;margin:auto;max-height:200px;overflow-y:auto;padding:0}.atwho-view ul li{border-bottom:1px solid #ddd;cursor:pointer;display:block;padding:5px 10px}.atwho-view small{color:#777;font-size:smaller;font-weight:400}abbr{outline:none;text-decoration:none}.shadow-2dp{box-shadow:0 2px 2px 0 rgba(0,0,0,.04),0 3px 1px -2px rgba(0,0,0,.06),0 1px 5px 0 rgba(0,0,0,.12)}.shadow-3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.04),0 3px 3px -2px rgba(0,0,0,.06),0 1px 8px 0 rgba(0,0,0,.12)}.shadow-4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.04),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.06)}.shadow-6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.04),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.06)}.shadow-8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.04),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.06)}.shadow-16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.04),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.06)}.shadow-24dp{box-shadow:0 9px 46px 8px rgba(0,0,0,.04),0 11px 15px -7px rgba(0,0,0,.12),0 24px 38px 3px rgba(0,0,0,.06)}.btn-default,.btn-default.disabled,.btn-default.disabled:active,.btn-default.disabled:hover,.btn-default:disabled,.btn-default:disabled:hover{background:#ebecf0;border:1px solid #ebecf0;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.btn-default.disabled,.btn-default.disabled:active,.btn-default.disabled:hover,.btn-default:disabled,.btn-default:disabled:hover{filter:alpha(opacity=25);opacity:.25}.btn-default:focus,.btn-default:hover{background:#dfe1e6;border:1px solid #dfe1e6;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.btn-default:active,.btn-default:active:focus,.dropdown.open .dropdown-toggle .btn-default,.dropdown.open .dropdown-toggle .btn-default:active:focus,.dropdown.open .dropdown-toggle .btn-default:focus,.dropdown.open .dropdown-toggle .btn-default:hover{background:#c1c7d0;border:1px solid #c1c7d0;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.btn-default.btn-loading,.btn-default.btn-loading:active,.btn-default.btn-loading:active:focus,.btn-default.btn-loading:disabled,.btn-default.btn-loading:disabled:hover,.btn-default.btn-loading:focus,.btn-default.btn-loading:hover{color:transparent}.btn-primary,.btn-primary.disabled,.btn-primary.disabled:active,.btn-primary.disabled:hover,.btn-primary:disabled,.btn-primary:disabled:hover{background:#6554c0;border:1px solid #6554c0;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-primary.disabled,.btn-primary.disabled:active,.btn-primary.disabled:hover,.btn-primary:disabled,.btn-primary:disabled:hover{filter:alpha(opacity=25);opacity:.25}.btn-primary:focus,.btn-primary:hover{background:#5243aa;border:1px solid #5243aa;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-primary:active,.btn-primary:active:focus,.dropdown.open .dropdown-toggle .btn-primary,.dropdown.open .dropdown-toggle .btn-primary:active:focus,.dropdown.open .dropdown-toggle .btn-primary:focus,.dropdown.open .dropdown-toggle .btn-primary:hover{background:#403294;border:1px solid #403294;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-primary.btn-loading,.btn-primary.btn-loading:active,.btn-primary.btn-loading:active:focus,.btn-primary.btn-loading:disabled,.btn-primary.btn-loading:disabled:hover,.btn-primary.btn-loading:focus,.btn-primary.btn-loading:hover{color:transparent}.btn-success,.btn-success.disabled,.btn-success.disabled:active,.btn-success.disabled:hover,.btn-success:disabled,.btn-success:disabled:hover{background:#00c853;border:1px solid #00c853;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-success.disabled,.btn-success.disabled:active,.btn-success.disabled:hover,.btn-success:disabled,.btn-success:disabled:hover{filter:alpha(opacity=25);opacity:.25}.btn-success:focus,.btn-success:hover{background:#00af48;border:1px solid #00af48;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-success:active,.btn-success:active:focus,.dropdown.open .dropdown-toggle .btn-success,.dropdown.open .dropdown-toggle .btn-success:active:focus,.dropdown.open .dropdown-toggle .btn-success:focus,.dropdown.open .dropdown-toggle .btn-success:hover{background:#007c33;border:1px solid #007c33;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-success.btn-loading,.btn-success.btn-loading:active,.btn-success.btn-loading:active:focus,.btn-success.btn-loading:disabled,.btn-success.btn-loading:disabled:hover,.btn-success.btn-loading:focus,.btn-success.btn-loading:hover{color:transparent}.btn-danger,.btn-danger.disabled,.btn-danger.disabled:active,.btn-danger.disabled:hover,.btn-danger:disabled,.btn-danger:disabled:hover{background:#ef5350;border:1px solid #ef5350;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-danger.disabled,.btn-danger.disabled:active,.btn-danger.disabled:hover,.btn-danger:disabled,.btn-danger:disabled:hover{filter:alpha(opacity=25);opacity:.25}.btn-danger:focus,.btn-danger:hover{background:#ff8a80;border:1px solid #ff8a80;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-danger:active,.btn-danger:active:focus,.dropdown.open .dropdown-toggle .btn-danger,.dropdown.open .dropdown-toggle .btn-danger:active:focus,.dropdown.open .dropdown-toggle .btn-danger:focus,.dropdown.open .dropdown-toggle .btn-danger:hover{background:#d32f2f;border:1px solid #d32f2f;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-danger.btn-loading,.btn-danger.btn-loading:active,.btn-danger.btn-loading:active:focus,.btn-danger.btn-loading:disabled,.btn-danger.btn-loading:disabled:hover,.btn-danger.btn-loading:focus,.btn-danger.btn-loading:hover{color:transparent}.btn-default.btn-outline,.btn-default.btn-outline.disabled,.btn-default.btn-outline.disabled:active,.btn-default.btn-outline.disabled:hover,.btn-default.btn-outline:disabled,.btn-default.btn-outline:disabled:hover{background:#ebecf0;border:1px solid #ebecf0;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.btn-default.btn-outline.disabled,.btn-default.btn-outline.disabled:active,.btn-default.btn-outline.disabled:hover,.btn-default.btn-outline:disabled,.btn-default.btn-outline:disabled:hover{filter:alpha(opacity=25);opacity:.25}.btn-default.btn-outline:focus,.btn-default.btn-outline:hover{background:#dfe1e6;border:1px solid #dfe1e6;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.btn-default.btn-outline:active,.btn-default.btn-outline:active:focus,.dropdown.open .btn-default.btn-outline,.dropdown.open .btn-default.btn-outline:active:focus,.dropdown.open .btn-default.btn-outline:focus,.dropdown.open .btn-default.btn-outline:hover{background:#c1c7d0;border:1px solid #c1c7d0;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.btn-default.btn-outline.btn-loading,.btn-default.btn-outline.btn-loading:active,.btn-default.btn-outline.btn-loading:active:focus,.btn-default.btn-outline.btn-loading:disabled,.btn-default.btn-outline.btn-loading:disabled:hover,.btn-default.btn-outline.btn-loading:focus,.btn-default.btn-outline.btn-loading:hover{background:#ebecf0;border:1px solid #ebecf0;-webkit-box-shadow:none;box-shadow:none;color:transparent}.btn-primary.btn-outline,.btn-primary.btn-outline.disabled,.btn-primary.btn-outline.disabled:active,.btn-primary.btn-outline.disabled:hover,.btn-primary.btn-outline:disabled,.btn-primary.btn-outline:disabled:hover{background:#6554c0;border:1px solid #6554c0;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-primary.btn-outline.disabled,.btn-primary.btn-outline.disabled:active,.btn-primary.btn-outline.disabled:hover,.btn-primary.btn-outline:disabled,.btn-primary.btn-outline:disabled:hover{filter:alpha(opacity=25);opacity:.25}.btn-primary.btn-outline:focus,.btn-primary.btn-outline:hover{background:#5243aa;border:1px solid #5243aa;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-primary.btn-outline:active,.btn-primary.btn-outline:active:focus,.dropdown.open .btn-primary.btn-outline,.dropdown.open .btn-primary.btn-outline:active:focus,.dropdown.open .btn-primary.btn-outline:focus,.dropdown.open .btn-primary.btn-outline:hover{background:#403294;border:1px solid #403294;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-primary.btn-outline.btn-loading,.btn-primary.btn-outline.btn-loading:active,.btn-primary.btn-outline.btn-loading:active:focus,.btn-primary.btn-outline.btn-loading:disabled,.btn-primary.btn-outline.btn-loading:disabled:hover,.btn-primary.btn-outline.btn-loading:focus,.btn-primary.btn-outline.btn-loading:hover{background:#6554c0;border:1px solid #6554c0;-webkit-box-shadow:none;box-shadow:none;color:transparent}.navbar-misago .btn-sign-in{border-radius:4px}.navbar-misago .btn-sign-in,.navbar-misago .btn-sign-in.disabled,.navbar-misago .btn-sign-in.disabled:active,.navbar-misago .btn-sign-in.disabled:hover,.navbar-misago .btn-sign-in:disabled,.navbar-misago .btn-sign-in:disabled:hover{background:transparent;border:1px solid #c1c7d0;-webkit-box-shadow:none;box-shadow:none;color:#8993a4}.navbar-misago .btn-sign-in.disabled,.navbar-misago .btn-sign-in.disabled:active,.navbar-misago .btn-sign-in.disabled:hover,.navbar-misago .btn-sign-in:disabled,.navbar-misago .btn-sign-in:disabled:hover{filter:alpha(opacity=25);opacity:.25}.navbar-misago .btn-sign-in:focus,.navbar-misago .btn-sign-in:hover{background:#ebecf0;border:1px solid #ebecf0;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.dropdown.open .navbar-misago .btn-sign-in,.dropdown.open .navbar-misago .btn-sign-in:active:focus,.dropdown.open .navbar-misago .btn-sign-in:focus,.dropdown.open .navbar-misago .btn-sign-in:hover,.navbar-misago .btn-sign-in:active,.navbar-misago .btn-sign-in:active:focus{background:#dfe1e6;border:1px solid #dfe1e6;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.navbar-misago .btn-sign-in.btn-loading,.navbar-misago .btn-sign-in.btn-loading:active,.navbar-misago .btn-sign-in.btn-loading:active:focus,.navbar-misago .btn-sign-in.btn-loading:disabled,.navbar-misago .btn-sign-in.btn-loading:disabled:hover,.navbar-misago .btn-sign-in.btn-loading:focus,.navbar-misago .btn-sign-in.btn-loading:hover{background:transparent;border:1px solid #c1c7d0;-webkit-box-shadow:none;box-shadow:none;color:transparent}.navbar-misago .btn-register{border-radius:4px}.navbar-misago .btn-register,.navbar-misago .btn-register.disabled,.navbar-misago .btn-register.disabled:active,.navbar-misago .btn-register.disabled:hover,.navbar-misago .btn-register:disabled,.navbar-misago .btn-register:disabled:hover{background:#6554c0;border:1px solid #6554c0;-webkit-box-shadow:none;box-shadow:none;color:#fff}.navbar-misago .btn-register.disabled,.navbar-misago .btn-register.disabled:active,.navbar-misago .btn-register.disabled:hover,.navbar-misago .btn-register:disabled,.navbar-misago .btn-register:disabled:hover{filter:alpha(opacity=25);opacity:.25}.navbar-misago .btn-register:focus,.navbar-misago .btn-register:hover{background:#5243aa;border:1px solid #5243aa;-webkit-box-shadow:none;box-shadow:none;color:#fff}.dropdown.open .navbar-misago .btn-register,.dropdown.open .navbar-misago .btn-register:active:focus,.dropdown.open .navbar-misago .btn-register:focus,.dropdown.open .navbar-misago .btn-register:hover,.navbar-misago .btn-register:active,.navbar-misago .btn-register:active:focus{background:#403294;border:1px solid #403294;-webkit-box-shadow:none;box-shadow:none;color:#fff}.navbar-misago .btn-register.btn-loading,.navbar-misago .btn-register.btn-loading:active,.navbar-misago .btn-register.btn-loading:active:focus,.navbar-misago .btn-register.btn-loading:disabled,.navbar-misago .btn-register.btn-loading:disabled:hover,.navbar-misago .btn-register.btn-loading:focus,.navbar-misago .btn-register.btn-loading:hover{background:#6554c0;border:1px solid #6554c0;-webkit-box-shadow:none;box-shadow:none;color:transparent}.btn-social-battlenet,.btn-social-battlenet-oauth2,.btn-social-battlenet-oauth2:disabled,.btn-social-battlenet-oauth2:disabled:hover,.btn-social-battlenet:disabled,.btn-social-battlenet:disabled:hover{color:#0e86ca;font-weight:700}.btn-social-bungie,.btn-social-bungie:disabled,.btn-social-bungie:disabled:hover{color:#0096db;font-weight:700}.btn-social-facebook,.btn-social-facebook-app,.btn-social-facebook-app:disabled,.btn-social-facebook-app:disabled:hover,.btn-social-facebook:disabled,.btn-social-facebook:disabled:hover{color:#3b5998;font-weight:700}.btn-social-github,.btn-social-github-enterprise,.btn-social-github-enterprise-org,.btn-social-github-enterprise-org:disabled,.btn-social-github-enterprise-org:disabled:hover,.btn-social-github-enterprise-team,.btn-social-github-enterprise-team:disabled,.btn-social-github-enterprise-team:disabled:hover,.btn-social-github-enterprise:disabled,.btn-social-github-enterprise:disabled:hover,.btn-social-github-team,.btn-social-github-team:disabled,.btn-social-github-team:disabled:hover,.btn-social-github:disabled,.btn-social-github:disabled:hover{color:#000;font-weight:700}.btn-social-gitlab,.btn-social-gitlab:disabled,.btn-social-gitlab:disabled:hover{color:#fc6d26;font-weight:700}.btn-social-google,.btn-social-google-oauth,.btn-social-google-oauth2,.btn-social-google-oauth2:disabled,.btn-social-google-oauth2:disabled:hover,.btn-social-google-oauth:disabled,.btn-social-google-oauth:disabled:hover,.btn-social-google-openidconnect,.btn-social-google-openidconnect:disabled,.btn-social-google-openidconnect:disabled:hover,.btn-social-google-plus,.btn-social-google-plus:disabled,.btn-social-google-plus:disabled:hover,.btn-social-google:disabled,.btn-social-google:disabled:hover{color:#dd4b39;font-weight:700}.btn-social-linkedin,.btn-social-linkedin:disabled,.btn-social-linkedin:disabled:hover{color:#0077b5;font-weight:700}.btn-social-steam,.btn-social-steam:disabled,.btn-social-steam:disabled:hover{color:#5c7e10;font-weight:700}.btn-social-twitter,.btn-social-twitter:disabled,.btn-social-twitter:disabled:hover{color:#1da1f2;font-weight:700}.form-social-auth .row{margin-bottom:-6px;margin-top:-6px}.form-social-auth .btn{margin:6px 0}input.form-control,textarea.form-control{border-color:#ced0da;box-shadow:inset 0 0 0 1px #ced0da}input.form-control:focus,textarea.form-control:focus{border-color:#66afe9;box-shadow:inset 0 0 0 1px #66afe9}.has-error input.form-control{border-color:#ff5630;box-shadow:inset 0 0 0 1px #ff5630}.has-error input.form-control:focus{border-color:#ffa996;box-shadow:inset 0 0 0 1px #ffa996}.has-success input.form-control{border-color:#36b37e;box-shadow:inset 0 0 0 1px #36b37e}.has-success input.form-control:focus{border-color:#79d6af;box-shadow:inset 0 0 0 1px #79d6af}.password-strength{margin-top:10px}.password-strength .text-small{color:#3462af;font-size:12px;margin-top:4px}.password-strength .progress{margin:0}.auth-message{background:#091e42;box-shadow:0 8px 10px 1px rgba(0,0,0,.04),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.06);padding:80px 0}.auth-message p{color:#fff}.auth-message .btn{background:#f4f5f7;border-color:#f4f5f7;color:#172b4d}.auth-message .btn:focus,.auth-message .btn:hover{background:#dfe1e6;border-color:#dfe1e6;color:#172b4d}.auth-message .btn:active{background:#b3bac5;border-color:#b3bac5;color:#172b4d}.dropdown-menu{border:none;box-shadow:0 4px 5px 0 rgba(0,0,0,.04),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.06)}.user-dropdown .dropdown-header strong{color:#172b4d;display:block;font-weight:700}.user-dropdown .dropdown-header .user-stats{font-size:12px;margin-top:10px}.user-dropdown .dropdown-header .user-stats .material-icon{bottom:1px;font-size:14px;height:14px;margin-right:3px;position:relative;width:14px}.user-dropdown .guest-preview{padding-bottom:10px}.user-dropdown .badge{background-color:#ff5630}.user-dropdown .btn-link:active .badge,.user-dropdown .btn-link:focus .badge,.user-dropdown .btn-link:hover .badge,.user-dropdown a:active .badge,.user-dropdown a:focus .badge,.user-dropdown a:hover .badge{background-color:#fff;color:#ff5630}.mobile-dropdown.open{margin:0}.navbar-misago{border-bottom:none;box-shadow:0 0 3px #c1c7d0}.navbar-misago .user-avatar{background:#fff;border-radius:3px}.navbar-misago .brand-link img{border-radius:3px}.dropdown-search-results{border-radius:0 0 4px 4px}.dropdown-search-message{color:#7a869a}.dropdown-search-loader,.dropdown-search-message{border-top:1px solid #ebecf0;padding:10px 16px}.dropdown-search-header{border-top:1px solid #ebecf0;color:#7a869a;font-weight:700;padding:8px 20px}.dropdown-search-thread small,.dropdown-search-user small{color:#7a869a}.dropdown-search-thread .dropdown-search-post-content{max-height:47px;overflow:hidden;white-space:normal}.dropdown-search-thread .dropdown-search-post-footer{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dropdown-search-footer{padding-bottom:5px}.dropdown-search-footer:last-child{padding-bottom:0}.dropdown-menu>li.dropdown-search-footer>a{font-size:small}.misago-footer{margin-top:40px}.misago-footer .footer-content{border-top:1px solid #ebecf0;color:#a5adba;padding-top:20px}@media screen and (max-width:767px){.misago-footer .footer-content{text-align:center}.misago-footer .footer-content .site-footnote{clear:both;margin-bottom:15px}}.misago-footer .footer-content a,.misago-footer .footer-content a:link,.misago-footer .footer-content a:visited{color:#a5adba}.misago-footer .footer-content a:focus,.misago-footer .footer-content a:hover{color:#7a8699}.misago-footer .footer-content .misago-branding,.misago-footer .footer-content .misago-branding:link,.misago-footer .footer-content .misago-branding:visited{color:#a5adba}.misago-footer .footer-content .misago-branding:focus,.misago-footer .footer-content .misago-branding:hover{color:#7a8699}.list-group{border-radius:3px}.list-group .list-group-item{border-left-color:#ebecf0;border-right-color:#ebecf0}.list-group .list-group-item:first-child{border-top-color:#ebecf0}.list-group .list-group-item:last-child{border-bottom-color:#ebecf0}.list-group-item.empty-message{padding-bottom:20px;padding-top:20px;text-align:center}.list-group-item.empty-message p{margin:10px 0}.nav-side{-webkit-box-shadow:none;box-shadow:none}.nav-side>.list-group-item{border-left:none;border-right:none;margin-bottom:1px}.nav-side>.list-group-item:first-child{border-top:none}.nav-side>.list-group-item:last-child{border-bottom:none}.nav-side>.list-group-item,.nav-side>.list-group-item:link,.nav-side>.list-group-item:visited{background:#f4f5f7;border:none;color:#172b4d}.nav-side>.list-group-item:active,.nav-side>.list-group-item:focus,.nav-side>.list-group-item:hover{background:#ebecf0;color:#172b4d}.nav-side>.list-group-item.active,.nav-side>.list-group-item.active:active,.nav-side>.list-group-item.active:focus,.nav-side>.list-group-item.active:hover,.nav-side>.list-group-item.active:link,.nav-side>.list-group-item.active:visited{background:#091e42;color:#fff;font-weight:700}.nav-side>.list-group-item.active .badge,.nav-side>.list-group-item.active:active .badge,.nav-side>.list-group-item.active:focus .badge,.nav-side>.list-group-item.active:hover .badge,.nav-side>.list-group-item.active:link .badge,.nav-side>.list-group-item.active:visited .badge{background:#f4f5f7;color:#172b4d}.username-history .user-avatar{border-radius:4px}.panel{border:none;border-radius:4px}.panel .panel-footer,.panel .panel-heading{background:#fff}.panel .panel-title{color:#5e6c84}.panel .form-group+.form-group{margin-top:20px}.panel .panel-body>.form-group:first-child{margin-top:10px}.panel fieldset{margin-top:20px}.panel fieldset:first-child{margin-top:0}.panel fieldset legend{border:none;color:#5e6c84;font-weight:300}.panel-message-body .message-icon{color:#9575cd}.panel-form{border:1px solid #ebecf0;box-shadow:none}.panel-form .panel-footer,.panel-form .panel-heading{border-color:#ebecf0}.poll-form .panel{margin:0}.help-block,.help-block .text-small{color:#7a869a}.category-main .media-left .read-status{background:#ebecf0;border-radius:4px;padding:5px 8px}.category-main .media-left .material-icon{color:#5e6c84;font-size:14px;height:14px;line-height:14px;width:14px}.category-main .media-left .read-status.item-new{background-color:#0052cc}.category-main .media-left .read-status.item-new .material-icon{color:#fff}@media screen and (min-width:768px){.category-main .media-left{padding:5px 0}}.category-main .media-body{padding-left:12px}@media screen and (max-width:767px){.category-main .media-body{padding-left:3.33333333px}}.list-group-category-no-description .category-main .media-heading{margin-top:10px}@media screen and (max-width:767px){.list-group-category-no-description .category-main .media-heading{margin-top:5px}}.category-main .media-heading a,.category-main .media-heading a:link,.category-main .media-heading a:visited{color:#344563}.category-main .media-heading a:active,.category-main .media-heading a:focus,.category-main .media-heading a:hover{color:#172b4d}.category-stats{color:#5e6c84}.category-main .category-description p{font-size:12px}.category-main .category-description p:last-child{margin-bottom:0}.category-last-thread img{background-color:#fff;border-radius:4px}.category-last-thread .media-heading{margin-bottom:2px}@media screen and (max-width:767px){.category-last-thread .media-heading{margin-top:10px}}.category-last-thread .list-inline{color:#7a869a;font-size:12px}.category-last-thread .list-inline a,.category-last-thread .list-inline a:link,.category-last-thread .list-inline a:visited{color:#7a869a}.category-last-thread .list-inline .item-title,.category-last-thread .list-inline .item-title:link,.category-last-thread .list-inline .item-title:visited,.category-last-thread .list-inline a:active,.category-last-thread .list-inline a:focus,.category-last-thread .list-inline a:hover{color:#344563}.category-last-thread .list-inline .item-title:active,.category-last-thread .list-inline .item-title:focus,.category-last-thread .list-inline .item-title:hover{color:#172b4d}.category-thread-message{color:#7a869a}.category-thread-message .material-icon{margin-right:3px;padding:6px 0}@media screen and (max-width:767px){.category-thread-message{font-size:12px;padding-top:15px}.category-thread-message .material-icon{padding:3px 0}}.panel-participants{border:1px solid #ebecf0}.participant-card .btn-user{border:0!important}.participant-card .dropdown-header-owner{color:#0052cc}.participant-card .dropdown-header-owner .material-icon{font-size:14px;height:14px;line-height:14px;width:14px}.participant-card .dropdown-header-owner .icon-text{margin-left:4px;position:relative;top:2px}.panel-participants p{color:#7a869a}@media screen and (max-width:767px){.panel-participants p{margin-top:10px;text-align:center}}.panel-poll{border:1px solid #ebecf0}.panel-poll .poll-select-choices{margin-top:-10px}.panel-poll .poll-details{color:#7a869a;font-size:12px;margin-bottom:20px}.panel-poll .progress{margin-bottom:5px;margin-top:6.66666667px}.panel-poll .poll-chart{color:#7a869a;font-size:12px}.panel-poll .poll-options{margin-top:20px}#posting-placeholder{background-color:#fafbfc}.posting-message .material-icon{color:#9575cd}.posting-message .btn{margin-top:20px}.panel-post{background:#fff;border:1px solid #ddd}.post-side{color:#7a869a}.post-side .poster-avatar{border-radius:4px}.post-side .user-title,.post-side .user-title a,.post-side .user-title a:active,.post-side .user-title a:focus,.post-side .user-title a:hover,.post-side .user-title a:link,.post-side .user-title a:visited{color:#5e6c84}.post-heading .label-unread{background-color:#a0f;margin-right:16px}.post-heading .label-protected{background-color:transparent;color:#bdbdbd;margin-left:24px;position:relative;top:1px}.post-heading .label-protected .material-icon{font-size:16px;line-height:16px;margin-right:2px;position:relative;top:-1px}.post-heading>.btn-link{padding-left:0;padding-right:0}.post-heading>.btn-link,.post-heading>.btn-link:link,.post-heading>.btn-link:visited{color:#7a869a}.post-heading>.btn-link:active,.post-heading>.btn-link:focus,.post-heading>.btn-link:focus:active,.post-heading>.btn-link:hover{color:#172b4d;text-decoration:none}.post-heading .btn-see-edits{margin-left:24px}.post-status-message{border-radius:4px;margin-top:10px;padding:6px 12px}@media screen and (max-width:767px){.post-status-message{font-size:12px}.post-status-message .material-icon{margin-top:3px}.post-status-message p{margin-top:0}}.post-body:last-child{padding-bottom:10px}.post-attachments{background-color:#ebecf0;border:none;border-radius:4px;margin-bottom:30px}.post-attachments:last-child{margin-bottom:10px}@media screen and (max-width:767px){.post-attachments{border-radius:0;margin:0 -15px 20px}}.post-footer>.btn-link{padding-left:0;padding-right:0}.post-footer>.btn-link,.post-footer>.btn-link:link,.post-footer>.btn-link:visited{color:#7a869a}.post-footer>.btn-link:active,.post-footer>.btn-link:focus,.post-footer>.btn-link:focus:active,.post-footer>.btn-link:hover{color:#172b4d;text-decoration:none}.post-footer p{color:#7a869a;font-size:12px}.post-body-hidden,.post-body-invalid{padding-bottom:10px;padding-top:10px}.post-body-hidden .lead,.post-body-invalid .lead{margin-bottom:10px}.post-body-hidden .text-muted,.post-body-invalid .text-muted{font-size:12px;margin-bottom:0}.post-hidden{filter:alpha(opacity=75);opacity:.75}.post-feed .panel-body{padding-bottom:0}.post-feed .post-body{max-height:300px;overflow-y:hidden;padding-bottom:20px;padding-top:0;position:relative}.post-feed .post-body:after{bottom:0;box-shadow:0 0 16px 16px #fff;color:transparent;content:"-";display:block;height:0;position:absolute;width:100%}.posts-list .event .event-label{margin-bottom:5px}.posts-list .event .label-unread{background-color:#a0f;color:#fff}.posts-list .event-info .btn-link,.posts-list .event-info a,.posts-list .event-info a:link,.posts-list .event-info a:visited{color:#5e6c84}.posts-list .event-info .btn-link:active,.posts-list .event-info .btn-link:focus,.posts-list .event-info .btn-link:focus:active,.posts-list .event-info a:active,.posts-list .event-info a:focus,.posts-list .event-info a:focus:active{color:#172b4d}.posts-list .event-hidden{filter:alpha(opacity=33);opacity:.33}.user-card{background:#f4f5f7}.user-card-avatar img,.user-card-small-avatar img{border-radius:4px}.user-card-avatar{margin:20px 0}.user-card-avatar img{height:150px;width:150px}.user-card-username a,.user-card-username a:active,.user-card-username a:focus,.user-card-username a:hover,.user-card-username a:link,.user-card-username a:visited{color:#172b4d;font-size:18px;font-weight:700}.user-card-title a,.user-card-title a:link,.user-card-title a:visited,.user-card-title span{color:#5e6c84}.user-card-title a:active,.user-card-title a:focus,.user-card-title a:hover{color:#172b4d}@media screen and (min-width:768px){.user-card-stats{margin-top:20px}}.user-card-stats ul{margin:0}.user-card-stats li{color:#7a869a;display:inline-block;font-size:12px;margin-right:12px}@media screen and (min-width:768px){.user-card-stats li{margin:0 6px}}.user-card-stats li.user-stat-empty{display:none}@media screen and (min-width:768px){li.user-stat-divider{display:block;margin:0}}@media screen and (max-width:767px){li.user-stat-divider{display:none}}@media screen and (min-width:768px){.user-card-stats{min-height:60px}}@media screen and (max-width:767px){.user-card-left{padding-right:0}}.progress,.progress .progress-bar{-webkit-box-shadow:none;box-shadow:none;height:8px}.misago-markup img{border-radius:4px}.misago-markup .quote-block,.misago-markup blockquote{background-color:#ffecb3;border-color:#b3e5fc;color:#3e2723;overflow:hidden}.misago-markup .quote-block .quote-heading,.misago-markup blockquote .quote-heading{background-color:#ffe082;border:none;color:#795548}.misago-markup .quote-block .quote-heading a,.misago-markup .quote-block .quote-heading a:link,.misago-markup .quote-block .quote-heading a:visited,.misago-markup blockquote .quote-heading a,.misago-markup blockquote .quote-heading a:link,.misago-markup blockquote .quote-heading a:visited{color:#5d4037}.misago-markup .quote-block .quote-heading a:active,.misago-markup .quote-block .quote-heading a:focus,.misago-markup .quote-block .quote-heading a:hover,.misago-markup blockquote .quote-heading a:active,.misago-markup blockquote .quote-heading a:focus,.misago-markup blockquote .quote-heading a:hover{color:#3e2723}.misago-markup .quote-block hr,.misago-markup blockquote hr{border-color:#ffca28}.misago-markup>.quote-block,.misago-markup>blockquote{background:#ffecb3;border:none;border-radius:4px}.misago-markup .quote-body,.misago-markup>.quote-block .quote-block,.misago-markup>blockquote .quote-block{background:#ffecb3}.misago-markup .quote-body>.quote-block,.misago-markup .quote-body>blockquote{border-color:#ffe082;border-radius:4px}.misago-markup .spoiler-block{background:repeating-linear-gradient(45deg,rgba(235,236,240,.5),rgba(235,236,240,.5) 10px,#fff 0,#fff 20px);border:none}.misago-markup .spoiler-body{background:transparent;color:#172b4d;-webkit-filter:blur(5px);-moz-filter:blur(5px);-o-filter:blur(5px);-ms-filter:blur(5px);filter:blur(5px)}.misago-markup .spoiler-block.revealed .spoiler-body{-webkit-filter:none;-moz-filter:none;-o-filter:none;-ms-filter:none;filter:none}.misago-markup .spoiler-overlay{align-items:center;background:hsla(0,0%,100%,.1);display:flex;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}.misago-markup .spoiler-reveal{background-color:#ebecf0;border-color:#ccc;color:#172b4d}.misago-markup .spoiler-reveal.focus,.misago-markup .spoiler-reveal:focus{background-color:#ced0da;border-color:#8c8c8c;color:#172b4d}.misago-markup .spoiler-reveal:hover{background-color:#ced0da;border-color:#adadad;color:#172b4d}.misago-markup .spoiler-reveal.active,.misago-markup .spoiler-reveal:active,.open>.dropdown-toggle.misago-markup .spoiler-reveal{background-color:#ced0da;background-image:none;border-color:#adadad;color:#172b4d}.misago-markup .spoiler-reveal.active.focus,.misago-markup .spoiler-reveal.active:focus,.misago-markup .spoiler-reveal.active:hover,.misago-markup .spoiler-reveal:active.focus,.misago-markup .spoiler-reveal:active:focus,.misago-markup .spoiler-reveal:active:hover,.open>.dropdown-toggle.misago-markup .spoiler-reveal.focus,.open>.dropdown-toggle.misago-markup .spoiler-reveal:focus,.open>.dropdown-toggle.misago-markup .spoiler-reveal:hover{background-color:#b9bdcb;border-color:#8c8c8c;color:#172b4d}.misago-markup .spoiler-reveal.disabled.focus,.misago-markup .spoiler-reveal.disabled:focus,.misago-markup .spoiler-reveal.disabled:hover,.misago-markup .spoiler-reveal[disabled].focus,.misago-markup .spoiler-reveal[disabled]:focus,.misago-markup .spoiler-reveal[disabled]:hover,fieldset[disabled] .misago-markup .spoiler-reveal.focus,fieldset[disabled] .misago-markup .spoiler-reveal:focus,fieldset[disabled] .misago-markup .spoiler-reveal:hover{background-color:#ebecf0;border-color:#ccc}.misago-markup .spoiler-reveal .badge{background-color:#172b4d;color:#ebecf0}.misago-markup .spoiler-reveal,.misago-markup .spoiler-reveal.disabled,.misago-markup .spoiler-reveal.disabled:active,.misago-markup .spoiler-reveal.disabled:hover,.misago-markup .spoiler-reveal:disabled,.misago-markup .spoiler-reveal:disabled:hover{background:#ebecf0;border:1px solid #ebecf0;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.misago-markup .spoiler-reveal.disabled,.misago-markup .spoiler-reveal.disabled:active,.misago-markup .spoiler-reveal.disabled:hover,.misago-markup .spoiler-reveal:disabled,.misago-markup .spoiler-reveal:disabled:hover{filter:alpha(opacity=25);opacity:.25}.misago-markup .spoiler-reveal:focus,.misago-markup .spoiler-reveal:hover{background:#dfe1e6;border:1px solid #dfe1e6;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.dropdown.open .dropdown-toggle .misago-markup .spoiler-reveal,.dropdown.open .dropdown-toggle .misago-markup .spoiler-reveal:active:focus,.dropdown.open .dropdown-toggle .misago-markup .spoiler-reveal:focus,.dropdown.open .dropdown-toggle .misago-markup .spoiler-reveal:hover,.misago-markup .spoiler-reveal:active,.misago-markup .spoiler-reveal:active:focus{background:#c1c7d0;border:1px solid #c1c7d0;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.misago-markup .spoiler-reveal.btn-loading,.misago-markup .spoiler-reveal.btn-loading:active,.misago-markup .spoiler-reveal.btn-loading:active:focus,.misago-markup .spoiler-reveal.btn-loading:disabled,.misago-markup .spoiler-reveal.btn-loading:disabled:hover,.misago-markup .spoiler-reveal.btn-loading:focus,.misago-markup .spoiler-reveal.btn-loading:hover{color:transparent}.misago-markup .spoiler-reveal,.misago-markup .spoiler-reveal:active,.misago-markup .spoiler-reveal:hover{border-radius:4px;box-shadow:0 0 0 4px #fff;padding:6px 12px}.modal-header{background:#fff;border-bottom-color:#ced0da;border-radius:6px 6px 0 0;color:#172b4d}.modal-header .close{color:#172b4d;font-size:24px;line-height:24px;padding:0 6px;text-shadow:none}.modal-message .message-icon{color:#9575cd}.modal-body>.form-group{margin:20px 0}.modal-body>.form-group:first-child{margin-top:0}.modal-body>.form-group:last-child{margin-bottom:0}.modal-sign-in .modal-body{padding-bottom:0;padding-top:0}.modal-sign-in .modal-body>.form-group{margin:20px 0}.legal-footnote label{font-weight:700}.legal-footnote .help-block{color:#ff5630;margin-left:20px}.modal-avatar-index .avatar-preview{background:#fff;border-radius:6px}.modal-avatar-crop .cropit-preview{background:#fff;margin:20px 0}.modal-avatar-crop .cropit-image-zoom-input{margin-bottom:20px;margin-top:40px}.modal-post-likers .media{border-bottom:1px solid #ebecf0;padding-bottom:15px}.modal-post-likers .media img{border-radius:4px;height:40px;width:40px}.modal-post-likers .media:last-child{border:none;padding-bottom:0}.well{border:1px solid #ddd}.active-posters .rank-user-avatar img{border-radius:4px}.active-posters .user-details{color:#7a869a}.active-posters .user-details a.rank-name,.active-posters .user-details a.rank-name:link,.active-posters .user-details a.rank-name:visited{color:#5e6c84;font-weight:400}.active-posters .user-details a.rank-name:active,.active-posters .user-details a.rank-name:focus,.active-posters .user-details a.rank-name:hover{color:#172b4d}.active-posters .user-details span.rank-name{color:#5e6c84;font-weight:400}.active-posters small{color:#7a869a}.page-error .message-icon{color:#ef5350}.page-message .message-icon,.page-message-info .message-icon{color:#9575cd}.page-message-success .message-icon{color:#81c784}.page-options .message-line,.page-options .message-line a,.page-options .message-line a:link,.page-options .message-line a:visited{color:#7a869a}.page-options .message-line a:active,.page-options .message-line a:focus,.page-options .message-line a:focus:active,.page-options .message-line a:hover{color:#172b4d}.panel-profile-details-group.panel{border:1px solid #ebecf0}.panel-profile-details-group.panel .form-group{margin:0}.panel-profile-details-group .form-control-static p:last-child{margin-bottom:0}.post-primary .panel-post{border-color:#b388ff}.post-primary .user-title,.post-primary .user-title a,.post-primary .user-title a:active,.post-primary .user-title a:focus,.post-primary .user-title a:hover,.post-primary .user-title a:link,.post-primary .user-title a:visited{color:#6200ea}.post-success .panel-post{border-color:#00c853}.post-success .user-title,.post-success .user-title a,.post-success .user-title a:active,.post-success .user-title a:focus,.post-success .user-title a:hover,.post-success .user-title a:link,.post-success .user-title a:visited{color:#388e3c}.post-warning .panel-post{border-color:#ffab40}.post-warning .user-title,.post-warning .user-title a,.post-warning .user-title a:active,.post-warning .user-title a:focus,.post-warning .user-title a:hover,.post-warning .user-title a:link,.post-warning .user-title a:visited{color:#ff6d00}.post-danger .panel-post{border-color:#ff8a80}.post-danger .user-title,.post-danger .user-title a,.post-danger .user-title a:active,.post-danger .user-title a:focus,.post-danger .user-title a:hover,.post-danger .user-title a:link,.post-danger .user-title a:visited{color:#d50000}.user-card-primary .panel-body{background:#fff;border:2px solid #b388ff;border-radius:4px;padding:13px}.user-card-primary .user-card-title,.user-card-primary .user-card-title a.user-title,.user-card-primary .user-card-title a.user-title:active,.user-card-primary .user-card-title a.user-title:focus,.user-card-primary .user-card-title a.user-title:hover,.user-card-primary .user-card-title a.user-title:link,.user-card-primary .user-card-title a.user-title:visited{color:#6200ea}.user-card-primary .user-card-stats li{color:#9575cd}.user-card-success .panel-body{background:#fff;border:2px solid #00c853;border-radius:4px;padding:13px}.user-card-success .user-card-title,.user-card-success .user-card-title a.user-title,.user-card-success .user-card-title a.user-title:active,.user-card-success .user-card-title a.user-title:focus,.user-card-success .user-card-title a.user-title:hover,.user-card-success .user-card-title a.user-title:link,.user-card-success .user-card-title a.user-title:visited{color:#388e3c}.user-card-success .user-card-stats li{color:#66bb6a}.user-card-warning .panel-body{background:#fff;border:2px solid #ffab40;border-radius:4px;padding:13px}.user-card-warning .user-card-title,.user-card-warning .user-card-title a.user-title,.user-card-warning .user-card-title a.user-title:active,.user-card-warning .user-card-title a.user-title:focus,.user-card-warning .user-card-title a.user-title:hover,.user-card-warning .user-card-title a.user-title:link,.user-card-warning .user-card-title a.user-title:visited{color:#ff6d00}.user-card-warning .user-card-stats li{color:#ff6e40}.user-card-danger .panel-body{background:#fff;border:2px solid #ff8a80;border-radius:4px;padding:13px}.user-card-danger .user-card-title,.user-card-danger .user-card-title a.user-title,.user-card-danger .user-card-title a.user-title:active,.user-card-danger .user-card-title a.user-title:focus,.user-card-danger .user-card-title a.user-title:hover,.user-card-danger .user-card-title a.user-title:link,.user-card-danger .user-card-title a.user-title:visited{color:#d50000}.user-card-danger .user-card-stats li{color:#e57373}.list-group .list-group-rank-primary{border-left:4px solid #7e57c2;padding-left:11px}.list-group .list-group-rank-primary a.rank-name,.list-group .list-group-rank-primary a.rank-name:active,.list-group .list-group-rank-primary a.rank-name:focus,.list-group .list-group-rank-primary a.rank-name:hover,.list-group .list-group-rank-primary a.rank-name:link,.list-group .list-group-rank-primary a.rank-name:visited,.list-group .list-group-rank-primary span.rank-name{color:#6200ea}.list-group .list-group-rank-success{border-left:4px solid #9ccc65;padding-left:11px}.list-group .list-group-rank-success a.rank-name,.list-group .list-group-rank-success a.rank-name:active,.list-group .list-group-rank-success a.rank-name:focus,.list-group .list-group-rank-success a.rank-name:hover,.list-group .list-group-rank-success a.rank-name:link,.list-group .list-group-rank-success a.rank-name:visited,.list-group .list-group-rank-success span.rank-name{color:#388e3c}.list-group .list-group-rank-warning{border-left:4px solid #ff7043;padding-left:11px}.list-group .list-group-rank-warning a.rank-name,.list-group .list-group-rank-warning a.rank-name:active,.list-group .list-group-rank-warning a.rank-name:focus,.list-group .list-group-rank-warning a.rank-name:hover,.list-group .list-group-rank-warning a.rank-name:link,.list-group .list-group-rank-warning a.rank-name:visited,.list-group .list-group-rank-warning span.rank-name{color:#ff6d00}.list-group .list-group-rank-danger{border-left:4px solid #f44336;padding-left:11px}.list-group .list-group-rank-danger a.rank-name,.list-group .list-group-rank-danger a.rank-name:active,.list-group .list-group-rank-danger a.rank-name:focus,.list-group .list-group-rank-danger a.rank-name:hover,.list-group .list-group-rank-danger a.rank-name:link,.list-group .list-group-rank-danger a.rank-name:visited,.list-group .list-group-rank-danger span.rank-name{color:#d50000}.page-header-rank-primary .user-rank,.page-header-rank-primary .user-rank a,.page-header-rank-primary .user-rank a:active,.page-header-rank-primary .user-rank a:focus,.page-header-rank-primary .user-rank a:hover,.page-header-rank-primary .user-rank a:link,.page-header-rank-primary .user-rank a:visited{color:#6200ea}.page-header-rank-success .user-rank,.page-header-rank-success .user-rank a,.page-header-rank-success .user-rank a:active,.page-header-rank-success .user-rank a:focus,.page-header-rank-success .user-rank a:hover,.page-header-rank-success .user-rank a:link,.page-header-rank-success .user-rank a:visited{color:#388e3c}.page-header-rank-warning .user-rank,.page-header-rank-warning .user-rank a,.page-header-rank-warning .user-rank a:active,.page-header-rank-warning .user-rank a:focus,.page-header-rank-warning .user-rank a:hover,.page-header-rank-warning .user-rank a:link,.page-header-rank-warning .user-rank a:visited{color:#ff6d00}.page-header-rank-danger .user-rank,.page-header-rank-danger .user-rank a,.page-header-rank-danger .user-rank a:active,.page-header-rank-danger .user-rank a:focus,.page-header-rank-danger .user-rank a:hover,.page-header-rank-danger .user-rank a:link,.page-header-rank-danger .user-rank a:visited{color:#d50000}
+/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{background:transparent!important;box-shadow:none!important;color:#000!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{-webkit-tap-highlight-color:rgba(0,0,0,0);font-size:10px}body{background-color:#fff;color:#172b4d;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#0065ff;text-decoration:none}a:focus,a:hover{color:#0747a6;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{background-color:#fff;border:1px solid #ddd;border-radius:4px;display:inline-block;height:auto;line-height:1.42857143;max-width:100%;padding:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{border:0;border-top:1px solid #ebecf0;margin-bottom:20px;margin-top:20px}.sr-only{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{color:inherit;font-family:inherit;font-weight:500;line-height:1.1}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{color:#7a869a;font-weight:400;line-height:1}.h1,.h2,.h3,h1,h2,h3{margin-bottom:10px;margin-top:20px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-bottom:10px;margin-top:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{font-size:16px;font-weight:300;line-height:1.4;margin-bottom:20px}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#7a869a}.text-primary{color:#0052cc}a.text-primary:focus,a.text-primary:hover{color:#003d99}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{background-color:#0052cc;color:#fff}a.bg-primary:focus,a.bg-primary:hover{background-color:#003d99}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{border-bottom:1px solid #ebecf0;margin:40px 0 20px;padding-bottom:9px}ol,ul{margin-bottom:10px;margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-inline,.list-unstyled{list-style:none;padding-left:0}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-bottom:20px;margin-top:0}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:700px){.dl-horizontal dt{clear:left;float:left;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap;width:160px}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help}.initialism{font-size:90%;text-transform:uppercase}blockquote{border-left:5px solid #ebecf0;font-size:17.5px;margin:0 0 20px;padding:10px 20px}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{color:#7a869a;display:block;font-size:80%;line-height:1.42857143}blockquote .small:before,blockquote footer:before,blockquote small:before{content:"\2014 \00A0"}.blockquote-reverse,blockquote.pull-right{border-left:0;border-right:5px solid #ebecf0;padding-left:0;padding-right:15px;text-align:right}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:""}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:"\00A0 \2014"}address{font-style:normal;line-height:1.42857143;margin-bottom:20px}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Courier New,monospace}code{background-color:#f9f2f4;border-radius:4px;color:#c7254e}code,kbd{font-size:90%;padding:2px 4px}kbd{background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);color:#fff}kbd kbd{box-shadow:none;font-size:100%;font-weight:700;padding:0}pre{word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px;color:#344563;display:block;font-size:13px;line-height:1.42857143;margin:0 0 10px;padding:9.5px;word-break:break-all}pre code{background-color:transparent;border-radius:0;color:inherit;font-size:inherit;padding:0;white-space:pre-wrap}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.row-no-gutters{margin-left:0;margin-right:0}.row-no-gutters [class*=col-]{padding-left:0;padding-right:0}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{min-height:1px;padding-left:15px;padding-right:15px;position:relative}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}table col[class*=col-]{display:table-column;float:none;position:static}table td[class*=col-],table th[class*=col-]{display:table-cell;float:none;position:static}caption{color:#7a869a;padding-bottom:8px;padding-top:8px}caption,th{text-align:left}.table{margin-bottom:20px;max-width:100%;width:100%}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{border-top:1px solid #ddd;line-height:1.42857143;padding:8px;vertical-align:top}.table>thead>tr>th{border-bottom:2px solid #ddd;vertical-align:bottom}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;margin-bottom:15px;overflow-y:hidden;width:100%}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{margin:0;min-width:0}fieldset,legend{border:0;padding:0}legend{border-bottom:1px solid #e5e5e5;color:#344563;display:block;font-size:21px;line-height:inherit;margin-bottom:20px;width:100%}label{display:inline-block;font-weight:700;margin-bottom:5px;max-width:100%}input[type=search]{-webkit-appearance:none;appearance:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{line-height:normal;margin:4px 0 0;margin-top:1px\9}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{padding-top:7px}.form-control,output{color:#172b4d;display:block;font-size:14px;line-height:1.42857143}.form-control{background-color:#fff;background-image:none;border:1px solid #ced0da;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);height:34px;padding:6px 12px;-webkit-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-o-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}.form-control:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);outline:0}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#ebecf0;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{display:block;margin-bottom:10px;margin-top:10px;position:relative}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.checkbox label,.radio label{cursor:pointer;font-weight:400;margin-bottom:0;min-height:20px;padding-left:20px}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{margin-left:-20px;margin-top:4px\9;position:absolute}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{cursor:pointer;display:inline-block;font-weight:400;margin-bottom:0;padding-left:20px;position:relative;vertical-align:middle}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-left:10px;margin-top:0}.form-control-static{margin-bottom:0;min-height:34px;padding-bottom:7px;padding-top:7px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 10px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 10px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{font-size:12px;height:30px;line-height:1.5;min-height:32px;padding:6px 10px}.input-lg{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 16px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 16px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{font-size:18px;height:46px;line-height:1.3333333;min-height:38px;padding:11px 16px}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{display:block;height:34px;line-height:34px;pointer-events:none;position:absolute;right:0;text-align:center;top:0;width:34px;z-index:2}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{height:46px;line-height:46px;width:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{height:30px;line-height:30px;width:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{background-color:#dff0d8;border-color:#3c763d;color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{background-color:#fcf8e3;border-color:#8a6d3b;color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{background-color:#f2dede;border-color:#a94442;color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{color:#3462af;display:block;margin-bottom:10px;margin-top:5px}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;vertical-align:middle;width:auto}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-bottom:0;margin-top:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{margin-left:0;position:relative}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-bottom:0;margin-top:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{margin-bottom:0;padding-top:7px;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{font-size:18px;padding-top:11px}.form-horizontal .form-group-sm .control-label{font-size:12px;padding-top:6px}}.btn{background-image:none;border:1px solid transparent;border-radius:4px;cursor:pointer;display:inline-block;font-size:14px;font-weight:400;line-height:1.42857143;margin-bottom:0;padding:6px 12px;text-align:center;touch-action:manipulation;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#172b4d;text-decoration:none}.btn.active,.btn:active{background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125);outline:0}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{-webkit-box-shadow:none;box-shadow:none;cursor:not-allowed;filter:alpha(opacity=65);opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{background-color:#ebecf0;border-color:#ccc;color:#172b4d}.btn-default.focus,.btn-default:focus{background-color:#ced0da;border-color:#8c8c8c;color:#172b4d}.btn-default:hover{background-color:#ced0da;border-color:#adadad;color:#172b4d}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-color:#ced0da;background-image:none;border-color:#adadad;color:#172b4d}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{background-color:#b9bdcb;border-color:#8c8c8c;color:#172b4d}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#ebecf0;border-color:#ccc}.btn-default .badge{background-color:#172b4d;color:#ebecf0}.btn-primary{background-color:#6554c0;border-color:#5643b7;color:#fff}.btn-primary.focus,.btn-primary:focus{background-color:#4d3da4;border-color:#2a215a;color:#fff}.btn-primary:hover{background-color:#4d3da4;border-color:#41338a;color:#fff}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-color:#4d3da4;background-image:none;border-color:#41338a;color:#fff}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{background-color:#41338a;border-color:#2a215a;color:#fff}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#6554c0;border-color:#5643b7}.btn-primary .badge{background-color:#fff;color:#6554c0}.btn-success{background-color:#00c853;border-color:#00af48;color:#fff}.btn-success.focus,.btn-success:focus{background-color:#00953e;border-color:#002f14;color:#fff}.btn-success:hover{background-color:#00953e;border-color:#00712f;color:#fff}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-color:#00953e;background-image:none;border-color:#00712f;color:#fff}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{background-color:#00712f;border-color:#002f14;color:#fff}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#00c853;border-color:#00af48}.btn-success .badge{background-color:#fff;color:#00c853}.btn-info{background-color:#3d5afe;border-color:#2444fe;color:#fff}.btn-info.focus,.btn-info:focus{background-color:#0a2ffe;border-color:#0119a1;color:#fff}.btn-info:hover{background-color:#0a2ffe;border-color:#0123e3;color:#fff}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-color:#0a2ffe;background-image:none;border-color:#0123e3;color:#fff}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{background-color:#0123e3;border-color:#0119a1;color:#fff}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#3d5afe;border-color:#2444fe}.btn-info .badge{background-color:#fff;color:#3d5afe}.btn-warning{background-color:#ffab00;border-color:#e69a00;color:#fff}.btn-warning.focus,.btn-warning:focus{background-color:#cc8900;border-color:#640;color:#fff}.btn-warning:hover{background-color:#cc8900;border-color:#a87100;color:#fff}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-color:#cc8900;background-image:none;border-color:#a87100;color:#fff}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{background-color:#a87100;border-color:#640;color:#fff}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#ffab00;border-color:#e69a00}.btn-warning .badge{background-color:#fff;color:#ffab00}.btn-danger{background-color:#ef5350;border-color:#ed3c39;color:#fff}.btn-danger.focus,.btn-danger:focus{background-color:#eb2521;border-color:#98110e;color:#fff}.btn-danger:hover{background-color:#eb2521;border-color:#d51713;color:#fff}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-color:#eb2521;background-image:none;border-color:#d51713;color:#fff}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{background-color:#d51713;border-color:#98110e;color:#fff}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#ef5350;border-color:#ed3c39}.btn-danger .badge{background-color:#fff;color:#ef5350}.btn-link{border-radius:0;color:#0065ff;font-weight:400}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{background-color:transparent;color:#0747a6;text-decoration:underline}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#7a869a;text-decoration:none}.btn-group-lg>.btn,.btn-lg{border-radius:6px;font-size:18px;line-height:1.3333333;padding:10px 16px}.btn-group-sm>.btn,.btn-sm{border-radius:3px;font-size:12px;line-height:1.5;padding:5px 10px}.btn-group-xs>.btn,.btn-xs{border-radius:3px;font-size:12px;line-height:1.5;padding:1px 5px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;position:relative;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px dashed;border-top:4px solid\9;display:inline-block;height:0;margin-left:2px;vertical-align:middle;width:0}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{background-clip:padding-box;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);display:none;float:left;font-size:14px;left:0;list-style:none;margin:2px 0 0;min-width:160px;padding:5px 0;position:absolute;text-align:left;top:100%;z-index:1000}.dropdown-menu.pull-right{left:auto;right:0}.dropdown-menu .divider{background-color:#ebecf0;height:1px;margin:9px 0;overflow:hidden}.dropdown-menu>li>a{clear:both;color:#172b4d;display:block;font-weight:400;line-height:1.42857143;padding:3px 20px;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#ebecf0;color:#172b4d;text-decoration:none}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#172b4d;color:#fff;outline:0;text-decoration:none}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#7a869a}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{background-color:transparent;background-image:none;cursor:not-allowed;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);text-decoration:none}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{color:#7a869a;display:block;font-size:12px;line-height:1.42857143;padding:3px 20px;white-space:nowrap}.dropdown-backdrop{bottom:0;left:0;position:fixed;right:0;top:0;z-index:990}.pull-right>.dropdown-menu{left:auto;right:0}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-bottom:4px dashed;border-bottom:4px solid\9;border-top:0;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{bottom:100%;margin-bottom:2px;top:auto}@media (min-width:700px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.nav{list-style:none;margin-bottom:0;padding-left:0}.nav>li,.nav>li>a{display:block;position:relative}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{background-color:#ebecf0;text-decoration:none}.nav>li.disabled>a{color:#7a869a}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{background-color:transparent;color:#7a869a;cursor:not-allowed;text-decoration:none}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#ebecf0;border-color:#0065ff}.nav .nav-divider{background-color:#e5e5e5;height:1px;margin:9px 0;overflow:hidden}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{border:1px solid transparent;border-radius:4px 4px 0 0;line-height:1.42857143;margin-right:2px}.nav-tabs>li>a:hover{border-color:#ebecf0 #ebecf0 #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{background-color:#fff;border:1px solid;border-color:#ddd #ddd transparent;color:#5e6c84;cursor:default}.nav-tabs.nav-justified{border-bottom:0;width:100%}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{left:auto;top:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{border-radius:4px;margin-right:0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#0065ff;color:#fff}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-left:0;margin-top:2px}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{left:auto;top:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{border-radius:4px;margin-right:0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px}.navbar{border:1px solid transparent;margin-bottom:20px;min-height:54px;position:relative}@media (min-width:700px){.navbar{border-radius:4px}.navbar-header{float:left}}.navbar-collapse{-webkit-overflow-scrolling:touch;border-top:1px solid transparent;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1);overflow-x:visible;padding-left:15px;padding-right:15px}.navbar-collapse.in{overflow-y:auto}@media (min-width:700px){.navbar-collapse{border-top:0;box-shadow:none;width:auto}.navbar-collapse.collapse{display:block!important;height:auto!important;overflow:visible!important;padding-bottom:0}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-bottom,.navbar-fixed-top{left:0;position:fixed;right:0;z-index:1030}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}@media (min-width:700px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{border-width:0 0 1px;top:0}.navbar-fixed-bottom{border-width:1px 0 0;bottom:0;margin-bottom:0}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-left:-15px;margin-right:-15px}@media (min-width:700px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-left:0;margin-right:0}}.navbar-static-top{border-width:0 0 1px;z-index:1000}@media (min-width:700px){.navbar-static-top{border-radius:0}}.navbar-brand{float:left;font-size:18px;height:54px;line-height:20px;padding:17px 15px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:700px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px;float:right;margin-bottom:10px;margin-right:15px;margin-top:10px;padding:9px 10px;position:relative}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{border-radius:1px;display:block;height:2px;width:22px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:700px){.navbar-toggle{display:none}}.navbar-nav{margin:8.5px -15px}.navbar-nav>li>a{line-height:20px;padding-bottom:10px;padding-top:10px}@media (max-width:699px){.navbar-nav .open .dropdown-menu{background-color:transparent;border:0;box-shadow:none;float:none;margin-top:0;position:static;width:auto}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:700px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-bottom:17px;padding-top:17px}}.navbar-form{border-bottom:1px solid transparent;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1),0 1px 0 hsla(0,0%,100%,.1);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1),0 1px 0 hsla(0,0%,100%,.1);margin:10px -15px;padding:10px 15px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;vertical-align:middle;width:auto}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-bottom:0;margin-top:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{margin-left:0;position:relative}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:699px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:700px){.navbar-form{border:0;-webkit-box-shadow:none;box-shadow:none;margin-left:0;margin-right:0;padding-bottom:0;padding-top:0;width:auto}}.navbar-nav>li>.dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:4px;border-top-right-radius:4px;margin-bottom:0}.navbar-btn{margin-bottom:10px;margin-top:10px}.navbar-btn.btn-sm{margin-bottom:12px;margin-top:12px}.navbar-btn.btn-xs{margin-bottom:16px;margin-top:16px}.navbar-text{margin-bottom:17px;margin-top:17px}@media (min-width:700px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#fff;border-color:#c1c7d0}.navbar-default .navbar-brand{color:#344563}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{background-color:transparent;color:#344563}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#8993a4}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{background-color:transparent;color:#505f79}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{background-color:#dfe1e6;color:#6b778c}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{background-color:transparent;color:#c1c7d0}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#dfe1e6;color:#6b778c}@media (max-width:699px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#8993a4}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{background-color:transparent;color:#505f79}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#dfe1e6;color:#6b778c}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{background-color:transparent;color:#c1c7d0}}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#c1c7d0}.navbar-default .navbar-link{color:#8993a4}.navbar-default .navbar-link:hover{color:#505f79}.navbar-default .btn-link{color:#8993a4}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#505f79}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#c1c7d0}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#a5aebb}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{background-color:transparent;color:#fff}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#a5aebb}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:transparent;color:#fff}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#080808;color:#fff}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{background-color:transparent;color:#444}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#080808;color:#fff}@media (max-width:699px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#a5aebb}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:transparent;color:#fff}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#080808;color:#fff}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{background-color:transparent;color:#444}}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-link{color:#a5aebb}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#a5aebb}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{background-color:#f5f5f5;border-radius:4px;list-style:none;margin-bottom:20px;padding:8px 15px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{color:#ccc;content:"/\00a0";padding:0 5px}.breadcrumb>.active{color:#7a869a}.alert{border:1px solid transparent;border-radius:4px;margin-bottom:20px;padding:15px}.alert h4{color:inherit;margin-top:0}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{color:inherit;position:relative;right:-21px;top:-2px}.alert-success{background-color:#00875a;border-color:#00875a;color:#fff}.alert-success hr{border-top-color:#006e49}.alert-success .alert-link{color:#e6e6e6}.alert-info{background-color:#448aff;border-color:#448aff;color:#fff}.alert-info hr{border-top-color:#2a7aff}.alert-info .alert-link{color:#e6e6e6}.alert-warning{background-color:#ff8b00;border-color:#ff8b00;color:#fff}.alert-warning hr{border-top-color:#e67d00}.alert-warning .alert-link{color:#e6e6e6}.alert-danger{background-color:#de350b;border-color:#de350b;color:#fff}.alert-danger hr{border-top-color:#c62f0a}.alert-danger .alert-link{color:#e6e6e6}.label{border-radius:.25em;color:#fff;display:inline;font-size:75%;font-weight:700;line-height:1;padding:.2em .6em .3em;text-align:center;vertical-align:baseline;white-space:nowrap}a.label:focus,a.label:hover{color:#fff;cursor:pointer;text-decoration:none}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#7a869a}.label-default[href]:focus,.label-default[href]:hover{background-color:#616d80}.label-primary{background-color:#0052cc}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#003d99}.label-success{background-color:#36b37e}.label-success[href]:focus,.label-success[href]:hover{background-color:#2a8c62}.label-info{background-color:#3d5afe}.label-info[href]:focus,.label-info[href]:hover{background-color:#0a2ffe}.label-warning{background-color:#ffab00}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#cc8900}.label-danger{background-color:#ff5630}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#fc2e00}@-webkit-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}.progress{background-color:#ebecf0;border-radius:3px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);height:20px;margin-bottom:20px;overflow:hidden}.progress-bar{background-color:#6554c0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);color:#fff;float:left;font-size:12px;height:100%;line-height:20px;text-align:center;-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease;width:0}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#36b37e}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.progress-bar-info{background-color:#3d5afe}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.progress-bar-warning{background-color:#ffab00}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.progress-bar-danger{background-color:#ff5630}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.btn-group,.btn-group-vertical{display:inline-block;position:relative;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{float:left;position:relative}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;max-width:100%;width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-left:0;margin-top:-1px}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:4px;border-top-right-radius:4px}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:0;border-top-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{border-collapse:separate;display:table;table-layout:fixed;width:100%}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{clip:rect(0,0,0,0);pointer-events:none;position:absolute}.input-group{border-collapse:separate;display:table;position:relative}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{float:left;margin-bottom:0;position:relative;width:100%;z-index:2}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 16px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 10px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{vertical-align:middle;white-space:nowrap;width:1%}.input-group-addon{background-color:#ebecf0;border:1px solid #ced0da;border-radius:4px;color:#172b4d;font-size:14px;font-weight:400;line-height:1;padding:6px 12px;text-align:center}.input-group-addon.input-sm{border-radius:3px;font-size:12px;padding:5px 10px}.input-group-addon.input-lg{border-radius:6px;font-size:18px;padding:10px 16px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn,.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px;z-index:2}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-bottom:5px;margin-top:0}.media-list{list-style:none;padding-left:0}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{background-color:#fff;border:1px solid #ebecf0;display:block;margin-bottom:-1px;padding:10px 15px;position:relative}.list-group-item:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.list-group-item:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px;margin-bottom:0}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#ebecf0;color:#7a869a;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#7a869a}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{background-color:#fff;border-color:#ebecf0;color:#0065ff;z-index:2}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#fff}a.list-group-item,button.list-group-item{color:#7a869a}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{background-color:#fff;color:#172b4d;text-decoration:none}button.list-group-item{text-align:left;width:100%}.list-group-item-success{background-color:#dff0d8;color:#3c763d}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{background-color:#d0e9c6;color:#3c763d}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{background-color:#3c763d;border-color:#3c763d;color:#fff}.list-group-item-info{background-color:#d9edf7;color:#31708f}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{background-color:#c4e3f3;color:#31708f}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{background-color:#31708f;border-color:#31708f;color:#fff}.list-group-item-warning{background-color:#fcf8e3;color:#8a6d3b}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{background-color:#faf2cc;color:#8a6d3b}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{background-color:#8a6d3b;border-color:#8a6d3b;color:#fff}.list-group-item-danger{background-color:#f2dede;color:#a94442}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{background-color:#ebcccc;color:#a94442}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{background-color:#a94442;border-color:#a94442;color:#fff}.list-group-item-heading{margin-bottom:5px;margin-top:0}.list-group-item-text{line-height:1.3;margin-bottom:0}.panel{background-color:#fff;border:1px solid transparent;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05);margin-bottom:20px}.panel-body{padding:15px}.panel-heading{border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px;padding:14px 15px}.panel-heading>.dropdown .dropdown-toggle,.panel-title{color:inherit}.panel-title{font-size:16px;margin-bottom:0;margin-top:0}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{background-color:#fff;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-top:1px solid #ebecf0;padding:14px 15px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-radius:0;border-width:1px 0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{border-radius:4px;margin-bottom:0}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ebecf0}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ebecf0}.panel-default{border-color:#ddd}.panel-default>.panel-heading{background-color:#fff;border-color:#ddd;color:#344563}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{background-color:#344563;color:#fff}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#0052cc}.panel-primary>.panel-heading{background-color:#0052cc;border-color:#0052cc;color:#fff}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#0052cc}.panel-primary>.panel-heading .badge{background-color:#fff;color:#0052cc}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#0052cc}.panel-success{border-color:#36b37e}.panel-success>.panel-heading{background-color:#dff0d8;border-color:#36b37e;color:#3c763d}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#36b37e}.panel-success>.panel-heading .badge{background-color:#3c763d;color:#dff0d8}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#36b37e}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{background-color:#31708f;color:#d9edf7}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{background-color:#8a6d3b;color:#fcf8e3}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ff5630}.panel-danger>.panel-heading{background-color:#f2dede;border-color:#ff5630;color:#a94442}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ff5630}.panel-danger>.panel-heading .badge{background-color:#a94442;color:#f2dede}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ff5630}.pager{list-style:none;margin:20px 0;padding-left:0;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{background-color:#fff;border:1px solid #ddd;border-radius:15px;display:inline-block;padding:5px 14px}.pager li>a:focus,.pager li>a:hover{background-color:#ebecf0;text-decoration:none}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{background-color:#fff;color:#7a869a;cursor:not-allowed}.pagination{border-radius:4px;display:inline-block;margin:20px 0;padding-left:0}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{background-color:#fff;border:1px solid #ddd;color:#0065ff;float:left;line-height:1.42857143;margin-left:-1px;padding:6px 12px;position:relative;text-decoration:none}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{background-color:#ebecf0;border-color:#ddd;color:#0747a6;z-index:2}.pagination>li:first-child>a,.pagination>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px;margin-left:0}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{background-color:#0052cc;border-color:#0052cc;color:#fff;cursor:default;z-index:3}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{background-color:#fff;border-color:#ddd;color:#7a869a;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{font-size:18px;line-height:1.3333333;padding:10px 16px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{font-size:12px;line-height:1.5;padding:5px 10px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.embed-responsive{display:block;height:0;overflow:hidden;padding:0;position:relative}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{border:0;bottom:0;height:100%;left:0;position:absolute;top:0;width:100%}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{background-color:#fff;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);margin-bottom:20px;min-height:20px;padding:19px}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{border-radius:6px;padding:24px}.well-sm{border-radius:3px;padding:9px}.close{color:#000;filter:alpha(opacity=20);float:right;font-size:21px;font-weight:700;line-height:1;opacity:.2;text-shadow:0 1px 0 #fff}.close:focus,.close:hover{color:#000;cursor:pointer;filter:alpha(opacity=50);opacity:.5;text-decoration:none}button.close{-webkit-appearance:none;appearance:none;background:transparent;border:0;cursor:pointer;padding:0}.badge{background-color:#7a869a;border-radius:10px;color:#fff;display:inline-block;font-size:12px;font-weight:700;line-height:1;min-width:10px;padding:3px 7px;text-align:center;vertical-align:middle;white-space:nowrap}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{padding:1px 5px;top:0}a.badge:focus,a.badge:hover{color:#fff;cursor:pointer;text-decoration:none}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{background-color:#fff;color:#0065ff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.modal,.modal-open{overflow:hidden}.modal{-webkit-overflow-scrolling:touch;bottom:0;display:none;left:0;outline:0;position:fixed;right:0;top:0;z-index:1050}.modal.fade .modal-dialog{-webkit-transform:translateY(-25%);-ms-transform:translateY(-25%);-o-transform:translateY(-25%);transform:translateY(-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0);-ms-transform:translate(0);-o-transform:translate(0);transform:translate(0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{margin:10px;position:relative;width:auto}.modal-content{background-clip:padding-box;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0;position:relative}.modal-backdrop{background-color:#091e42;bottom:0;left:0;position:fixed;right:0;top:0;z-index:1040}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{border-bottom:1px solid #ced0da;padding:15px}.modal-header .close{margin-top:-2px}.modal-title{line-height:1.42857143;margin:0}.modal-body{padding:15px;position:relative}.modal-footer{border-top:1px solid #ced0da;padding:15px;text-align:right}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{height:50px;overflow:scroll;position:absolute;top:-9999px;width:50px}@media (min-width:768px){.modal-dialog{margin:30px auto;width:600px}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.agreement-footer:after,.agreement-footer:before,.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.agreement-footer:after,.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{background-color:transparent;border:0;color:transparent;font:0/0 a;text-shadow:none}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}@media screen and (max-width:991px){body,html{overflow-x:hidden}}@media screen and (min-width:992px){.md-margin-top-no{margin-top:0!important}}@media screen and (min-width:768px) and (max-width:991px){.sm-margin-top{margin-top:20px!important}.sm-margin-top-no{margin-top:0!important}.sm-margin-top-half{margin-top:6.6px!important}.sm-align-row-buttons{margin-top:5px!important}}@media screen and (max-width:767px){.xs-margin-top{margin-top:20px!important}.xs-margin-top-half{margin-top:6.6px!important}}.flex-row{display:block;margin:0 -15px}.flex-row-section{align-items:center;display:flex;flex:1}.flex-row-section+.flex-row-section{margin-top:20px}.flex-row-col{flex:1;padding:0 15px}@media screen and (min-width:768px){.flex-row{align-items:center;display:flex}.flex-row-section+.flex-row-section{margin:0}.flex-row-col,.flex-row-section{align-items:center;flex:0}.flex-row-section.flex-row-section-auto,.flex-row-section.flex-row-section-auto>.flex-row-col{flex:1}}.flex-row-col-shrink{flex:0!important}.auth-message{background-color:#ebecf0;left:0;padding:20px 0;position:fixed;top:-100%;transition:top .3s ease;width:100%;z-index:1070}.auth-message.show{bottom:auto;top:0}.auth-message p{color:#172b4d;padding:5px 0}@media screen and (max-width:991px){.auth-message{text-align:center}.auth-message .btn{font-size:18px;padding:10px 16px}}.alerts-snackbar{font-size:18px;pointer-events:none;position:fixed;text-align:center;top:-100%;transition:top .3s ease;width:100%;z-index:1060}.alerts-snackbar.in{top:0;transition:top .2s ease}.alerts-snackbar p{border-radius:0 0 4px 4px;display:inline-block;margin:0;pointer-events:all}.agreement-overlay{background-color:rgba(9,30,66,.5);height:100%;left:0;overflow-x:scroll;position:fixed;top:0;width:100%;z-index:1060}.agreement-overlay .container{max-width:900px;padding:20px 30px}.agreement-content{background-clip:padding-box;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0;padding:10px 16px}.agreement-header{border-bottom:1px solid #ebecf0;padding:10px 0}.agreement-header h2{margin-top:0}.agreement-header p{margin:0;padding:0}.agreement-body{padding:20px 0}.agreement-body p.lead{margin:0;padding:0}.agreement-footer{border-top:1px solid #ced0da;padding:10px 0;text-align:right}.agreement-footer .btn+.btn{margin-bottom:0;margin-left:5px}.agreement-footer .btn-group .btn+.btn{margin-left:-1px}.agreement-footer .btn-block+.btn-block{margin-left:0}body.agreement-overlay-visible{overflow:hidden}.loader{height:49px;text-align:center;width:100%}.loader.loader-spaced{margin:40px 0}.loader-spinning-wheel{animation:cssload-spin 575ms linear infinite;-o-animation:cssload-spin 575ms linear infinite;-ms-animation:cssload-spin 575ms linear infinite;-webkit-animation:cssload-spin 575ms linear infinite;-moz-animation:cssload-spin 575ms linear infinite;border-color:#7a869a transparent;border-radius:50%;border-style:solid;border-width:3px;height:49px;margin:0 auto;width:49px}@keyframes cssload-spin{to{transform:rotate(1turn)}}@-o-keyframes cssload-spin{to{-o-transform:rotate(1turn);transform:rotate(1turn)}}@-ms-keyframes cssload-spin{to{-ms-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes cssload-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-moz-keyframes cssload-spin{to{-moz-transform:rotate(1turn);transform:rotate(1turn)}}.navbar{margin-bottom:0}.navbar .navbar-full .navbar-brand{font-size:21px;padding-bottom:11px;padding-top:11px}.navbar .navbar-full .navbar-brand>*{display:inline-block;vertical-align:middle}.navbar .navbar-full .navbar-brand img{height:32px;margin-right:6px}.navbar .navbar-full .navbar-nav>li>a{font-size:16.8px}.navbar .navbar-full .navbar-icon{color:#8993a4;display:block;height:54px;padding:13px 15px;position:relative}.navbar .navbar-full .navbar-icon:focus,.navbar .navbar-full .navbar-icon:hover{background-color:transparent;color:#505f79}.navbar .navbar-full .navbar-icon .material-icon{font-size:28px;height:28px;line-height:28px;width:28px}.navbar .navbar-full .navbar-icon .badge{background-color:#ff5630;font-size:9px;position:absolute;right:6px;top:6px}.navbar .navbar-full .open .navbar-icon,.navbar .navbar-full .open .navbar-icon:focus,.navbar .navbar-full .open .navbar-icon:hover{background-color:#dfe1e6;color:#6b778c}.navbar .navbar-full .nav-guest,.navbar .navbar-full .nav-user{float:right}.navbar .navbar-full .nav-guest .navbar-btn,.navbar .navbar-full .nav-user .navbar-btn{margin-left:15px}.navbar .navbar-full .nav-user .dropdown-toggle{padding:10px}.navbar .navbar-full .nav-user .dropdown-toggle img{height:34px;width:34px}.navbar ul.navbar-compact-nav{border-collapse:collapse;display:table;margin:0;table-layout:fixed;width:100%}.navbar ul.navbar-compact-nav>li{display:table-cell;width:100%}.navbar ul.navbar-compact-nav>li>a,.navbar ul.navbar-compact-nav>li>button{background:none;border:none;color:#8993a4;display:block;padding-bottom:13px;padding-top:13px;text-align:center;width:100%}.navbar ul.navbar-compact-nav>li>a.active,.navbar ul.navbar-compact-nav>li>a:focus,.navbar ul.navbar-compact-nav>li>a:hover,.navbar ul.navbar-compact-nav>li>button.active,.navbar ul.navbar-compact-nav>li>button:focus,.navbar ul.navbar-compact-nav>li>button:hover{background-color:#dfe1e6;color:#6b778c}.navbar ul.navbar-compact-nav>li>a>img,.navbar ul.navbar-compact-nav>li>button>img{height:24px;width:24px}.navbar ul.navbar-compact-nav>li>button{display:inline-block}.navbar ul.navbar-compact-nav>li>a>.material-icon{font-size:24px;line-height:24px}@media (max-width:700px){.navbar.navbar-misago{min-height:auto}}.navbar-misago .navbar-desktop-nav{display:none}@media (min-width:700px){.navbar-misago ul.navbar-compact-nav{display:none}.navbar-misago .navbar-desktop-nav{display:block}}.nav-side>a>.material-icon{bottom:1px;font-size:24px;height:24px;line-height:24px;margin:-5px 10px -5px -5px;position:relative;width:24px}.nav-side>a .badge{position:relative;top:1px}.nav-pills>li>a{align-items:center;display:flex;padding:5px 10px}.nav-pills>li>a .material-icon{margin-right:3px}.nav-pills>li>a,.nav-pills>li>a:link,.nav-pills>li>a:visited{background-color:#ebecf0;color:#344563}.nav-pills>li>a:active,.nav-pills>li>a:focus,.nav-pills>li>a:hover{background-color:#dcdee5;color:#344563}.nav-pills>li.active>a,.nav-pills>li.active>a:active,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:link,.nav-pills>li.active>a:visited{background-color:#344563;color:#fff}.nav-container .btn-block{margin-bottom:20px}.nav-container .nav{margin-bottom:30px;margin-right:-10px}.nav-container li{margin-bottom:10px;margin-right:10px}.breadcrumbs{display:block;margin-bottom:10px;padding:0}.breadcrumbs-item{display:inline-block;list-style:none;margin-bottom:10px;margin-right:15px;padding:0}.breadcrumbs-item a{align-items:center;display:flex;text-decoration:none}.breadcrumbs-item a,.breadcrumbs-item a:visited{color:#5e6c84}.breadcrumbs-item a:focus,.breadcrumbs-item a:hover{color:#172b4d}.breadcrumbs-item a:focus .breadcrumbs-item-name,.breadcrumbs-item a:hover .breadcrumbs-item-name{text-decoration:underline}.breadcrumbs-item a:active{color:#172b4d}.breadcrumbs-item .material-icon{margin-right:4px}@font-face{font-family:Material Icons;font-style:normal;font-weight:400;src:url(../fonts/MaterialIcons-Regular.eot);src:local("Material Icons"),local("MaterialIcons-Regular"),url(../fonts/MaterialIcons-Regular.woff2) format("woff2"),url(../fonts/MaterialIcons-Regular.woff) format("woff"),url(../fonts/MaterialIcons-Regular.ttf) format("truetype")}.material-icon{word-wrap:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga";direction:ltr;display:inline-block;font-family:Material Icons;font-style:normal;font-weight:400;height:1em;letter-spacing:normal;line-height:1;text-align:center;text-rendering:optimizeLegibility;text-transform:none;vertical-align:middle;white-space:nowrap;width:1em}.modal-toolbar{background:#ebecf0;border-bottom:1px solid #ced0da;overflow:auto;padding:6px 12px}.modal-toolbar .pull-left{margin-right:8px}.modal-toolbar p{margin-bottom:0;padding:5px 0}@media screen and (max-width:991px){.modal-message{text-align:center}.modal-message .message-icon{margin:30px}.modal-message .message-icon .material-icon{font-size:160px}}@media screen and (min-width:992px){.modal-message .modal-body{padding-bottom:30px;padding-top:20px}.modal-message .message-icon{float:left;left:7px;position:relative}.modal-message .message-icon .material-icon{font-size:50px}.modal-message .message-body{margin-left:75px;margin-top:10px}.modal-message .message-body p{margin-top:20px}.modal-message .message-body .lead{margin-bottom:0;margin-top:0}}.modal-loader{padding:50px 0}.modal-loader .loader{height:80px;text-align:center;width:100%}.modal-loader .loader-spinning-wheel{height:80px;width:80px}.modal-body .form-group{min-height:34px}.list-item-errors{margin-bottom:20px}.list-errored-items li:last-child .list-item-errors{margin-bottom:0}.modal-post-likers .media-list{margin:0}.modal-post-likers .item-title{display:block}.has-feedback .material-icon.form-control-feedback{font-size:1.42857143;line-height:1.42857143;right:24px;top:6px}.well.well-form.well-done{font-size:18px;text-align:center}.well.well-form.well-done .message-icon{font-size:90px;line-height:90px;margin-bottom:10px}.well.well-form.well-done .message-body{margin-bottom:20px}.well.well-form.well-noscript{font-size:18px;text-align:center}.well.well-form.well-noscript .message-icon{font-size:90px;line-height:90px;margin-bottom:10px}.btn.btn-select,.btn.btn-yes-no{background:transparent;border:1px solid #ced0da}.btn.btn-select .material-icon,.btn.btn-yes-no .material-icon{bottom:1px;font-size:20px;height:20px;line-height:20px;margin:-4px 8px -4px 0;position:relative;width:20px}@media screen and (max-width:767px){.btn.btn-yes-no{overflow:auto;width:100%}.btn.btn-yes-no .material-icon{float:left;margin-top:1px}.btn.btn-yes-no .btn-text{display:block;margin-left:30px;text-align:left;white-space:normal}}input.hidden-file-upload{left:-9999px;position:absolute;top:-9999px}.form-search{position:relative}.form-search .form-control{padding-right:30px}.form-search .material-icon{color:#7a869a;font-size:24px;line-height:24px;pointer-events:none;position:absolute;right:5px;top:5px}.btn.btn-loading,.btn.btn-loading:active,.btn.btn-loading:focus,.btn.btn-loading:hover,.btn.btn-loading:link,.btn.btn-loading:visited{color:transparent}.btn.btn-loading .loader,.btn.btn-loading:active .loader,.btn.btn-loading:focus .loader,.btn.btn-loading:hover .loader,.btn.btn-loading:link .loader,.btn.btn-loading:visited .loader{height:20px;margin-top:-20px}.btn.btn-loading .loader>div,.btn.btn-loading:active .loader>div,.btn.btn-loading:focus .loader>div,.btn.btn-loading:hover .loader>div,.btn.btn-loading:link .loader>div,.btn.btn-loading:visited .loader>div{height:20px;width:20px}.btn.btn-loading.btn-default .loader>div{border-bottom-color:#172b4d;border-top-color:#172b4d}.btn.btn-loading.btn-danger .loader>div,.btn.btn-loading.btn-info .loader>div,.btn.btn-loading.btn-primary .loader>div,.btn.btn-loading.btn-success .loader>div,.btn.btn-loading.btn-warning .loader>div{border-bottom-color:#fff;border-top-color:#fff}.btn .material-icon{bottom:1px;margin-right:3px;position:relative}.btn-icon .material-icon{font-size:20px;height:20px;line-height:20px;margin:-1px -4px;width:20px}.btn-icon .btn-text{margin-left:10px}.btn-icon .btn-text-left{margin-right:10px}.btn-block.btn-icon{padding-left:0;padding-right:0}.dropdown-menu>li>.btn-link,.dropdown-menu>li>a,.modal-menu>li>.btn-link,.modal-menu>li>a{border:none;clear:both;color:#172b4d;display:block;float:none;font-weight:400;line-height:1.42857143;padding:6px 20px;text-align:left;white-space:nowrap;width:100%}.dropdown-menu>li>.btn-link:active,.dropdown-menu>li>.btn-link:focus,.dropdown-menu>li>.btn-link:hover,.dropdown-menu>li>a:active,.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover,.modal-menu>li>.btn-link:active,.modal-menu>li>.btn-link:focus,.modal-menu>li>.btn-link:hover,.modal-menu>li>a:active,.modal-menu>li>a:focus,.modal-menu>li>a:hover{background-color:#ebecf0;color:#172b4d;text-decoration:none}.dropdown-menu>li>.btn-link:disabled,.dropdown-menu>li>a:disabled,.modal-menu>li>.btn-link:disabled,.modal-menu>li>a:disabled{color:rgba(23,43,77,.5)}.dropdown-menu>li>.btn-link .material-icon,.dropdown-menu>li>a .material-icon,.modal-menu>li>.btn-link .material-icon,.modal-menu>li>a .material-icon{bottom:1px;font-size:18px;margin:-2px 7px -2px 0;position:relative}.dropdown-menu>li>.btn-link .badge,.dropdown-menu>li>a .badge,.modal-menu>li>.btn-link .badge,.modal-menu>li>a .badge{float:right;position:relative;top:1px}.modal-menu{margin:20px 0;padding:0}.modal-menu>li{list-style:none;margin:6.66666667px 0;padding:0}.dropdown-menu{min-width:210px}.dropdown-menu .dropdown-footer{padding:6px 20px}.dropdown-menu .dropdown-buttons{padding:2px 20px 7px}.dropdown-menu .dropdown-buttons .btn{margin:4px 0}.mobile-dropdown{position:relative}.compact-nav.open>.dropdown-menu,.mobile-dropdown.open>.dropdown-menu{border:none;border-radius:0;display:block;margin:0;width:100%}.user-dropdown .guest-preview{text-align:center}.user-dropdown .guest-preview .row{margin:0}.navbar .user-dropdown{width:240px}.user-dropdown .dropdown-header{font-size:18px;padding:6px 20px}.user-dropdown .dropdown-header strong{font-weight:400}@media screen and (min-width:992px){.category-picker .dropdown-menu{width:300px}}.category-picker .dropdown-menu>li>.btn-link{word-wrap:break-word;white-space:normal}@media screen and (max-width:767px){.dropdown-menu.stick-to-bottom{border:none;border-radius:0;bottom:0;-webkit-box-shadow:0 0 30px #7a869a;box-shadow:0 0 30px #7a869a;clear:both;margin:0;max-height:300px;overflow-y:auto;padding:0 0 20px;position:fixed;top:auto;width:100%}.dropdown-menu.stick-to-bottom li{clear:both;float:none;margin:0}.dropdown-menu.stick-to-bottom li>.btn,.dropdown-menu.stick-to-bottom li>a{border-bottom:1px solid #ebecf0;padding-bottom:15px;padding-top:15px}}.category-label{border-radius:.25em;padding:.2em .6em .3em}.category-label-color,.category-label-color:active,.category-label-color:focus,.category-label-color:hover,.category-label-color:link,.category-label-color:visited{color:#fff}.category-label-no-color,.category-label-no-color:active,.category-label-no-color:focus,.category-label-no-color:hover,.category-label-no-color:link,.category-label-no-color:visited{background-color:#ebecf0;color:#344563}.thread-flags{margin:0;opacity:.8;padding:0}.thread-flags,.thread-flags li{align-items:center;display:flex}.thread-flags li{border-radius:3px;cursor:default;height:20px;justify-content:center;list-style-type:none;width:20px}.thread-flags li+li{margin-left:7.5px}.thread-flags .material-icon{font-size:16px;line-height:16px}.thread-flag-pinned-globally{background:#dbeafe;color:#2563eb}.thread-flag-pinned-locally{background:#dbeafe;color:#3b82f6}.thread-flag-answered{background:#d9f99d;color:#4d7c0f}.thread-flag-poll{background:#f5d0fe;color:#c026d3}.thread-flag-unapproved{background:#dc2626;color:#fff}.thread-flag-closed{background:#fecaca;color:#dc2626}.thread-flag-hidden{background:#64748b;color:#fff}.threads-replies{align-items:center;color:#5e6c84;display:flex;font-size:16px;font-weight:700}.threads-replies .material-icon{margin-right:7.5px;transform:matrix(-1,0,0,1,0,0)}.thread-user-card{align-items:center;display:flex}.thread-user-card-media{flex:0;margin-right:15px}.thread-user-card-media img{border-radius:3px}.thread-user-card-body{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.navbar-misago .dropdown-menu.dropdown-search-results{left:auto;margin:0;padding-top:0;right:0;width:400px}.dropdown-search-results .form-group{margin:0;padding:12px}li.dropdown-search-message{text-align:center}.dropdown-search-thread{width:100%}.dropdown-search-thread h5{margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dropdown-search-thread small{display:block;margin:4px 0 0}.page-header{margin:10px 0 0}.page-header-banner-bg-overlay{padding:20px 0}.page-header h1{margin:0;overflow-wrap:break-word}.page-container{padding-top:20px}@media screen and (max-width:991px){.panel-message-body{text-align:center}.panel-message-body .message-icon{margin:30px}.panel-message-body .message-icon .material-icon{font-size:160px}}@media screen and (min-width:992px){.panel-message-body{padding:20px 20px 30px}.panel-message-body .message-icon{float:left}.panel-message-body .message-icon .material-icon{font-size:50px}.panel-message-body .message-body{margin-left:65px;margin-top:10px}.panel-message-body .message-body .lead{margin-bottom:0}.panel-message-body .message-body .help-block{margin-top:13.2px}}.panel-body-loading{padding:0;text-align:center}.misago-footer{margin-bottom:50px;margin-top:30px}.misago-footer .footer-content{padding-top:30px}.misago-footer .noscript-message .material-icon{bottom:1px;font-size:18px;position:relative}.ui-preview{-webkit-animation:ui-preview-animation 1s linear infinite;-o-animation:ui-preview-animation 1s linear infinite;animation:ui-preview-animation 1s linear infinite;color:#ebecf0}@keyframes ui-preview-animation{0%{filter:alpha(opacity=100);opacity:1}50%{filter:alpha(opacity=10);opacity:.1}to{filter:alpha(opacity=100);opacity:1}}.ui-preview-text{background:#ebecf0;border-radius:100px;display:inline-block;height:14px;position:relative;top:3px}.ui-preview-paragraph .ui-preview-text{margin-right:6px}.ui-preview-paragraph .ui-preview-text:last-child{margin-right:0}.ui-preview-img{background:#ebecf0;border-radius:5px}.pager-undercontent{margin-top:-20px}.pager-more{text-align:center}@media screen and (min-width:992px){.pager-more .btn{padding-left:20px;padding-right:20px}}.misago-pagination{display:flex}.misago-pagination .btn{display:block;width:100%}.misago-pagination .btn+.btn{margin-left:30px}@media screen and (max-width:767px){.toolbar-item .misago-pagination{flex:1}}.panel-poll h2{margin-top:0}.poll-select-choice .btn,.poll-select-choice .btn:active,.poll-select-choice .btn:focus,.poll-select-choice .btn:hover{background:transparent;border:transparent;-webkit-box-shadow:none;box-shadow:none;margin:6px 0;outline:none;padding:0 0 0 6px;text-align:left}.poll-select-choice .btn .material-icon{line-heigh:28px;color:#ced0da;font-size:28px;height:28px;margin-right:6px;width:28px}.poll-select-choice .btn.btn-selected .material-icon{color:#0052cc}.poll-help{font-size:12px}.poll-chart-selected .material-icon{line-heigh:14px;bottom:1px;color:#36b37e;font-size:14px;height:14px;margin-right:4px;position:relative;width:14px}.poll-options{margin-bottom:0}@media screen and (max-width:767px){.poll-options{margin-top:-6px}.poll-options .btn{margin:6px 0}}.user-status.user-banned .status-icon{color:#ff5630}.user-status.user-online .status-icon{color:#36b37e}.user-status.user-offline .status-icon{color:#7a869a}@media screen and (min-width:768px){.user-card{text-align:center}}.user-card-small-avatar img{height:auto;width:100%}@media screen and (min-width:768px){.user-card-small-avatar{display:none}}@media screen and (max-width:767px){.user-card-avatar{display:none}}.toolbar{display:block;margin:0 -15px}.toolbar-section{display:flex;flex:1;justify-items:center;margin-bottom:20px}.toolbar-item{flex:1;padding:0 15px}.toolbar-item h3,.toolbar-item p{margin:0}.toolbar-item-shrink{flex:0}.toolbar-spacer{display:none}@media screen and (min-width:768px){.toolbar{display:flex}.toolbar-item,.toolbar-section{align-items:center;flex:0}.toolbar-section.toolbar-section-auto,.toolbar-section.toolbar-section-auto .toolbar-item{flex:1}.toolbar-spacer{display:block;flex:1}.toolbar-item .form-search{width:250px}}@media screen and (max-width:767px){.toolbar-item p{text-align:center}}abbr{border:none!important}.item-title{text-decoration:none}.item-title,a.item-title:active,a.item-title:hover,a.item-title:link,a.item-title:visited{color:#172b4d;font-weight:700}a.item-title:hover{text-decoration:underline}.message-line{text-align:center}.message-line .material-icon{font-size:20px;height:20px;line-height:20px;margin-right:6.66666667px;width:20px}.text-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.misago-markup h1,.misago-markup h2,.misago-markup h3,.misago-markup h4,.misago-markup h5,.misago-markup h6,.misago-markup p{word-wrap:break-word}.misago-markup h1,.misago-markup h2,.misago-markup h3,.misago-markup h4,.misago-markup h5,.misago-markup h6{margin-top:40px}.misago-markup blockquote>*,.misago-markup>*{margin:20px 0}.misago-markup blockquote>:first-child,.misago-markup>:first-child{margin-top:0}.misago-markup blockquote>:last-child,.misago-markup>:last-child{margin-bottom:0}.misago-markup img{max-height:500px;max-width:100%}.misago-markup .quote-block,.misago-markup blockquote{background:#ebecf0;border:none;font-size:14px}.misago-markup .quote-block .quote-heading,.misago-markup blockquote .quote-heading{border-bottom:1px solid #d4d6df;font-size:12px;font-weight:700;padding:10px 20px}.misago-markup>.quote-block,.misago-markup>blockquote{border:1px solid #d4d6df}.misago-markup .quote-body{background:#fff;margin:0;padding:20px}.misago-markup .quote-body>.quote-block,.misago-markup .quote-body>blockquote{border:1px solid #d4d6df}.misago-markup .spoiler-block{background:#ebecf0;font-size:14px}.misago-markup>.spoiler-block{border:1px solid #d4d6df;position:relative}.misago-markup .spoiler-body{background:#fff;margin:0;padding:20px}.misago-markup .spoiler-overlay{background:#fff}.misago-markup .spoiler-block.revealed .spoiler-overlay{display:none}.misago-markup ul,.misago-markup ul li{list-style-type:square}.misago-markup ol,.misago-markup ol li{list-style-type:decimal}.misago-markup pre{background:#eee;border:none;color:#000;overflow:hidden;padding:10px}.misago-markup pre code.hljs{margin:-10px;padding:9.5px}.modal-change-avatar .modal-avatar-index .avatar-preview{border-radius:6px;height:200px;margin:0 auto;overflow:hidden;position:relative;width:200px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader{display:none;height:100px;position:absolute;top:50px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel{border-color:#fff transparent;border-width:10px;height:100px;width:100px}.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading img{filter:alpha(opacity=33);opacity:.33}.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading .loader{display:block}@media (max-width:699px){.modal-change-avatar .modal-avatar-index .avatar-preview{height:150px;margin-bottom:20px;width:150px}.modal-change-avatar .modal-avatar-index .avatar-preview img{height:150px;width:150px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader{height:100px;top:25px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel{height:100px;width:100px}}.modal-change-avatar .modal-avatar-index .btn{text-align:left}.modal-change-avatar .modal-avatar-upload{text-align:center}.modal-change-avatar .modal-avatar-upload .btn-pick-file{background:transparent;border:2px solid #ebecf0;border-radius:6px;-webkit-box-shadow:none;box-shadow:none;color:#7a869a;font-size:18px;padding:10px 24px;text-align:center}.modal-change-avatar .modal-avatar-upload .btn-pick-file>.material-icon{display:block;font-size:50px;height:50px;margin:0 auto 13.2px;width:50px}.modal-change-avatar .modal-avatar-upload .btn-pick-file:active,.modal-change-avatar .modal-avatar-upload .btn-pick-file:hover{border-color:#0052cc;color:#0052cc}.modal-change-avatar .modal-avatar-upload .text-muted{margin-top:13.2px}.modal-change-avatar .modal-avatar-upload .upload-progress img{border-radius:4px;margin-bottom:20px;max-height:80px;width:auto}.modal-change-avatar .modal-avatar-upload .upload-progress .progress{margin:0 auto;width:70%}.modal-avatar-crop .crop-form{margin:0 auto}.modal-avatar-crop .crop-form .cropit-image-zoom-input{-webkit-appearance:none;border:1px solid #fff;margin-top:10px;width:100%}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-runnable-track{background:#ebecf0;border:none;border-radius:3px;height:8px;width:100%}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-thumb{-webkit-appearance:none;background:#7a869a;border:none;border-radius:50%;height:20px;margin-top:-6px;width:20px}.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus{outline:none}.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-webkit-slider-runnable-track{background:#ebecf0}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-track{background:#ebecf0;border:none;border-radius:4px;height:8px;width:100%}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-thumb{background:#7a869a;border:none;border-radius:50%;height:20px;width:20px}.modal-avatar-crop .crop-form .cropit-image-zoom-input:-moz-focusring{outline:1px solid #fff;outline-offset:-1px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-track{background:transparent;border-color:transparent;border-width:8px 0;color:transparent;height:8px;width:100%}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-lower,.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-upper{background:#ebecf0;border-radius:16px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-thumb{background:#7a869a;border:none;border-radius:50%;height:20px;width:20px}.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-lower,.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-upper{background:#ebecf0}.modal-change-avatar .modal-avatar-gallery{padding-bottom:0}.modal-change-avatar .modal-avatar-gallery .avatars-gallery{margin-bottom:20px}.modal-change-avatar .modal-avatar-gallery .avatars-gallery h3{margin-top:0}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .row{margin-bottom:10px}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn{background:none;border:2px solid #ebecf0;border-radius:6px;padding:2px;position:relative}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:focus,.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:hover{border-color:#7a869a}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn.avatar-selected,.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:active{border-color:#0065ff}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn img{border-radius:4px;height:auto;width:100%}.category-main .read-status .material-icon{color:#ebecf0}.category-main .read-status.item-new .material-icon{color:#0052cc}.category-last-thread .media-heading a{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;width:290px}@media screen and (max-width:991px){.category-last-thread .media-heading a{width:275px}}@media screen and (max-width:767px){.category-last-thread .media-heading a{width:260px}}.category-thread-message .material-icon{font-size:28px;height:28px;line-height:28px;width:28px}.category-thread-message p{margin:0}.list-inline.subcategories-list{margin-top:-10px;overflow:auto}.list-inline.subcategories-list li{display:block;float:left}.list-inline.subcategories-list li a,.list-inline.subcategories-list li a:active,.list-inline.subcategories-list li a:focus,.list-inline.subcategories-list li a:hover,.list-inline.subcategories-list li a:link,.list-inline.subcategories-list li a:visited{background-color:#ebecf0;border:1px solid #dcdee5;border-radius:4px;color:#5e6c84;display:inline-block;margin-top:10px;padding:6px 12px}.list-inline.subcategories-list li a:active,.list-inline.subcategories-list li a:hover,.list-inline.subcategories-list li:focus{background-color:#dcdee5;color:#172b4d;text-decoration:none}.row.subcategories-list .btn{margin-top:20px;text-align:left}#posting-placeholder{background-color:#ebecf0;display:none;margin-bottom:-30px;margin-top:30px;padding:20px 0;transition:height .3s}#posting-placeholder.slide-in{display:block}#posting-placeholder .first-row{margin-bottom:20px}#posting-placeholder .first-row .form-control{border:1px solid #bfc2cf}#posting-placeholder .first-row .posting-options .btn{padding-bottom:4px;padding-top:4px}#posting-placeholder .first-row .posting-options .btn .btn-text{margin-left:5px;position:relative;top:1px}#posting-placeholder .first-row .posting-options .material-icon{font-size:14px;height:24px;line-height:14px;margin-right:0;position:relative;text-align:center;top:5px;width:14px}.posting-ui-preview{padding:20px 0;position:relative}.posting-ui-preview .form-control{box-shadow:none;resize:none}.posting-loader{text-align:center}.posting-loader .loader{height:100px}.posting-loader .loader .loader-spinning-wheel{height:100px;width:100px}.posting-message{text-align:center}.posting-message .material-icon{font-size:28px;height:28px;line-height:28px;margin-right:6.66666667px;position:relative;top:-1px;width:28px}.posting-message .message-body p{font-size:18px}.editor-border{background-color:#fff;border:1px solid #bfc2cf;border-radius:4px}.editor-border .form-control{border:none;resize:none}.editor-border .form-control,.editor-border .form-control:active,.editor-border .form-control:focus{-webkit-box-shadow:none;box-shadow:none}.editor-footer{border-top:1px solid #bfc2cf;overflow:auto;padding:6px 12px}.editor-footer .pull-left{margin-right:12px}.editor-footer .pull-right{margin-left:12px}.editor-footer .btn-icon .material-icon{margin-bottom:-2px}@media screen and (max-width:991px){.editor-footer .buttons-list{float:none!important;margin:0 0 10px}.editor-footer .buttons-list .btn{display:inline-block;float:none!important;margin:6.66666667px}.editor-footer .btn-protect .btn-text{margin-left:10px}.editor-footer .btn-protect .material-icon{bottom:2px;font-size:14px;height:14px;line-height:14px;position:relative;width:14px}}@media screen and (min-width:768px) and (max-width:991px){.buttons-list .btn:first-child{margin-left:0}}@media screen and (max-width:767px){.buttons-list{text-align:center}.buttons-list .btn-protect{display:block;float:none!important;margin:10px 0 0;width:100%}}.editor-attachments-list{margin:0;padding:0}.editor-attachments-list li{margin:0}.editor-attachment-complete{border-top:1px solid #bfc2cf;padding:6px 12px 6px 0}.editor-attachment-complete .editor-attachment-image{float:left;width:50px}.editor-attachment-complete .editor-attachment-image a{background-position:50%;background-size:cover;border-radius:3px;display:block;height:36px;margin:0 auto;width:36px}.editor-attachment-complete .editor-attachment-icon{float:left;text-align:center;width:50px}.editor-attachment-complete .editor-attachment-icon .material-icon{font-size:28px;height:28px;line-height:28px;position:relative;top:2px;width:28px}.editor-attachment-complete .editor-attachment-details{margin-left:50px}.editor-attachment-complete .editor-attachment-details h4,.editor-attachment-complete .editor-attachment-details p{font-size:14px;margin:0;padding:0}.editor-attachment-complete .editor-attachment-details p{color:#7a869a;font-size:12px;margin-top:3px}.editor-attachment-complete .editor-attachment-details abbr{white-space:nowrap}@media screen and (min-width:768px){.editor-attachment-actions{padding-top:3px}}@media screen and (max-width:767px){.editor-attachment-actions{padding-left:12px;padding-right:12px}}.editor-attachment-error{border-top:1px solid #bfc2cf;padding:6px 12px 6px 0}.editor-attachment-error-icon{float:left;text-align:center;width:50px}.editor-attachment-error-icon .material-icon{font-size:28px;height:28px;line-height:28px;position:relative;top:2px;width:28px}.editor-attachment-error-message{margin-left:50px;padding:6px 0;position:relative}.editor-attachment-error-message h4,.editor-attachment-error-message p{font-size:14px;margin:0;padding:0}.editor-attachment-error-message p{font-size:12px;margin-top:3px}.editor-attachment-error-message .btn{position:absolute;right:12px;top:9px}@media screen and (max-width:767px){.editor-attachment-error-message .btn{display:block;margin-top:10px;position:static}}.editor-attachment-progress-bar{background:#bfc2cf;overflow:auto}.editor-attachment-progress{background:#0052cc;float:left;height:1px}.editor-attachment-upload-message{margin:0;padding:6px 12px}#editor-upload-field{left:-1000px;position:absolute;top:-1000px}.atwho-view ul li img{border-radius:3px;height:20px;margin-right:4.66666667px;width:20px}.participant-card .btn-user,.participant-card .dropdown.open .btn-user{margin-bottom:20px}.participant-card .btn-user,.participant-card .btn-user:focus,.participant-card .btn-user:focus:active,.participant-card .btn-user:hover,.participant-card .dropdown.open .btn-user,.participant-card .dropdown.open .btn-user:focus,.participant-card .dropdown.open .btn-user:focus:active,.participant-card .dropdown.open .btn-user:hover{overflow:hidden;padding:0;text-align:left}.participant-card .btn-user img,.participant-card .dropdown.open .btn-user img{background-color:#fff;height:34px;margin-right:8px;width:34px}.panel-participants p{margin:7px 0 0}.poll-choices-control .list-group-item{padding:0}.poll-choices-control .list-group-item .btn{background:transparent;border:transparent;float:left;height:28px;margin:0 2px -29px;padding:0;position:relative;top:3px;width:28px}.poll-choices-control .list-group-item .btn .material-icon{font-size:28px;height:28px;line-height:28px;width:28px}.poll-choices-control input,.poll-choices-control input:active,.poll-choices-control input:focus{background:transparent;border:none;-webkit-box-shadow:none;box-shadow:none;margin-left:30px;outline:none;padding:6px 12px;width:100%}.posts-list{clear:both;margin:0;padding:0}.posts-list li{list-style:none;margin:0;padding:0}@media screen and (min-width:992px){.panel-post .panel-body{display:flex}.post-side{flex-shrink:0;padding-right:15px;width:260px}.panel-content{flex:1 0}}.post-side{font-size:12px}.post-side .media{margin:0}.post-side .poster-avatar{height:36px;width:36px}@media screen and (min-width:992px){.post-side .poster-avatar{height:82px;margin-top:4px;width:82px}}.post-side .user-status{margin-right:4px}.post-side .media-heading{display:block;font-size:14px;margin:-1px 0 0}.post-side .media-heading .user-status{margin-left:2px;margin-right:0}.post-side .pull-right{margin-left:16px}@media screen and (min-width:992px){.post-side .media-heading{font-size:18px;margin-top:3px}.post-side .media-heading .user-status{display:none}.post-side .user-title{margin-bottom:5px;margin-top:4px}.post-side .user-postcount,.post-side .user-status{display:block}}.post-heading{height:36px}@media screen and (max-width:991px){.post-heading{margin-top:10px}}.post-heading .pull-right{margin-left:16px}.post-heading .label{font-size:14px;font-weight:400;margin-top:6px}.post-heading .label-unread{background-color:#36b37e;color:#fff}@media screen and (min-width:992px){.post-side .pull-right{display:none}}@media screen and (max-width:991px){.post-heading .pull-right{display:none}}.post-body{padding-bottom:30px;padding-top:20px}.post-status-message{overflow:auto}.post-status-message .material-icon{float:left;font-size:28px;line-height:28px}.post-status-message p{margin:4px 0 0 36px}.post-status-best-answer{background-color:#36b37e;color:#fff}.post-status-hidden{background-color:#ff5630;color:#fff}.post-status-unapproved{background-color:#0052cc;color:#fff}.post-status-protected{background-color:#5e6c84;color:#fff}.post-footer .pull-left{margin-right:16px}.post-footer .pull-right{margin-left:16px}.post-footer p{margin-bottom:0;padding-bottom:6px;padding-top:7px}.post-attachments{border-top:1px solid #ebecf0;padding:6px 16px}.post-attachments abbr{white-space:nowrap}.post-attachments .attachment-name{word-wrap:break-word}.post-attachments .row>div{margin:10px 0}.post-attachments .post-attachment-preview{float:left;height:40px;text-align:center;width:40px}.post-attachments .post-attachment{margin-left:52px}.post-attachments .post-thumbnail{background-position:50%;background-size:cover;border-radius:3px;display:block;height:40px;width:40px}.post-attachments .material-icon{font-size:28px;height:28px;line-height:28px;position:relative;top:5px;width:28px}.post-attachments .material-icon:active,.post-attachments .material-icon:focus,.post-attachments .material-icon:hover,.post-attachments .material-icon:link,.post-attachments .material-icon:visited{color:#172b4d;text-decoration:none}.post-attachments .post-attachment-description{color:#7a869a;font-size:12px;margin:0;padding:0}.post-feed .post-side{padding-right:0;width:100%}.post-feed .post-side .media-heading{font-size:14px;margin:0}.post-feed .post-side .user-title{font-size:12px;margin:0}.post-feed .post-side .btn{display:inline-block}.post-feed .post-side img{height:36px;margin-top:0;width:36px}.post-feed .post-heading{height:auto;margin:10px 0}.post-feed .post-heading .btn{word-wrap:break-word;margin-right:16px;max-width:100%;text-align:left;white-space:normal}.posts-list .event{color:#7a869a;margin-bottom:20px}.posts-list .event .event-body{align-items:flex-start;display:flex}.posts-list .event-label{margin-left:51px}.posts-list .event-label .label-unread{background-color:#36b37e;color:#fff}.posts-list .event .event-icon{padding-right:15px}.posts-list .event .event-icon .event-icon-bg{align-items:center;background:#ebecf0;border-radius:4px;color:#5e6c84;display:flex;height:36px;justify-content:center;width:36px}.posts-list .event .event-icon .material-icon{align-items:center;display:flex;font-size:28px;justify-content:center}.posts-list .event .event-content{flex:1 0}.posts-list .event .event-message{font-size:18px;margin-bottom:5px}.posts-list .event .event-info{font-size:12px;margin:0}.posts-list .event .event-info li{margin-right:12px}.posts-list .event .event-info li:last-child{margin-right:0}.posts-list .event .event-controls .btn-link{border:0;font-size:12px;margin:0 12px 0 0;padding:0}.posts-list .event .event-controls .btn-link:last-child{margin-right:0}@media screen and (max-width:767px){.posts-list .event .event-info{margin-top:5px}.posts-list .event .event-controls{clear:both;margin-top:5px}.posts-list .event .event-controls .btn-link{font-size:14px;margin-right:20px}.posts-list .event .event-controls .btn-link:last-child{margin-right:0}}@media screen and (min-width:992px){.posts-list .event .event-icon{display:flex;flex-shrink:0;justify-content:flex-end;width:275px}.event-content{flex:1 0}.posts-list .event-label{margin-left:275px}}.post-changelog-diff{margin:0;padding:0}.post-changelog-diff .list-unstyled{margin:5px 0;padding:0}.post-changelog-diff .diff-item{padding:5px 10px}.post-changelog-diff .diff-item-sub{color:#ff5630}.post-changelog-diff .diff-item-add{color:#36b37e}.post-changelog-toolbar .row{margin-left:-12px;margin-right:-12px}@media screen and (max-width:767px){.page-error .message-panel,.page-message .message-panel,.post-changelog-toolbar .post-change-label{text-align:center}.page-error .message-icon,.page-message .message-icon{font-size:80px;margin:30px}}@media screen and (min-width:768px){.page-error .message-panel,.page-message .message-panel{margin:60px auto;max-width:779.35px;overflow:auto}.page-error .message-icon,.page-message .message-icon{float:left}.page-error .message-icon .material-icon,.page-message .message-icon .material-icon{font-size:80px}.page-error .message-body,.page-message .message-body{font-size:18px;margin-left:100px;margin-top:16px}.page-error .message-body p.lead,.page-message .message-body p.lead{font-size:36px}}.threads-list{margin-bottom:20px}.threads-list-item{align-items:center;display:flex}.threads-list-item img{height:32px;width:32px}.threads-list-item-top-row{flex:1}.threads-list-item-bottom-row,.threads-list-item-top-row{align-items:center;display:flex;justify-content:center}.threads-list-item-col-icon{padding-right:15px}.threads-list-icon{align-items:center;border-radius:3px;display:flex;font-size:16px;height:32px;justify-content:center;line-height:16px;width:32px}.threads-list-icon:active,.threads-list-icon:focus,.threads-list-icon:hover,.threads-list-icon:link,.threads-list-icon:visited{background-color:#ebecf0;color:#7a869a;text-decoration:none}.threads-list-icon-new:active,.threads-list-icon-new:focus,.threads-list-icon-new:hover,.threads-list-icon-new:link,.threads-list-icon-new:visited{background-color:#0052cc;color:#fff}.threads-list-item-col-title{flex:1}a.threads-list-item-title:active,a.threads-list-item-title:focus,a.threads-list-item-title:hover,a.threads-list-item-title:link,a.threads-list-item-title:visited{color:#172b4d;font-size:16px;overflow-wrap:break-word}a.threads-list-item-title-sm{font-size:18px}a.threads-list-item-title-sm:active,a.threads-list-item-title-sm:focus,a.threads-list-item-title-sm:hover,a.threads-list-item-title-sm:link,a.threads-list-item-title-sm:visited{color:#5e6c84;overflow-wrap:break-word}a.threads-list-item-title-new:active,a.threads-list-item-title-new:focus,a.threads-list-item-title-new:hover,a.threads-list-item-title-new:link,a.threads-list-item-title-new:visited{color:#172b4d}.threads-list-item-col-flags{padding-left:15px}.threads-list-item .thread-flags{opacity:.8}.threads-list-item:focus .thread-flags,.threads-list-item:hover .thread-flags{opacity:1}.threads-list-item-col-category{padding-left:15px;white-space:nowrap}.threads-list-category-label{border-radius:3px;font-size:12px;font-weight:700;padding:3px 6px}.threads-list-category-label,.threads-list-category-label:active,.threads-list-category-label:focus,.threads-list-category-label:hover,.threads-list-category-label:link,.threads-list-category-label:visited{background:#ebecf0;color:#344563;text-decoration:none}.threads-list-category-label.threads-list-category-label-color,.threads-list-category-label.threads-list-category-label-color:active,.threads-list-category-label.threads-list-category-label-color:focus,.threads-list-category-label.threads-list-category-label-color:hover,.threads-list-category-label.threads-list-category-label-color:link,.threads-list-category-label.threads-list-category-label-color:visited{background:var(--label-color);color:#fff}.threads-list-item-parent-category{border-radius:3px 0 0 3px;margin-right:2px}.threads-list-item-parent-category+.threads-list-category-label{border-radius:0 3px 3px 0}.threads-list-item-col-replies{padding-left:15px;width:80px}.threads-list-item-col-last-poster{padding-left:15px}.threads-list-item-col-last-poster img{border-radius:3px}.threads-list-item-col-last-activity{overflow:hidden;padding-left:15px;text-overflow:ellipsis;white-space:nowrap;width:120px}.threads-list-item-col-last-activity a:active,.threads-list-item-col-last-activity a:focus,.threads-list-item-col-last-activity a:hover,.threads-list-item-col-last-activity a:link,.threads-list-item-col-last-activity a:visited{color:#344563;font-size:16px}.threads-list-item-col-checkbox,.threads-list-item-col-subscription{padding-left:15px}.threads-list-item-col-checkbox-sm,.threads-list-item-title-sm{display:none}@media screen and (max-width:767px){.threads-list{margin-left:-15px;margin-right:-15px}.threads-list .list-group,.threads-list .list-group-item{border-left:0;border-radius:0;border-right:0}.threads-list-item-title{display:none}.threads-list-item-title-sm{display:inline-block}.threads-list-item-col-icon{display:none}}@media screen and (max-width:991px){.threads-list-item{display:block}.threads-list-item img{height:20px;width:20px}.threads-list-item-top-row{align-items:start;margin-bottom:7.5px}.threads-list-item-bottom-row{flex:0;justify-content:end}.threads-list-item-bottom-row>div{padding:0 0 0 15px;width:auto}.threads-list-item-col-checkbox,.threads-list-item-col-subscription{display:none}.threads-list-item-col-checkbox-sm{display:block;padding-left:15px}.threads-list-item-col-checkbox-sm .btn-icon{padding:4px}.threads-list-item-col-checkbox-sm .btn-icon .material-icon{font-size:16px}}.threads-list-item-is-busy .btn-icon{animation:busy .75s linear infinite;opacity:.8}@keyframes busy{50%{opacity:.5}}.threads-list-update-prompt{padding:0}.threads-list-update-prompt-btn{background:#d6e7ff;border:none;border-radius:3px 3px 0 0;color:#003d99;padding:10px 16px}.threads-list-update-prompt-btn:focus,.threads-list-update-prompt-btn:hover{background:#e6f0ff;color:#0052cc}.threads-list-update-prompt-btn:active{background:#b3d1ff;color:#06f}.active-posters li{display:block;overflow:auto}.active-posters .rank-user-avatar{float:left}@media screen and (max-width:991px){.active-posters .rank-user-avatar{height:42px}.active-posters .rank-user-avatar img{height:36px;position:relative;top:3px;width:36px}}.active-posters .rank-user{float:left;margin-top:3px}@media screen and (max-width:991px){.active-posters .rank-user{margin-left:13.2px;width:40%}}@media screen and (max-width:767px){.active-posters .rank-user{float:none;margin-left:50px;width:auto}}@media screen and (min-width:992px){.active-posters .rank-user{margin-left:16px;width:25%}.active-posters .rank-user .user-name{font-size:18px}}.active-posters .user-details{font-family:Sans-Serif;overflow:auto}.active-posters .user-details .rank-name,.active-posters .user-details .user-status,.active-posters .user-details .user-title{display:block;float:left;font-size:12px;margin-right:3px}@media screen and (min-width:992px){.active-posters .user-details .rank-name,.active-posters .user-details .user-status,.active-posters .user-details .user-title{margin-right:8px}}.active-posters .user-details .user-title{margin-right:0}@media screen and (min-width:992px){.active-posters .user-details{overflow:visible}.active-posters .user-details .rank-name,.active-posters .user-details .user-title{height:14px;overflow:hidden;position:relative;top:1px;vertical-align:baseline}}@media screen and (max-width:767px){.active-posters .user-details{margin-top:3px}.active-posters .user-details .rank-name,.active-posters .user-details .user-title{font-weight:400}}.active-posters .user-status{overflow:auto;position:relative;top:1px}.active-posters .user-status span{display:block;float:left}@media screen and (min-width:992px){.active-posters .user-status{height:14px;overflow:hidden}}.active-posters .user-status .status-icon{position:relative}@media screen and (max-width:991px){.active-posters .user-status .status-icon{font-size:12px;height:12px;line-height:12px;top:0;width:12px}}@media screen and (min-width:992px){.active-posters .user-status .status-icon{font-size:13px;height:13px;line-height:13px;margin-right:3px;top:1px;width:13px}}.active-posters .rank-name .ui-preview-text,.active-posters .status-label.ui-preview-text,.active-posters .user-title .ui-preview-text{font-size:11px;height:11px;line-height:11px;position:relative;top:2px}.active-posters .rank-name .ui-preview-text,.active-posters .user-title .ui-preview-text{position:static}.active-posters .rank-position small,.active-posters .rank-position strong,.active-posters .rank-posts-counted small,.active-posters .rank-posts-counted strong,.active-posters .rank-posts-total small,.active-posters .rank-posts-total strong{display:block}@media screen and (max-width:991px){.active-posters .rank-position,.active-posters .rank-posts-counted,.active-posters .rank-posts-total{overflow:auto}.active-posters .rank-position small,.active-posters .rank-position strong,.active-posters .rank-posts-counted small,.active-posters .rank-posts-counted strong,.active-posters .rank-posts-total small,.active-posters .rank-posts-total strong{float:left;font-size:10.5px}.active-posters .rank-position strong,.active-posters .rank-posts-counted strong,.active-posters .rank-posts-total strong{margin-right:3px;min-width:30px;text-align:right}.active-posters .rank-position .ui-preview-text,.active-posters .rank-posts-counted .ui-preview-text,.active-posters .rank-posts-total .ui-preview-text{font-size:8px;height:8px;line-height:8px;position:relative;top:-1px}}@media screen and (min-width:992px){.active-posters .rank-position,.active-posters .rank-posts-counted,.active-posters .rank-posts-total{float:left;font-size:18px;margin-top:3px;text-align:center;width:23%}.active-posters .rank-position small,.active-posters .rank-posts-counted small,.active-posters .rank-posts-total small{font-size:12px;font-weight:400}}.user-compact-stats .rank-position small,.user-compact-stats .rank-position strong,.user-compact-stats .rank-posts-counted small,.user-compact-stats .rank-posts-counted strong{display:inline-block;float:none}.user-compact-stats .rank-position strong,.user-compact-stats .rank-posts-counted strong{min-width:auto}.user-compact-stats .rank-position small,.user-compact-stats .rank-posts-counted small{margin-right:20px}@media screen and (min-width:768px) and (max-width:991px){.active-posters .rank-position{margin-top:6px}.active-posters .rank-posts-total{display:none}}.profile-page-header-avatar{margin:20px 0;text-align:center}.profile-page-header-avatar .user-avatar{border-radius:4px}.profile-data-list{display:block;font-size:12px;margin:0 -12px;padding:0}.profile-data-list li{display:inline-block;list-style:none;padding:5px 12px}.profile-data-list .status-icon{bottom:1px;margin-right:3px;position:relative}.profile-data-list .user-account-disabled{color:#ff5630;font-weight:700}@media screen and (min-width:768px){.profile-page-header{align-items:flex-end;display:flex}.profile-page-header-avatar{margin:0 30px 0 0}}@media screen and (min-width:992px){.profile-page-header-avatar{margin-top:-54px;position:relative;top:54px}.profile-page-header-details{padding-left:158px}.profile-data-list{font-size:14px}.username-history li{display:block;overflow:auto}}.username-history .change-avatar{float:left}.username-history .change-avatar a,.username-history .change-avatar span{margin-right:10px}.username-history .change-avatar a img,.username-history .change-avatar span img{height:42px;width:42px}@media screen and (min-width:992px){.username-history .change-avatar a img,.username-history .change-avatar span img{bottom:1px;height:18px;position:relative;width:18px}.username-history .change-author{float:left;width:30%}}.username-history .change{min-height:20px;overflow:auto}.username-history .change span{display:block;float:left}.username-history .change .material-icon{margin:0 7px;position:relative;top:4px}@media screen and (min-width:992px){.username-history .change{float:left;width:40%}.username-history .change-date{float:left;width:20%}}.search-footer p{color:#5e6c84;font-size:12px;margin-top:20px;text-align:center}@media screen and (min-width:768px){.page-search-form{padding-top:40px}}@media screen and (min-width:992px){.page-search-form{padding-bottom:40px}.page-search-form h1{position:relative;top:5px}.page-search-form .form-group{margin-bottom:0}}.hljs{background:#eee;color:#000;display:block;overflow-x:auto;padding:.5em}.hljs-addition,.hljs-attribute,.hljs-emphasis,.hljs-link{color:#070}.hljs-emphasis{font-style:italic}.hljs-deletion,.hljs-string,.hljs-strong{color:#d14}.hljs-strong{font-weight:700}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-section,.hljs-title{color:#900}.hljs-class .hljs-title,.hljs-type{color:#458}.hljs-template-variable,.hljs-variable{color:#369}.hljs-bullet{color:#970}.hljs-meta{color:#34b}.hljs-code,.hljs-keyword,.hljs-literal,.hljs-number,.hljs-selector-tag{color:#099}.hljs-regexp{background-color:#fff0ff;color:#808}.hljs-symbol{color:#990073}.hljs-name,.hljs-selector-class,.hljs-selector-id,.hljs-tag{color:#070}.atwho-view{background:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:0 0 5px rgba(0,0,0,.1);color:#000;display:none;left:0;margin-top:18px;min-width:120px;position:absolute;top:0;z-index:11110!important}.atwho-view .atwho-header{border-bottom:1px solid #eaeff1;color:#6f8092;cursor:pointer;font-size:11px;font-weight:700;margin:5px;padding:5px}.atwho-view .atwho-header .small{color:#6f8092;float:right;font-size:12px;font-weight:400;margin-right:-5px;padding-top:2px}.atwho-view .atwho-header:hover{cursor:default}.atwho-view .cur{background:#36f;color:#fff}.atwho-view .cur small{color:#fff}.atwho-view strong{color:#36f}.atwho-view .cur strong{color:#fff;font:700}.atwho-view ul{list-style:none;margin:auto;max-height:200px;overflow-y:auto;padding:0}.atwho-view ul li{border-bottom:1px solid #ddd;cursor:pointer;display:block;padding:5px 10px}.atwho-view small{color:#777;font-size:smaller;font-weight:400}abbr{outline:none;text-decoration:none}.shadow-2dp{box-shadow:0 2px 2px 0 rgba(0,0,0,.04),0 3px 1px -2px rgba(0,0,0,.06),0 1px 5px 0 rgba(0,0,0,.12)}.shadow-3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.04),0 3px 3px -2px rgba(0,0,0,.06),0 1px 8px 0 rgba(0,0,0,.12)}.shadow-4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.04),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.06)}.shadow-6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.04),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.06)}.shadow-8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.04),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.06)}.shadow-16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.04),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.06)}.shadow-24dp{box-shadow:0 9px 46px 8px rgba(0,0,0,.04),0 11px 15px -7px rgba(0,0,0,.12),0 24px 38px 3px rgba(0,0,0,.06)}.btn-default,.btn-default.disabled,.btn-default.disabled:active,.btn-default.disabled:hover,.btn-default:disabled,.btn-default:disabled:hover{background:#ebecf0;border:1px solid #ebecf0;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.btn-default.disabled,.btn-default.disabled:active,.btn-default.disabled:hover,.btn-default:disabled,.btn-default:disabled:hover{filter:alpha(opacity=25);opacity:.25}.btn-default:focus,.btn-default:hover{background:#dfe1e6;border:1px solid #dfe1e6;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.btn-default:active,.btn-default:active:focus,.dropdown.open .dropdown-toggle .btn-default,.dropdown.open .dropdown-toggle .btn-default:active:focus,.dropdown.open .dropdown-toggle .btn-default:focus,.dropdown.open .dropdown-toggle .btn-default:hover{background:#c1c7d0;border:1px solid #c1c7d0;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.btn-default.btn-loading,.btn-default.btn-loading:active,.btn-default.btn-loading:active:focus,.btn-default.btn-loading:disabled,.btn-default.btn-loading:disabled:hover,.btn-default.btn-loading:focus,.btn-default.btn-loading:hover{color:transparent}.btn-primary,.btn-primary.disabled,.btn-primary.disabled:active,.btn-primary.disabled:hover,.btn-primary:disabled,.btn-primary:disabled:hover{background:#6554c0;border:1px solid #6554c0;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-primary.disabled,.btn-primary.disabled:active,.btn-primary.disabled:hover,.btn-primary:disabled,.btn-primary:disabled:hover{filter:alpha(opacity=25);opacity:.25}.btn-primary:focus,.btn-primary:hover{background:#5243aa;border:1px solid #5243aa;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-primary:active,.btn-primary:active:focus,.dropdown.open .dropdown-toggle .btn-primary,.dropdown.open .dropdown-toggle .btn-primary:active:focus,.dropdown.open .dropdown-toggle .btn-primary:focus,.dropdown.open .dropdown-toggle .btn-primary:hover{background:#403294;border:1px solid #403294;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-primary.btn-loading,.btn-primary.btn-loading:active,.btn-primary.btn-loading:active:focus,.btn-primary.btn-loading:disabled,.btn-primary.btn-loading:disabled:hover,.btn-primary.btn-loading:focus,.btn-primary.btn-loading:hover{color:transparent}.btn-success,.btn-success.disabled,.btn-success.disabled:active,.btn-success.disabled:hover,.btn-success:disabled,.btn-success:disabled:hover{background:#00c853;border:1px solid #00c853;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-success.disabled,.btn-success.disabled:active,.btn-success.disabled:hover,.btn-success:disabled,.btn-success:disabled:hover{filter:alpha(opacity=25);opacity:.25}.btn-success:focus,.btn-success:hover{background:#00af48;border:1px solid #00af48;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-success:active,.btn-success:active:focus,.dropdown.open .dropdown-toggle .btn-success,.dropdown.open .dropdown-toggle .btn-success:active:focus,.dropdown.open .dropdown-toggle .btn-success:focus,.dropdown.open .dropdown-toggle .btn-success:hover{background:#007c33;border:1px solid #007c33;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-success.btn-loading,.btn-success.btn-loading:active,.btn-success.btn-loading:active:focus,.btn-success.btn-loading:disabled,.btn-success.btn-loading:disabled:hover,.btn-success.btn-loading:focus,.btn-success.btn-loading:hover{color:transparent}.btn-danger,.btn-danger.disabled,.btn-danger.disabled:active,.btn-danger.disabled:hover,.btn-danger:disabled,.btn-danger:disabled:hover{background:#ef5350;border:1px solid #ef5350;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-danger.disabled,.btn-danger.disabled:active,.btn-danger.disabled:hover,.btn-danger:disabled,.btn-danger:disabled:hover{filter:alpha(opacity=25);opacity:.25}.btn-danger:focus,.btn-danger:hover{background:#ff8a80;border:1px solid #ff8a80;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-danger:active,.btn-danger:active:focus,.dropdown.open .dropdown-toggle .btn-danger,.dropdown.open .dropdown-toggle .btn-danger:active:focus,.dropdown.open .dropdown-toggle .btn-danger:focus,.dropdown.open .dropdown-toggle .btn-danger:hover{background:#d32f2f;border:1px solid #d32f2f;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-danger.btn-loading,.btn-danger.btn-loading:active,.btn-danger.btn-loading:active:focus,.btn-danger.btn-loading:disabled,.btn-danger.btn-loading:disabled:hover,.btn-danger.btn-loading:focus,.btn-danger.btn-loading:hover{color:transparent}.btn-default.btn-outline,.btn-default.btn-outline.disabled,.btn-default.btn-outline.disabled:active,.btn-default.btn-outline.disabled:hover,.btn-default.btn-outline:disabled,.btn-default.btn-outline:disabled:hover{background:#ebecf0;border:1px solid #ebecf0;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.btn-default.btn-outline.disabled,.btn-default.btn-outline.disabled:active,.btn-default.btn-outline.disabled:hover,.btn-default.btn-outline:disabled,.btn-default.btn-outline:disabled:hover{filter:alpha(opacity=25);opacity:.25}.btn-default.btn-outline:focus,.btn-default.btn-outline:hover{background:#dfe1e6;border:1px solid #dfe1e6;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.btn-default.btn-outline:active,.btn-default.btn-outline:active:focus,.dropdown.open .btn-default.btn-outline,.dropdown.open .btn-default.btn-outline:active:focus,.dropdown.open .btn-default.btn-outline:focus,.dropdown.open .btn-default.btn-outline:hover{background:#c1c7d0;border:1px solid #c1c7d0;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.btn-default.btn-outline.btn-loading,.btn-default.btn-outline.btn-loading:active,.btn-default.btn-outline.btn-loading:active:focus,.btn-default.btn-outline.btn-loading:disabled,.btn-default.btn-outline.btn-loading:disabled:hover,.btn-default.btn-outline.btn-loading:focus,.btn-default.btn-outline.btn-loading:hover{background:#ebecf0;border:1px solid #ebecf0;-webkit-box-shadow:none;box-shadow:none;color:transparent}.btn-primary.btn-outline,.btn-primary.btn-outline.disabled,.btn-primary.btn-outline.disabled:active,.btn-primary.btn-outline.disabled:hover,.btn-primary.btn-outline:disabled,.btn-primary.btn-outline:disabled:hover{background:#6554c0;border:1px solid #6554c0;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-primary.btn-outline.disabled,.btn-primary.btn-outline.disabled:active,.btn-primary.btn-outline.disabled:hover,.btn-primary.btn-outline:disabled,.btn-primary.btn-outline:disabled:hover{filter:alpha(opacity=25);opacity:.25}.btn-primary.btn-outline:focus,.btn-primary.btn-outline:hover{background:#5243aa;border:1px solid #5243aa;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-primary.btn-outline:active,.btn-primary.btn-outline:active:focus,.dropdown.open .btn-primary.btn-outline,.dropdown.open .btn-primary.btn-outline:active:focus,.dropdown.open .btn-primary.btn-outline:focus,.dropdown.open .btn-primary.btn-outline:hover{background:#403294;border:1px solid #403294;-webkit-box-shadow:none;box-shadow:none;color:#fff}.btn-primary.btn-outline.btn-loading,.btn-primary.btn-outline.btn-loading:active,.btn-primary.btn-outline.btn-loading:active:focus,.btn-primary.btn-outline.btn-loading:disabled,.btn-primary.btn-outline.btn-loading:disabled:hover,.btn-primary.btn-outline.btn-loading:focus,.btn-primary.btn-outline.btn-loading:hover{background:#6554c0;border:1px solid #6554c0;-webkit-box-shadow:none;box-shadow:none;color:transparent}.navbar-misago .btn-sign-in{border-radius:4px}.navbar-misago .btn-sign-in,.navbar-misago .btn-sign-in.disabled,.navbar-misago .btn-sign-in.disabled:active,.navbar-misago .btn-sign-in.disabled:hover,.navbar-misago .btn-sign-in:disabled,.navbar-misago .btn-sign-in:disabled:hover{background:transparent;border:1px solid #c1c7d0;-webkit-box-shadow:none;box-shadow:none;color:#8993a4}.navbar-misago .btn-sign-in.disabled,.navbar-misago .btn-sign-in.disabled:active,.navbar-misago .btn-sign-in.disabled:hover,.navbar-misago .btn-sign-in:disabled,.navbar-misago .btn-sign-in:disabled:hover{filter:alpha(opacity=25);opacity:.25}.navbar-misago .btn-sign-in:focus,.navbar-misago .btn-sign-in:hover{background:#ebecf0;border:1px solid #ebecf0;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.dropdown.open .navbar-misago .btn-sign-in,.dropdown.open .navbar-misago .btn-sign-in:active:focus,.dropdown.open .navbar-misago .btn-sign-in:focus,.dropdown.open .navbar-misago .btn-sign-in:hover,.navbar-misago .btn-sign-in:active,.navbar-misago .btn-sign-in:active:focus{background:#dfe1e6;border:1px solid #dfe1e6;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.navbar-misago .btn-sign-in.btn-loading,.navbar-misago .btn-sign-in.btn-loading:active,.navbar-misago .btn-sign-in.btn-loading:active:focus,.navbar-misago .btn-sign-in.btn-loading:disabled,.navbar-misago .btn-sign-in.btn-loading:disabled:hover,.navbar-misago .btn-sign-in.btn-loading:focus,.navbar-misago .btn-sign-in.btn-loading:hover{background:transparent;border:1px solid #c1c7d0;-webkit-box-shadow:none;box-shadow:none;color:transparent}.navbar-misago .btn-register{border-radius:4px}.navbar-misago .btn-register,.navbar-misago .btn-register.disabled,.navbar-misago .btn-register.disabled:active,.navbar-misago .btn-register.disabled:hover,.navbar-misago .btn-register:disabled,.navbar-misago .btn-register:disabled:hover{background:#6554c0;border:1px solid #6554c0;-webkit-box-shadow:none;box-shadow:none;color:#fff}.navbar-misago .btn-register.disabled,.navbar-misago .btn-register.disabled:active,.navbar-misago .btn-register.disabled:hover,.navbar-misago .btn-register:disabled,.navbar-misago .btn-register:disabled:hover{filter:alpha(opacity=25);opacity:.25}.navbar-misago .btn-register:focus,.navbar-misago .btn-register:hover{background:#5243aa;border:1px solid #5243aa;-webkit-box-shadow:none;box-shadow:none;color:#fff}.dropdown.open .navbar-misago .btn-register,.dropdown.open .navbar-misago .btn-register:active:focus,.dropdown.open .navbar-misago .btn-register:focus,.dropdown.open .navbar-misago .btn-register:hover,.navbar-misago .btn-register:active,.navbar-misago .btn-register:active:focus{background:#403294;border:1px solid #403294;-webkit-box-shadow:none;box-shadow:none;color:#fff}.navbar-misago .btn-register.btn-loading,.navbar-misago .btn-register.btn-loading:active,.navbar-misago .btn-register.btn-loading:active:focus,.navbar-misago .btn-register.btn-loading:disabled,.navbar-misago .btn-register.btn-loading:disabled:hover,.navbar-misago .btn-register.btn-loading:focus,.navbar-misago .btn-register.btn-loading:hover{background:#6554c0;border:1px solid #6554c0;-webkit-box-shadow:none;box-shadow:none;color:transparent}.btn-social-battlenet,.btn-social-battlenet-oauth2,.btn-social-battlenet-oauth2:disabled,.btn-social-battlenet-oauth2:disabled:hover,.btn-social-battlenet:disabled,.btn-social-battlenet:disabled:hover{color:#0e86ca;font-weight:700}.btn-social-bungie,.btn-social-bungie:disabled,.btn-social-bungie:disabled:hover{color:#0096db;font-weight:700}.btn-social-facebook,.btn-social-facebook-app,.btn-social-facebook-app:disabled,.btn-social-facebook-app:disabled:hover,.btn-social-facebook:disabled,.btn-social-facebook:disabled:hover{color:#3b5998;font-weight:700}.btn-social-github,.btn-social-github-enterprise,.btn-social-github-enterprise-org,.btn-social-github-enterprise-org:disabled,.btn-social-github-enterprise-org:disabled:hover,.btn-social-github-enterprise-team,.btn-social-github-enterprise-team:disabled,.btn-social-github-enterprise-team:disabled:hover,.btn-social-github-enterprise:disabled,.btn-social-github-enterprise:disabled:hover,.btn-social-github-team,.btn-social-github-team:disabled,.btn-social-github-team:disabled:hover,.btn-social-github:disabled,.btn-social-github:disabled:hover{color:#000;font-weight:700}.btn-social-gitlab,.btn-social-gitlab:disabled,.btn-social-gitlab:disabled:hover{color:#fc6d26;font-weight:700}.btn-social-google,.btn-social-google-oauth,.btn-social-google-oauth2,.btn-social-google-oauth2:disabled,.btn-social-google-oauth2:disabled:hover,.btn-social-google-oauth:disabled,.btn-social-google-oauth:disabled:hover,.btn-social-google-openidconnect,.btn-social-google-openidconnect:disabled,.btn-social-google-openidconnect:disabled:hover,.btn-social-google-plus,.btn-social-google-plus:disabled,.btn-social-google-plus:disabled:hover,.btn-social-google:disabled,.btn-social-google:disabled:hover{color:#dd4b39;font-weight:700}.btn-social-linkedin,.btn-social-linkedin:disabled,.btn-social-linkedin:disabled:hover{color:#0077b5;font-weight:700}.btn-social-steam,.btn-social-steam:disabled,.btn-social-steam:disabled:hover{color:#5c7e10;font-weight:700}.btn-social-twitter,.btn-social-twitter:disabled,.btn-social-twitter:disabled:hover{color:#1da1f2;font-weight:700}.form-social-auth .row{margin-bottom:-6px;margin-top:-6px}.form-social-auth .btn{margin:6px 0}input.form-control,textarea.form-control{border-color:#ced0da;box-shadow:inset 0 0 0 1px #ced0da}input.form-control:focus,textarea.form-control:focus{border-color:#66afe9;box-shadow:inset 0 0 0 1px #66afe9}.has-error input.form-control{border-color:#ff5630;box-shadow:inset 0 0 0 1px #ff5630}.has-error input.form-control:focus{border-color:#ffa996;box-shadow:inset 0 0 0 1px #ffa996}.has-success input.form-control{border-color:#36b37e;box-shadow:inset 0 0 0 1px #36b37e}.has-success input.form-control:focus{border-color:#79d6af;box-shadow:inset 0 0 0 1px #79d6af}.password-strength{margin-top:10px}.password-strength .text-small{color:#3462af;font-size:12px;margin-top:4px}.password-strength .progress{margin:0}.auth-message{background:#091e42;box-shadow:0 8px 10px 1px rgba(0,0,0,.04),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.06);padding:80px 0}.auth-message p{color:#fff}.auth-message .btn{background:#f4f5f7;border-color:#f4f5f7;color:#172b4d}.auth-message .btn:focus,.auth-message .btn:hover{background:#dfe1e6;border-color:#dfe1e6;color:#172b4d}.auth-message .btn:active{background:#b3bac5;border-color:#b3bac5;color:#172b4d}.dropdown-menu{border:none;box-shadow:0 4px 5px 0 rgba(0,0,0,.04),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.06)}.user-dropdown .dropdown-header strong{color:#172b4d;display:block;font-weight:700}.user-dropdown .dropdown-header .user-stats{font-size:12px;margin-top:10px}.user-dropdown .dropdown-header .user-stats .material-icon{bottom:1px;font-size:14px;height:14px;margin-right:3px;position:relative;width:14px}.user-dropdown .guest-preview{padding-bottom:10px}.user-dropdown .badge{background-color:#ff5630}.user-dropdown .btn-link:active .badge,.user-dropdown .btn-link:focus .badge,.user-dropdown .btn-link:hover .badge,.user-dropdown a:active .badge,.user-dropdown a:focus .badge,.user-dropdown a:hover .badge{background-color:#fff;color:#ff5630}.mobile-dropdown.open{margin:0}.navbar-misago{border-bottom:none;box-shadow:0 0 3px #c1c7d0}.navbar-misago .user-avatar{background:#fff;border-radius:3px}.navbar-misago .brand-link img{border-radius:3px}.dropdown-search-results{border-radius:0 0 4px 4px}.dropdown-search-message{color:#7a869a}.dropdown-search-loader,.dropdown-search-message{border-top:1px solid #ebecf0;padding:10px 16px}.dropdown-search-header{border-top:1px solid #ebecf0;color:#7a869a;font-weight:700;padding:8px 20px}.dropdown-search-thread small,.dropdown-search-user small{color:#7a869a}.dropdown-search-thread .dropdown-search-post-content{max-height:47px;overflow:hidden;white-space:normal}.dropdown-search-thread .dropdown-search-post-footer{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dropdown-search-footer{padding-bottom:5px}.dropdown-search-footer:last-child{padding-bottom:0}.dropdown-menu>li.dropdown-search-footer>a{font-size:small}.misago-footer{margin-top:40px}.misago-footer .footer-content{border-top:1px solid #ebecf0;color:#a5adba;padding-top:20px}@media screen and (max-width:767px){.misago-footer .footer-content{text-align:center}.misago-footer .footer-content .site-footnote{clear:both;margin-bottom:15px}}.misago-footer .footer-content a,.misago-footer .footer-content a:link,.misago-footer .footer-content a:visited{color:#a5adba}.misago-footer .footer-content a:focus,.misago-footer .footer-content a:hover{color:#7a8699}.misago-footer .footer-content .misago-branding,.misago-footer .footer-content .misago-branding:link,.misago-footer .footer-content .misago-branding:visited{color:#a5adba}.misago-footer .footer-content .misago-branding:focus,.misago-footer .footer-content .misago-branding:hover{color:#7a8699}.list-group{border-radius:3px}.list-group .list-group-item{border-left-color:#ebecf0;border-right-color:#ebecf0}.list-group .list-group-item:first-child{border-top-color:#ebecf0}.list-group .list-group-item:last-child{border-bottom-color:#ebecf0}.list-group-item.empty-message{padding-bottom:20px;padding-top:20px;text-align:center}.list-group-item.empty-message p{margin:10px 0}.nav-side{-webkit-box-shadow:none;box-shadow:none}.nav-side>.list-group-item{border-left:none;border-right:none;margin-bottom:1px}.nav-side>.list-group-item:first-child{border-top:none}.nav-side>.list-group-item:last-child{border-bottom:none}.nav-side>.list-group-item,.nav-side>.list-group-item:link,.nav-side>.list-group-item:visited{background:#f4f5f7;border:none;color:#172b4d}.nav-side>.list-group-item:active,.nav-side>.list-group-item:focus,.nav-side>.list-group-item:hover{background:#ebecf0;color:#172b4d}.nav-side>.list-group-item.active,.nav-side>.list-group-item.active:active,.nav-side>.list-group-item.active:focus,.nav-side>.list-group-item.active:hover,.nav-side>.list-group-item.active:link,.nav-side>.list-group-item.active:visited{background:#091e42;color:#fff;font-weight:700}.nav-side>.list-group-item.active .badge,.nav-side>.list-group-item.active:active .badge,.nav-side>.list-group-item.active:focus .badge,.nav-side>.list-group-item.active:hover .badge,.nav-side>.list-group-item.active:link .badge,.nav-side>.list-group-item.active:visited .badge{background:#f4f5f7;color:#172b4d}.username-history .user-avatar{border-radius:4px}.panel{border:none;border-radius:4px}.panel .panel-footer,.panel .panel-heading{background:#fff}.panel .panel-title{color:#5e6c84}.panel .form-group+.form-group{margin-top:20px}.panel .panel-body>.form-group:first-child{margin-top:10px}.panel fieldset{margin-top:20px}.panel fieldset:first-child{margin-top:0}.panel fieldset legend{border:none;color:#5e6c84;font-weight:300}.panel-message-body .message-icon{color:#9575cd}.panel-form{border:1px solid #ebecf0;box-shadow:none}.panel-form .panel-footer,.panel-form .panel-heading{border-color:#ebecf0}.poll-form .panel{margin:0}.help-block,.help-block .text-small{color:#7a869a}.category-main .media-left .read-status{background:#ebecf0;border-radius:4px;padding:5px 8px}.category-main .media-left .material-icon{color:#5e6c84;font-size:14px;height:14px;line-height:14px;width:14px}.category-main .media-left .read-status.item-new{background-color:#0052cc}.category-main .media-left .read-status.item-new .material-icon{color:#fff}@media screen and (min-width:768px){.category-main .media-left{padding:5px 0}}.category-main .media-body{padding-left:12px}@media screen and (max-width:767px){.category-main .media-body{padding-left:3.33333333px}}.list-group-category-no-description .category-main .media-heading{margin-top:10px}@media screen and (max-width:767px){.list-group-category-no-description .category-main .media-heading{margin-top:5px}}.category-main .media-heading a,.category-main .media-heading a:link,.category-main .media-heading a:visited{color:#344563}.category-main .media-heading a:active,.category-main .media-heading a:focus,.category-main .media-heading a:hover{color:#172b4d}.category-stats{color:#5e6c84}.category-main .category-description p{font-size:12px}.category-main .category-description p:last-child{margin-bottom:0}.category-last-thread img{background-color:#fff;border-radius:4px}.category-last-thread .media-heading{margin-bottom:2px}@media screen and (max-width:767px){.category-last-thread .media-heading{margin-top:10px}}.category-last-thread .list-inline{color:#7a869a;font-size:12px}.category-last-thread .list-inline a,.category-last-thread .list-inline a:link,.category-last-thread .list-inline a:visited{color:#7a869a}.category-last-thread .list-inline .item-title,.category-last-thread .list-inline .item-title:link,.category-last-thread .list-inline .item-title:visited,.category-last-thread .list-inline a:active,.category-last-thread .list-inline a:focus,.category-last-thread .list-inline a:hover{color:#344563}.category-last-thread .list-inline .item-title:active,.category-last-thread .list-inline .item-title:focus,.category-last-thread .list-inline .item-title:hover{color:#172b4d}.category-thread-message{color:#7a869a}.category-thread-message .material-icon{margin-right:3px;padding:6px 0}@media screen and (max-width:767px){.category-thread-message{font-size:12px;padding-top:15px}.category-thread-message .material-icon{padding:3px 0}}.panel-participants{border:1px solid #ebecf0}.participant-card .btn-user{border:0!important}.participant-card .dropdown-header-owner{color:#0052cc}.participant-card .dropdown-header-owner .material-icon{font-size:14px;height:14px;line-height:14px;width:14px}.participant-card .dropdown-header-owner .icon-text{margin-left:4px;position:relative;top:2px}.panel-participants p{color:#7a869a}@media screen and (max-width:767px){.panel-participants p{margin-top:10px;text-align:center}}.panel-poll{border:1px solid #ebecf0}.panel-poll .poll-select-choices{margin-top:-10px}.panel-poll .poll-details{color:#7a869a;font-size:12px;margin-bottom:20px}.panel-poll .progress{margin-bottom:5px;margin-top:6.66666667px}.panel-poll .poll-chart{color:#7a869a;font-size:12px}.panel-poll .poll-options{margin-top:20px}#posting-placeholder{background-color:#fafbfc}.posting-message .material-icon{color:#9575cd}.posting-message .btn{margin-top:20px}.panel-post{background:#fff;border:1px solid #ddd}.post-side{color:#7a869a}.post-side .poster-avatar{border-radius:4px}.post-side .user-title,.post-side .user-title a,.post-side .user-title a:active,.post-side .user-title a:focus,.post-side .user-title a:hover,.post-side .user-title a:link,.post-side .user-title a:visited{color:#5e6c84}.post-heading .label-unread{background-color:#a0f;margin-right:16px}.post-heading .label-protected{background-color:transparent;color:#bdbdbd;margin-left:24px;position:relative;top:1px}.post-heading .label-protected .material-icon{font-size:16px;line-height:16px;margin-right:2px;position:relative;top:-1px}.post-heading>.btn-link{padding-left:0;padding-right:0}.post-heading>.btn-link,.post-heading>.btn-link:link,.post-heading>.btn-link:visited{color:#7a869a}.post-heading>.btn-link:active,.post-heading>.btn-link:focus,.post-heading>.btn-link:focus:active,.post-heading>.btn-link:hover{color:#172b4d;text-decoration:none}.post-heading .btn-see-edits{margin-left:24px}.post-status-message{border-radius:4px;margin-top:10px;padding:6px 12px}@media screen and (max-width:767px){.post-status-message{font-size:12px}.post-status-message .material-icon{margin-top:3px}.post-status-message p{margin-top:0}}.post-body:last-child{padding-bottom:10px}.post-attachments{background-color:#ebecf0;border:none;border-radius:4px;margin-bottom:30px}.post-attachments:last-child{margin-bottom:10px}@media screen and (max-width:767px){.post-attachments{border-radius:0;margin:0 -15px 20px}}.post-footer>.btn-link{padding-left:0;padding-right:0}.post-footer>.btn-link,.post-footer>.btn-link:link,.post-footer>.btn-link:visited{color:#7a869a}.post-footer>.btn-link:active,.post-footer>.btn-link:focus,.post-footer>.btn-link:focus:active,.post-footer>.btn-link:hover{color:#172b4d;text-decoration:none}.post-footer p{color:#7a869a;font-size:12px}.post-body-hidden,.post-body-invalid{padding-bottom:10px;padding-top:10px}.post-body-hidden .lead,.post-body-invalid .lead{margin-bottom:10px}.post-body-hidden .text-muted,.post-body-invalid .text-muted{font-size:12px;margin-bottom:0}.post-hidden{filter:alpha(opacity=75);opacity:.75}.post-feed .panel-body{padding-bottom:0}.post-feed .post-body{max-height:300px;overflow-y:hidden;padding-bottom:20px;padding-top:0;position:relative}.post-feed .post-body:after{bottom:0;box-shadow:0 0 16px 16px #fff;color:transparent;content:"-";display:block;height:0;position:absolute;width:100%}.posts-list .event .event-label{margin-bottom:5px}.posts-list .event .label-unread{background-color:#a0f;color:#fff}.posts-list .event-info .btn-link,.posts-list .event-info a,.posts-list .event-info a:link,.posts-list .event-info a:visited{color:#5e6c84}.posts-list .event-info .btn-link:active,.posts-list .event-info .btn-link:focus,.posts-list .event-info .btn-link:focus:active,.posts-list .event-info a:active,.posts-list .event-info a:focus,.posts-list .event-info a:focus:active{color:#172b4d}.posts-list .event-hidden{filter:alpha(opacity=33);opacity:.33}.user-card{background:#f4f5f7}.user-card-avatar img,.user-card-small-avatar img{border-radius:4px}.user-card-avatar{margin:20px 0}.user-card-avatar img{height:150px;width:150px}.user-card-username a,.user-card-username a:active,.user-card-username a:focus,.user-card-username a:hover,.user-card-username a:link,.user-card-username a:visited{color:#172b4d;font-size:18px;font-weight:700}.user-card-title a,.user-card-title a:link,.user-card-title a:visited,.user-card-title span{color:#5e6c84}.user-card-title a:active,.user-card-title a:focus,.user-card-title a:hover{color:#172b4d}@media screen and (min-width:768px){.user-card-stats{margin-top:20px}}.user-card-stats ul{margin:0}.user-card-stats li{color:#7a869a;display:inline-block;font-size:12px;margin-right:12px}@media screen and (min-width:768px){.user-card-stats li{margin:0 6px}}.user-card-stats li.user-stat-empty{display:none}@media screen and (min-width:768px){li.user-stat-divider{display:block;margin:0}}@media screen and (max-width:767px){li.user-stat-divider{display:none}}@media screen and (min-width:768px){.user-card-stats{min-height:60px}}@media screen and (max-width:767px){.user-card-left{padding-right:0}}.progress,.progress .progress-bar{-webkit-box-shadow:none;box-shadow:none;height:8px}.misago-markup img{border-radius:4px}.misago-markup .quote-block,.misago-markup blockquote{background-color:#ffecb3;border-color:#b3e5fc;color:#3e2723;overflow:hidden}.misago-markup .quote-block .quote-heading,.misago-markup blockquote .quote-heading{background-color:#ffe082;border:none;color:#795548}.misago-markup .quote-block .quote-heading a,.misago-markup .quote-block .quote-heading a:link,.misago-markup .quote-block .quote-heading a:visited,.misago-markup blockquote .quote-heading a,.misago-markup blockquote .quote-heading a:link,.misago-markup blockquote .quote-heading a:visited{color:#5d4037}.misago-markup .quote-block .quote-heading a:active,.misago-markup .quote-block .quote-heading a:focus,.misago-markup .quote-block .quote-heading a:hover,.misago-markup blockquote .quote-heading a:active,.misago-markup blockquote .quote-heading a:focus,.misago-markup blockquote .quote-heading a:hover{color:#3e2723}.misago-markup .quote-block hr,.misago-markup blockquote hr{border-color:#ffca28}.misago-markup>.quote-block,.misago-markup>blockquote{background:#ffecb3;border:none;border-radius:4px}.misago-markup .quote-body,.misago-markup>.quote-block .quote-block,.misago-markup>blockquote .quote-block{background:#ffecb3}.misago-markup .quote-body>.quote-block,.misago-markup .quote-body>blockquote{border-color:#ffe082;border-radius:4px}.misago-markup .spoiler-block{background:repeating-linear-gradient(45deg,rgba(235,236,240,.5),rgba(235,236,240,.5) 10px,#fff 0,#fff 20px);border:none}.misago-markup .spoiler-body{background:transparent;color:#172b4d;-webkit-filter:blur(5px);-moz-filter:blur(5px);-o-filter:blur(5px);-ms-filter:blur(5px);filter:blur(5px)}.misago-markup .spoiler-block.revealed .spoiler-body{-webkit-filter:none;-moz-filter:none;-o-filter:none;-ms-filter:none;filter:none}.misago-markup .spoiler-overlay{align-items:center;background:hsla(0,0%,100%,.1);display:flex;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}.misago-markup .spoiler-reveal{background-color:#ebecf0;border-color:#ccc;color:#172b4d}.misago-markup .spoiler-reveal.focus,.misago-markup .spoiler-reveal:focus{background-color:#ced0da;border-color:#8c8c8c;color:#172b4d}.misago-markup .spoiler-reveal:hover{background-color:#ced0da;border-color:#adadad;color:#172b4d}.misago-markup .spoiler-reveal.active,.misago-markup .spoiler-reveal:active,.open>.dropdown-toggle.misago-markup .spoiler-reveal{background-color:#ced0da;background-image:none;border-color:#adadad;color:#172b4d}.misago-markup .spoiler-reveal.active.focus,.misago-markup .spoiler-reveal.active:focus,.misago-markup .spoiler-reveal.active:hover,.misago-markup .spoiler-reveal:active.focus,.misago-markup .spoiler-reveal:active:focus,.misago-markup .spoiler-reveal:active:hover,.open>.dropdown-toggle.misago-markup .spoiler-reveal.focus,.open>.dropdown-toggle.misago-markup .spoiler-reveal:focus,.open>.dropdown-toggle.misago-markup .spoiler-reveal:hover{background-color:#b9bdcb;border-color:#8c8c8c;color:#172b4d}.misago-markup .spoiler-reveal.disabled.focus,.misago-markup .spoiler-reveal.disabled:focus,.misago-markup .spoiler-reveal.disabled:hover,.misago-markup .spoiler-reveal[disabled].focus,.misago-markup .spoiler-reveal[disabled]:focus,.misago-markup .spoiler-reveal[disabled]:hover,fieldset[disabled] .misago-markup .spoiler-reveal.focus,fieldset[disabled] .misago-markup .spoiler-reveal:focus,fieldset[disabled] .misago-markup .spoiler-reveal:hover{background-color:#ebecf0;border-color:#ccc}.misago-markup .spoiler-reveal .badge{background-color:#172b4d;color:#ebecf0}.misago-markup .spoiler-reveal,.misago-markup .spoiler-reveal.disabled,.misago-markup .spoiler-reveal.disabled:active,.misago-markup .spoiler-reveal.disabled:hover,.misago-markup .spoiler-reveal:disabled,.misago-markup .spoiler-reveal:disabled:hover{background:#ebecf0;border:1px solid #ebecf0;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.misago-markup .spoiler-reveal.disabled,.misago-markup .spoiler-reveal.disabled:active,.misago-markup .spoiler-reveal.disabled:hover,.misago-markup .spoiler-reveal:disabled,.misago-markup .spoiler-reveal:disabled:hover{filter:alpha(opacity=25);opacity:.25}.misago-markup .spoiler-reveal:focus,.misago-markup .spoiler-reveal:hover{background:#dfe1e6;border:1px solid #dfe1e6;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.dropdown.open .dropdown-toggle .misago-markup .spoiler-reveal,.dropdown.open .dropdown-toggle .misago-markup .spoiler-reveal:active:focus,.dropdown.open .dropdown-toggle .misago-markup .spoiler-reveal:focus,.dropdown.open .dropdown-toggle .misago-markup .spoiler-reveal:hover,.misago-markup .spoiler-reveal:active,.misago-markup .spoiler-reveal:active:focus{background:#c1c7d0;border:1px solid #c1c7d0;-webkit-box-shadow:none;box-shadow:none;color:#172b4d}.misago-markup .spoiler-reveal.btn-loading,.misago-markup .spoiler-reveal.btn-loading:active,.misago-markup .spoiler-reveal.btn-loading:active:focus,.misago-markup .spoiler-reveal.btn-loading:disabled,.misago-markup .spoiler-reveal.btn-loading:disabled:hover,.misago-markup .spoiler-reveal.btn-loading:focus,.misago-markup .spoiler-reveal.btn-loading:hover{color:transparent}.misago-markup .spoiler-reveal,.misago-markup .spoiler-reveal:active,.misago-markup .spoiler-reveal:hover{border-radius:4px;box-shadow:0 0 0 4px #fff;padding:6px 12px}.modal-header{background:#fff;border-bottom-color:#ced0da;border-radius:6px 6px 0 0;color:#172b4d}.modal-header .close{color:#172b4d;font-size:24px;line-height:24px;padding:0 6px;text-shadow:none}.modal-message .message-icon{color:#9575cd}.modal-body>.form-group{margin:20px 0}.modal-body>.form-group:first-child{margin-top:0}.modal-body>.form-group:last-child{margin-bottom:0}.modal-sign-in .modal-body{padding-bottom:0;padding-top:0}.modal-sign-in .modal-body>.form-group{margin:20px 0}.legal-footnote label{font-weight:700}.legal-footnote .help-block{color:#ff5630;margin-left:20px}.modal-avatar-index .avatar-preview{background:#fff;border-radius:6px}.modal-avatar-crop .cropit-preview{background:#fff;margin:20px 0}.modal-avatar-crop .cropit-image-zoom-input{margin-bottom:20px;margin-top:40px}.modal-post-likers .media{border-bottom:1px solid #ebecf0;padding-bottom:15px}.modal-post-likers .media img{border-radius:4px;height:40px;width:40px}.modal-post-likers .media:last-child{border:none;padding-bottom:0}.well{border:1px solid #ddd}.active-posters .rank-user-avatar img{border-radius:4px}.active-posters .user-details{color:#7a869a}.active-posters .user-details a.rank-name,.active-posters .user-details a.rank-name:link,.active-posters .user-details a.rank-name:visited{color:#5e6c84;font-weight:400}.active-posters .user-details a.rank-name:active,.active-posters .user-details a.rank-name:focus,.active-posters .user-details a.rank-name:hover{color:#172b4d}.active-posters .user-details span.rank-name{color:#5e6c84;font-weight:400}.active-posters small{color:#7a869a}.page-error .message-icon{color:#ef5350}.page-message .message-icon,.page-message-info .message-icon{color:#9575cd}.page-message-success .message-icon{color:#81c784}.page-options .message-line,.page-options .message-line a,.page-options .message-line a:link,.page-options .message-line a:visited{color:#7a869a}.page-options .message-line a:active,.page-options .message-line a:focus,.page-options .message-line a:focus:active,.page-options .message-line a:hover{color:#172b4d}.panel-profile-details-group.panel{border:1px solid #ebecf0}.panel-profile-details-group.panel .form-group{margin:0}.panel-profile-details-group .form-control-static p:last-child{margin-bottom:0}.post-primary .panel-post{border-color:#b388ff}.post-primary .user-title,.post-primary .user-title a,.post-primary .user-title a:active,.post-primary .user-title a:focus,.post-primary .user-title a:hover,.post-primary .user-title a:link,.post-primary .user-title a:visited{color:#6200ea}.post-success .panel-post{border-color:#00c853}.post-success .user-title,.post-success .user-title a,.post-success .user-title a:active,.post-success .user-title a:focus,.post-success .user-title a:hover,.post-success .user-title a:link,.post-success .user-title a:visited{color:#388e3c}.post-warning .panel-post{border-color:#ffab40}.post-warning .user-title,.post-warning .user-title a,.post-warning .user-title a:active,.post-warning .user-title a:focus,.post-warning .user-title a:hover,.post-warning .user-title a:link,.post-warning .user-title a:visited{color:#ff6d00}.post-danger .panel-post{border-color:#ff8a80}.post-danger .user-title,.post-danger .user-title a,.post-danger .user-title a:active,.post-danger .user-title a:focus,.post-danger .user-title a:hover,.post-danger .user-title a:link,.post-danger .user-title a:visited{color:#d50000}.user-card-primary .panel-body{background:#fff;border:2px solid #b388ff;border-radius:4px;padding:13px}.user-card-primary .user-card-title,.user-card-primary .user-card-title a.user-title,.user-card-primary .user-card-title a.user-title:active,.user-card-primary .user-card-title a.user-title:focus,.user-card-primary .user-card-title a.user-title:hover,.user-card-primary .user-card-title a.user-title:link,.user-card-primary .user-card-title a.user-title:visited{color:#6200ea}.user-card-primary .user-card-stats li{color:#9575cd}.user-card-success .panel-body{background:#fff;border:2px solid #00c853;border-radius:4px;padding:13px}.user-card-success .user-card-title,.user-card-success .user-card-title a.user-title,.user-card-success .user-card-title a.user-title:active,.user-card-success .user-card-title a.user-title:focus,.user-card-success .user-card-title a.user-title:hover,.user-card-success .user-card-title a.user-title:link,.user-card-success .user-card-title a.user-title:visited{color:#388e3c}.user-card-success .user-card-stats li{color:#66bb6a}.user-card-warning .panel-body{background:#fff;border:2px solid #ffab40;border-radius:4px;padding:13px}.user-card-warning .user-card-title,.user-card-warning .user-card-title a.user-title,.user-card-warning .user-card-title a.user-title:active,.user-card-warning .user-card-title a.user-title:focus,.user-card-warning .user-card-title a.user-title:hover,.user-card-warning .user-card-title a.user-title:link,.user-card-warning .user-card-title a.user-title:visited{color:#ff6d00}.user-card-warning .user-card-stats li{color:#ff6e40}.user-card-danger .panel-body{background:#fff;border:2px solid #ff8a80;border-radius:4px;padding:13px}.user-card-danger .user-card-title,.user-card-danger .user-card-title a.user-title,.user-card-danger .user-card-title a.user-title:active,.user-card-danger .user-card-title a.user-title:focus,.user-card-danger .user-card-title a.user-title:hover,.user-card-danger .user-card-title a.user-title:link,.user-card-danger .user-card-title a.user-title:visited{color:#d50000}.user-card-danger .user-card-stats li{color:#e57373}.list-group .list-group-rank-primary{border-left:4px solid #7e57c2;padding-left:11px}.list-group .list-group-rank-primary a.rank-name,.list-group .list-group-rank-primary a.rank-name:active,.list-group .list-group-rank-primary a.rank-name:focus,.list-group .list-group-rank-primary a.rank-name:hover,.list-group .list-group-rank-primary a.rank-name:link,.list-group .list-group-rank-primary a.rank-name:visited,.list-group .list-group-rank-primary span.rank-name{color:#6200ea}.list-group .list-group-rank-success{border-left:4px solid #9ccc65;padding-left:11px}.list-group .list-group-rank-success a.rank-name,.list-group .list-group-rank-success a.rank-name:active,.list-group .list-group-rank-success a.rank-name:focus,.list-group .list-group-rank-success a.rank-name:hover,.list-group .list-group-rank-success a.rank-name:link,.list-group .list-group-rank-success a.rank-name:visited,.list-group .list-group-rank-success span.rank-name{color:#388e3c}.list-group .list-group-rank-warning{border-left:4px solid #ff7043;padding-left:11px}.list-group .list-group-rank-warning a.rank-name,.list-group .list-group-rank-warning a.rank-name:active,.list-group .list-group-rank-warning a.rank-name:focus,.list-group .list-group-rank-warning a.rank-name:hover,.list-group .list-group-rank-warning a.rank-name:link,.list-group .list-group-rank-warning a.rank-name:visited,.list-group .list-group-rank-warning span.rank-name{color:#ff6d00}.list-group .list-group-rank-danger{border-left:4px solid #f44336;padding-left:11px}.list-group .list-group-rank-danger a.rank-name,.list-group .list-group-rank-danger a.rank-name:active,.list-group .list-group-rank-danger a.rank-name:focus,.list-group .list-group-rank-danger a.rank-name:hover,.list-group .list-group-rank-danger a.rank-name:link,.list-group .list-group-rank-danger a.rank-name:visited,.list-group .list-group-rank-danger span.rank-name{color:#d50000}.page-header-rank-primary .user-rank,.page-header-rank-primary .user-rank a,.page-header-rank-primary .user-rank a:active,.page-header-rank-primary .user-rank a:focus,.page-header-rank-primary .user-rank a:hover,.page-header-rank-primary .user-rank a:link,.page-header-rank-primary .user-rank a:visited{color:#6200ea}.page-header-rank-success .user-rank,.page-header-rank-success .user-rank a,.page-header-rank-success .user-rank a:active,.page-header-rank-success .user-rank a:focus,.page-header-rank-success .user-rank a:hover,.page-header-rank-success .user-rank a:link,.page-header-rank-success .user-rank a:visited{color:#388e3c}.page-header-rank-warning .user-rank,.page-header-rank-warning .user-rank a,.page-header-rank-warning .user-rank a:active,.page-header-rank-warning .user-rank a:focus,.page-header-rank-warning .user-rank a:hover,.page-header-rank-warning .user-rank a:link,.page-header-rank-warning .user-rank a:visited{color:#ff6d00}.page-header-rank-danger .user-rank,.page-header-rank-danger .user-rank a,.page-header-rank-danger .user-rank a:active,.page-header-rank-danger .user-rank a:focus,.page-header-rank-danger .user-rank a:hover,.page-header-rank-danger .user-rank a:link,.page-header-rank-danger .user-rank a:visited{color:#d50000}
 /*# sourceMappingURL=misago.css.map*/
\ No newline at end of file
diff --git a/misago/static/misago/css/misago.css.map b/misago/static/misago/css/misago.css.map
index 1d2f71e964..5ec32b9053 100644
--- a/misago/static/misago/css/misago.css.map
+++ b/misago/static/misago/css/misago.css.map
@@ -1 +1 @@
-{"version":3,"file":"../css/misago.css","mappings":"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,COhZA,YAAuB,gBPmZvB,COlZA,aAAuB,iBPqZvB,COpZA,cAAuB,kBPuZvB,COtZA,aAAuB,kBPyZvB,COtZA,gBAAuB,wBPyZvB,COxZA,gBAAuB,wBP2ZvB,CO1ZA,iBAAuB,yBP6ZvB,CO1ZA,YACE,aP4ZF,CO1ZA,cCvGE,aRogBF,CQngBE,0CAEE,aRqgBJ,CO9ZA,cC1GE,aR2gBF,CQ1gBE,0CAEE,aR4gBJ,COlaA,WC7GE,aRkhBF,CQjhBE,oCAEE,aRmhBJ,COtaA,cChHE,aRyhBF,CQxhBE,0CAEE,aR0hBJ,CO1aA,aCnHE,aRgiBF,CQ/hBE,wCAEE,aRiiBJ,CO1aA,YE1HE,yBF6HA,UP2aF,CSviBE,sCAEE,wBTyiBJ,CO5aA,YEhIE,wBT+iBF,CS9iBE,sCAEE,wBTgjBJ,COhbA,SEnIE,wBTsjBF,CSrjBE,gCAEE,wBTujBJ,COpbA,YEtIE,wBT6jBF,CS5jBE,sCAEE,wBT8jBJ,COxbA,WEzIE,wBTokBF,CSnkBE,oCAEE,wBTqkBJ,COvbA,aAGE,gCADA,mBADA,kBP2bF,COjbA,MAGE,mBADA,YPobF,COtbA,wBAMI,ePsbJ,COzaA,4BAJE,eAAgB,CADhB,cPubF,COlbA,aAEE,gBPgbF,COlbA,gBAKI,oBAAqB,CAErB,gBAAiB,CADjB,iBPibJ,CO3aA,GAEE,mBADA,YP8aF,CO3aA,MAEE,sBP6aF,CO3aA,GACE,eP6aF,CO3aA,GACE,aP6aF,COhaE,2CAII,UAAW,CAFX,UAAW,CGrNf,eAAgB,CHwNZ,gBAAiB,CGvNrB,sBAAuB,CACvB,kBAAmB,CHoNf,WPuaJ,CO1aA,kBASI,iBPoaJ,CACF,CO1ZA,sCAEE,WP4ZF,COzZA,YACE,aAAc,CA9IO,wBP0iBvB,COvZA,WAIE,8BADA,iBADA,gBADA,iBP4ZF,COpZI,0EACE,ePwZN,COlaA,qDAsBI,cAHA,aAAc,CACd,aAAc,CACd,sBPqZJ,COlZI,0EACE,qBPsZN,CO9YA,0CAME,aAAc,CADd,+BAFA,cAAe,CADf,kBAAmB,CAEnB,gBPkZF,CO1YI,gNAAW,UPkZf,COjZI,0MACE,qBPwZN,COlZA,QAEE,iBAAkB,CAClB,uBAFA,kBPsZF,CW5rBA,kBAIE,uDX8rBF,CW1rBA,KAIE,yBACA,kBAFA,aX8rBF,CWxrBA,SAPE,aAAc,CADd,eXwsBF,CWhsBA,IAIE,sBACA,kBACA,0CAHA,UX6rBF,CWhsBA,QAYI,eAAgB,CAFhB,cAAe,CACf,eAAgB,CAFhB,SX6rBJ,CWrrBA,IAQE,oBAAqB,CACrB,yBACA,sBACA,kBALA,cALA,aAAc,CAGd,eACA,uBAFA,gBADA,cAKA,oBX2rBF,CWlsBA,SAmBI,4BAA6B,CAC7B,eAAgB,CAHhB,aAAc,CADd,iBAAkB,CADlB,SAAU,CAGV,oBXwrBJ,CWjrBA,gBACE,iBACA,iBXmrBF,CY7uBA,WCAE,gBAAiB,CADjB,iBAAkB,CADlB,kBADA,kBbsvBF,CYhvBE,oCACE,WZmvBF,CACF,CYlvBE,oCACE,WZqvBF,CACF,CYpvBE,qCACE,YZuvBF,CACF,CY9uBA,iBCpBE,gBAAiB,CADjB,iBAAkB,CADlB,kBADA,kBb2wBF,CY3uBA,KCtBE,kBADA,kBbswBF,CY3uBA,gBAEE,aAAc,CADd,cZ8uBF,CY/uBA,8BAMI,cAAe,CADf,eZ8uBJ,Cc7xBC,4eCmBK,cAAe,CAGf,kBADA,mBAJA,iBfi0BN,Ccl1BC,2HCuCK,UfyzBN,Cch2BC,WC+CG,UfozBJ,Ccn2BC,WC+CG,kBfuzBJ,Cct2BC,WC+CG,kBf0zBJ,Ccz2BC,UC+CG,Sf6zBJ,Cc52BC,UC+CG,kBfg0BJ,Cc/2BC,UC+CG,kBfm0BJ,Ccl3BC,UC+CG,Sfs0BJ,Ccr3BC,UC+CG,kBfy0BJ,Ccx3BC,UC+CG,kBf40BJ,Cc33BC,UC+CG,Sf+0BJ,Cc93BC,UC+CG,kBfk1BJ,Ccj4BC,UC+CG,iBfq1BJ,Ccp4BC,gBC8DG,Ufy0BJ,Ccv4BC,gBC8DG,kBf40BJ,Cc14BC,gBC8DG,kBf+0BJ,Cc74BC,eC8DG,Sfk1BJ,Cch5BC,eC8DG,kBfq1BJ,Ccn5BC,eC8DG,kBfw1BJ,Cct5BC,eC8DG,Sf21BJ,Ccz5BC,eC8DG,kBf81BJ,Cc55BC,eC8DG,kBfi2BJ,Cc/5BC,eC8DG,Sfo2BJ,Ccl6BC,eC8DG,kBfu2BJ,Ccr6BC,eC8DG,iBf02BJ,Ccx6BC,eCmEG,Ufw2BJ,Cc36BC,gBCoDG,Sf03BJ,Cc96BC,gBCoDG,iBf63BJ,Ccj7BC,gBCoDG,iBfg4BJ,Ccp7BC,eCoDG,Qfm4BJ,Ccv7BC,eCoDG,iBfs4BJ,Cc17BC,eCoDG,iBfy4BJ,Cc77BC,eCoDG,Qf44BJ,Cch8BC,eCoDG,iBf+4BJ,Ccn8BC,eCoDG,iBfk5BJ,Cct8BC,eCoDG,Qfq5BJ,Ccz8BC,eCoDG,iBfw5BJ,Cc58BC,eCoDG,gBf25BJ,Cc/8BC,eCyDG,Sfy5BJ,Ccl9BC,kBCwEG,gBf64BJ,Ccr9BC,kBCwEG,wBfg5BJ,Ccx9BC,kBCwEG,wBfm5BJ,Cc39BC,iBCwEG,efs5BJ,Cc99BC,iBCwEG,wBfy5BJ,Ccj+BC,iBCwEG,wBf45BJ,Ccp+BC,iBCwEG,ef+5BJ,Ccv+BC,iBCwEG,wBfk6BJ,Cc1+BC,iBCwEG,wBfq6BJ,Cc7+BC,iBCwEG,efw6BJ,Cch/BC,iBCwEG,wBf26BJ,Ccn/BC,iBCwEG,uBf86BJ,Cct/BC,iBCwEG,afi7BJ,CYh7BA,yBEzEC,2HCuCK,Ufi+BJ,CcxgCD,WC+CG,Uf49BF,Cc3gCD,WC+CG,kBf+9BF,Cc9gCD,WC+CG,kBfk+BF,CcjhCD,UC+CG,Sfq+BF,CcphCD,UC+CG,kBfw+BF,CcvhCD,UC+CG,kBf2+BF,Cc1hCD,UC+CG,Sf8+BF,Cc7hCD,UC+CG,kBfi/BF,CchiCD,UC+CG,kBfo/BF,CcniCD,UC+CG,Sfu/BF,CctiCD,UC+CG,kBf0/BF,CcziCD,UC+CG,iBf6/BF,Cc5iCD,gBC8DG,Ufi/BF,Cc/iCD,gBC8DG,kBfo/BF,CcljCD,gBC8DG,kBfu/BF,CcrjCD,eC8DG,Sf0/BF,CcxjCD,eC8DG,kBf6/BF,Cc3jCD,eC8DG,kBfggCF,Cc9jCD,eC8DG,SfmgCF,CcjkCD,eC8DG,kBfsgCF,CcpkCD,eC8DG,kBfygCF,CcvkCD,eC8DG,Sf4gCF,Cc1kCD,eC8DG,kBf+gCF,Cc7kCD,eC8DG,iBfkhCF,CchlCD,eCmEG,UfghCF,CcnlCD,gBCoDG,SfkiCF,CctlCD,gBCoDG,iBfqiCF,CczlCD,gBCoDG,iBfwiCF,Cc5lCD,eCoDG,Qf2iCF,Cc/lCD,eCoDG,iBf8iCF,CclmCD,eCoDG,iBfijCF,CcrmCD,eCoDG,QfojCF,CcxmCD,eCoDG,iBfujCF,Cc3mCD,eCoDG,iBf0jCF,Cc9mCD,eCoDG,Qf6jCF,CcjnCD,eCoDG,iBfgkCF,CcpnCD,eCoDG,gBfmkCF,CcvnCD,eCyDG,SfikCF,Cc1nCD,kBCwEG,gBfqjCF,Cc7nCD,kBCwEG,wBfwjCF,CchoCD,kBCwEG,wBf2jCF,CcnoCD,iBCwEG,ef8jCF,CctoCD,iBCwEG,wBfikCF,CczoCD,iBCwEG,wBfokCF,Cc5oCD,iBCwEG,efukCF,Cc/oCD,iBCwEG,wBf0kCF,CclpCD,iBCwEG,wBf6kCF,CcrpCD,iBCwEG,efglCF,CcxpCD,iBCwEG,wBfmlCF,Cc3pCD,iBCwEG,uBfslCF,Cc9pCD,iBCwEG,afylCF,CACF,CYhlCA,yBElFC,2HCuCK,Uf0oCJ,CcjrCD,WC+CG,UfqoCF,CcprCD,WC+CG,kBfwoCF,CcvrCD,WC+CG,kBf2oCF,Cc1rCD,UC+CG,Sf8oCF,Cc7rCD,UC+CG,kBfipCF,CchsCD,UC+CG,kBfopCF,CcnsCD,UC+CG,SfupCF,CctsCD,UC+CG,kBf0pCF,CczsCD,UC+CG,kBf6pCF,Cc5sCD,UC+CG,SfgqCF,Cc/sCD,UC+CG,kBfmqCF,CcltCD,UC+CG,iBfsqCF,CcrtCD,gBC8DG,Uf0pCF,CcxtCD,gBC8DG,kBf6pCF,Cc3tCD,gBC8DG,kBfgqCF,Cc9tCD,eC8DG,SfmqCF,CcjuCD,eC8DG,kBfsqCF,CcpuCD,eC8DG,kBfyqCF,CcvuCD,eC8DG,Sf4qCF,Cc1uCD,eC8DG,kBf+qCF,Cc7uCD,eC8DG,kBfkrCF,CchvCD,eC8DG,SfqrCF,CcnvCD,eC8DG,kBfwrCF,CctvCD,eC8DG,iBf2rCF,CczvCD,eCmEG,UfyrCF,Cc5vCD,gBCoDG,Sf2sCF,Cc/vCD,gBCoDG,iBf8sCF,CclwCD,gBCoDG,iBfitCF,CcrwCD,eCoDG,QfotCF,CcxwCD,eCoDG,iBfutCF,Cc3wCD,eCoDG,iBf0tCF,Cc9wCD,eCoDG,Qf6tCF,CcjxCD,eCoDG,iBfguCF,CcpxCD,eCoDG,iBfmuCF,CcvxCD,eCoDG,QfsuCF,Cc1xCD,eCoDG,iBfyuCF,Cc7xCD,eCoDG,gBf4uCF,CchyCD,eCyDG,Sf0uCF,CcnyCD,kBCwEG,gBf8tCF,CctyCD,kBCwEG,wBfiuCF,CczyCD,kBCwEG,wBfouCF,Cc5yCD,iBCwEG,efuuCF,Cc/yCD,iBCwEG,wBf0uCF,CclzCD,iBCwEG,wBf6uCF,CcrzCD,iBCwEG,efgvCF,CcxzCD,iBCwEG,wBfmvCF,Cc3zCD,iBCwEG,wBfsvCF,Cc9zCD,iBCwEG,efyvCF,Ccj0CD,iBCwEG,wBf4vCF,Ccp0CD,iBCwEG,uBf+vCF,Ccv0CD,iBCwEG,afkwCF,CACF,CYhvCA,0BE3FC,2HCuCK,UfmzCJ,Cc11CD,WC+CG,Uf8yCF,Cc71CD,WC+CG,kBfizCF,Cch2CD,WC+CG,kBfozCF,Ccn2CD,UC+CG,SfuzCF,Cct2CD,UC+CG,kBf0zCF,Ccz2CD,UC+CG,kBf6zCF,Cc52CD,UC+CG,Sfg0CF,Cc/2CD,UC+CG,kBfm0CF,Ccl3CD,UC+CG,kBfs0CF,Ccr3CD,UC+CG,Sfy0CF,Ccx3CD,UC+CG,kBf40CF,Cc33CD,UC+CG,iBf+0CF,Cc93CD,gBC8DG,Ufm0CF,Ccj4CD,gBC8DG,kBfs0CF,Ccp4CD,gBC8DG,kBfy0CF,Ccv4CD,eC8DG,Sf40CF,Cc14CD,eC8DG,kBf+0CF,Cc74CD,eC8DG,kBfk1CF,Cch5CD,eC8DG,Sfq1CF,Ccn5CD,eC8DG,kBfw1CF,Cct5CD,eC8DG,kBf21CF,Ccz5CD,eC8DG,Sf81CF,Cc55CD,eC8DG,kBfi2CF,Cc/5CD,eC8DG,iBfo2CF,Ccl6CD,eCmEG,Ufk2CF,Ccr6CD,gBCoDG,Sfo3CF,Ccx6CD,gBCoDG,iBfu3CF,Cc36CD,gBCoDG,iBf03CF,Cc96CD,eCoDG,Qf63CF,Ccj7CD,eCoDG,iBfg4CF,Ccp7CD,eCoDG,iBfm4CF,Ccv7CD,eCoDG,Qfs4CF,Cc17CD,eCoDG,iBfy4CF,Cc77CD,eCoDG,iBf44CF,Cch8CD,eCoDG,Qf+4CF,Ccn8CD,eCoDG,iBfk5CF,Cct8CD,eCoDG,gBfq5CF,Ccz8CD,eCyDG,Sfm5CF,Cc58CD,kBCwEG,gBfu4CF,Cc/8CD,kBCwEG,wBf04CF,Ccl9CD,kBCwEG,wBf64CF,Ccr9CD,iBCwEG,efg5CF,Ccx9CD,iBCwEG,wBfm5CF,Cc39CD,iBCwEG,wBfs5CF,Cc99CD,iBCwEG,efy5CF,Ccj+CD,iBCwEG,wBf45CF,Ccp+CD,iBCwEG,wBf+5CF,Ccv+CD,iBCwEG,efk6CF,Cc1+CD,iBCwEG,wBfq6CF,Cc7+CD,iBCwEG,uBfw6CF,Cch/CD,iBCwEG,af26CF,CACF,CgB7+CA,MACE,4BhB++CF,CgBh/CA,uBASI,oBAAqB,CACrB,UAAW,CAFX,ehB6+CJ,CgBt+CI,4CAEE,kBAAmB,CACnB,UAAW,CAFX,ehB2+CN,CgBp+CA,QAGE,cADA,mBADA,ehBy+CF,CgBn+CA,WAHE,ehBy+CF,CgB/9CA,OAGE,mBADA,cAAe,CADf,UhBm+CF,CgBp+CA,kHAcQ,0BAFA,uBADA,YAEA,kBhBk+CR,CgB/+CA,mBAqBI,6BADA,qBhB+9CJ,CgBn/CA,oPA8BQ,YhB69CR,CgB3/CA,mBAoCI,yBhB09CJ,CgB9/CA,cAyCI,qBhBw9CJ,CgBj9CA,8KAOQ,WhBk9CR,CgBv8CA,wLAQQ,qBhB08CR,CgBl9CA,wDAeM,uBhBu8CN,CgB77CA,yCAEI,wBhB87CJ,CiBlkDE,oVAOI,wBjB4kDN,CiBtkDE,4LAMI,wBjBukDN,CiB1lDE,oUAOI,wBjBimDN,CiB3lDE,iMAMI,wBjB4lDN,CiB/mDE,gSAOI,wBjBsnDN,CiBhnDE,kLAMI,wBjBinDN,CiBpoDE,oUAOI,wBjB2oDN,CiBroDE,iMAMI,wBjBsoDN,CiBzpDE,wTAOI,wBjBgqDN,CiB1pDE,4LAMI,wBjB2pDN,CgBvgDA,kBACE,gBACA,ehBygDF,CgBvgDE,sDAIE,2CAA4C,CAC5C,sBAHA,mBACA,iBAAkB,CAFlB,UhB8gDF,CgB/gDA,yBASI,ehBygDJ,CgBlhDA,8NAkBU,kBhBwgDV,CgB1hDA,kCA0BI,QhBmgDJ,CgB7hDA,4VAmCU,ahBkgDV,CgBriDA,sVAuCU,chBsgDV,CgB7iDA,oOAoDU,ehB+/CV,CACF,CkBztDA,SAME,QAAS,CAFT,WlB2tDF,CkBrtDA,gBAHE,QAAS,CAFT,SlBquDF,CkBhuDA,OASE,gCAFA,cANA,aAAc,CAId,eACA,mBAAoB,CAFpB,mBAFA,UlB8tDF,CkBptDA,MACE,oBAAqB,CAGrB,eAAgB,CADhB,iBAAkB,CADlB,clBwtDF,CkB5sDA,mBAUE,uBAAwB,CACxB,eAAgB,CdkBhB,8BACG,2BACK,qBJorDV,CkBpsDA,uCAIE,kBAAmB,CAFnB,cAAe,CACf,gBlBusDF,CkBhsDE,iMAGE,kBlBqsDJ,CkBjsDA,iBACE,alBmsDF,CkB/rDA,kBACE,aAAc,CACd,UlBisDF,CkB7rDA,8BAEE,WlB+rDF,CkB3rDA,0Eb1FE,yCAA0C,CAC1C,mBL0xDF,CkB1rDA,OAEE,elB+rDF,CkBlqDA,qBA1BE,cAJA,aAAc,CAEd,eACA,sBlB+sDF,CkBprDA,cAQE,sBACA,qBAAsB,CACtB,yBACA,kBd3EA,oDACQ,4CckER,YACA,iBdsDA,6EACK,wEACG,qEc1DR,UlBkrDF,CmBlwDE,oBACE,qBfaF,iFACQ,yEebN,SnBswDJ,CIxtDE,gCACE,WACA,SJ0tDJ,CIxtDE,oCAA0B,UJ2tD5B,CI1tDE,yCAAgC,UJ6tDlC,CkB9qDE,0BACE,4BAA6B,CAC7B,QlBgrDJ,CkBxqDE,iFAGE,yBACA,SlB0qDJ,CkBvqDE,yDAEE,kBlByqDJ,CkBrqDE,sBACE,WlBuqDJ,CkBzpDA,qDAKI,mIACE,gBlB0pDJ,CkBvpDE,kQAEE,gBlB+pDJ,CkB5pDE,kQAEE,gBlBoqDJ,CACF,CkB1pDA,YACE,kBlB4pDF,CkBppDA,iBAGE,aAAc,CAEd,kBAAmB,CADnB,eAAgB,CAFhB,iBlBypDF,CkBnpDE,kHAGI,kBlBspDN,CkBjqDA,6BAoBI,cAAe,CADf,eAAgB,CADhB,eAAgB,CAFhB,gBACA,iBlBwpDJ,CkBlpDA,8HAME,iBAAkB,CADlB,gBAAkB,CADlB,iBlBspDF,CkBjpDA,kCAEE,elBmpDF,CkB/oDA,+BAQE,cAAe,CALf,oBAAqB,CAGrB,eAAgB,CADhB,eAAgB,CADhB,iBAAkB,CAFlB,iBAAkB,CAKlB,qBlBkpDF,CkB9oDE,sHAEE,kBlBkpDJ,CkB/oDA,8DAGE,gBAAiB,CADjB,YlBkpDF,CkBxoDA,qBAME,eAAgB,CALhB,gBAGA,mBADA,elB2oDF,CkBtoDE,4DAGE,cAAe,CADf,elByoDJ,CkB3nDA,UCvPE,kBAFA,eAFA,YAGA,gBAFA,gBnB43DF,CmBv3DE,gBACE,YACA,gBnBy3DJ,CmBt3DE,4CAEE,WnBw3DJ,CkBvoDA,6BAMI,kBAFA,eAFA,YAGA,gBAFA,gBlB2oDJ,CkB9oDA,mCASI,YACA,gBlBwoDJ,CkBlpDA,kFAcI,WlBwoDJ,CkBtpDA,oCAoBI,eAHA,YAIA,gBAHA,gBACA,gBlB0oDJ,CkBpoDA,UCnRE,kBAFA,eAFA,YAGA,sBAFA,iBnBi6DF,CmB55DE,gBACE,YACA,gBnB85DJ,CmB35DE,4CAEE,WnB65DJ,CkBhpDA,6BAMI,kBAFA,eAFA,YAGA,sBAFA,iBlBopDJ,CkBvpDA,mCASI,YACA,gBlBipDJ,CkB3pDA,kFAcI,WlBipDJ,CkB/pDA,oCAoBI,eAHA,YAIA,sBAHA,gBACA,iBlBmpDJ,CkBxoDA,cAEE,iBlByoDF,CkB3oDA,4BAMI,oBlBwoDJ,CkBpoDA,uBAKE,aAAc,CAEd,YACA,iBAEA,mBAAoB,CATpB,iBAAkB,CAElB,OAAQ,CAMR,iBAAkB,CAPlB,KAAM,CAIN,WAFA,SlB4oDF,CkBpoDA,4HAIE,YACA,iBAFA,UlBwoDF,CkBpoDA,4HAIE,YACA,iBAFA,UlBwoDF,CkBloDA,iRClZI,anBgiEJ,CkB9oDA,2BC9YI,qBfiDF,oDACQ,2CJ++DV,CmB/hEI,iCACE,qBf8CJ,oEACQ,2DJo/DV,CkBxpDA,gCCnYI,yBACA,qBAFA,anBiiEJ,CkB7pDA,oCC9XI,anB8hEJ,CkB7pDA,iRCrZI,anB8jEJ,CkBzqDA,2BCjZI,qBfiDF,oDACQ,2CJ6gEV,CmB7jEI,iCACE,qBf8CJ,oEACQ,2DJkhEV,CkBnrDA,gCCtYI,yBACA,qBAFA,anB+jEJ,CkBxrDA,oCCjYI,anB4jEJ,CkBxrDA,6PCxZI,anB4lEJ,CkBpsDA,yBCpZI,qBfiDF,oDACQ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FA,0BAqBI,oBAAqB,CACrB,qBlBiwFJ,CkBvxFA,gIA2BM,UlBiwFN,CkB5xFA,wCAiCI,UlB8vFJ,CkB/xFA,4BAqCI,eAAgB,CAChB,qBlB6vFJ,CkBnyFA,2CA6CI,oBAAqB,CAErB,eAAgB,CADhB,YAAa,CAEb,qBlB0vFJ,CkB1yFA,uDAmDM,clB2vFN,CkB9yFA,kFAyDI,aAAc,CADd,iBlB2vFJ,CkBnzFA,kDA8DI,KlBwvFJ,CACF,C6Bj+FI,kDACE,iB7Bo+FJ,C6Bl+FI,oCACE,e7Bo+FN,CACF,C6B59FE,sCAME,QAAS,CzBvPX,wBACQ,gByBqPN,aAAc,CADd,cAAe,CADf,gBAAiB,CADjB,aAAc,CADd,U7Bs+FF,CACF,C6Bz9FA,8BDnUE,yBACA,0BCmUA,Y7B69FF,C6Bz9FA,mDD/TE,4BADA,6BARA,2BACA,4BCwUA,e7B+9FF,C6Br9FA,YC/UE,mBADA,e9ByyGF,C6Bt9FE,mBClVA,mBADA,e9B6yGF,C6Bv9FE,mBCrVA,mBADA,e9BizGF,C6Bj9FA,aC/VE,mBADA,e9BqzGF,C6Bl9FE,sCACE,UAAW,CAEX,iBADA,iB7Bs9FF,C6Bv8FA,aEtWA,oB/BkzGA,C6B38FA,cE1WA,qBAAuB,CF4WrB,kB7B68FF,C6B/8FA,4BAKI,c7B68FJ,CAXF,C6Bx7FA,gBACE,sBACA,oB7Bs8FF,C6Bx8FA,8BAKI,a7Bs8FJ,C6Br8FI,wEAGE,6BADA,a7Bw8FN,C6Bh9FA,6BAcI,U7Bq8FJ,C6Bn9FA,iCAmBM,a7Bm8FN,C6Bj8FM,8EAGE,6BADA,a7Bo8FR,C6B/7FM,8HAIE,yBADA,a7Bk8FR,C6B77FM,oIAIE,6BADA,a7Bg8FR,C6Bx7FM,wHAIE,yBADA,a7B27FR,C6Bt7FI,+EAIM,a7Bs7FR,C6Br7FQ,wHAGE,6BADA,a7Bw7FV,C6Bn7FQ,6LAIE,yBADA,a7Bs7FV,C6Bj7FQ,mMAIE,6BADA,a7Bo7FV,CACF,C6BngGA,+BAuFI,iB7B+6FJ,C6B96FI,0EAEE,qB7Bg7FN,C6B1gGA,yCA6FM,qB7Bg7FN,C6B7gGA,8DAmGI,oB7B86FJ,C6BjhGA,6BA4GI,a7Bw6FJ,C6Bv6FI,mCACE,a7By6FN,C6BvhGA,0BAmHI,a7Bu6FJ,C6Bt6FI,gEAEE,a7Bw6FN,C6Bp6FM,0LAEE,a7Bw6FR,C6Bh6FA,gBACE,sBACA,oB7Bk6FF,C6Bp6FA,8BAKI,a7Bk6FJ,C6Bj6FI,wEAGE,6BADA,U7Bo6FN,C6B56FA,8DAmBM,a7B+5FN,C6B75FM,8EAGE,6BADA,U7Bg6FR,C6B35FM,8HAIE,yBADA,U7B85FR,C6Bz5FM,oIAIE,6BADA,U7B45FR,C6Br5FM,wHAIE,yBADA,U7Bw5FR,C6Bn5FI,2FAIM,oB7Bm5FR,C6Bv5FE,0DAOM,wB7Bm5FR,C6B15FE,sDAUM,a7Bm5FR,C6Bl5FQ,wHAGE,6BADA,U7Bq5FV,C6Bh5FQ,6LAIE,yBADA,U7Bm5FV,C6B94FQ,mMAIE,6BADA,U7Bi5FV,CACF,C6Br+FA,+BA6FI,iB7B24FJ,C6B14FI,0EAEE,qB7B44FN,C6B5+FA,yCAmGM,qB7B44FN,C6B/+FA,8DAyGI,oB7B04FJ,C6Bn/FA,6BA6GI,a7By4FJ,C6Bx4FI,mCACE,U7B04FN,C6Bz/FA,0BAoHI,a7Bw4FJ,C6Bv4FI,gEAEE,U7By4FN,C6Br4FM,0LAEE,U7By4FR,CgC/gHA,YAIE,yBACA,kBAFA,eAAgB,CADhB,mBADA,gBhCqhHF,CgCthHA,eAQI,oBhCihHJ,CgCzhHA,yBAYM,WACA,iBAFA,ahCmhHN,CgC9hHA,oBAkBI,ahC+gHJ,CiC9hHA,OAGE,4BAA6B,CAC7B,kBAFA,mBADA,YjCmiHF,CiCpiHA,UASI,aAAc,CADd,YjCgiHJ,CiCxiHA,mBAcI,ejC6hHJ,CiC3iHA,mBAoBI,ejC2hHJ,CiC/iHA,WAwBI,cjC0hHJ,CiCjhHA,sCAEE,kBjCmhHF,CiCrhHA,oDASI,aAAc,CAHd,iBAAkB,CAElB,WAAY,CADZ,QjCqhHJ,CiC3gHA,eCtDE,yBACA,qBAFA,UlCukHF,CiChhHA,kBClDI,wBlCqkHJ,CiCnhHA,2BC9CI,alCokHJ,CiClhHA,YC1DE,yBACA,qBAFA,UlCklHF,CiCvhHA,eCtDI,wBlCglHJ,CiC1hHA,wBClDI,alC+kHJ,CiCzhHA,eC9DE,yBACA,qBAFA,UlC6lHF,CiC9hHA,kBC1DI,wBlC2lHJ,CiCjiHA,2BCtDI,alC0lHJ,CiChiHA,cClEE,yBACA,qBAFA,UlCwmHF,CiCriHA,iBC9DI,wBlCsmHJ,CiCxiHA,0BC1DI,alCqmHJ,CmC7mHA,OAUE,oBAJA,WALA,cAAe,CAEf,aAAc,CACd,eAAgB,CAChB,aAAc,CAHd,uBAKA,iBAAkB,CAElB,uBAAwB,CADxB,kBnCinHF,CmC3mHI,4BAEE,WAEA,cAAe,CADf,oBnC8mHN,CmCxmHE,aACE,YnC0mHJ,CmCtmHE,YACE,iBAAkB,CAClB,QnCwmHJ,CmCjmHA,eCtCE,wBpC0oHF,CoCvoHI,sDAEE,wBpCyoHN,CmCpmHA,eC1CE,wBpCipHF,CoC9oHI,sDAEE,wBpCgpHN,CmCvmHA,eC9CE,wBpCwpHF,CoCrpHI,sDAEE,wBpCupHN,CmC1mHA,YClDE,wBpC+pHF,CoC5pHI,gDAEE,wBpC8pHN,CmC7mHA,eCtDE,wBpCsqHF,CoCnqHI,sDAEE,wBpCqqHN,CmChnHA,cC1DE,wBpC6qHF,CoC1qHI,oDAEE,wBpC4qHN,CqCzqHA,wCACE,GAAQ,0BrC4qHR,CqC3qHA,GAAQ,uBrC8qHR,CACF,CqC3qHA,gCACE,GAAQ,0BrC8qHR,CqC7qHA,GAAQ,uBrCgrHR,CACF,CqCzqHA,UAIE,yBACA,kBjCsCA,kDACQ,0CiC3CR,YACA,mBACA,erC+qHF,CqCxqHA,cAQE,yBjCyBA,kDACQ,0CiC5BR,WALA,UAAW,CAGX,eADA,WAAY,CAEZ,iBAEA,iBAAkB,CjCoJlB,kCACK,6BACG,0BiC3JR,OrCqrHF,CqCrqHA,sDCDI,8KACA,+KACA,sKDEF,yBrCyqHF,CqClqHA,oDjC5CE,0DACK,qDACG,iDJktHV,CqC/pHA,sBEvEE,wBvCyuHF,CuCtuHE,wCDgDE,8KACA,+KACA,qKtCyrHJ,CqCnqHA,mBE3EE,wBvCivHF,CuC9uHE,qCDgDE,8KACA,+KACA,qKtCisHJ,CqCvqHA,sBE/EE,wBvCyvHF,CuCtvHE,wCDgDE,8KACA,+KACA,qKtCysHJ,CqC3qHA,qBEnFE,wBvCiwHF,CuC9vHE,uCDgDE,8KACA,+KACA,qKtCitHJ,CwClwHA,+BAGE,oBAAqB,CADrB,iBAAkB,CAElB,qBxCowHF,CwCxwHA,yCAOI,UAAW,CADX,iBxCuwHJ,CwCpwHI,wNAIE,SxC0wHN,CwCpwHA,4GAKI,gBxCqwHJ,CwChwHA,aACE,gBxCkwHF,CwCnwHA,oEAOI,UxCiwHJ,CwCxwHA,oEAYI,exCiwHJ,CwC7vHA,yEACE,exC+vHF,CwC3vHA,4BACE,axC6vHF,CwC5vHE,mEZnDA,6BADA,yB5BozHF,CwC3vHA,2FZhDE,4BADA,wB5BizHF,CwC1vHA,sBACE,UxC4vHF,CwC1vHA,8DACE,exC4vHF,CwC1vHA,uIZpEE,6BADA,yB5Bo0HF,CwCzvHA,oEZlEE,4BADA,wB5Bg0HF,CwCxvHA,oEAEE,SxC0vHF,CwCzuHA,iCAEE,gBAAiB,CADjB,iBxC4uHF,CwCzuHA,oCAEE,iBAAkB,CADlB,kBxC4uHF,CwCtuHA,iCpC/CE,oDACQ,2CJwxHV,CwCtuHE,0CpCnDA,wBACQ,eJ4xHV,CwCnuHA,YACE,axCquHF,CwCluHA,eAEE,sBxCouHF,CwCjuHA,uBACE,sBxCmuHF,CwC5tHA,4FAII,aAAc,CACd,UAAW,CAEX,cAAe,CADf,UxC8tHJ,CwCpuHA,oCAcM,UxCytHN,CwCvuHA,gJAuBI,aAAc,CADd,exCwtHJ,CwCltHE,4DACE,exCotHJ,CwCltHE,sDZpKA,4BADA,6BARA,2BACA,2B5Bo4HF,CwCptHE,sDZxKA,8BADA,+BARA,yBACA,yB5B04HF,CwCrtHA,uEACE,exCutHF,CwCrtHA,yJZhLE,4BADA,4B5B24HF,CwCptHA,6EZ/LE,yBACA,yB5Bs5HF,CwChtHA,qBAIE,wBAAyB,CAHzB,aAAc,CAEd,kBAAmB,CADnB,UxCotHF,CwCttHA,0DAOI,kBAAmB,CACnB,UAAW,CACX,QxCmtHJ,CwC5tHA,qCAYI,UxCmtHJ,CwC/tHA,+CAgBI,SxCktHJ,CwCjsHA,gNAMM,kBAAsB,CACtB,mBAAoB,CAFpB,iBxCosHN,CyC56HA,aAGE,wBAAyB,CADzB,aAAc,CADd,iBzCg7HF,CyC36HE,0BACE,UAAW,CAEX,cAAe,CADf,ezC86HJ,CyCt7HA,2BAqBI,UAAW,CAGX,eAAgB,CAThB,iBAAkB,CAQlB,UAAW,CAPX,SzC66HJ,CyCn6HI,iCACE,SzCq6HN,CyC35HA,uGtB4BE,kBAFA,eAFA,YAGA,sBAFA,iBnB24HF,CmBt4HE,yHACE,YACA,gBnB04HJ,CmBv4HE,sRAEE,WnB64HJ,CyC76HA,uGtBuBE,kBAFA,eAFA,YAGA,gBAFA,gBnBk6HF,CmB75HE,yHACE,YACA,gBnBi6HJ,CmB95HE,sRAEE,WnBo6HJ,CyC37HA,+DAGE,kBzC67HF,CyC37HE,wKACE,ezC+7HJ,CyC37HA,oCAIE,qBAAsB,CADtB,kBAAmB,CADnB,QzC+7HF,CyCx7HA,mBAOE,yBACA,yBACA,kBAJA,cAHA,eACA,eAAgB,CAChB,aAAc,CAHd,iBAKA,iBzC67HF,CyCv7HE,4BAGE,kBADA,eADA,gBzC27HJ,CyCv7HE,4BAGE,kBADA,eADA,iBzC27HJ,CyC78HA,6EA0BI,YzCu7HJ,CyCl7HA,wUbrGE,6BADA,yB5BkiIF,CyCn7HA,+BACE,czCq7HF,CyCn7HA,iTbzGE,4BADA,wB5BuiIF,CyCp7HA,8BACE,azCs7HF,CyCj7HA,iBAIE,WAAY,CACZ,kBzCi7HF,CyCt7HA,uCACE,iBzCw7HF,CyCz7HA,2BAYM,gBzCg7HN,CyC76HI,qFAGE,SzC+6HN,CyC16HE,0EAGI,iBzC26HN,CyCx6HE,wEAII,gBAAiB,CADjB,SzC06HN,C0CllIA,OAEE,e1CmlIF,C0CjlIE,mBACE,Y1CmlIJ,C0C/kIA,mBAGE,MAAO,CADP,e1CklIF,C0C9kIA,YACE,a1CglIF,C0C7kIA,cACE,a1C+kIF,C0C5kIE,4BACE,c1C8kIJ,C0C1kIA,gCAEE,iB1C4kIF,C0CzkIA,8BAEE,kB1C2kIF,C0CxkIA,qCAGE,kBAAmB,CACnB,kB1C0kIF,C0CvkIA,cACE,qB1CykIF,C0CtkIA,cACE,qB1CwkIF,C0CpkIA,eAEE,iBAAkB,CADlB,Y1CukIF,C0ChkIA,YAEE,eAAgB,CADhB,c1CmkIF,C2CvnIA,YAGE,kBAAmB,CADnB,c3CynIF,C2ChnIA,iBAME,sBACA,yBALA,aAAc,CAGd,kBAAmB,CAFnB,iBAAkB,CAFlB,iB3CunIF,C2C9mIE,6Bf7BA,2BACA,2B5B8oIF,C2C/mIE,4BfvBA,8BADA,+BeyBE,e3CmnIJ,C2C9mIE,0FAKE,yBAFA,cACA,kB3CinIJ,C2CrnIE,qKASI,a3CinIN,C2C1nIE,4JAYI,a3CmnIN,C2C9mIE,oFAKE,sBACA,qBAFA,cADA,S3CmnIJ,C2CtnIE,ogBAYI,a3CqnIN,C2CjoIE,sJAeI,U3CunIN,C2C5mIA,yCAEE,a3C8mIF,C2ChnIA,2FAKI,U3C+mIJ,C2C3mIE,0GAIE,sBAFA,cACA,oB3CgnIJ,C2C3mIA,uBAEE,eAAgB,CADhB,U3C8mIF,CcptIC,yB8BKG,yBADA,a5CotIJ,C4CjtII,yDAEE,a5CmtIN,C4CrtII,2GAKI,a5CotIR,C4CjtIM,0IAGE,yBADA,a5CstIR,C4CntIM,6OAIE,yBACA,qBAFA,U5C0tIR,CcjvIC,sB8BKG,yBADA,a5CivIJ,C4C9uII,mDAEE,a5CgvIN,C4ClvII,qGAKI,a5CivIR,C4C9uIM,8HAGE,yBADA,a5CmvIR,C4ChvIM,2NAIE,yBACA,qBAFA,U5CuvIR,Cc9wIC,yB8BKG,yBADA,a5C8wIJ,C4C3wII,yDAEE,a5C6wIN,C4C/wII,2GAKI,a5C8wIR,C4C3wIM,0IAGE,yBADA,a5CgxIR,C4C7wIM,6OAIE,yBACA,qBAFA,U5CoxIR,Cc3yIC,wB8BKG,yBADA,a5C2yIJ,C4CxyII,uDAEE,a5C0yIN,C4C5yII,yGAKI,a5C2yIR,C4CxyIM,sIAGE,yBADA,a5C6yIR,C4C1yIM,uOAIE,yBACA,qBAFA,U5CizIR,C2C9sIA,yBAEE,iBAAkB,CADlB,Y3CitIF,C2C9sIA,sBAEE,eAAgB,CADhB,e3CitIF,C6Cx0IA,OAEE,sBACA,4BAA6B,CzC2D7B,6CACQ,qCyC9DR,kB7C+0IF,C6Cv0IA,YACE,Y7Cy0IF,C6Cp0IA,eAEE,mCAAoC,CjBtBpC,2BACA,4BiBoBA,iB7Cy0IF,C6C/zIA,uDALI,a7C60IJ,C6Cx0IA,aAGE,eADA,eAAgB,CADhB,Y7Cu0IF,C6Cx0IA,iGAWI,a7Co0IJ,C6C/zIA,cAEE,sBjBxCA,8BADA,+BiB0CA,6BAFA,iB7Cq0IF,C6CzzIA,sDAGI,e7C0zIJ,C6C7zIA,wFAOM,eAAgB,CADhB,kB7C4zIN,C6CvzII,wIAEI,YAAa,CjBzEnB,2BACA,2B5Bm4IF,C6CrzII,oIAEI,eAAgB,CjBxEtB,8BADA,8B5Bk4IF,C6C90IA,+EjB5DE,yBACA,yB5B64IF,C6C5yIA,kFACE,kB7CizIF,C6CzyIA,4EAII,e7C0yIJ,C6C9yIA,oGAQM,kBADA,kB7C6yIN,C6CpzIA,0XAmBQ,2BACA,2B7C4yIR,C6Ch0IA,wsBAwBU,0B7CkzIV,C6C10IA,gsBA4BU,2B7CwzIV,C6Cp1IA,yWA0CQ,8BADA,8B7CuzIR,C6Ch2IA,4qBA8CU,6B7C4zIV,C6C12IA,oqBAkDU,8B7Ck0IV,C6Cp3IA,8HA2DI,yB7C+zIJ,C6C13IA,oGA+DI,Y7C+zIJ,C6C93IA,gEAmEI,Q7C+zIJ,C6Cl4IA,gqBA0EU,a7Cs0IV,C6Ch5IA,opBA8EU,c7Cg1IV,C6C95IA,w3BAgGU,e7Ck1IV,C6Cl7IA,yBAuGI,QAAS,CADT,e7Cg1IJ,C6Cr0IA,aACE,kB7Cu0IF,C6Cx0IA,oBAMI,kBADA,e7Cu0IJ,C6C50IA,2BASM,c7Cs0IN,C6C/0IA,4BAcI,e7Co0IJ,C6Cl1IA,gHAkBM,4B7Co0IN,C6Ct1IA,2BAuBI,Y7Ck0IJ,C6Cz1IA,uDAyBM,+B7Cm0IN,C6C5zIA,eC5PE,iB9C2jJF,C8CzjJE,8BAEE,sBACA,kBAFA,a9C6jJJ,C8C9jJE,0DAMI,qB9C2jJN,C8CjkJE,qCAUI,yBADA,U9C4jJN,C8CxjJE,yDAEI,wB9CyjJN,C6C30IA,eC/PE,oB9C6kJF,C8C3kJE,8BAEE,yBACA,qBAFA,U9C+kJJ,C8ChlJE,0DAMI,wB9C6kJN,C8CnlJE,qCAUI,sBADA,a9C8kJN,C8C1kJE,yDAEI,2B9C2kJN,C6C11IA,eClQE,oB9C+lJF,C8C7lJE,8BAEE,yBACA,qBAFA,a9CimJJ,C8ClmJE,0DAMI,wB9C+lJN,C8CrmJE,qCAUI,yBADA,a9CgmJN,C8C5lJE,yDAEI,2B9C6lJN,C6Cz2IA,YCrQE,oB9CinJF,C8C/mJE,2BAEE,yBACA,qBAFA,a9CmnJJ,C8CpnJE,uDAMI,wB9CinJN,C8CvnJE,kCAUI,yBADA,a9CknJN,C8C9mJE,sDAEI,2B9C+mJN,C6Cx3IA,eCxQE,oB9CmoJF,C8CjoJE,8BAEE,yBACA,qBAFA,a9CqoJJ,C8CtoJE,0DAMI,wB9CmoJN,C8CzoJE,qCAUI,yBADA,a9CooJN,C8ChoJE,yDAEI,2B9CioJN,C6Cv4IA,cC3QE,oB9CqpJF,C8CnpJE,6BAEE,yBACA,qBAFA,a9CupJJ,C8CxpJE,yDAMI,wB9CqpJN,C8C3pJE,oCAUI,yBADA,a9CspJN,C8ClpJE,wDAEI,2B9CmpJN,C+ClqJA,OAIE,eAAgB,CAFhB,cADA,cAAe,CAEf,iB/CqqJF,C+CxqJA,UAOI,c/CoqJJ,C+C3qJA,2BAYM,sBACA,sBACA,mBAJA,oBAAqB,CACrB,gB/CwqJN,C+CnrJA,oCAoBM,yBADA,oB/CqqJN,C+CxrJA,iCA2BM,W/CiqJN,C+C5rJA,yCAkCM,U/C8pJN,C+ChsJA,2FA6CM,sBAFA,cACA,kB/C4pJN,CgD1sJA,YAIE,kBAHA,oBAAqB,CAErB,cADA,chD8sJF,CgDhtJA,eAOI,chD4sJJ,CgDntJA,qCAiBM,sBACA,sBAHA,cAJA,UAAW,CAGX,uBADA,gBAAiB,CADjB,iBAFA,iBAAkB,CAMlB,oBhD+sJN,CgD3sJM,kGAIE,yBACA,kBAFA,cADA,ShDktJR,CgD5sJI,6DpBfF,8BADA,2BoBmBM,ahD+sJR,CgD3sJI,2DpB9BF,+BADA,2B5B+uJF,CgDtsJI,qKAME,yBACA,qBAHA,WACA,cAAe,CAFf,ShD+sJN,CgD/vJA,iLAiEM,sBACA,kBAHA,cACA,kBhD0sJN,CgD/rJA,2CCvEM,eACA,sBAFA,iBjD6wJN,CiDzwJI,mErBMF,8BADA,0B5BywJF,CiDxwJI,iErBRF,+BADA,2B5BsxJF,CgD1sJA,2CC5EM,eACA,gBAFA,gBjD6xJN,CiDzxJI,mErBMF,8BADA,0B5ByxJF,CiDxxJI,iErBRF,+BADA,2B5BsyJF,CkDzyJA,kBAEE,aAAc,CACd,QA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AU,2B1DmrKV,C0DlrKA,4BACU,4B1DqrKV,Cc9mKA,kBACE,uBdknKF,Cc9mKA,mBACE,wBdknKF,Cc9mKA,yBACE,8BdknKF,CAdF,Cc/lKE,4D4C3FA,uB1D6sKA,C0D5sKA,iBAAU,uB1D+sKV,C0D9sKA,cAAU,2B1DitKV,C0DhtKA,4BACU,4B1DmtKV,CcvnKA,kBACE,uBd2nKF,CcvnKA,mBACE,wBd2nKF,CcvnKA,yBACE,8Bd2nKF,CAdF,CcxmKE,sC4ChHA,uB1D2uKA,C0D1uKA,iBAAU,uB1D6uKV,C0D5uKA,cAAU,2B1D+uKV,C0D9uKA,4BACU,4B1DivKV,CchoKA,kBACE,uBdooKF,CchoKA,mBACE,wBdooKF,CchoKA,yBACE,8BdooKF,CAdF,CcjnKE,oC4C7HA,sB1DiwKA,CACF,CchoKE,0D4ClIA,sB1DswKA,CACF,CchoKE,2D4CvIA,sB1D2wKA,CACF,CchoKE,qC4C5IA,sB1DgxKA,CACF,Cc1nKA,e4CvJE,sB1DoxKF,Cc1nKE,4B4ClKA,uB1DgyKA,C0D/xKA,oBAAU,uB1DkyKV,C0DjyKA,iBAAU,2B1DoyKV,C0DnyKA,kCACU,4B1DsyKV,CACF,CcroKA,qBACE,sBduoKF,CcroKE,kCACE,uBdwoKF,CACF,CctoKA,sBACE,sBdwoKF,CctoKE,mCACE,wBdyoKF,CACF,CcvoKA,4BACE,sBdyoKF,CcvoKE,yCACE,8Bd0oKF,CcroKA,c4CrLA,sB1D+zKA,CAJF,C2Dj0KA,oCACE,UAEE,iB3Dw0KF,CACF,C2Dp0KA,oCACE,kBACE,sB3Ds0KF,CACF,C2Dn0KA,0DACE,eACE,yB3Dq0KF,C2Dl0KA,kBACE,sB3Do0KF,C2Dj0KA,oBACE,0B3Dm0KF,C2Dh0KA,sBACE,wB3Dk0KF,CACF,C2D/zKA,oCACE,eACE,yB3Di0KF,C2D9zKA,oBACE,0B3Dg0KF,CACF,C4Dx2KA,UACE,aAAc,CACd,c5D02KF,C4Dv2KA,kBACE,kBAAmB,CACnB,YAAa,CACb,M5Dy2KF,C4Dt2KA,oCACE,e5Dw2KF,C4Dr2KA,cACE,MAAO,CACP,c5Du2KF,C4Dp2KA,oCACE,UAEE,kBAAmB,CADnB,Y5Du2KF,C4Dn2KA,oCACE,Q5Dq2KF,C4Dl2KA,gCAIE,kBAAmB,CAFnB,M5Dq2KF,C4Dh2KA,8FAEE,M5Dk2KF,CACF,C4D/1KA,qBACE,gB5Di2KF,C6D74KA,cACE,yBAMA,MAAS,CALT,eAGA,cAAe,CACf,SAAU,CAKV,uBAA0B,CAR1B,UAAW,CAMX,Y7D84KF,C6D14KE,mBAEE,WAAY,CADZ,K7D64KJ,C6D35KA,gBAqBI,cAFA,a7D44KJ,C6Dt4KE,kDACE,iB7Dy4KF,C6D14KA,mBAMI,eAFA,iB7D04KJ,CACF,C8Dx6KA,iBAOE,eAIA,mBAAoB,CAVpB,cAAe,CAKf,iBAAkB,CAJlB,SAAU,CAOV,uBAA0B,CAN1B,UAAW,CACX,Y9D86KF,C8Dr6KE,oBACE,KAAQ,CACR,uB9Du6KJ,C8Dt7KA,mBAoBI,0BADA,oBAAqB,CAErB,QAAW,CAEX,kB9Dq6KJ,C+D57KA,mBAQE,kCALA,WAAY,CAEZ,MAAS,CAIT,iBAAkB,CARlB,cAAe,CAGf,KAAQ,CAFR,UAAW,CAIX,Y/Dg8KF,C+Dt8KA,8BAYI,gBACA,iB/D67KJ,C+Dz7KA,mBAME,2BAA4B,CAL5B,sBACA,sBACA,gCACA,kB3D6CA,4CACQ,oC2D3CR,SAAU,CAEV,iB/D27KF,C+Dx7KA,kBAGE,gCAFA,c/D27KF,C+D57KA,qBAMI,Y/Dy7KJ,C+D/7KA,oBAUI,QAAS,CACT,S/Dw7KJ,C+Dp7KA,gBACE,c/Ds7KF,C+Dv7KA,uBAII,QAAS,CACT,S/Ds7KJ,C+Dl7KA,kBTgDE,6BS7CA,eT4CA,gBtDy4KF,C+Dx7KA,4BTqDI,eAAgB,CAChB,etDs4KJ,C+D57KA,uCT0DI,gBtDq4KJ,C+D/7KA,wCT8DI,atDo4KJ,C+D37KA,+BACE,e/D67KF,CgE1/KA,QAEE,WAAY,CACZ,iBAAkB,CAFlB,UhE8/KF,CgE1/KE,sBACE,ahE4/KJ,CgEx/KA,uBAQE,4CAA6C,CAC7C,+CAAgD,CAChD,gDAAiD,CACjD,oDAAqD,CACrD,iDAAkD,CALlD,gCAA+B,CAF/B,iBAAkB,CAElB,kBAA+B,CAA/B,gBAA+B,CAL/B,WAAY,CACZ,aAAc,CAFd,UhEqgLF,CgEv/KA,wBACE,GAEE,uBhEw/KF,CACF,CgEr/KA,2BACE,GACE,0BAA4B,CAC5B,uBhEu/KF,CACF,CgEp/KA,4BACE,GACE,2BAA6B,CAC7B,uBhEs/KF,CACF,CgEn/KA,gCACE,GACE,+BAAiC,CACjC,uBhEq/KF,CACF,CgEl/KA,6BACE,GACE,4BAA8B,CAC9B,uBhEo/KF,CACF,CiE5iLA,QACE,ejE8iLF,CiE1iLA,mCAMI,eAFA,oBADA,gBjE4iLJ,CiEviLI,qCACE,oBAAqB,CACrB,qBjEyiLN,CiEnjLA,uCAcM,YACA,gBjEwiLN,CiEvjLA,sCAoBI,gBjEsiLJ,CiE1jLA,kCA+BI,cAPA,aAAc,CACd,YAGA,kBACA,iBjEsiLJ,CiEliLI,gFAGE,6BADA,ajEqiLN,CiExkLA,iDA2CM,cAAe,CAFf,WAAY,CAGZ,gBAAiB,CAJjB,UjEsiLN,CiE9kLA,yCAgDM,yBAMA,aAAc,CALd,iBAAkB,CAGlB,SAAU,CADV,OjEkiLN,CiE1hLI,oIAGE,yBAEA,ajE2hLN,CiE3lLA,+DAuEI,WjEwhLJ,CiE/lLA,uFA0EM,gBjEyhLN,CiEnmLA,gDAgFI,YjEshLJ,CiEtmLA,oDAoFM,YADA,UjEuhLN,CiEhhLA,8BACE,wBAAyB,CACzB,aAAc,CACd,QAAW,CACX,kBAAmB,CACnB,UjEkhLF,CiEhhLE,iCACE,kBAAmB,CACnB,UjEkhLJ,CiE/gLE,2EAEE,eAAgB,CAChB,WAAY,CAOZ,cANA,aAAc,CAEd,mBAAoB,CADpB,gBAAiB,CAMjB,iBAAkB,CAHlB,UjEkhLJ,CiE7gLI,uQAIE,yBADA,ajEmhLN,CiE/gLI,mFAEE,YADA,UjEmhLN,CiE9gLE,wCACE,oBjEghLJ,CiE7gLE,kDACE,eACA,gBjE+gLJ,CiE1gLA,yBACE,sBACE,ejE4gLF,CACF,CiExgLA,mCACE,YjE0gLF,CiEvgLA,yBACE,qCACE,YjEygLF,CiEtgLA,mCACE,ajEwgLF,CACF,CkE1qLE,2BAKE,UAAW,CAKX,cAAe,CAFf,WAAY,CAGZ,gBAAiB,CATjB,2BAEA,iBAAkB,CAGlB,UlE6qLJ,CkErrLA,mBAgBI,iBAAkB,CAClB,OlEwqLJ,CkEpqLA,gBAEE,kBAAmB,CADnB,YAAa,CAEb,gBlEsqLF,CkEzqLA,+BAMI,gBlEsqLJ,CkEnqLE,6DAGE,yBACA,alEqqLJ,CkElqLE,mEAGE,yBACA,alEoqLJ,CkE/pLE,0KAME,yBACA,UlEiqLJ,CkE7pLA,0BAEI,kBlE8pLJ,CkEhqLA,oBAOI,mBADA,kBlE8pLJ,CkEpqLA,kBAYI,mBADA,iBlE6pLJ,CmEnuLA,aACE,aAAc,CAGd,mBADA,SnEquLF,CmEjuLA,kBACE,oBAAqB,CAIrB,eAAgB,CAFhB,mBADA,kBAEA,SnEouLF,CmEhuLA,oBAEE,kBAAmB,CADnB,YAAa,CAEb,oBnEkuLF,CmEhuLE,gDAEE,anEkuLJ,CmE/tLE,oDAEE,anEiuLJ,CmEnuLE,kGAKI,yBnEkuLN,CmE9tLE,2BACE,anEguLJ,CmE5tLA,iCACE,gBnE8tLF,CoEpwLA,WACE,0BAA6B,CAC7B,iBAAkB,CAClB,eAAgB,CAChB,4CACA,uOpEuwLF,CoEjwLA,eAYE,gBAAiB,CAKjB,kCAAmC,CAKnC,iCAAkC,CAGlC,4BAA6B,CAX7B,aAAc,CAVd,oBAAqB,CAHrB,0BAA6B,CAE7B,iBAAkB,CADlB,eAAmB,CAInB,UAAW,CAIX,qBAAsB,CAHtB,aAAc,CACd,iBAAkB,CAWlB,iCAAkC,CAVlC,mBAAoB,CAEpB,qBAAsB,CAEtB,kBAAmB,CARnB,SpEoxLF,CqEnyLA,eACE,mBACA,gCACA,aAAc,CACd,gBrEqyLF,CqEzyLA,0BAOI,gBrEqyLJ,CqE5yLA,iBAYI,eAAkB,CADlB,arEqyLJ,CqE7xLA,oCACE,eACE,iBrE+xLF,CqEhyLA,6BAII,WrE+xLJ,CqEnyLA,4CAOM,erE+xLN,CACF,CqEzxLA,oCACE,2BAGI,oBADA,gBrE2xLJ,CqE7xLA,6BAOI,UAAW,CAEX,QAAS,CADT,iBrE0xLJ,CqElyLA,4CAYM,crEyxLN,CqEryLA,6BAiBI,iBACA,erEuxLJ,CqEzyLA,+BAqBM,erEuxLN,CqE5yLA,mCA0BM,eAAkB,CADlB,YrEuxLN,CACF,CqEhxLA,cACE,crEkxLF,CqEnxLA,sBAKI,YACA,iBAAkB,CAFlB,UrEoxLJ,CqExxLA,qCAWI,YADA,UrEkxLJ,CqE5wLA,wBACE,erE8wLF,CqE1wLA,kBACE,kBrE4wLF,CqEzwLA,oDACE,erE2wLF,CqEvwLA,+BAEI,QrEwwLJ,CqE1wLA,+BAMI,arEuwLJ,CsE/2LA,mDAIE,qBACA,uBAHA,WADA,OtEo3LF,CsE52LA,0BACE,eACA,iBtE82LF,CsEh3LA,wCAOI,eACA,iBAHA,kBtEg3LJ,CsEr3LA,wCAYI,kBtE42LJ,CsEv2LA,8BACE,eACA,iBtEy2LF,CsE32LA,4CAOI,eACA,iBAHA,kBtE22LJ,CuE14LA,gCAEE,sBAAuB,CACvB,wBvE44LF,CuE/4LA,8DAUI,UAAW,CAKX,cAAe,CAFf,WAAY,CAGZ,gBAAiB,CATjB,sBAAiB,CAEjB,iBAAkB,CAGlB,UvE84LJ,CuEt4LA,oCACE,gBAEE,aAAc,CADd,UvEy4LF,CuE14LA,+BAKI,UAAW,CACX,cvEw4LJ,CuE94LA,0BAUI,aAAc,CAEd,gBAAiB,CAEjB,eAAgB,CAChB,kBvEq4LJ,CACF,CuEh4LA,yBAGE,YAAa,CAFb,iBAAkB,CAClB,WvEm4LF,CuE93LA,aACE,iBvEg4LF,CuEj4LA,2BAII,kBvEg4LJ,CuEp4LA,4BAYI,cACA,cAAe,CACf,gBAAiB,CAEjB,mBAAoB,CARpB,iBAAkB,CAElB,SAAU,CADV,OvEo4LJ,CwE77LE,sIAOE,iBxE87LJ,CwEr8LE,sLAWI,WAAY,CACZ,gBxEk8LN,CwEh8LM,8MAEE,WAAY,CADZ,UxEw8LR,CwEl8LE,yCAEE,4BADA,wBxEq8LJ,CwE76LE,yMAEE,yBADA,qBxEg8LJ,CwE17LA,oBAGE,UAAW,CAFX,gBAAiB,CACjB,iBxE67LF,CwEx7LA,yBAME,cAAe,CAFf,WAAY,CAGZ,gBAAiB,CANjB,gBAAiB,CAEjB,UxE47LF,CwEr7LA,oBACE,gBxEu7LF,CwEp7LA,yBACE,iBxEs7LF,CwEl7LA,oBACE,cAAiB,CACjB,exEo7LF,CyEtgMA,0FAKE,WAAY,CACZ,UAAW,CAKX,cAPA,aAAc,CAGd,UAAW,CAKX,eAAmB,CACnB,uBALA,gBAAiB,CAMjB,eAAgB,CAChB,kBAAmB,CANnB,UzE6gMF,CyE7/LE,0VANE,yBAEA,cACA,oBzEohMJ,CyE1gME,8HACE,uBzE+gMJ,CyEhjMA,sJA0CI,UAAW,CAEX,cAAe,CALf,uBAEA,iBzEihMJ,CyE1jMA,sHAgDI,WAAY,CAEZ,iBAAkB,CAClB,OzE+gMJ,CyE1gMA,YACE,cACA,SzE4gMF,CyEzgMA,eAIE,eAAgB,CAHhB,sBACA,SzE4gMF,CyEtgMA,eACE,ezEwgMF,CyEpgMA,gCACE,gBzEsgMF,CyElgMA,iCAEE,oBzEogMF,CyEtgMA,sCAKI,YzEogMJ,CyE//LA,iBACE,iBzEigMF,CyE9/LA,sEAEE,WAAY,CACZ,eAAgB,CAEhB,aAAc,CACd,QAAW,CACX,UzE+/LF,CyE3/LA,8BACE,iBzE6/LF,CyE9/LA,mCAII,QzE6/LJ,CyEx/LA,uBACE,WzE0/LF,CyEv/LA,gCAGE,eAFA,gBzE0/LF,CyE3/LA,uCAMI,ezEw/LJ,CyEj/LE,oEACE,WzEo/LF,CACF,CyEj/LA,6CAEE,oBAAqB,CADrB,kBzEo/LF,CyE/+LA,oCACE,+BAEE,WAAY,CADZ,eAAkB,CAalB,QAAW,CrE3Fb,oCACQ,4BqEqFN,UAAW,CAOX,QAAW,CAZX,gBAAiB,CACjB,eAAgB,CAchB,iBANA,cAAe,CAHf,QAAS,CACT,UzEo/LF,CyE//LA,kCA0BI,UAAW,CAJX,UAAW,CAEX,QzE4+LJ,CyEx+LI,2EAKE,gCAFA,oBADA,gBzE4+LN,CACF,C0E7pMA,gBACE,mBAAqB,CACrB,sB1E+pMF,C0E5pMA,oKAME,U1E8pMF,C0E3pMA,sLAME,yBACA,a1E6pMF,C2EnrMA,cAME,QAAS,CAFT,WAGA,S3EmrMF,C2E1rMA,+BAEE,kBAAmB,CADnB,Y3EmsMF,C2EpsMA,iBAiBI,kBAGA,cAAe,CALf,YAHA,sBAAuB,CAMvB,oBAAqB,CAJrB,U3EsrMJ,C2EpsMA,oBAwBI,iB3E+qMJ,C2EvsMA,6BA4BI,eACA,gB3E8qMJ,C2E1qMA,6BAEE,mBADA,a3E6qMF,C2EzqMA,4BAEE,mBADA,a3E4qMF,C2ExqMA,sBAEE,mBADA,a3E2qMF,C2EvqMA,kBAEE,mBADA,a3E0qMF,C2EtqMA,wBAEE,mBADA,U3EyqMF,C2ErqMA,oBAEE,mBADA,a3EwqMF,C2EpqMA,oBAEE,mBADA,U3EuqMF,C4EvuMA,iBAEE,kBAAmB,CAEnB,cAHA,YAAa,CAIb,eACA,e5EwuMF,C4E9uMA,gCASI,mBACA,8B5EwuMJ,C6ElvMA,kBAEE,kBAAmB,CADnB,Y7EqvMF,C6EjvMA,wBACE,MAAO,CACP,iB7EmvMF,C6ErvMA,4BAKI,iB7EmvMJ,C6E/uMA,uBACE,MAAO,CAGP,eAAgB,CAChB,sBAAuB,CAFvB,kB7EkvMF,C8E9vMA,sDAIE,SAAU,CAHV,QAAW,CACX,aAAgB,CAGhB,OAAU,CAFV,W9EkwMF,C8E5vMA,qCACE,QAAW,CACX,Y9E8vMF,C8E1vMA,2BACE,iB9E4vMF,C8ExvMA,wBACE,U9E0vMF,C8E3vMA,2BAII,QAAW,CAEX,eAAgB,CAChB,sBAAuB,CAFvB,kB9E4vMJ,C8EjwMA,8BAWI,aAAc,CAEd,c9EyvMJ,C+E1xMA,aAEE,e/E4xMF,C+ExxMA,+BACE,c/E0xMF,C+EtxMA,gBACE,QAAS,CAET,wB/EuxMF,CgFxyMA,gBACE,gBhF0yMF,CiFxyMA,oCACE,oBACE,iBjF0yMF,CiF3yMA,kCAII,WjF0yMJ,CiF9yMA,iDAOM,ejF0yMN,CACF,CiFpyMA,oCACE,oBAEE,sBjFsyMF,CiFxyMA,kCAKI,UjFsyMJ,CiF3yMA,iDAQM,cjFsyMN,CiF9yMA,kCAaI,iBACA,ejFoyMJ,CiFlzMA,wCAiBM,ejFoyMN,CiFrzMA,8CAqBM,iBjFmyMN,CACF,CiF7xMA,oBACE,SAAY,CAEZ,iBjF8xMF,CkF70MA,eAEE,mBADA,elFg1MF,CkFj1MA,+BAMI,gBlF+0MJ,CkF10MA,gDAEE,UAAW,CAEX,eAHA,iBlF80MF,CmF11MA,Y/EgBE,0DACK,qDACG,kD+EjBR,anF+1MF,CmF11MA,gCACE,G7DRA,0BACA,StBq2MA,CmF31MA,I7DXA,yBACA,UtBy2MA,CmF51MA,G7DdA,0BACA,StB62MA,CACF,CmF31MA,iBACE,mBACA,mBAAoB,CACpB,oBAAqB,CACrB,YAEA,iBAAkB,CAClB,OnF41MF,CmFz1MA,uCAEI,gBnF01MJ,CmFx1MI,kDACE,cnF01MN,CmFp1MA,gBACE,mBACA,iBnFs1MF,CoFj4MA,oBACE,gBpFm4MF,CoF/3MA,YACE,iBpFi4MF,CoF73MA,oCACE,iBACE,kBACA,kBpF+3MF,CACF,CqF74MA,mBACE,YrF+4MF,CqFh5MA,wBAII,aAAc,CACd,UrF+4MJ,CqFp5MA,6BASI,gBrF84MJ,CqFz4MA,oCACE,iCACE,MrF24MF,CACF,CsF55MA,eACE,YtF85MF,CsF15ME,uHAIE,sBAAuB,CACvB,kBAAmB,ClFwDrB,wBACQ,gBkFtDN,aAIA,YAAa,CAFb,kBAIA,etF05MJ,CsFz6MA,wCAyBI,eAAgB,CAEhB,cAHA,cAAe,CAHf,WAAY,CAFZ,iBAGA,UtF25MJ,CsFn5ME,qDACE,atFq5MJ,CsFj5MA,WACE,ctFm5MF,CsFh5MA,oCAWE,eAAgB,CAPhB,UAAW,CAKX,cACA,cAAe,CAJf,WAAY,CALZ,gBAAiB,CAEjB,iBAAkB,CAIlB,UtFm5MF,CsF54MA,cACE,etF84MF,CsF54ME,kDACE,etF+4MF,CsFh5MA,mBAII,YtF+4MJ,CACF,CuF98ME,sCACE,avFg9MJ,CuF78ME,sCACE,avF+8MJ,CuF58ME,uCACE,avF88MJ,CwFv9ME,+CACE,iBxF09MF,CACF,CwFt9MA,4BAEE,WAAY,CADZ,UxFy9MF,CwFp9MA,oCACE,wBACE,YxFs9MF,CACF,CwFn9MA,oCACE,kBACE,YxFq9MF,CACF,CyF5+MA,SACE,aAAc,CACd,czF8+MF,CyF3+MA,iBAEE,YAAa,CACb,MAAO,CAFP,oBAAqB,CAGrB,kBzF6+MF,CyF1+MA,cACE,MAAO,CACP,czF4+MF,CyF9+MA,iCAMI,QzF4+MJ,CyFx+MA,qBACE,MzF0+MF,CyFv+MA,gBACE,YzFy+MF,CyFt+MA,oCACE,SACE,YzFw+MF,CyFr+MA,+BAIE,kBAAmB,CAFnB,MzFw+MF,CyFn+MA,0FAEE,MzFq+MF,CyFl+MA,gBACE,aAAc,CACd,MzFo+MF,CyFj+MA,2BACE,WzFm+MF,CACF,CyF99MA,oCACE,gBACE,iBzFg+MF,CACF,C0F9hNA,KACE,qB1FgiNF,C0F7hNA,YAGE,oB1F+hNF,C0F3hNE,0FANA,cACA,e1FuiNF,C0F1hNE,mBACE,yB1F4hNJ,C0FxhNA,cACE,iB1F0hNF,C0F3hNA,6BAMI,cAAe,CAGf,WAAY,CAFZ,gBAAiB,CAHjB,0BAMA,U1FwhNJ,C0FphNA,eAEE,eAAgB,CAChB,sBAAuB,CAFvB,kB1FwhNF,C2F9jNA,6HAQI,oB3F+jNJ,C2F1jNA,4GAOI,e3F2jNJ,C2FtjNA,6CAEE,a3FwjNF,C2FtjNE,mEACE,Y3FyjNJ,C2FtjNE,iEACE,e3FyjNJ,C2FpjNA,mBAEE,gBAAiB,CADjB,c3FujNF,C2FljNA,sDAEE,mBACA,WAAY,CAEZ,c3FmjNF,C2FxjNA,oFAQI,gCAGA,eACA,eAAiB,CAHjB,iB3FsjNJ,C2F/iNA,sDAEE,wB3FijNF,C2F9iNA,2BACE,gBACA,QAAW,CACX,Y3FgjNF,C2F9iNE,8EAEE,wB3FgjNJ,C2F3iNA,8BACE,mBAGA,c3F4iNF,C2FziNA,8BACE,yBACA,iB3F2iNF,C2FxiNA,6BACE,gBACA,QAAW,CACX,Y3F0iNF,C2FviNA,gCASE,e3FyiNF,C2FtiNA,wDACE,Y3FwiNF,C2FpiNA,uCAII,sB3FsiNJ,C2FliNA,uCAII,uB3FoiNJ,C2F/hNA,mBACE,eAAgB,CAChB,WAAY,CAIZ,UAAW,CAFX,eAAgB,CADhB,Y3FmiNF,C2FtiNA,6BASI,aACA,a3FgiNJ,C4F5qNA,yDAEI,kBAMA,YAAa,CALb,aAAgB,CAChB,eAAgB,CAChB,iBAAkB,CAElB,W5F6qNJ,C4FprNA,iEAWM,YAAa,CAIb,YAAa,CAFb,iBAAkB,CAClB,Q5F4qNN,C4F1rNA,wFAqBQ,6BAA+B,CAH/B,iBAAkB,CAMlB,YAAa,CADb,W5F2qNR,C4FtqNI,6EtE7BF,yBACA,WtBssNF,C4F1qNI,iFAMI,a5FuqNR,C4FnqNI,kFAIE,YAAa,CAHb,mBAEA,W5FsqNJ,C4FzqNE,6DAQI,YAAa,CADb,W5FsqNN,C4F7qNE,iEAaI,YAAa,CADb,Q5FqqNN,C4FjrNE,wFAiBM,YAAa,CADb,W5FqqNR,CACF,C4F5tNA,8CA8DI,e5FiqNJ,C4F5pNA,0CACE,iB5F8pNF,C4F/pNA,yDAII,sBAAuB,CACvB,yBACA,kBxFRF,wBACQ,gBwFWN,cACA,eAJA,kBAKA,iB5F8pNJ,C4F5pNI,wEACE,aAAc,CAId,eAEA,YAJA,qBAGA,U5F8pNN,C4F1pNI,+HAEE,qBACA,a5F4pNN,C4FvrNA,sDAgCI,iB5F0pNJ,C4F1rNA,+DAqCM,kBACA,mBAEA,eAAgB,CAChB,U5FupNN,C4FhsNA,qEA8CM,aAAgB,CADhB,S5FupNN,C4FhpNA,8BACE,a5FkpNF,C4FnpNA,uDAOI,uBAAwB,CAGxB,qBAAuB,CANvB,gBASA,U5F6oNJ,C4F3oNI,sFAGE,mBACA,WAAY,CACZ,iBAAkB,CAHlB,UAAW,CADX,U5FipNN,C4F1oNI,6EACE,uBAAwB,CAKxB,mBAJA,WAAY,CAGZ,iBAAkB,CAFlB,WAAY,CAIZ,eAAgB,CAHhB,U5F+oNN,C4FzoNI,6DACE,Y5F2oNN,C4FxoNI,4FACE,kB5F0oNN,C4FvoNI,yEAGE,mBACA,WAAY,CACZ,iBAAkB,CAHlB,UAAW,CADX,U5F6oNN,C4FtoNI,yEAKE,mBAJA,WAAY,CAGZ,iBAAkB,CAFlB,WAAY,CACZ,U5F0oNN,C4FpoNI,sEACE,sBAAwB,CACxB,mB5FsoNN,C4FnoNI,kEAKE,sBAAuB,CAGvB,wBAAyB,CACzB,kBAAmB,CAGnB,iBAAkB,CAVlB,UAAW,CADX,U5F6oNN,C4F1nNI,8IACE,mBACA,kB5FgoNN,C4F7nNI,kEAKE,mBAJA,WAAY,CAGZ,iBAAkB,CAFlB,WAAY,CACZ,U5FioNN,C4FxnNI,0JACE,kB5F6nNN,C4FvnNA,2CACE,gB5FynNF,C4F1nNA,4DAII,kB5FynNJ,C4F7nNA,+DAOM,Y5FynNN,C4FhoNA,wEAaM,kB5FsnNN,C4FnoNA,wEAmBM,eAAgB,CADhB,yBADA,kBAGA,WAAY,CACZ,iB5FqnNN,C4FnnNM,4JAEE,oB5FqnNR,C4FlnNM,uKAEE,oB5FonNR,C4FlpNA,4EAkCQ,kBAEA,WAAY,CADZ,U5FonNR,C6Ft3NA,2CACE,a7Fw3NF,C6Fr3NA,oDACE,a7Fu3NF,C6Fn3NA,uCAEI,oBAAqB,CACrB,eAAgB,CAKhB,sBAAuB,CACvB,kBAAmB,CAJnB,kBAAmB,CACnB,W7Fq3NJ,C6Fh3NI,2EACE,W7Fm3NJ,CACF,C6Fj3NI,2EACE,W7Fo3NJ,CACF,C6F/2NA,wCAKI,cAAe,CAFf,WAAY,CAGZ,gBAAiB,CAJjB,U7Fm3NJ,C6Fr3NA,2BAUI,Q7F82NJ,C6Fx2NA,gCAEE,iBADA,a7F22NF,C6F52NA,mCAKI,aAAc,CACd,U7F02NJ,C6Fh3NA,8PAcM,yBACA,yBACA,kBAKA,cAJA,oBAAqB,CACrB,gBACA,gB7F22NN,C6Ft2NI,gIAGE,yBAEA,cACA,oB7Fu2NN,C6Fl2NA,6BAEI,gBAEA,e7Fk2NJ,C8F37NA,qBACE,yBACA,YAAa,CAEb,oBADA,gBAEA,eAEA,qB9F47NF,C8F17NE,8BACE,a9F47NJ,C8Fv7NA,gCACE,kB9Fy7NF,C8F17NA,8CAII,wB9Fy7NJ,C8F77NA,sDAUM,kBAAmB,CADnB,e9Fw7NN,C8Fj8NA,gEAaQ,gBAEA,iBAAkB,CAClB,O9Fs7NR,C8Ft8NA,gEA6BM,cAAe,CAPf,WAAY,CAQZ,gBAAiB,CANjB,cAAiB,CAEjB,iBAAkB,CAKlB,iBAAkB,CAJlB,OAAQ,CANR,U9F27NN,C8F36NA,oBACE,eACA,iB9F66NF,C8F/6NA,kCAKI,eAAgB,CAChB,W9F66NJ,C8Fx6NA,gBACE,iB9F06NF,C8Fv6NA,wBACE,Y9Fy6NF,C8F16NA,+CAKI,YAAa,CADb,W9F06NJ,C8Fl6NA,iBACE,iB9Fo6NF,C8Fr6NA,gCAWI,eAFA,YAGA,iBARA,0BACA,iBAAkB,CAClB,QAAS,CAET,U9Fs6NJ,C8F96NA,iCAiBM,c9Fg6NN,C+F//NA,eACE,qBAAsB,CACtB,yBACA,iB/FigOF,C+F9/NA,6BAEE,WAAY,CACZ,W/F+/NF,C+F5/NE,oG3FoDA,wBACQ,eJ68NV,C+F1/NA,eACE,6BAEA,aAAc,CADd,gB/F6/NF,C+F//NA,0BAMI,iB/F4/NJ,C+FlgOA,2BAUI,gB/F2/NJ,C+FrgOA,wCAcI,kB/F0/NJ,C+Ft/NE,iEAEI,oBAAsB,CAGtB,e/Fu/NJ,C+F5/NA,kCAQM,oBAAqB,CACrB,oBAAsB,CAEtB,mB/Fs/NN,C+FjgOA,sCAiBM,gB/Fm/NN,C+FpgOA,2CAsBM,UAAW,CAKX,cAAe,CAFf,WAAY,CAGZ,gBAAiB,CAPjB,iBAAkB,CAGlB,U/Fo/NN,CACF,C+F3+NA,0DAEI,+BACE,a/F4+NJ,CACF,C+Fv+NA,oCACE,cACE,iB/Fy+NF,C+F1+NA,2BAII,aAAc,CACd,oBAAsB,CAKtB,gBAHA,U/F0+NJ,CACF,C+Fl+NA,yBACE,QAAW,CACX,S/Fo+NF,C+Ft+NA,4BAKI,Q/Fo+NJ,C+Fh+NA,4BACE,6BAEA,sB/Fk+NF,C+Fr+NA,qDAMI,UAAW,CACX,U/Fk+NJ,C+Fz+NA,uDAWM,uBAA2B,CAD3B,qBAAsB,CAEtB,kBACA,aAAc,CAId,WAAY,CAFZ,aAAgB,CAChB,U/Fk+NN,C+Fl/NA,oDAsBI,UAAW,CAGX,iBAAkB,CAFlB,U/Fg+NJ,C+Fv/NA,mEAkCM,cAAe,CAHf,WAAY,CAIZ,gBAAiB,CAPjB,iBAAkB,CAClB,OAAQ,CAGR,U/F+9NN,C+F//NA,uDAwCI,gB/F09NJ,C+FlgOA,mHA+CM,eAHA,QAAW,CACX,S/F29NN,C+FxgOA,yDAqDM,cACA,eAHA,c/F09NN,C+F7gOA,4DA0DM,kB/Fs9NN,C+Fh9NE,+DACE,e/Fm9NF,CACF,C+Fj9NE,+DACE,kBACA,kB/Fo9NF,CACF,C+Fj9NA,yBACE,6BAEA,sB/Fm9NF,C+Fh9NA,8BACE,UAAW,CAGX,iBAAkB,CAFlB,U/Fm9NF,C+Fr9NA,6CAaI,cAAe,CAHf,WAAY,CAIZ,gBAAiB,CAPjB,iBAAkB,CAClB,OAAQ,CAGR,U/Fk9NJ,C+F38NA,iCACE,gBAAiB,CACjB,cACA,iB/F68NF,C+Fh9NA,uEAUI,eAHA,QAAW,CACX,S/F88NJ,C+Ft9NA,mCAeI,eADA,c/F48NJ,C+F19NA,sCAmBI,iBAAkB,CAElB,WADA,O/F28NJ,C+Fx8NI,0EACE,aAAc,CAEd,gBAEA,e/Fy8NJ,CACF,C+Fr8NA,gCACE,mBACA,a/Fu8NF,C+Fp8NA,4BACE,mBACA,UAAW,CACX,U/Fs8NF,C+Fn8NA,kCACE,QAAW,CACX,gB/Fq8NF,C+Fj8NA,qBAEE,YAAa,CADb,iBAAkB,CAElB,W/Fm8NF,C+F/7NA,sBACE,kBAIA,YAHA,0BAEA,U/Fi8NF,CgG7sOA,uEAEE,kBhG+sOF,CgG7sOE,8UAME,eAAgB,CAFhB,SAAY,CAIZ,ehGitOJ,CgG7tOA,+EAgBI,qBAAsB,CAEtB,WAAY,CAEZ,gBAAiB,CAHjB,UhGmtOJ,CgG3sOA,sBAEE,chG6sOF,CiGxuOA,uCAEI,SjGyuOJ,CiG3uOA,4CAMI,sBAAuB,CACvB,kBAAmB,CACnB,UAAW,CAKX,WAAY,CAHZ,kBAAoB,CACpB,SAAY,CAIZ,iBAAkB,CAClB,OAAQ,CAJR,UjG2uOJ,CiGvvOA,2DAsBM,cAAe,CAFf,WAAY,CAGZ,gBAAiB,CAJjB,UjG0uON,CiGjuOI,iGAGE,sBAAuB,CACvB,WAAY,C7FkChB,wBACQ,gB6FhCJ,gBAAiB,CADjB,YAAa,CAEb,iBACA,UjGouON,CkGxwOA,YAGE,UAAW,CAFX,QAAW,CACX,SlG2wOF,CkG7wOA,eAMI,eAAgB,CAChB,QAAW,CACX,SlG0wOJ,CmGnxOA,oCACE,wBACE,YnGqxOF,CmGlxOA,WACE,aAAc,CAEd,mBADA,WnGqxOF,CmGjxOA,eACE,QnGmxOF,CACF,CmG/wOA,WACE,cnGixOF,CmGlxOA,kBAII,QnGixOJ,CmGrxOA,0BAQI,WAAY,CACZ,UnGgxOJ,CmG9wOI,8DAGE,WAAY,CAFZ,cAAe,CAGf,UnGgxOJ,CACF,CmGhyOA,wBAoBI,gBnG+wOJ,CmGnyOA,0BAwBI,aAAc,CAOd,eAFA,enGywOJ,CmGtyOA,uCAmCM,eAAgB,CADhB,cnG6wON,CmG/yOA,uBAwCI,gBnG0wOJ,CmGtwOE,8DAII,eAFA,cnGywOJ,CmG3wOA,uCAOM,YnGuwON,CmG9wOA,uBAaI,iBAAkB,CADlB,cnGswOJ,CmGlxOA,mDAqBI,anGmwOJ,CACF,CmG9vOA,cACE,WnGgwOF,CmG9vOE,kDACE,enGiwOF,CACF,CmGtwOA,0BAQI,gBnGiwOJ,CmGzwOA,qBAmBI,eACA,eAAmB,CAHnB,cnGiwOJ,CmGlxOA,4BAwBI,yBAEA,UnG4vOJ,CmGvvOA,oCACE,uBACE,YnGyvOF,CACF,CmGtvOA,oCACE,0BACE,YnGwvOF,CACF,CmGpvOA,WAEE,oBADA,gBnGuvOF,CmGlvOA,qBACE,anGovOF,CmGrvOA,oCAII,UAAW,CAEX,cAAe,CACf,gBnGmvOJ,CmG1vOA,uBAaI,mBnGkvOJ,CmG9uOA,yBACE,yBAEA,UnG+uOF,CmG5uOA,oBACE,yBAEA,UnG6uOF,CmG1uOA,wBACE,yBAEA,UnG2uOF,CmGxuOA,uBACE,yBAEA,UnGyuOF,CmGruOA,wBAEI,iBnGsuOJ,CmGxuOA,yBAMI,gBnGquOJ,CmG3uOA,eAYI,eAAkB,CADlB,kBAAmB,CADnB,enGsuOJ,CmG/tOA,kBAGE,6BACA,gBnG+tOF,CmGnuOA,uBAOI,kBnG+tOJ,CmGtuOA,mCAWI,oBnG8tOJ,CmGzuOA,2BAeI,anG6tOJ,CmG5uOA,2CAmBI,UAAW,CACX,YAGA,iBAAkB,CAFlB,UnG6tOJ,CmGlvOA,mCA2BI,gBnG0tOJ,CmGrvOA,kCAiCI,uBAA2B,CAD3B,qBAAsB,CAEtB,kBAHA,aAAc,CAKd,YADA,UnG0tOJ,CmG7vOA,iCA8CI,cAAe,CALf,WAAY,CAMZ,gBAAiB,CAJjB,iBAAkB,CAClB,OAAQ,CAJR,UnG6tOJ,CmGptOI,qMAKE,cACA,oBnGstON,CmG7wOA,+CA+DI,cACA,eAJA,QAAW,CACX,SnGstOJ,CoGx9OA,qCAII,eAFA,QpG09OJ,CoG59OA,kCAUI,eAFA,QpGw9OJ,CoGl9OA,2BACE,oBpGo9OF,CoGj9OA,0BAIE,WAAY,CAHZ,YAAe,CAEf,UpGm9OF,CoG/8OA,yBACE,WAAY,CACZ,apGi9OF,CoG98OA,8BAME,oBAAqB,CALrB,kBACA,cAAe,CAEf,eAAgB,CAChB,kBpGg9OF,CqGl/OA,mBAGE,cAFA,kBrGq/OF,CqGh/OA,+BAEE,sBAAuB,CADvB,YrGm/OF,CqG9+OA,yBACE,gBrGg/OF,CqGj/OA,uCAII,yBAEA,UrG++OJ,CqG1+OA,+BACE,kBrG4+OF,CqG7+OA,8CAKI,kBAAmB,CAMnB,mBACA,kBACA,cATA,YAAa,CAIb,YAFA,sBAAuB,CAGvB,UrG8+OJ,CqGv/OA,8CAkBI,kBAAmB,CADnB,YAAa,CAIb,eAFA,sBrG0+OJ,CqGn+OA,kCACE,QrGq+OF,CqGj+OA,kCAGE,eAFA,iBrGo+OF,CqG/9OA,+BAGE,eAFA,QrGk+OF,CqGn+OA,kCAMI,iBrGg+OJ,CqG99OI,6CACE,crGg+ON,CqG19OA,6CAEI,QAAW,CAKX,eAHA,kBACA,SrG49OJ,CqGx9OI,wDACE,crG09ON,CqGp9OA,oCACE,+BACE,crGs9OF,CqGn9OA,mCACE,UAAW,CACX,crGq9OF,CqGv9OA,6CAOI,eAFA,iBrGs9OJ,CqGl9OI,wDACE,crGo9ON,CACF,CqG/8OA,oCACE,+BAIE,YAAa,CADb,aAAc,CADd,wBAAyB,CAGzB,WrGg9OF,CqG78OA,eACE,QrG+8OF,CqG58OA,yBACE,iBrG88OF,CACF,CsG9kPA,qBAEE,QAAW,CADX,StGilPF,CsGllPA,oCAMI,aADA,StGilPJ,CsGtlPA,gCAUI,gBtG+kPJ,CsGzlPA,oCAcI,atG8kPJ,CsG5lPA,oCAkBI,atG6kPJ,CsGzkPA,6BACE,iBAAkB,CAClB,kBtG2kPF,CsGvkPE,oCC1BA,mGAGI,iBvGwmPJ,CuG3mPA,sDAQI,eADA,WvGymPJ,CAVF,CuGxlPA,oCACE,wDAGI,iBACA,mBACA,avGomPJ,CuGzmPA,sDASI,UvGomPJ,CuG7mPA,oFAYM,cvGqmPN,CuGjnPA,sDAoBI,eAFA,kBADA,evGsmPJ,CuGvnPA,oEAuBM,cvGomPN,CACF,CwG7oPA,cACE,kBxG+oPF,CwG3oPA,mBAEE,kBAAmB,CADnB,YxG8oPF,CwG/oPA,uBAMI,YADA,UxG8oPJ,CwGzoPA,2BAEE,MxG6oPF,CwGxoPA,yDAJE,kBAAmB,CAFnB,YAAa,CAGb,sBxGgpPF,CwGtoPA,4BACE,kBxGwoPF,CwGroPA,mBAEE,kBAAmB,CAKnB,kBANA,YAAa,CAOb,eAHA,YAFA,sBAAuB,CAMvB,iBALA,UxG2oPF,CwGpoPE,+HAKE,yBACA,cACA,oBxGsoPJ,CwGjoPE,mJAKE,yBACA,UxGmoPJ,CwG9nPA,6BACE,MxGgoPF,CwG5nPE,kKAOE,cAFA,eAGA,wBxG6nPJ,CwGznPA,6BACE,cxG2nPF,CwGznPE,iLAKE,cACA,wBxG2nPJ,CwGtnPE,sLAKE,axGwnPJ,CwGnnPA,6BACE,iBxGqnPF,CwGlnPA,iCACE,UxGonPF,CwGjnPA,8EAGI,SxGknPJ,CwG7mPA,gCACE,kBAEA,kBxG8mPF,CwG3mPA,6BAGE,kBAEA,eACA,eAAiB,CALjB,exGgnPF,CwGzmPE,8MAOE,mBADA,cAEA,oBxG2mPJ,CwGvmPI,0ZAOE,6BAA8B,CAD9B,UxG0mPN,CwGpmPA,mCACE,0BACA,gBxGsmPF,CwGnmPA,gEACE,yBxGqmPF,CwGjmPA,+BAEE,kBADA,UxGomPF,CwG/lPA,mCACE,iBxGimPF,CwGlmPA,uCAII,iBxGimPJ,CwG5lPA,qCAIE,eAAgB,CAFhB,kBAIA,sBAAuB,CADvB,kBAAmB,CAJnB,WxGkmPF,CwGnmPA,mOAaI,cACA,cxG6lPJ,CwGxlPA,oEAEE,iBxG0lPF,CwGtlPA,+DAEE,YxGwlPF,CwGrlPA,oCAEE,cACE,kBACA,kBxGslPF,CwGxlPA,yDAOI,aAAc,CADd,eAAgB,CAEhB,cxGslPJ,CwGjlPA,yBACE,YxGmlPF,CwGhlPA,4BACE,oBxGklPF,CwG9kPA,4BACE,YxGglPF,CACF,CwG7kPA,oCAEE,mBACE,axG8kPF,CwG/kPA,uBAMI,YADA,UxG8kPJ,CwGxkPA,2BACE,iBAAkB,CAClB,mBxG0kPF,CwGtkPA,8BAEE,MAAO,CADP,mBxGykPF,CwGtkPE,kCAEE,mBADA,UxGykPJ,CwGnkPA,oEAEE,YxGqkPF,CwGjkPA,mCACE,aAAc,CACd,iBxGmkPF,CwGrkPA,6CAKI,WxGmkPJ,CwGxkPA,4DAQM,cxGmkPN,CACF,CwG7jPA,qCAEE,mCAAqC,CADrC,UxGgkPF,CwG5jPA,gBACE,IACE,UxG8jPF,CACF,CwG1jPA,4BACE,SxG4jPF,CwGzjPA,gCAGE,mBAEA,WAAY,CACZ,0BAFA,cAHA,iBxG+jPF,CwGvjPA,4EAEE,mBACA,axGyjPF,CwGtjPA,uCACE,mBACA,UxGwjPF,CyGj4PA,mBAEI,aAAc,CACd,azGk4PJ,CyG73PA,kCACE,UzG+3PF,CyG73PE,sEACE,WzGg4PF,CyGj4PA,sCAKI,WAAY,CAEZ,iBAAkB,CAClB,OAAQ,CAJR,UzGm4PJ,CACF,CyG13PA,2BACE,UAAW,CACX,czG43PF,CyG13PE,+DACE,mBACA,SzG63PF,CACF,CyG33PE,+DACE,UAAW,CACX,gBAAiB,CACjB,UzG83PF,CACF,CyG53PE,+DACE,iBACA,SzG+3PF,CyGj4PA,sCAKI,czG+3PJ,CACF,CyG13PA,8BAGE,sBAAuB,CAFvB,azG63PF,CyG93PA,8HAQI,aAAc,CACd,UAAW,CAGX,eAFA,gBzG43PJ,CyGx3PI,kKACE,gBzG63PJ,CACF,CyG74PA,0CAoBI,czG43PJ,CyGz3PE,kEACE,gBzG43PF,CyG73PA,mFAKI,WAAY,CACZ,eAAgB,CAEhB,iBAAkB,CAClB,OAAQ,CAER,uBzG03PJ,CACF,CyGv3PE,kEACE,czG03PF,CyG33PA,mFAKI,ezG03PJ,CACF,CyGr3PA,6BACE,aAAc,CAEd,iBAAkB,CAClB,OzGs3PF,CyG13PA,kCAOI,aAAc,CACd,UzGs3PJ,CyGn3PE,iEACE,WAAY,CACZ,ezGs3PF,CACF,CyGp4PA,0CAiBI,iBzGs3PJ,CyGp3PI,8EAME,cAAe,CAFf,WAAY,CAGZ,gBAAiB,CANjB,KAAQ,CAER,UzGy3PJ,CACF,CyGn3PI,8EAQE,cAAe,CAFf,WAAY,CAGZ,gBAAiB,CANjB,gBAAiB,CAFjB,OAAQ,CAIR,UzGu3PJ,CACF,CyG92PA,uIASI,cAAe,CALf,WAAY,CAMZ,gBAAiB,CAJjB,iBAAkB,CAClB,OzGg3PJ,CyGv3PA,yFAiBM,ezG02PN,CyGp2PA,iPAMM,azGs2PN,CyGn2PI,yIACE,azGw2PJ,CyGz2PE,iPAKI,UAAW,CAEX,gBzG22PN,CyGl3PE,0HAYI,gBAAiB,CADjB,cAAe,CAGf,gBzG22PN,CyGz3PE,wJAuBI,aAAc,CALd,UAAW,CAMX,eAAgB,CAJhB,iBAAkB,CAClB,QzG62PN,CACF,CyGv2PI,yIACE,UAAW,CAIX,eAHA,cAAe,CAIf,iBAAkB,CAHlB,SzG82PJ,CyGj3PE,uHASI,eACA,ezG62PN,CACF,CyGx2PA,gLAKM,oBAAqB,CACrB,UzGy2PN,CyG/2PA,yFAUM,czGy2PN,CyGn3PA,uFAcM,iBzGy2PN,CyGt1PA,0DAEE,+BACE,czG+1PF,CyG31PA,kCACE,YzG61PF,CACF,C0GpmQA,4BAEE,cADA,iB1GumQF,C0GxmQA,yCAKI,iB1GsmQJ,C0GjmQA,mBACE,aAAc,CAId,eAFA,eADA,S1GqmQF,C0GvmQA,sBAQI,oBAAqB,CACrB,eAAgB,CAChB,gB1GkmQJ,C0G5mQA,gCAgBI,UAAW,CAFX,gBAAiB,CACjB,iB1GkmQJ,C0GjnQA,0CAoBI,cACA,e1GgmQJ,C0G3lQA,oCACE,qBAEE,oBAAqB,CADrB,Y1G8lQF,C0G1lQA,4BAEE,iB1G4lQF,CACF,C0GxlQA,oCACE,4BAGE,iBAFA,iBAAkB,CAClB,Q1G2lQF,C0GvlQA,6BACE,kB1GylQF,C0GtlQA,mBACE,c1GwlQF,C2GnpQA,qBACE,aAAc,CACd,a3GupQF,CALF,C2G7oQA,iCACE,U3GqpQF,C2GtpQA,yEAKI,iB3GqpQJ,C2G1pQA,iFASM,WAAY,CADZ,U3GupQN,C2GlpQE,qHAQM,UAAW,CAHX,WAAY,CAEZ,iBAAkB,CAHlB,U3GspQN,C2G1oQA,iCACE,UAAW,CACX,S3G8oQF,CALF,C2GpoQA,0BACE,gBACA,a3G4oQF,C2G9oQA,+BAKI,aAAc,CACd,U3G4oQJ,C2GlpQA,yCAUI,aAEA,iBAAkB,CAClB,O3G0oQJ,C2GvoQE,8DACE,UAAW,CACX,S3G0oQF,C2GpoQA,+BACE,UAAW,CACX,S3GwoQF,CALF,C4G1sQA,iBAGE,cACA,eAHA,gBAIA,iB5GitQF,C4G7sQE,sDACE,gB5GgtQF,CACF,C4G9sQE,sDACE,mB5GitQF,C4GltQA,qBAII,iBAAkB,CAClB,O5GitQJ,C4GttQA,8BASI,e5GgtQJ,CACF,C6GnuQA,MAIE,eAAgB,CAAE,UAAY,CAH9B,aAAc,CACd,eAAgB,CAChB,Y7G8uQF,C6G1uQA,yDAIE,U7G4uQF,C6GzuQA,eACE,iB7G2uQF,C6GxuQA,yCAGE,U7G0uQF,C6GvuQA,aACE,e7GyuQF,C6GtuQA,0BAEE,UAAW,CACX,iB7GwuQF,C6GruQA,0BAEE,U7GuuQF,C6GpuQA,mCAEE,U7GsuQF,C6GnuQA,uCAEE,U7GquQF,C6GluQA,aACE,U7GouQF,C6GjuQA,WACE,U7GmuQF,C6GhuQA,uEAKE,U7GkuQF,C6G/tQA,aACE,wBAAyB,CACzB,U7GiuQF,C6G9tQA,aACE,a7GguQF,C6G7tQA,4DAIE,U7G+tQF,C8GrzQA,YAMI,eAAiB,CAEjB,qBAAsB,CACtB,iBAAkB,CAClB,kCAHA,UAAY,CAHZ,YAAa,CADb,MAAO,CAEP,eAAgB,CAMhB,eAAgB,CAVhB,kBACA,KAAM,CAUN,uB9GuzQJ,C8GpzQA,0BAII,+BAAgC,CAChC,aAAc,CAFd,cAAe,CAGf,cAAe,CACf,eAAiB,CALjB,UAAW,CADX,W9G4zQJ,C8GnzQA,iCACI,aAAc,CACd,WAAY,CAGZ,cAAe,CACf,eAAmB,CAFnB,iBAAkB,CADlB,e9GwzQJ,C8GlzQA,gCACI,c9GozQJ,C8GjzQA,iBACI,eAAmB,CACnB,U9GmzQJ,C8GjzQA,uBACI,U9GmzQJ,C8GjzQA,mBACI,U9GmzQJ,C8GjzQA,wBACI,UAAY,CACZ,Q9GmzQJ,C8GjzQA,eAEI,gBAEA,YACA,gBAAiB,CACjB,eAAgB,CAHhB,S9GszQJ,C8GjzQA,kBAGI,4BAA6B,CAC7B,cAAe,CAHf,aAAc,CACd,gB9GszQJ,C8GjzQA,kBAEI,UAAW,CADX,iBAAkB,CAElB,e9GmzQJ,C+Gr3QA,KACE,YAAa,CACb,oB/Gu3QF,CgHz3QA,YACE,iGhH23QF,CgHt3QA,YACE,iGhHw3QF,CgHn3QA,YACE,kGhHq3QF,CgHh3QA,YACE,mGhHk3QF,CgH72QA,YACE,uGhH+2QF,CgH12QA,aACE,yGhH42QF,CgHv2QA,aACE,0GhHy2QF,CiH54QE,8IAME,mBACA,yB7GyDF,wBACQ,gB6GxDN,ajH+4QJ,CiH14QE,iI3FhBA,yBACA,WtBi6QF,CiH14QE,sCAEE,mBACA,yB7GuCF,wBACQ,gB6GtCN,ajH64QJ,CiHx4QE,2PAME,mBACA,yB7GyBF,wBACQ,gB6GxBN,ajH24QJ,CiHr4QI,uOAOE,iBjHu4QN,CiH77QE,8IAME,mBACA,yB7GyDF,wBACQ,gB6GxDN,UjHg8QJ,CiH37QE,iI3FhBA,yBACA,WtBk9QF,CiH37QE,sCAEE,mBACA,yB7GuCF,wBACQ,gB6GtCN,UjH87QJ,CiHz7QE,2PAME,mBACA,yB7GyBF,wBACQ,gB6GxBN,UjH47QJ,CiHt7QI,uOAOE,iBjHw7QN,CiH9+QE,8IAME,mBACA,yB7GyDF,wBACQ,gB6GxDN,UjHi/QJ,CiH5+QE,iI3FhBA,yBACA,WtBmgRF,CiH5+QE,sCAEE,mBACA,yB7GuCF,wBACQ,gB6GtCN,UjH++QJ,CiH1+QE,2PAME,mBACA,yB7GyBF,wBACQ,gB6GxBN,UjH6+QJ,CiHv+QI,uOAOE,iBjHy+QN,CiH/hRE,wIAME,mBACA,yB7GyDF,wBACQ,gB6GxDN,UjHkiRJ,CiH7hRE,4H3FhBA,yBACA,WtBojRF,CiH7hRE,oCAEE,mBACA,yB7GuCF,wBACQ,gB6GtCN,UjHgiRJ,CiH3hRE,qPAME,mBACA,yB7GyBF,wBACQ,gB6GxBN,UjH8hRJ,CiHxhRI,gOAOE,iBjH0hRN,CiHlhRE,sNAME,mBACA,yB7GLF,wBACQ,gB6GMN,ajHqhRJ,CiHhhRE,6L3F9EA,yBACA,WtBqmRF,CiHhhRE,8DAEE,mBACA,yB7GvBF,wBACQ,gB6GwBN,ajHmhRJ,CiH9gRE,+PAME,mBACA,yB7GrCF,wBACQ,gB6GsCN,ajHihRJ,CiH3gRI,2TAOE,mBACA,yB7GrDJ,wBACQ,gB6GsDJ,iBjH8gRN,CiHvkRE,sNAME,mBACA,yB7GLF,wBACQ,gB6GMN,UjH0kRJ,CiHrkRE,6L3F9EA,yBACA,WtB0pRF,CiHrkRE,8DAEE,mBACA,yB7GvBF,wBACQ,gB6GwBN,UjHwkRJ,CiHnkRE,+PAME,mBACA,yB7GrCF,wBACQ,gB6GsCN,UjHskRJ,CiHhkRI,2TAOE,mBACA,yB7GrDJ,wBACQ,gB6GsDJ,iBjHmkRN,CiHr+QA,4BAEI,iBjHs+QJ,CiH/nRE,wOAME,uBACA,yB7GLF,wBACQ,gB6GMN,ajHkoRJ,CiH7nRE,4M3F9EA,yBACA,WtBktRF,CiH7nRE,oEAEE,mBACA,yB7GvBF,wBACQ,gB6GwBN,ajHgoRJ,CiH3nRE,iRAME,mBACA,yB7GrCF,wBACQ,gB6GsCN,ajH8nRJ,CiHxnRI,gVAOE,uBACA,yB7GrDJ,wBACQ,gB6GsDJ,iBjH2nRN,CiH7hRA,6BAoBI,iBjH4gRJ,CiHvrRE,8OAME,mBACA,yB7GLF,wBACQ,gB6GMN,UjH0rRJ,CiHrrRE,iN3F9EA,yBACA,WtB0wRF,CiHrrRE,sEAEE,mBACA,yB7GvBF,wBACQ,gB6GwBN,UjHwrRJ,CiHnrRE,uRAME,mBACA,yB7GrCF,wBACQ,gB6GsCN,UjHsrRJ,CiHhrRI,uVAOE,mBACA,yB7GrDJ,wBACQ,gB6GsDJ,iBjHmrRN,CkH1yRE,yMAGE,cACA,elH+yRJ,CkHnzRE,iFAGE,cACA,elHqzRJ,CkHzzRE,0LAGE,cACA,elH8zRJ,CkHl0RE,kiBAGE,WACA,elHg1RJ,CkHp1RE,iFAGE,cACA,elHs1RJ,CkH11RE,qfAGE,cACA,elHw2RJ,CkH52RE,uFAGE,cACA,elH82RJ,CkHl3RE,8EAGE,cACA,elHo3RJ,CkHx3RE,oFAGE,cACA,elH03RJ,CkHx0RA,uBAGI,mBADA,elH00RJ,CkH50RA,uBAOI,YlHw0RJ,CmHt4RA,yCAEE,qBACA,kCnHw4RF,CmHt4RE,qDACE,qBACA,kCnHy4RJ,CmHr4RA,8BACE,qBACA,kCnHu4RF,CmHr4RE,oCACE,qBACA,kCnHu4RJ,CmHn4RA,gCACE,qBACA,kCnHq4RF,CmHn4RE,sCACE,qBACA,kCnHq4RJ,CmHh4RA,mBACE,enHk4RF,CmHn4RA,+BAMI,cACA,eAHA,cnHo4RJ,CmHx4RA,6BAWI,QnHg4RJ,CoH56RA,cACE,mBJwBA,wGIvBA,cpH+6RF,CoHj7RA,gBAOI,UpH66RJ,CoHp7RA,mBAYM,mBACA,qBAEA,apH06RN,CoHv6RI,kDAEE,mBACA,qBAEA,apHw6RN,CoHr6RI,0BACE,mBACA,qBAEA,apHs6RN,CqHp8RA,eACE,WAAY,CLYZ,kGhH27RF,CqHj8RA,uCAII,cAFA,aAAc,CAGd,erHi8RJ,CqHt8RA,4CAWI,eAFA,erHi8RJ,CqH18RA,2DAiBM,UAAW,CAKX,cAAe,CAFf,WAAY,CANZ,gBAAiB,CAEjB,iBAAkB,CAGlB,UrH+7RN,CqHv7RA,8BACE,mBrHy7RF,CqHt7RA,sBACE,wBrHw7RF,CqHr7RA,8MAQM,qBAAsB,CAEtB,arHo7RN,CqH96RA,sBACE,QrHg7RF,CsH3+RA,eACE,kBAAmB,CACnB,0BtH6+RF,CsHz+RA,4BACE,eAAgB,CAChB,iBtH2+RF,CsHv+RA,+BACE,iBtHy+RF,CuHt/RA,yBACE,yBvHw/RF,CuHr/RA,yBAIE,avHs/RF,CuHn/RA,iDANE,6BACA,iBvH4/RF,CuHl/RA,wBACE,6BAGA,cACA,eAAiB,CAHjB,gBvHs/RF,CuH/+RA,0DAGI,avHg/RJ,CuH5+RA,sDAII,eAAgB,CAFhB,eAAgB,CAChB,kBvH8+RJ,CuHj/RA,qDASI,eAAgB,CAChB,sBAAuB,CAFvB,kBvH8+RJ,CuHv+RA,wBACE,kBvHy+RF,CuHv+RE,mCACE,gBvHy+RJ,CuHr+RA,2CACE,evHu+RF,CwH9hSA,eACE,exHgiSF,CwHjiSA,+BAII,6BAGA,cAFA,gBxHiiSJ,CwH7hSI,mEACE,iBxHgiSJ,CwHjiSE,8CAII,UAAW,CACX,kBxHgiSN,CACF,CwH/iSA,gHAqBM,axH+hSN,CwHpjSA,8EA0BM,axH8hSN,CwH1hSM,6JAGE,axH4hSR,CwHzhSM,4GAEE,axH2hSR,CyHlkSA,YACE,iBzHokSF,CyHrkSA,6BAII,0BACA,0BzHokSJ,CyHzkSA,yCASI,wBzHmkSJ,CyH5kSA,wCAaI,2BzHkkSJ,CyH9jSA,+BAEE,oBADA,iBAGA,iBzH+jSF,CyHnkSA,iCAOI,azH+jSJ,C0HvlSA,UtHkEE,wBACQ,eJwhSV,C0HvlSA,2BACE,gBAAiB,CACjB,iBAAkB,CAClB,iB1HylSF,C0HvlSE,uCACE,e1HylSJ,C0HtlSE,sCACE,kB1HwlSJ,C0HrlSE,8FAGE,mBACA,WAAY,CAEZ,a1HslSJ,C0HnlSE,oGAGE,mBAEA,a1HolSJ,C0HhlSI,4OAME,mBAEA,WACA,e1HilSN,C0H1lSI,sRAYI,mBAEA,a1HqlSR,C2HtoSA,+BACE,iB3HwoSF,C4HzoSA,OACE,WAAY,CACZ,iB5H2oSF,C4H7oSA,2CAMI,e5H2oSJ,C4HjpSA,oBAUI,a5H0oSJ,C4HppSA,+BAcI,e5HyoSJ,C4HvpSA,2CAkBI,e5HwoSJ,C4H1pSA,gBAsBI,e5HuoSJ,C4HroSI,4BACE,Y5HuoSN,C4HhqSA,uBA6BM,WAAY,CAEZ,cACA,e5HqoSN,C4H/nSA,kCACE,a5HioSF,C6HxqSA,YACE,yBACA,e7H0qSF,C6HvqSA,qDAEE,oB7HyqSF,C6HrqSA,kBACE,Q7HuqSF,C6HnqSA,oCAEE,a7HqqSF,C8HtrSA,wCAEI,mBACA,kBACA,e9HurSJ,C8H3rSA,0CAWI,cACA,cAAe,CAJf,WAAY,CAKZ,gBAAiB,CAJjB,U9HyrSJ,C8HlsSA,iDAiBI,wB9HorSJ,C8HrsSA,gEAoBM,U9HorSN,C8HhrSE,+DACE,a9HmrSF,CACF,C8H/qSA,2BACE,iB9HirSF,C8H/qSE,+DACE,yB9HkrSF,CACF,C8H/qSA,kEAEI,e9HgrSJ,C8H9qSI,sGACE,c9HirSJ,CACF,C8H5qSA,6GAII,a9H6qSJ,C8HjrSA,mHAUI,a9H4qSJ,C8HvqSA,gBACE,a9HyqSF,C8HrqSA,uCACE,c9HuqSF,C8HrqSE,kDACE,e9HuqSJ,C8HlqSA,0BACE,qBAAsB,CACtB,iB9HoqSF,C8HhqSA,qCACE,iB9HkqSF,C8HhqSE,yEACE,e9HmqSF,CACF,C8HhqSA,mCACE,cACA,c9HkqSF,C8HpqSA,4HAOI,a9HkqSJ,C8HxpSI,4RAGE,a9H+pSN,C8H5pSI,gKAGE,a9H8pSN,C8HxpSA,yBACE,a9H0pSF,C8H3pSA,wCAKI,iBADA,a9H2pSJ,C8HvpSE,6DAGE,eAFA,gB9H2pSF,C8H5pSA,wCAMI,a9HypSJ,CACF,C+HrySA,oBACE,wB/HuySF,C+HpySA,4BACE,kB/HsySF,C+HnySA,yCACE,a/HqySF,C+HtySA,wDAOI,cAAe,CAFf,WAAY,CAGZ,gBAAiB,CA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C0Iz2TA,8BACE,a1I22TF,C0Ix2TI,2IAGE,cACA,e1I02TN,C0Iv2TI,iJAGE,a1Iy2TN,C0Iv3TA,6CAmBI,cACA,e1Iu2TJ,C0In2TA,sBACE,a1Iq2TF,C2Il4TA,0BACE,a3Io4TF,C2I73TA,6DACE,a3Ik4TF,C2I/3TA,oCACE,a3Ii4TF,C4I94TA,mIAMI,a5Ig5TJ,C4It5TA,wJAaI,a5I+4TJ,C6I55TA,mCACE,wB7I85TF,C6I35TA,+CACE,Q7I65TF,C6I15TA,+DAEI,e7I25TJ,C8Il1TA,0BAjFI,oB9Is6TJ,C8Ir1TA,kOArEM,a9Iq6TN,C8I51TA,0BArFI,oB9Io7TJ,C8I/1TA,kOAzEM,a9Im7TN,C8It2TA,0BAzFI,oB9Ik8TJ,C8Iz2TA,kOA7EM,a9Ii8TN,C8Ih3TA,yBA7FI,oB9Ig9TJ,C8In3TA,2NAjFM,a9I+8TN,C8Iz3TA,+BA/EI,gBACA,yBACA,kBACA,Y9I28TJ,C8Ip8TM,0WAME,a9Iy8TR,C8I14TA,uCAzDI,a9Is8TJ,C8Iz4TA,+BAnFI,gBACA,yBACA,kBACA,Y9I+9TJ,C8Ix9TM,0WAME,a9I69TR,C8I15TA,uCA7DI,a9I09TJ,C8Iz5TA,+BAvFI,gBACA,yBACA,kBACA,Y9Im/TJ,C8I5+TM,0WAME,a9Ii/TR,C8I16TA,uCAjEI,a9I8+TJ,C8Iz6TA,8BA3FI,gBACA,yBACA,kBACA,Y9IugUJ,C8IhgUM,mWAME,a9IqgUR,C8I17TA,sCArEI,a9IkgUJ,C8Ix7TA,qCArEE,8BACA,iB9IggUF,C8Iz/TI,0XAME,a9I8/TN,C8Iv8TA,qCArEE,8BACA,iB9I+gUF,C8IxgUI,0XAME,a9I6gUN,C8It9TA,qCArEE,8BACA,iB9I8hUF,C8IvhUI,0XAME,a9I4hUN,C8Ir+TA,oCArEE,8BACA,iB9I6iUF,C8ItiUI,mXAME,a9I2iUN,C8Ij+TA,+SA3DM,a9IuiUN,C8Ix+TA,+SA/DM,a9IkjUN,C8I/+TA,+SAnEM,a9I6jUN,C8It/TA,wSAvEM,a9IwkUN","sources":["webpack://misago/./src/style/index.less","webpack://misago/./node_modules/bootstrap/less/normalize.less","webpack://misago/./node_modules/bootstrap/less/print.less","webpack://misago/./node_modules/bootstrap/less/scaffolding.less","webpack://misago/./node_modules/bootstrap/less/mixins/vendor-prefixes.less","webpack://misago/./node_modules/bootstrap/less/mixins/tab-focus.less","webpack://misago/./node_modules/bootstrap/less/mixins/image.less","webpack://misago/./node_modules/bootstrap/less/type.less","webpack://misago/./node_modules/bootstrap/less/mixins/text-emphasis.less","webpack://misago/./node_modules/bootstrap/less/mixins/background-variant.less","webpack://misago/./node_modules/bootstrap/less/mixins/text-overflow.less","webpack://misago/./node_modules/bootstrap/less/code.less","webpack://misago/./node_modules/bootstrap/less/grid.less","webpack://misago/./node_modules/bootstrap/less/mixins/grid.less","webpack://misago/./node_modules/bootstrap/less/responsive-utilities.less","webpack://misago/./node_modules/bootstrap/less/mixins/grid-framework.less","webpack://misago/./node_modules/bootstrap/less/tables.less","webpack://misago/./node_modules/bootstrap/less/mixins/table-row.less","webpack://misago/./node_modules/bootstrap/less/forms.less","webpack://misago/./node_modules/bootstrap/less/mixins/forms.less","webpack://misago/./node_modules/bootstrap/less/buttons.less","webpack://misago/./node_modules/bootstrap/less/mixins/buttons.less","webpack://misago/./node_modules/bootstrap/less/mixins/opacity.less","webpack://misago/./node_modules/bootstrap/less/component-animations.less","webpack://misago/./node_modules/bootstrap/less/dropdowns.less","webpack://misago/./node_modules/bootstrap/less/mixins/nav-divider.less","webpack://misago/./node_modules/bootstrap/less/mixins/reset-filter.less","webpack://misago/./node_modules/bootstrap/less/navs.less","webpack://misago/./node_modules/bootstrap/less/mixins/border-radius.less","webpack://misago/./node_modules/bootstrap/less/navbar.less","webpack://misago/./node_modules/bootstrap/less/mixins/nav-vertical-align.less","webpack://misago/./node_modules/bootstrap/less/utilities.less","webpack://misago/./node_modules/bootstrap/less/breadcrumbs.less","webpack://misago/./node_modules/bootstrap/less/alerts.less","webpack://misago/./node_modules/bootstrap/less/mixins/alerts.less","webpack://misago/./node_modules/bootstrap/less/labels.less","webpack://misago/./node_modules/bootstrap/less/mixins/labels.less","webpack://misago/./node_modules/bootstrap/less/progress-bars.less","webpack://misago/./node_modules/bootstrap/less/mixins/gradients.less","webpack://misago/./node_modules/bootstrap/less/mixins/progress-bar.less","webpack://misago/./node_modules/bootstrap/less/button-groups.less","webpack://misago/./node_modules/bootstrap/less/input-groups.less","webpack://misago/./node_modules/bootstrap/less/media.less","webpack://misago/./node_modules/bootstrap/less/list-group.less","webpack://misago/./node_modules/bootstrap/less/mixins/list-group.less","webpack://misago/./node_modules/bootstrap/less/panels.less","webpack://misago/./node_modules/bootstrap/less/mixins/panels.less","webpack://misago/./node_modules/bootstrap/less/pager.less","webpack://misago/./node_modules/bootstrap/less/pagination.less","webpack://misago/./node_modules/bootstrap/less/mixins/pagination.less","webpack://misago/./node_modules/bootstrap/less/responsive-embed.less","webpack://misago/./node_modules/bootstrap/less/wells.less","webpack://misago/./node_modules/bootstrap/less/close.less","webpack://misago/./node_modules/bootstrap/less/badges.less","webpack://misago/./node_modules/bootstrap/less/modals.less","webpack://misago/./node_modules/bootstrap/less/mixins/clearfix.less","webpack://misago/./node_modules/bootstrap/less/mixins/center-block.less","webpack://misago/./node_modules/bootstrap/less/mixins/hide-text.less","webpack://misago/./node_modules/bootstrap/less/mixins/responsive-visibility.less","webpack://misago/./src/style/misago/scaffolding.less","webpack://misago/./src/style/misago/flex-row.less","webpack://misago/./src/style/misago/auth-message.less","webpack://misago/./src/style/misago/alerts-snackbar.less","webpack://misago/./src/style/misago/agreement-overlay.less","webpack://misago/./src/style/misago/loaders.less","webpack://misago/./src/style/misago/navbar.less","webpack://misago/./src/style/misago/navs.less","webpack://misago/./src/style/misago/breadcrumbs.less","webpack://misago/./src/style/misago/material-icons.less","webpack://misago/./src/style/misago/modals.less","webpack://misago/./src/style/misago/forms.less","webpack://misago/./src/style/misago/inputs.less","webpack://misago/./src/style/misago/buttons.less","webpack://misago/./src/style/misago/dropdowns.less","webpack://misago/./src/style/misago/category-label.less","webpack://misago/./src/style/misago/thread-flags.less","webpack://misago/./src/style/misago/thread-replies.less","webpack://misago/./src/style/misago/thread-user-card.less","webpack://misago/./src/style/misago/search-dropdown.less","webpack://misago/./src/style/misago/page-header.less","webpack://misago/./src/style/misago/page-container.less","webpack://misago/./src/style/misago/panels.less","webpack://misago/./src/style/misago/footer.less","webpack://misago/./src/style/misago/ui-preview.less","webpack://misago/./src/style/misago/pager.less","webpack://misago/./src/style/misago/pagination.less","webpack://misago/./src/style/misago/poll.less","webpack://misago/./src/style/misago/user-status.less","webpack://misago/./src/style/misago/user-card.less","webpack://misago/./src/style/misago/toolbar.less","webpack://misago/./src/style/misago/type.less","webpack://misago/./src/style/misago/markup.less","webpack://misago/./src/style/misago/change-avatar.less","webpack://misago/./src/style/misago/categories-lists.less","webpack://misago/./src/style/misago/posting.less","webpack://misago/./src/style/misago/editor.less","webpack://misago/./src/style/misago/participants.less","webpack://misago/./src/style/misago/poll-editor.less","webpack://misago/./src/style/misago/posts-list.less","webpack://misago/./src/style/misago/post.less","webpack://misago/./src/style/misago/post-feed.less","webpack://misago/./src/style/misago/event.less","webpack://misago/./src/style/misago/post-changelog.less","webpack://misago/./src/style/misago/message-pages.less","webpack://misago/./src/style/misago/threads-lists.less","webpack://misago/./src/style/misago/active-posters.less","webpack://misago/./src/style/misago/user-profile.less","webpack://misago/./src/style/misago/username-history.less","webpack://misago/./src/style/misago/search.less","webpack://misago/./highlight/styles/foundation.css","webpack://misago/./node_modules/at.js/dist/css/jquery.atwho.css","webpack://misago/./src/style/flavor/typo.less","webpack://misago/./src/style/flavor/shadows.less","webpack://misago/./src/style/flavor/buttons.less","webpack://misago/./src/style/flavor/social-buttons.less","webpack://misago/./src/style/flavor/inputs.less","webpack://misago/./src/style/flavor/auth-message.less","webpack://misago/./src/style/flavor/dropdowns.less","webpack://misago/./src/style/flavor/navbar.less","webpack://misago/./src/style/flavor/search-dropdown.less","webpack://misago/./src/style/flavor/page-footer.less","webpack://misago/./src/style/flavor/list-group.less","webpack://misago/./src/style/flavor/navs.less","webpack://misago/./src/style/flavor/username-history.less","webpack://misago/./src/style/flavor/panels.less","webpack://misago/./src/style/flavor/form.less","webpack://misago/./src/style/flavor/categories-lists.less","webpack://misago/./src/style/flavor/participants.less","webpack://misago/./src/style/flavor/poll.less","webpack://misago/./src/style/flavor/posting.less","webpack://misago/./src/style/flavor/post.less","webpack://misago/./src/style/flavor/post-feed.less","webpack://misago/./src/style/flavor/event.less","webpack://misago/./src/style/flavor/user-card.less","webpack://misago/./src/style/flavor/progress-bars.less","webpack://misago/./src/style/flavor/markup.less","webpack://misago/./src/style/flavor/modals.less","webpack://misago/./src/style/flavor/wells.less","webpack://misago/./src/style/flavor/active-posters.less","webpack://misago/./src/style/flavor/message-pages.less","webpack://misago/./src/style/flavor/user-options.less","webpack://misago/./src/style/flavor/profile-details.less","webpack://misago/./src/style/flavor/ranks-flavors.less"],"sourcesContent":["/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: none;\n  text-decoration: underline;\n  text-decoration: underline dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\nmark {\n  background: #ff0;\n  color: #000;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\nsup {\n  top: -0.5em;\n}\nsub {\n  bottom: -0.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  box-sizing: content-box;\n  height: 0;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit;\n  font: inherit;\n  margin: 0;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: textfield;\n  box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n  border: 0;\n  padding: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n* {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #172b4d;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #0065ff;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #0747a6;\n  text-decoration: underline;\n}\na:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n  -o-transition: all 0.2s ease-in-out;\n  transition: all 0.2s ease-in-out;\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #ebecf0;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n[role=\"button\"] {\n  cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: 400;\n  line-height: 1;\n  color: #7a869a;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #7a869a;\n}\n.text-primary {\n  color: #0052cc;\n}\na.text-primary:hover,\na.text-primary:focus {\n  color: #003d99;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #0052cc;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n  background-color: #003d99;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #ebecf0;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n  margin-left: -5px;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: 700;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 700px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    clear: left;\n    text-align: right;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #ebecf0;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #7a869a;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: \"\\2014 \\00A0\";\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #ebecf0;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: \"\";\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: \"\\00A0 \\2014\";\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: 700;\n  box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #344563;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.row-no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n}\n.row-no-gutters [class*=\"col-\"] {\n  padding-right: 0;\n  padding-left: 0;\n}\n.col-xs-1,\n.col-sm-1,\n.col-md-1,\n.col-lg-1,\n.col-xs-2,\n.col-sm-2,\n.col-md-2,\n.col-lg-2,\n.col-xs-3,\n.col-sm-3,\n.col-md-3,\n.col-lg-3,\n.col-xs-4,\n.col-sm-4,\n.col-md-4,\n.col-lg-4,\n.col-xs-5,\n.col-sm-5,\n.col-md-5,\n.col-lg-5,\n.col-xs-6,\n.col-sm-6,\n.col-md-6,\n.col-lg-6,\n.col-xs-7,\n.col-sm-7,\n.col-md-7,\n.col-lg-7,\n.col-xs-8,\n.col-sm-8,\n.col-md-8,\n.col-lg-8,\n.col-xs-9,\n.col-sm-9,\n.col-md-9,\n.col-lg-9,\n.col-xs-10,\n.col-sm-10,\n.col-md-10,\n.col-lg-10,\n.col-xs-11,\n.col-sm-11,\n.col-md-11,\n.col-lg-11,\n.col-xs-12,\n.col-sm-12,\n.col-md-12,\n.col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0%;\n}\n@media (min-width: 768px) {\n  .col-sm-1,\n  .col-sm-2,\n  .col-sm-3,\n  .col-sm-4,\n  .col-sm-5,\n  .col-sm-6,\n  .col-sm-7,\n  .col-sm-8,\n  .col-sm-9,\n  .col-sm-10,\n  .col-sm-11,\n  .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0%;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1,\n  .col-md-2,\n  .col-md-3,\n  .col-md-4,\n  .col-md-5,\n  .col-md-6,\n  .col-md-7,\n  .col-md-8,\n  .col-md-9,\n  .col-md-10,\n  .col-md-11,\n  .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0%;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1,\n  .col-lg-2,\n  .col-lg-3,\n  .col-lg-4,\n  .col-lg-5,\n  .col-lg-6,\n  .col-lg-7,\n  .col-lg-8,\n  .col-lg-9,\n  .col-lg-10,\n  .col-lg-11,\n  .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0%;\n  }\n}\ntable {\n  background-color: transparent;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #7a869a;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: 0.01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #344563;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: 700;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  -webkit-appearance: none;\n  appearance: none;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #172b4d;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #172b4d;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ced0da;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  background-color: #ebecf0;\n  opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n}\ntextarea.form-control {\n  height: auto;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm,\n  .input-group-sm input[type=\"date\"],\n  .input-group-sm input[type=\"time\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg,\n  .input-group-lg input[type=\"date\"],\n  .input-group-lg input[type=\"time\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: 400;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: 400;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\n.form-control-static {\n  min-height: 34px;\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 30px;\n  min-height: 32px;\n  padding: 6px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 46px;\n  min-height: 38px;\n  padding: 11px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #3462af;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 11px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n    font-size: 12px;\n  }\n}\n.btn {\n  display: inline-block;\n  margin-bottom: 0;\n  font-weight: normal;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  touch-action: manipulation;\n  cursor: pointer;\n  background-image: none;\n  border: 1px solid transparent;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  border-radius: 4px;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #172b4d;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  opacity: 0.65;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n.btn-default {\n  color: #172b4d;\n  background-color: #ebecf0;\n  border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n  color: #172b4d;\n  background-color: #ced0da;\n  border-color: #8c8c8c;\n}\n.btn-default:hover {\n  color: #172b4d;\n  background-color: #ced0da;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #172b4d;\n  background-color: #ced0da;\n  background-image: none;\n  border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n  color: #172b4d;\n  background-color: #b9bdcb;\n  border-color: #8c8c8c;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n  background-color: #ebecf0;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #ebecf0;\n  background-color: #172b4d;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #6554c0;\n  border-color: #5643b7;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n  color: #fff;\n  background-color: #4d3da4;\n  border-color: #2a215a;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #4d3da4;\n  border-color: #41338a;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #4d3da4;\n  background-image: none;\n  border-color: #41338a;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n  color: #fff;\n  background-color: #41338a;\n  border-color: #2a215a;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n  background-color: #6554c0;\n  border-color: #5643b7;\n}\n.btn-primary .badge {\n  color: #6554c0;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #00c853;\n  border-color: #00af48;\n}\n.btn-success:focus,\n.btn-success.focus {\n  color: #fff;\n  background-color: #00953e;\n  border-color: #002f14;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #00953e;\n  border-color: #00712f;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #00953e;\n  background-image: none;\n  border-color: #00712f;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n  color: #fff;\n  background-color: #00712f;\n  border-color: #002f14;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n  background-color: #00c853;\n  border-color: #00af48;\n}\n.btn-success .badge {\n  color: #00c853;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #3d5afe;\n  border-color: #2444fe;\n}\n.btn-info:focus,\n.btn-info.focus {\n  color: #fff;\n  background-color: #0a2ffe;\n  border-color: #0119a1;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: #0a2ffe;\n  border-color: #0123e3;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #0a2ffe;\n  background-image: none;\n  border-color: #0123e3;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n  color: #fff;\n  background-color: #0123e3;\n  border-color: #0119a1;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n  background-color: #3d5afe;\n  border-color: #2444fe;\n}\n.btn-info .badge {\n  color: #3d5afe;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #ffab00;\n  border-color: #e69a00;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n  color: #fff;\n  background-color: #cc8900;\n  border-color: #664400;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: #cc8900;\n  border-color: #a87100;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #cc8900;\n  background-image: none;\n  border-color: #a87100;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n  color: #fff;\n  background-color: #a87100;\n  border-color: #664400;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n  background-color: #ffab00;\n  border-color: #e69a00;\n}\n.btn-warning .badge {\n  color: #ffab00;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #ef5350;\n  border-color: #ed3c39;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n  color: #fff;\n  background-color: #eb2521;\n  border-color: #98110e;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #eb2521;\n  border-color: #d51713;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #eb2521;\n  background-image: none;\n  border-color: #d51713;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n  color: #fff;\n  background-color: #d51713;\n  border-color: #98110e;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n  background-color: #ef5350;\n  border-color: #ed3c39;\n}\n.btn-danger .badge {\n  color: #ef5350;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: 400;\n  color: #0065ff;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #0747a6;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #7a869a;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity 0.15s linear;\n  -o-transition: opacity 0.15s linear;\n  transition: opacity 0.15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-property: height, visibility;\n  transition-property: height, visibility;\n  -webkit-transition-duration: 0.35s;\n  transition-duration: 0.35s;\n  -webkit-transition-timing-function: ease;\n  transition-timing-function: ease;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-top: 4px solid \\9;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #ebecf0;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: 400;\n  line-height: 1.42857143;\n  color: #172b4d;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #172b4d;\n  text-decoration: none;\n  background-color: #ebecf0;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #172b4d;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #7a869a;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #7a869a;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px dashed;\n  border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px;\n}\n@media (min-width: 700px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #ebecf0;\n}\n.nav > li.disabled > a {\n  color: #7a869a;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #7a869a;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #ebecf0;\n  border-color: #0065ff;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #ebecf0 #ebecf0 #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #5e6c84;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #0065ff;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 54px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 700px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 700px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 700px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n@media (min-width: 700px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 700px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 700px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-brand {\n  float: left;\n  height: 54px;\n  padding: 17px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 700px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-right: 15px;\n  margin-top: 10px;\n  margin-bottom: 10px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 700px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 8.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 699px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 700px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 17px;\n    padding-bottom: 17px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-right: -15px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 699px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 700px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 12px;\n  margin-bottom: 12px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 16px;\n  margin-bottom: 16px;\n}\n.navbar-text {\n  margin-top: 17px;\n  margin-bottom: 17px;\n}\n@media (min-width: 700px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 700px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #ffffff;\n  border-color: #c1c7d0;\n}\n.navbar-default .navbar-brand {\n  color: #344563;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #344563;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #8993a4;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #505f79;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #6b778c;\n  background-color: #dfe1e6;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #c1c7d0;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #6b778c;\n  background-color: #dfe1e6;\n}\n@media (max-width: 699px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #8993a4;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #505f79;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #6b778c;\n    background-color: #dfe1e6;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #c1c7d0;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #c1c7d0;\n}\n.navbar-default .navbar-link {\n  color: #8993a4;\n}\n.navbar-default .navbar-link:hover {\n  color: #505f79;\n}\n.navbar-default .btn-link {\n  color: #8993a4;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #505f79;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #c1c7d0;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #a5aebb;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #a5aebb;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #a5aebb;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 699px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #a5aebb;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-link {\n  color: #a5aebb;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #a5aebb;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #7a869a;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #fff;\n  background-color: #00875a;\n  border-color: #00875a;\n}\n.alert-success hr {\n  border-top-color: #006e49;\n}\n.alert-success .alert-link {\n  color: #e6e6e6;\n}\n.alert-info {\n  color: #fff;\n  background-color: #448aff;\n  border-color: #448aff;\n}\n.alert-info hr {\n  border-top-color: #2a7aff;\n}\n.alert-info .alert-link {\n  color: #e6e6e6;\n}\n.alert-warning {\n  color: #fff;\n  background-color: #ff8b00;\n  border-color: #ff8b00;\n}\n.alert-warning hr {\n  border-top-color: #e67d00;\n}\n.alert-warning .alert-link {\n  color: #e6e6e6;\n}\n.alert-danger {\n  color: #fff;\n  background-color: #de350b;\n  border-color: #de350b;\n}\n.alert-danger hr {\n  border-top-color: #c62f0a;\n}\n.alert-danger .alert-link {\n  color: #e6e6e6;\n}\n.label {\n  display: inline;\n  padding: 0.2em 0.6em 0.3em;\n  font-size: 75%;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #7a869a;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #616d80;\n}\n.label-primary {\n  background-color: #0052cc;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #003d99;\n}\n.label-success {\n  background-color: #36b37e;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #2a8c62;\n}\n.label-info {\n  background-color: #3d5afe;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #0a2ffe;\n}\n.label-warning {\n  background-color: #ffab00;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #cc8900;\n}\n.label-danger {\n  background-color: #ff5630;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #fc2e00;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #ebecf0;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #6554c0;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  -webkit-transition: width 0.6s ease;\n  -o-transition: width 0.6s ease;\n  transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n  -o-animation: progress-bar-stripes 2s linear infinite;\n  animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #36b37e;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #3d5afe;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #ffab00;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #ff5630;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group .form-control:focus {\n  z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: 400;\n  line-height: 1;\n  color: #172b4d;\n  text-align: center;\n  background-color: #ebecf0;\n  border: 1px solid #ced0da;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  z-index: 2;\n  margin-left: -1px;\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media-body {\n  width: 10000px;\n}\n.media-object {\n  display: block;\n}\n.media-object.img-thumbnail {\n  max-width: none;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ebecf0;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #7a869a;\n  cursor: not-allowed;\n  background-color: #ebecf0;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #7a869a;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #0065ff;\n  background-color: #fff;\n  border-color: #ebecf0;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #ffffff;\n}\na.list-group-item,\nbutton.list-group-item {\n  color: #7a869a;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n  color: #172b4d;\n  text-decoration: none;\n  background-color: #fff;\n}\nbutton.list-group-item {\n  width: 100%;\n  text-align: left;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 14px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 14px 15px;\n  background-color: #fff;\n  border-top: 1px solid #ebecf0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ebecf0;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ebecf0;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #344563;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #fff;\n  background-color: #344563;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #0052cc;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #0052cc;\n  border-color: #0052cc;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #0052cc;\n}\n.panel-primary > .panel-heading .badge {\n  color: #0052cc;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #0052cc;\n}\n.panel-success {\n  border-color: #36b37e;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #36b37e;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #36b37e;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #36b37e;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ff5630;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ff5630;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ff5630;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ff5630;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #ebecf0;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #7a869a;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #0065ff;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  z-index: 2;\n  color: #0747a6;\n  background-color: #ebecf0;\n  border-color: #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 3;\n  color: #fff;\n  cursor: default;\n  background-color: #0052cc;\n  border-color: #0052cc;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #7a869a;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: 0.2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: 0.5;\n}\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n  appearance: none;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  background-color: #7a869a;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #0065ff;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transform: translate(0, -25%);\n  -ms-transform: translate(0, -25%);\n  -o-transform: translate(0, -25%);\n  transform: translate(0, -25%);\n  -webkit-transition: -webkit-transform 0.3s ease-out;\n  -moz-transition: -moz-transform 0.3s ease-out;\n  -o-transition: -o-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  outline: 0;\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #091e42;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: 0.5;\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #ced0da;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #ced0da;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.panel-body:before,\n.panel-body:after,\n.pager:before,\n.pager:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after,\n.agreement-footer:before,\n.agreement-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.panel-body:after,\n.pager:after,\n.modal-header:after,\n.modal-footer:after,\n.agreement-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n@media screen and (max-width: 991px) {\n  html,\n  body {\n    overflow-x: hidden;\n  }\n}\n@media screen and (min-width: 992px) {\n  .md-margin-top-no {\n    margin-top: 0px !important;\n  }\n}\n@media screen and (min-width: 768px) and (max-width: 991px) {\n  .sm-margin-top {\n    margin-top: 20px !important;\n  }\n  .sm-margin-top-no {\n    margin-top: 0px !important;\n  }\n  .sm-margin-top-half {\n    margin-top: 6.6px !important;\n  }\n  .sm-align-row-buttons {\n    margin-top: 5px !important;\n  }\n}\n@media screen and (max-width: 767px) {\n  .xs-margin-top {\n    margin-top: 20px !important;\n  }\n  .xs-margin-top-half {\n    margin-top: 6.6px !important;\n  }\n}\n.flex-row {\n  display: block;\n  margin: 0 -15px;\n}\n.flex-row-section {\n  align-items: center;\n  display: flex;\n  flex: 1;\n}\n.flex-row-section + .flex-row-section {\n  margin-top: 20px;\n}\n.flex-row-col {\n  flex: 1;\n  padding: 0 15px;\n}\n@media screen and (min-width: 768px) {\n  .flex-row {\n    display: flex;\n    align-items: center;\n  }\n  .flex-row-section + .flex-row-section {\n    margin: 0;\n  }\n  .flex-row-section,\n  .flex-row-col {\n    flex: 0;\n    align-items: center;\n  }\n  .flex-row-section.flex-row-section-auto,\n  .flex-row-section.flex-row-section-auto > .flex-row-col {\n    flex: 1;\n  }\n}\n.flex-row-col-shrink {\n  flex: 0 !important;\n}\n.auth-message {\n  background-color: #ebecf0;\n  padding: 20px 0px;\n  width: 100%;\n  position: fixed;\n  top: -100%;\n  left: 0px;\n  z-index: 1070;\n  transition: top 300ms ease;\n}\n.auth-message.show {\n  top: 0px;\n  bottom: auto;\n}\n.auth-message p {\n  padding: 5px 0px;\n  color: #172b4d;\n}\n@media screen and (max-width: 991px) {\n  .auth-message {\n    text-align: center;\n  }\n  .auth-message .btn {\n    padding: 10px 16px;\n    font-size: 18px;\n  }\n}\n.alerts-snackbar {\n  position: fixed;\n  top: -100%;\n  width: 100%;\n  z-index: 1060;\n  text-align: center;\n  font-size: 18px;\n  transition: top 300ms ease;\n  pointer-events: none;\n}\n.alerts-snackbar.in {\n  top: 0px;\n  transition: top 200ms ease;\n}\n.alerts-snackbar p {\n  display: inline-block;\n  border-radius: 0px 0px 4px 4px;\n  margin: 0px;\n  pointer-events: all;\n}\n.agreement-overlay {\n  position: fixed;\n  width: 100%;\n  height: 100%;\n  top: 0px;\n  left: 0px;\n  z-index: 1060;\n  background-color: rgba(9, 30, 66, 0.5);\n  overflow-x: scroll;\n}\n.agreement-overlay .container {\n  max-width: 900px;\n  padding: 20px 30px;\n}\n.agreement-content {\n  background-color: #fff;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  background-clip: padding-box;\n  outline: 0;\n  padding: 10px 16px;\n}\n.agreement-header {\n  padding: 10px 0;\n  border-bottom: 1px solid #ebecf0;\n}\n.agreement-header h2 {\n  margin-top: 0;\n}\n.agreement-header p {\n  margin: 0;\n  padding: 0;\n}\n.agreement-body {\n  padding: 20px 0;\n}\n.agreement-body p.lead {\n  margin: 0;\n  padding: 0;\n}\n.agreement-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #ced0da;\n  padding: 10px 0;\n}\n.agreement-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.agreement-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.agreement-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\nbody.agreement-overlay-visible {\n  overflow: hidden;\n}\n.loader {\n  width: 100%;\n  height: 49px;\n  text-align: center;\n}\n.loader.loader-spaced {\n  margin: 40px 0px;\n}\n.loader-spinning-wheel {\n  width: 49px;\n  height: 49px;\n  margin: 0 auto;\n  border: 3px solid #7a869a;\n  border-radius: 50%;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  animation: cssload-spin 575ms infinite linear;\n  -o-animation: cssload-spin 575ms infinite linear;\n  -ms-animation: cssload-spin 575ms infinite linear;\n  -webkit-animation: cssload-spin 575ms infinite linear;\n  -moz-animation: cssload-spin 575ms infinite linear;\n}\n@keyframes cssload-spin {\n  100% {\n    transform: rotate(360deg);\n  }\n}\n@-o-keyframes cssload-spin {\n  100% {\n    -o-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-ms-keyframes cssload-spin {\n  100% {\n    -ms-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-webkit-keyframes cssload-spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-moz-keyframes cssload-spin {\n  100% {\n    -moz-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n.navbar {\n  margin-bottom: 0px;\n}\n.navbar .navbar-full .navbar-brand {\n  padding-top: 11px;\n  padding-bottom: 11px;\n  font-size: 21px;\n}\n.navbar .navbar-full .navbar-brand > * {\n  display: inline-block;\n  vertical-align: middle;\n}\n.navbar .navbar-full .navbar-brand img {\n  height: 32px;\n  margin-right: 6px;\n}\n.navbar .navbar-full .navbar-nav > li > a {\n  font-size: 16.8px;\n}\n.navbar .navbar-full .navbar-icon {\n  display: block;\n  height: 54px;\n  padding: 10px 15px;\n  padding-top: 13px;\n  padding-bottom: 13px;\n  position: relative;\n  color: #8993a4;\n}\n.navbar .navbar-full .navbar-icon:hover,\n.navbar .navbar-full .navbar-icon:focus {\n  color: #505f79;\n  background-color: transparent;\n}\n.navbar .navbar-full .navbar-icon .material-icon {\n  width: 28px;\n  height: 28px;\n  font-size: 28px;\n  line-height: 28px;\n}\n.navbar .navbar-full .navbar-icon .badge {\n  background-color: #ff5630;\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  font-size: 9px;\n}\n.navbar .navbar-full .open .navbar-icon,\n.navbar .navbar-full .open .navbar-icon:hover,\n.navbar .navbar-full .open .navbar-icon:focus {\n  background-color: #dfe1e6;\n  color: #6b778c;\n}\n.navbar .navbar-full .nav-guest,\n.navbar .navbar-full .nav-user {\n  float: right;\n}\n.navbar .navbar-full .nav-guest .navbar-btn,\n.navbar .navbar-full .nav-user .navbar-btn {\n  margin-left: 15px;\n}\n.navbar .navbar-full .nav-user .dropdown-toggle {\n  padding: 10px;\n}\n.navbar .navbar-full .nav-user .dropdown-toggle img {\n  width: 34px;\n  height: 34px;\n}\n.navbar ul.navbar-compact-nav {\n  border-collapse: collapse;\n  display: table;\n  margin: 0px;\n  table-layout: fixed;\n  width: 100%;\n}\n.navbar ul.navbar-compact-nav > li {\n  display: table-cell;\n  width: 100%;\n}\n.navbar ul.navbar-compact-nav > li > a,\n.navbar ul.navbar-compact-nav > li > button {\n  background: none;\n  border: none;\n  display: block;\n  padding-top: 13px;\n  padding-bottom: 13px;\n  width: 100%;\n  color: #8993a4;\n  text-align: center;\n}\n.navbar ul.navbar-compact-nav > li > a.active,\n.navbar ul.navbar-compact-nav > li > button.active,\n.navbar ul.navbar-compact-nav > li > a:hover,\n.navbar ul.navbar-compact-nav > li > button:hover,\n.navbar ul.navbar-compact-nav > li > a:focus,\n.navbar ul.navbar-compact-nav > li > button:focus {\n  color: #6b778c;\n  background-color: #dfe1e6;\n}\n.navbar ul.navbar-compact-nav > li > a > img,\n.navbar ul.navbar-compact-nav > li > button > img {\n  width: 24px;\n  height: 24px;\n}\n.navbar ul.navbar-compact-nav > li > button {\n  display: inline-block;\n}\n.navbar ul.navbar-compact-nav > li > a > .material-icon {\n  font-size: 24px;\n  line-height: 24px;\n}\n@media (max-width: 700px) {\n  .navbar.navbar-misago {\n    min-height: auto;\n  }\n}\n.navbar-misago .navbar-desktop-nav {\n  display: none;\n}\n@media (min-width: 700px) {\n  .navbar-misago ul.navbar-compact-nav {\n    display: none;\n  }\n  .navbar-misago .navbar-desktop-nav {\n    display: block;\n  }\n}\n.nav-side > a > .material-icon {\n  margin: -5px;\n  margin-right: 10px;\n  position: relative;\n  bottom: 1px;\n  width: 24px;\n  height: 24px;\n  font-size: 24px;\n  line-height: 24px;\n}\n.nav-side > a .badge {\n  position: relative;\n  top: 1px;\n}\n.nav-pills > li > a {\n  display: flex;\n  align-items: center;\n  padding: 5px 10px;\n}\n.nav-pills > li > a .material-icon {\n  margin-right: 3px;\n}\n.nav-pills > li > a,\n.nav-pills > li > a:link,\n.nav-pills > li > a:visited {\n  background-color: #ebecf0;\n  color: #344563;\n}\n.nav-pills > li > a:focus,\n.nav-pills > li > a:hover,\n.nav-pills > li > a:active {\n  background-color: #dcdee5;\n  color: #344563;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:link,\n.nav-pills > li.active > a:visited,\n.nav-pills > li.active > a:focus,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:active {\n  background-color: #344563;\n  color: #fff;\n}\n.nav-container .btn-block {\n  margin-bottom: 20px;\n}\n.nav-container .nav {\n  margin-right: -10px;\n  margin-bottom: 30px;\n}\n.nav-container li {\n  margin-right: 10px;\n  margin-bottom: 10px;\n}\n.breadcrumbs {\n  display: block;\n  padding: 0;\n  margin-bottom: 10px;\n}\n.breadcrumbs-item {\n  display: inline-block;\n  margin-right: 15px;\n  margin-bottom: 10px;\n  padding: 0;\n  list-style: none;\n}\n.breadcrumbs-item a {\n  display: flex;\n  align-items: center;\n  text-decoration: none;\n}\n.breadcrumbs-item a,\n.breadcrumbs-item a:visited {\n  color: #5e6c84;\n}\n.breadcrumbs-item a:hover,\n.breadcrumbs-item a:focus {\n  color: #172b4d;\n}\n.breadcrumbs-item a:hover .breadcrumbs-item-name,\n.breadcrumbs-item a:focus .breadcrumbs-item-name {\n  text-decoration: underline;\n}\n.breadcrumbs-item a:active {\n  color: #172b4d;\n}\n.breadcrumbs-item .material-icon {\n  margin-right: 4px;\n}\n@font-face {\n  font-family: \"Material Icons\";\n  font-style: normal;\n  font-weight: 400;\n  src: url(./fonts/MaterialIcons-Regular.eot);\n  /* For IE6-8 */\n  src: local(\"Material Icons\"), local(\"MaterialIcons-Regular\"), url(./fonts/MaterialIcons-Regular.woff2) format(\"woff2\"), url(./fonts/MaterialIcons-Regular.woff) format(\"woff\"), url(./fonts/MaterialIcons-Regular.ttf) format(\"truetype\");\n}\n.material-icon {\n  font-family: \"Material Icons\";\n  font-weight: normal;\n  font-style: normal;\n  display: inline-block;\n  width: 1em;\n  height: 1em;\n  line-height: 1;\n  text-align: center;\n  text-transform: none;\n  letter-spacing: normal;\n  vertical-align: middle;\n  word-wrap: normal;\n  white-space: nowrap;\n  direction: ltr;\n  /* Support for all WebKit browsers. */\n  -webkit-font-smoothing: antialiased;\n  /* Support for Safari and Chrome. */\n  text-rendering: optimizeLegibility;\n  /* Support for Firefox. */\n  -moz-osx-font-smoothing: grayscale;\n  /* Support for IE. */\n  font-feature-settings: \"liga\";\n}\n.modal-toolbar {\n  background: #ebecf0;\n  border-bottom: 1px solid #ced0da;\n  overflow: auto;\n  padding: 6px 12px;\n}\n.modal-toolbar .pull-left {\n  margin-right: 8px;\n}\n.modal-toolbar p {\n  padding: 5px 0px;\n  margin-bottom: 0px;\n}\n@media screen and (max-width: 991px) {\n  .modal-message {\n    text-align: center;\n  }\n  .modal-message .message-icon {\n    margin: 30px;\n  }\n  .modal-message .message-icon .material-icon {\n    font-size: 160px;\n  }\n}\n@media screen and (min-width: 992px) {\n  .modal-message .modal-body {\n    padding-top: 20px;\n    padding-bottom: 30px;\n  }\n  .modal-message .message-icon {\n    float: left;\n    position: relative;\n    left: 7px;\n  }\n  .modal-message .message-icon .material-icon {\n    font-size: 50px;\n  }\n  .modal-message .message-body {\n    margin-left: 75px;\n    margin-top: 10px;\n  }\n  .modal-message .message-body p {\n    margin-top: 20px;\n  }\n  .modal-message .message-body .lead {\n    margin-top: 0px;\n    margin-bottom: 0px;\n  }\n}\n.modal-loader {\n  padding: 50px 0px;\n}\n.modal-loader .loader {\n  width: 100%;\n  height: 80px;\n  text-align: center;\n}\n.modal-loader .loader-spinning-wheel {\n  width: 80px;\n  height: 80px;\n}\n.modal-body .form-group {\n  min-height: 34px;\n}\n.list-item-errors {\n  margin-bottom: 20px;\n}\n.list-errored-items li:last-child .list-item-errors {\n  margin-bottom: 0px;\n}\n.modal-post-likers .media-list {\n  margin: 0px;\n}\n.modal-post-likers .item-title {\n  display: block;\n}\n.has-feedback .material-icon.form-control-feedback {\n  top: 6px;\n  right: 24px;\n  font-size: 1.42857143;\n  line-height: 1.42857143;\n}\n.well.well-form.well-done {\n  font-size: 18px;\n  text-align: center;\n}\n.well.well-form.well-done .message-icon {\n  margin-bottom: 10px;\n  font-size: 90px;\n  line-height: 90px;\n}\n.well.well-form.well-done .message-body {\n  margin-bottom: 20px;\n}\n.well.well-form.well-noscript {\n  font-size: 18px;\n  text-align: center;\n}\n.well.well-form.well-noscript .message-icon {\n  margin-bottom: 10px;\n  font-size: 90px;\n  line-height: 90px;\n}\n.btn.btn-yes-no,\n.btn.btn-select {\n  background: transparent;\n  border: 1px solid #ced0da;\n}\n.btn.btn-yes-no .material-icon,\n.btn.btn-select .material-icon {\n  margin: -4px 0px;\n  margin-right: 8px;\n  position: relative;\n  bottom: 1px;\n  width: 20px;\n  height: 20px;\n  font-size: 20px;\n  line-height: 20px;\n}\n@media screen and (max-width: 767px) {\n  .btn.btn-yes-no {\n    width: 100%;\n    overflow: auto;\n  }\n  .btn.btn-yes-no .material-icon {\n    float: left;\n    margin-top: 1px;\n  }\n  .btn.btn-yes-no .btn-text {\n    display: block;\n    margin-left: 30px;\n    text-align: left;\n    white-space: normal;\n  }\n}\ninput.hidden-file-upload {\n  position: absolute;\n  top: -9999px;\n  left: -9999px;\n}\n.form-search {\n  position: relative;\n}\n.form-search .form-control {\n  padding-right: 30px;\n}\n.form-search .material-icon {\n  position: absolute;\n  top: 5px;\n  right: 5px;\n  color: #7a869a;\n  font-size: 24px;\n  line-height: 24px;\n  pointer-events: none;\n}\n.btn.btn-loading,\n.btn.btn-loading:link,\n.btn.btn-loading:active,\n.btn.btn-loading:visited,\n.btn.btn-loading:hover,\n.btn.btn-loading:focus {\n  color: transparent;\n}\n.btn.btn-loading .loader,\n.btn.btn-loading:link .loader,\n.btn.btn-loading:active .loader,\n.btn.btn-loading:visited .loader,\n.btn.btn-loading:hover .loader,\n.btn.btn-loading:focus .loader {\n  height: 20px;\n  margin-top: -20px;\n}\n.btn.btn-loading .loader > div,\n.btn.btn-loading:link .loader > div,\n.btn.btn-loading:active .loader > div,\n.btn.btn-loading:visited .loader > div,\n.btn.btn-loading:hover .loader > div,\n.btn.btn-loading:focus .loader > div {\n  width: 20px;\n  height: 20px;\n}\n.btn.btn-loading.btn-default .loader > div {\n  border-top-color: #172b4d;\n  border-bottom-color: #172b4d;\n}\n.btn.btn-loading.btn-primary .loader > div {\n  border-top-color: #fff;\n  border-bottom-color: #fff;\n}\n.btn.btn-loading.btn-success .loader > div {\n  border-top-color: #fff;\n  border-bottom-color: #fff;\n}\n.btn.btn-loading.btn-info .loader > div {\n  border-top-color: #fff;\n  border-bottom-color: #fff;\n}\n.btn.btn-loading.btn-warning .loader > div {\n  border-top-color: #fff;\n  border-bottom-color: #fff;\n}\n.btn.btn-loading.btn-danger .loader > div {\n  border-top-color: #fff;\n  border-bottom-color: #fff;\n}\n.btn .material-icon {\n  margin-right: 3px;\n  position: relative;\n  bottom: 1px;\n}\n.btn-icon .material-icon {\n  margin: -1px -4px;\n  width: 20px;\n  height: 20px;\n  font-size: 20px;\n  line-height: 20px;\n}\n.btn-icon .btn-text {\n  margin-left: 10px;\n}\n.btn-icon .btn-text-left {\n  margin-right: 10px;\n}\n.btn-block.btn-icon {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n.dropdown-menu > li > a,\n.dropdown-menu > li > .btn-link,\n.modal-menu > li > a,\n.modal-menu > li > .btn-link {\n  display: block;\n  border: none;\n  clear: both;\n  float: none;\n  padding: 6px 20px;\n  width: 100%;\n  color: #172b4d;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > .btn-link:hover,\n.modal-menu > li > a:hover,\n.modal-menu > li > .btn-link:hover,\n.dropdown-menu > li > a:focus,\n.dropdown-menu > li > .btn-link:focus,\n.modal-menu > li > a:focus,\n.modal-menu > li > .btn-link:focus {\n  background-color: #ebecf0;\n  color: #172b4d;\n  text-decoration: none;\n}\n.dropdown-menu > li > a:active,\n.dropdown-menu > li > .btn-link:active,\n.modal-menu > li > a:active,\n.modal-menu > li > .btn-link:active {\n  background-color: #ebecf0;\n  color: #172b4d;\n  text-decoration: none;\n}\n.dropdown-menu > li > a:disabled,\n.dropdown-menu > li > .btn-link:disabled,\n.modal-menu > li > a:disabled,\n.modal-menu > li > .btn-link:disabled {\n  color: rgba(23, 43, 77, 0.5);\n}\n.dropdown-menu > li > a .material-icon,\n.dropdown-menu > li > .btn-link .material-icon,\n.modal-menu > li > a .material-icon,\n.modal-menu > li > .btn-link .material-icon {\n  margin: -2px 0px;\n  margin-right: 7px;\n  position: relative;\n  bottom: 1px;\n  font-size: 18px;\n}\n.dropdown-menu > li > a .badge,\n.dropdown-menu > li > .btn-link .badge,\n.modal-menu > li > a .badge,\n.modal-menu > li > .btn-link .badge {\n  float: right;\n  position: relative;\n  top: 1px;\n}\n.modal-menu {\n  margin: 20px 0px;\n  padding: 0px;\n}\n.modal-menu > li {\n  margin: 6.66666667px 0px;\n  padding: 0px;\n  list-style: none;\n}\n.dropdown-menu {\n  min-width: 210px;\n}\n.dropdown-menu .dropdown-footer {\n  padding: 6px 20px;\n}\n.dropdown-menu .dropdown-buttons {\n  padding: 2px 20px;\n  padding-bottom: 7px;\n}\n.dropdown-menu .dropdown-buttons .btn {\n  margin: 4px 0px;\n}\n.mobile-dropdown {\n  position: relative;\n}\n.mobile-dropdown.open > .dropdown-menu,\n.compact-nav.open > .dropdown-menu {\n  border: none;\n  border-radius: 0;\n  display: block;\n  margin: 0px;\n  width: 100%;\n}\n.user-dropdown .guest-preview {\n  text-align: center;\n}\n.user-dropdown .guest-preview .row {\n  margin: 0px;\n}\n.navbar .user-dropdown {\n  width: 240px;\n}\n.user-dropdown .dropdown-header {\n  padding: 6px 20px;\n  font-size: 18px;\n}\n.user-dropdown .dropdown-header strong {\n  font-weight: normal;\n}\n@media screen and (min-width: 992px) {\n  .category-picker .dropdown-menu {\n    width: 300px;\n  }\n}\n.category-picker .dropdown-menu > li > .btn-link {\n  white-space: normal;\n  word-wrap: break-word;\n}\n@media screen and (max-width: 767px) {\n  .dropdown-menu.stick-to-bottom {\n    border-radius: 0px;\n    border: none;\n    max-height: 300px;\n    overflow-y: auto;\n    -webkit-box-shadow: 0px 0px 30px #7a869a;\n    box-shadow: 0px 0px 30px #7a869a;\n    clear: both;\n    top: auto;\n    width: 100%;\n    position: fixed;\n    bottom: 0px;\n    margin: 0px;\n    padding: 0px;\n    padding-bottom: 20px;\n  }\n  .dropdown-menu.stick-to-bottom li {\n    float: none;\n    margin: 0px;\n    clear: both;\n  }\n  .dropdown-menu.stick-to-bottom li > a,\n  .dropdown-menu.stick-to-bottom li > .btn {\n    padding-top: 15px;\n    padding-bottom: 15px;\n    border-bottom: 1px solid #ebecf0;\n  }\n}\n.category-label {\n  border-radius: 0.25em;\n  padding: 0.2em 0.6em 0.3em;\n}\n.category-label-color,\n.category-label-color:link,\n.category-label-color:focus,\n.category-label-color:active,\n.category-label-color:visited,\n.category-label-color:hover {\n  color: #fff;\n}\n.category-label-no-color,\n.category-label-no-color:link,\n.category-label-no-color:focus,\n.category-label-no-color:active,\n.category-label-no-color:visited,\n.category-label-no-color:hover {\n  background-color: #ebecf0;\n  color: #344563;\n}\n.thread-flags {\n  display: flex;\n  align-items: center;\n  opacity: 0.8;\n  margin: 0;\n  padding: 0;\n}\n.thread-flags li {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 20px;\n  height: 20px;\n  border-radius: 3px;\n  list-style-type: none;\n  cursor: default;\n}\n.thread-flags li + li {\n  margin-left: 7.5px;\n}\n.thread-flags .material-icon {\n  font-size: 16px;\n  line-height: 16px;\n}\n.thread-flag-pinned-globally {\n  color: #2563eb;\n  background: #dbeafe;\n}\n.thread-flag-pinned-locally {\n  color: #3b82f6;\n  background: #dbeafe;\n}\n.thread-flag-answered {\n  color: #4d7c0f;\n  background: #d9f99d;\n}\n.thread-flag-poll {\n  color: #c026d3;\n  background: #f5d0fe;\n}\n.thread-flag-unapproved {\n  color: #ffffff;\n  background: #dc2626;\n}\n.thread-flag-closed {\n  color: #dc2626;\n  background: #fecaca;\n}\n.thread-flag-hidden {\n  color: #ffffff;\n  background: #64748b;\n}\n.threads-replies {\n  display: flex;\n  align-items: center;\n  color: #5e6c84;\n  font-size: 16px;\n  font-weight: bold;\n}\n.threads-replies .material-icon {\n  margin-right: 7.5px;\n  transform: matrix(-1, 0, 0, 1, 0, 0);\n}\n.thread-user-card {\n  display: flex;\n  align-items: center;\n}\n.thread-user-card-media {\n  flex: 0;\n  margin-right: 15px;\n}\n.thread-user-card-media img {\n  border-radius: 3px;\n}\n.thread-user-card-body {\n  flex: 1;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.navbar-misago .dropdown-menu.dropdown-search-results {\n  margin: 0px;\n  padding-top: 0px;\n  width: 400px;\n  left: auto;\n  right: 0px;\n}\n.dropdown-search-results .form-group {\n  margin: 0px;\n  padding: 12px;\n}\nli.dropdown-search-message {\n  text-align: center;\n}\n.dropdown-search-thread {\n  width: 100%;\n}\n.dropdown-search-thread h5 {\n  margin: 0px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.dropdown-search-thread small {\n  display: block;\n  margin: 0px;\n  margin-top: 4px;\n}\n.page-header {\n  margin: 0;\n  margin-top: 10px;\n}\n.page-header-banner-bg-overlay {\n  padding: 20px 0;\n}\n.page-header h1 {\n  margin: 0;\n  overflow-wrap: break-word;\n}\n.page-container {\n  padding-top: 20px;\n}\n@media screen and (max-width: 991px) {\n  .panel-message-body {\n    text-align: center;\n  }\n  .panel-message-body .message-icon {\n    margin: 30px;\n  }\n  .panel-message-body .message-icon .material-icon {\n    font-size: 160px;\n  }\n}\n@media screen and (min-width: 992px) {\n  .panel-message-body {\n    padding: 20px;\n    padding-bottom: 30px;\n  }\n  .panel-message-body .message-icon {\n    float: left;\n  }\n  .panel-message-body .message-icon .material-icon {\n    font-size: 50px;\n  }\n  .panel-message-body .message-body {\n    margin-left: 65px;\n    margin-top: 10px;\n  }\n  .panel-message-body .message-body .lead {\n    margin-bottom: 0px;\n  }\n  .panel-message-body .message-body .help-block {\n    margin-top: 13.2px;\n  }\n}\n.panel-body-loading {\n  padding: 0px;\n  text-align: center;\n}\n.misago-footer {\n  margin-top: 30px;\n  margin-bottom: 50px;\n}\n.misago-footer .footer-content {\n  border-top: 1px solid #ebecf0;\n  padding-top: 30px;\n}\n.misago-footer .noscript-message .material-icon {\n  position: relative;\n  bottom: 1px;\n  font-size: 18px;\n}\n.ui-preview {\n  color: #ebecf0;\n  -webkit-animation: ui-preview-animation 1s linear infinite;\n  -o-animation: ui-preview-animation 1s linear infinite;\n  animation: ui-preview-animation 1s linear infinite;\n}\n@keyframes ui-preview-animation {\n  0% {\n    filter: alpha(opacity=100);\n    opacity: 1;\n  }\n  50% {\n    filter: alpha(opacity=10);\n    opacity: 0.1;\n  }\n  100% {\n    filter: alpha(opacity=100);\n    opacity: 1;\n  }\n}\n.ui-preview-text {\n  background: #ebecf0;\n  border-radius: 100px;\n  display: inline-block;\n  height: 14px;\n  position: relative;\n  top: 3px;\n}\n.ui-preview-paragraph .ui-preview-text {\n  margin-right: 6px;\n}\n.ui-preview-paragraph .ui-preview-text:last-child {\n  margin-right: 0px;\n}\n.ui-preview-img {\n  background: #ebecf0;\n  border-radius: 5px;\n}\n.pager-undercontent {\n  margin-top: -20px;\n}\n.pager-more {\n  text-align: center;\n}\n@media screen and (min-width: 992px) {\n  .pager-more .btn {\n    padding-left: 20px;\n    padding-right: 20px;\n  }\n}\n.misago-pagination {\n  display: flex;\n}\n.misago-pagination .btn {\n  display: block;\n  width: 100%;\n}\n.misago-pagination .btn + .btn {\n  margin-left: 30px;\n}\n@media screen and (max-width: 767px) {\n  .toolbar-item .misago-pagination {\n    flex: 1;\n  }\n}\n.panel-poll h2 {\n  margin-top: 0px;\n}\n.poll-select-choice .btn,\n.poll-select-choice .btn:active,\n.poll-select-choice .btn:focus,\n.poll-select-choice .btn:hover {\n  background: transparent;\n  border: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  margin: 6px 0px;\n  padding: 0px;\n  padding-left: 6px;\n  outline: none;\n  text-align: left;\n}\n.poll-select-choice .btn .material-icon {\n  margin-right: 6px;\n  height: 28px;\n  width: 28px;\n  font-size: 28px;\n  line-heigh: 28px;\n  color: #ced0da;\n}\n.poll-select-choice .btn.btn-selected .material-icon {\n  color: #0052cc;\n}\n.poll-help {\n  font-size: 12px;\n}\n.poll-chart-selected .material-icon {\n  margin-right: 4px;\n  position: relative;\n  bottom: 1px;\n  height: 14px;\n  width: 14px;\n  color: #36b37e;\n  font-size: 14px;\n  line-heigh: 14px;\n}\n.poll-options {\n  margin-bottom: 0px;\n}\n@media screen and (max-width: 767px) {\n  .poll-options {\n    margin-top: -6px;\n  }\n  .poll-options .btn {\n    margin: 6px 0px;\n  }\n}\n.user-status.user-banned .status-icon {\n  color: #ff5630;\n}\n.user-status.user-online .status-icon {\n  color: #36b37e;\n}\n.user-status.user-offline .status-icon {\n  color: #7a869a;\n}\n@media screen and (min-width: 768px) {\n  .user-card {\n    text-align: center;\n  }\n}\n.user-card-small-avatar img {\n  width: 100%;\n  height: auto;\n}\n@media screen and (min-width: 768px) {\n  .user-card-small-avatar {\n    display: none;\n  }\n}\n@media screen and (max-width: 767px) {\n  .user-card-avatar {\n    display: none;\n  }\n}\n.toolbar {\n  display: block;\n  margin: 0 -15px;\n}\n.toolbar-section {\n  justify-items: center;\n  display: flex;\n  flex: 1;\n  margin-bottom: 20px;\n}\n.toolbar-item {\n  flex: 1;\n  padding: 0 15px;\n}\n.toolbar-item h3,\n.toolbar-item p {\n  margin: 0;\n}\n.toolbar-item-shrink {\n  flex: 0;\n}\n.toolbar-spacer {\n  display: none;\n}\n@media screen and (min-width: 768px) {\n  .toolbar {\n    display: flex;\n  }\n  .toolbar-section,\n  .toolbar-item {\n    flex: 0;\n    align-items: center;\n  }\n  .toolbar-section.toolbar-section-auto,\n  .toolbar-section.toolbar-section-auto .toolbar-item {\n    flex: 1;\n  }\n  .toolbar-spacer {\n    display: block;\n    flex: 1;\n  }\n  .toolbar-item .form-search {\n    width: 250px;\n  }\n}\n@media screen and (max-width: 767px) {\n  .toolbar-item p {\n    text-align: center;\n  }\n}\nabbr {\n  border: none !important;\n}\n.item-title {\n  color: #172b4d;\n  font-weight: bold;\n  text-decoration: none;\n}\na.item-title:link,\na.item-title:active,\na.item-title:visited,\na.item-title:hover {\n  color: #172b4d;\n  font-weight: bold;\n}\na.item-title:hover {\n  text-decoration: underline;\n}\n.message-line {\n  text-align: center;\n}\n.message-line .material-icon {\n  margin-right: 6.66666667px;\n  font-size: 20px;\n  line-height: 20px;\n  height: 20px;\n  width: 20px;\n}\n.text-ellipsis {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.misago-markup h1,\n.misago-markup h2,\n.misago-markup h3,\n.misago-markup h4,\n.misago-markup h5,\n.misago-markup h6,\n.misago-markup p {\n  word-wrap: break-word;\n}\n.misago-markup h1,\n.misago-markup h2,\n.misago-markup h3,\n.misago-markup h4,\n.misago-markup h5,\n.misago-markup h6 {\n  margin-top: 40px;\n}\n.misago-markup > *,\n.misago-markup blockquote > * {\n  margin: 20px 0px;\n}\n.misago-markup > *:first-child,\n.misago-markup blockquote > *:first-child {\n  margin-top: 0px;\n}\n.misago-markup > *:last-child,\n.misago-markup blockquote > *:last-child {\n  margin-bottom: 0px;\n}\n.misago-markup img {\n  max-width: 100%;\n  max-height: 500px;\n}\n.misago-markup .quote-block,\n.misago-markup blockquote {\n  background: #ebecf0;\n  border: none;\n  font-size: 14px;\n}\n.misago-markup .quote-block .quote-heading,\n.misago-markup blockquote .quote-heading {\n  border-bottom: 1px solid #d4d6df;\n  padding: 10px 20px;\n  font-size: 12px;\n  font-weight: bold;\n}\n.misago-markup > .quote-block,\n.misago-markup > blockquote {\n  border: 1px solid #d4d6df;\n}\n.misago-markup .quote-body {\n  background: #fff;\n  margin: 0px;\n  padding: 20px;\n}\n.misago-markup .quote-body > .quote-block,\n.misago-markup .quote-body > blockquote {\n  border: 1px solid #d4d6df;\n}\n.misago-markup .spoiler-block {\n  background: #ebecf0;\n  border: none;\n  font-size: 14px;\n}\n.misago-markup > .spoiler-block {\n  border: 1px solid #d4d6df;\n  position: relative;\n}\n.misago-markup .spoiler-body {\n  background: #fff;\n  margin: 0px;\n  padding: 20px;\n}\n.misago-markup .spoiler-overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: #fff;\n}\n.misago-markup .spoiler-block.revealed .spoiler-overlay {\n  display: none;\n}\n.misago-markup ul {\n  list-style-type: square;\n}\n.misago-markup ul li {\n  list-style-type: square;\n}\n.misago-markup ol {\n  list-style-type: decimal;\n}\n.misago-markup ol li {\n  list-style-type: decimal;\n}\n.misago-markup pre {\n  background: #eee;\n  border: none;\n  padding: 10px;\n  overflow: hidden;\n  color: #000;\n}\n.misago-markup pre code.hljs {\n  margin: -10px;\n  padding: 9.5px;\n}\n.modal-change-avatar .modal-avatar-index .avatar-preview {\n  border-radius: 6px;\n  margin: 0px auto;\n  overflow: hidden;\n  position: relative;\n  width: 200px;\n  height: 200px;\n}\n.modal-change-avatar .modal-avatar-index .avatar-preview .loader {\n  display: none;\n  position: absolute;\n  top: 50px;\n  height: 100px;\n}\n.modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel {\n  border-width: 10px;\n  border-color: #fff;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  width: 100px;\n  height: 100px;\n}\n.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading img {\n  filter: alpha(opacity=33);\n  opacity: 0.33;\n}\n.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading .loader {\n  display: block;\n}\n@media (max-width: 699px) {\n  .modal-change-avatar .modal-avatar-index .avatar-preview {\n    margin-bottom: 20px;\n    width: 150px;\n    height: 150px;\n  }\n  .modal-change-avatar .modal-avatar-index .avatar-preview img {\n    width: 150px;\n    height: 150px;\n  }\n  .modal-change-avatar .modal-avatar-index .avatar-preview .loader {\n    top: 25px;\n    height: 100px;\n  }\n  .modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel {\n    width: 100px;\n    height: 100px;\n  }\n}\n.modal-change-avatar .modal-avatar-index .btn {\n  text-align: left;\n}\n.modal-change-avatar .modal-avatar-upload {\n  text-align: center;\n}\n.modal-change-avatar .modal-avatar-upload .btn-pick-file {\n  background: transparent;\n  border: 2px solid #ebecf0;\n  border-radius: 6px;\n  padding: 10px 24px;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  color: #7a869a;\n  font-size: 18px;\n  text-align: center;\n}\n.modal-change-avatar .modal-avatar-upload .btn-pick-file > .material-icon {\n  display: block;\n  margin: 0px auto;\n  margin-bottom: 13.2px;\n  font-size: 50px;\n  width: 50px;\n  height: 50px;\n}\n.modal-change-avatar .modal-avatar-upload .btn-pick-file:hover,\n.modal-change-avatar .modal-avatar-upload .btn-pick-file:active {\n  border-color: #0052cc;\n  color: #0052cc;\n}\n.modal-change-avatar .modal-avatar-upload .text-muted {\n  margin-top: 13.2px;\n}\n.modal-change-avatar .modal-avatar-upload .upload-progress img {\n  border-radius: 4px;\n  margin-bottom: 20px;\n  max-height: 80px;\n  width: auto;\n}\n.modal-change-avatar .modal-avatar-upload .upload-progress .progress {\n  width: 70%;\n  margin: 0px auto;\n}\n.modal-avatar-crop .crop-form {\n  margin: 0px auto;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input {\n  margin-top: 10px;\n  -webkit-appearance: none;\n  border: 1px solid white;\n  width: 100%;\n  /*hide the outline behind the border*/\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 8px;\n  background: #ebecf0;\n  border: none;\n  border-radius: 3px;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  border: none;\n  height: 20px;\n  width: 20px;\n  border-radius: 50%;\n  background: #7a869a;\n  margin-top: -6px;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus {\n  outline: none;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-webkit-slider-runnable-track {\n  background: #ebecf0;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-track {\n  width: 100%;\n  height: 8px;\n  background: #ebecf0;\n  border: none;\n  border-radius: 4px;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-thumb {\n  border: none;\n  height: 20px;\n  width: 20px;\n  border-radius: 50%;\n  background: #7a869a;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input:-moz-focusring {\n  outline: 1px solid white;\n  outline-offset: -1px;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-track {\n  width: 100%;\n  height: 8px;\n  /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */\n  background: transparent;\n  /*leave room for the larger thumb to overflow with a transparent border */\n  border-color: transparent;\n  border-width: 8px 0;\n  /*remove default tick marks*/\n  color: transparent;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-lower {\n  background: #ebecf0;\n  border-radius: 16px;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-upper {\n  background: #ebecf0;\n  border-radius: 16px;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-thumb {\n  border: none;\n  height: 20px;\n  width: 20px;\n  border-radius: 50%;\n  background: #7a869a;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-lower {\n  background: #ebecf0;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-upper {\n  background: #ebecf0;\n}\n.modal-change-avatar .modal-avatar-gallery {\n  padding-bottom: 0px;\n}\n.modal-change-avatar .modal-avatar-gallery .avatars-gallery {\n  margin-bottom: 20px;\n}\n.modal-change-avatar .modal-avatar-gallery .avatars-gallery h3 {\n  margin-top: 0px;\n}\n.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .row {\n  margin-bottom: 10px;\n}\n.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn {\n  border-radius: 6px;\n  border: 2px solid #ebecf0;\n  background: none;\n  padding: 2px;\n  position: relative;\n}\n.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:hover,\n.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:focus {\n  border-color: #7a869a;\n}\n.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn.avatar-selected,\n.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:active {\n  border-color: #0065ff;\n}\n.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn img {\n  border-radius: 4px;\n  width: 100%;\n  height: auto;\n}\n.category-main .read-status .material-icon {\n  color: #ebecf0;\n}\n.category-main .read-status.item-new .material-icon {\n  color: #0052cc;\n}\n.category-last-thread .media-heading a {\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  width: 290px;\n  text-overflow: ellipsis;\n  vertical-align: top;\n}\n@media screen and (max-width: 991px) {\n  .category-last-thread .media-heading a {\n    width: 275px;\n  }\n}\n@media screen and (max-width: 767px) {\n  .category-last-thread .media-heading a {\n    width: 260px;\n  }\n}\n.category-thread-message .material-icon {\n  width: 28px;\n  height: 28px;\n  font-size: 28px;\n  line-height: 28px;\n}\n.category-thread-message p {\n  margin: 0px;\n}\n.list-inline.subcategories-list {\n  overflow: auto;\n  margin-top: -10px;\n}\n.list-inline.subcategories-list li {\n  display: block;\n  float: left;\n}\n.list-inline.subcategories-list li a,\n.list-inline.subcategories-list li a:link,\n.list-inline.subcategories-list li a:visited,\n.list-inline.subcategories-list li a:active,\n.list-inline.subcategories-list li a:hover,\n.list-inline.subcategories-list li a:focus {\n  background-color: #ebecf0;\n  border: 1px solid #dcdee5;\n  border-radius: 4px;\n  display: inline-block;\n  margin-top: 10px;\n  padding: 6px 12px;\n  color: #5e6c84;\n}\n.list-inline.subcategories-list li:focus,\n.list-inline.subcategories-list li a:hover,\n.list-inline.subcategories-list li a:active {\n  background-color: #dcdee5;\n  color: #172b4d;\n  text-decoration: none;\n}\n.row.subcategories-list .btn {\n  margin-top: 20px;\n  text-align: left;\n}\n#posting-placeholder {\n  background-color: #ebecf0;\n  display: none;\n  margin-top: 30px;\n  margin-bottom: -30px;\n  padding: 20px 0px;\n  transition: height 300ms;\n}\n#posting-placeholder.slide-in {\n  display: block;\n}\n#posting-placeholder .first-row {\n  margin-bottom: 20px;\n}\n#posting-placeholder .first-row .form-control {\n  border: 1px solid #bfc2cf;\n}\n#posting-placeholder .first-row .posting-options .btn {\n  padding-top: 4px;\n  padding-bottom: 4px;\n}\n#posting-placeholder .first-row .posting-options .btn .btn-text {\n  margin-left: 5px;\n  position: relative;\n  top: 1px;\n}\n#posting-placeholder .first-row .posting-options .material-icon {\n  width: 14px;\n  height: 24px;\n  margin-right: 0px;\n  position: relative;\n  top: 5px;\n  font-size: 14px;\n  line-height: 14px;\n  text-align: center;\n}\n.posting-ui-preview {\n  padding: 20px 0px;\n  position: relative;\n}\n.posting-ui-preview .form-control {\n  box-shadow: none;\n  resize: none;\n}\n.posting-loader {\n  text-align: center;\n}\n.posting-loader .loader {\n  height: 100px;\n}\n.posting-loader .loader .loader-spinning-wheel {\n  width: 100px;\n  height: 100px;\n}\n.posting-message {\n  text-align: center;\n}\n.posting-message .material-icon {\n  margin-right: 6.66666667px;\n  position: relative;\n  top: -1px;\n  width: 28px;\n  height: 28px;\n  font-size: 28px;\n  line-height: 28px;\n}\n.posting-message .message-body p {\n  font-size: 18px;\n}\n.editor-border {\n  background-color: #fff;\n  border: 1px solid #bfc2cf;\n  border-radius: 4px;\n}\n.editor-border .form-control {\n  border: none;\n  resize: none;\n}\n.editor-border .form-control,\n.editor-border .form-control:focus,\n.editor-border .form-control:active {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.editor-footer {\n  border-top: 1px solid #bfc2cf;\n  padding: 6px 12px;\n  overflow: auto;\n}\n.editor-footer .pull-left {\n  margin-right: 12px;\n}\n.editor-footer .pull-right {\n  margin-left: 12px;\n}\n.editor-footer .btn-icon .material-icon {\n  margin-bottom: -2px;\n}\n@media screen and (max-width: 991px) {\n  .editor-footer .buttons-list {\n    float: none !important;\n    margin: 0px;\n    margin-bottom: 10px;\n  }\n  .editor-footer .buttons-list .btn {\n    display: inline-block;\n    float: none !important;\n    margin: 6.66666667px;\n  }\n  .editor-footer .btn-protect .btn-text {\n    margin-left: 10px;\n  }\n  .editor-footer .btn-protect .material-icon {\n    position: relative;\n    bottom: 2px;\n    width: 14px;\n    height: 14px;\n    font-size: 14px;\n    line-height: 14px;\n  }\n}\n@media screen and (min-width: 768px) and (max-width: 991px) {\n  .buttons-list .btn:first-child {\n    margin-left: 0px;\n  }\n}\n@media screen and (max-width: 767px) {\n  .buttons-list {\n    text-align: center;\n  }\n  .buttons-list .btn-protect {\n    display: block;\n    float: none !important;\n    width: 100%;\n    margin: 0px;\n    margin-top: 10px;\n  }\n}\n.editor-attachments-list {\n  margin: 0px;\n  padding: 0px;\n}\n.editor-attachments-list li {\n  margin: 0px;\n}\n.editor-attachment-complete {\n  border-top: 1px solid #bfc2cf;\n  padding: 6px 0px;\n  padding-right: 12px;\n}\n.editor-attachment-complete .editor-attachment-image {\n  float: left;\n  width: 50px;\n}\n.editor-attachment-complete .editor-attachment-image a {\n  background-size: cover;\n  background-position: center;\n  border-radius: 3px;\n  display: block;\n  margin: 0px auto;\n  width: 36px;\n  height: 36px;\n}\n.editor-attachment-complete .editor-attachment-icon {\n  float: left;\n  width: 50px;\n  text-align: center;\n}\n.editor-attachment-complete .editor-attachment-icon .material-icon {\n  position: relative;\n  top: 2px;\n  height: 28px;\n  width: 28px;\n  font-size: 28px;\n  line-height: 28px;\n}\n.editor-attachment-complete .editor-attachment-details {\n  margin-left: 50px;\n}\n.editor-attachment-complete .editor-attachment-details h4,\n.editor-attachment-complete .editor-attachment-details p {\n  margin: 0px;\n  padding: 0px;\n  font-size: 14px;\n}\n.editor-attachment-complete .editor-attachment-details p {\n  margin-top: 3px;\n  color: #7a869a;\n  font-size: 12px;\n}\n.editor-attachment-complete .editor-attachment-details abbr {\n  white-space: nowrap;\n}\n@media screen and (min-width: 768px) {\n  .editor-attachment-actions {\n    padding-top: 3px;\n  }\n}\n@media screen and (max-width: 767px) {\n  .editor-attachment-actions {\n    padding-left: 12px;\n    padding-right: 12px;\n  }\n}\n.editor-attachment-error {\n  border-top: 1px solid #bfc2cf;\n  padding: 6px 0px;\n  padding-right: 12px;\n}\n.editor-attachment-error-icon {\n  float: left;\n  width: 50px;\n  text-align: center;\n}\n.editor-attachment-error-icon .material-icon {\n  position: relative;\n  top: 2px;\n  height: 28px;\n  width: 28px;\n  font-size: 28px;\n  line-height: 28px;\n}\n.editor-attachment-error-message {\n  margin-left: 50px;\n  padding: 6px 0px;\n  position: relative;\n}\n.editor-attachment-error-message h4,\n.editor-attachment-error-message p {\n  margin: 0px;\n  padding: 0px;\n  font-size: 14px;\n}\n.editor-attachment-error-message p {\n  margin-top: 3px;\n  font-size: 12px;\n}\n.editor-attachment-error-message .btn {\n  position: absolute;\n  top: 9px;\n  right: 12px;\n}\n@media screen and (max-width: 767px) {\n  .editor-attachment-error-message .btn {\n    display: block;\n    margin-top: 10px;\n    position: static;\n  }\n}\n.editor-attachment-progress-bar {\n  background: #bfc2cf;\n  overflow: auto;\n}\n.editor-attachment-progress {\n  background: #0052cc;\n  float: left;\n  height: 1px;\n}\n.editor-attachment-upload-message {\n  margin: 0px;\n  padding: 6px 12px;\n}\n#editor-upload-field {\n  position: absolute;\n  left: -1000px;\n  top: -1000px;\n}\n.atwho-view ul li img {\n  border-radius: 3px;\n  margin-right: 4.66666667px;\n  width: 20px;\n  height: 20px;\n}\n.participant-card .btn-user,\n.participant-card .dropdown.open .btn-user {\n  margin-bottom: 20px;\n}\n.participant-card .btn-user,\n.participant-card .dropdown.open .btn-user,\n.participant-card .btn-user:hover,\n.participant-card .dropdown.open .btn-user:hover,\n.participant-card .btn-user:focus,\n.participant-card .dropdown.open .btn-user:focus,\n.participant-card .btn-user:focus:active,\n.participant-card .dropdown.open .btn-user:focus:active {\n  padding: 0px;\n  overflow: hidden;\n  text-align: left;\n}\n.participant-card .btn-user img,\n.participant-card .dropdown.open .btn-user img {\n  background-color: #fff;\n  width: 34px;\n  height: 34px;\n  margin-right: 8px;\n}\n.panel-participants p {\n  margin: 0px;\n  margin-top: 7px;\n}\n.poll-choices-control .list-group-item {\n  padding: 0px;\n}\n.poll-choices-control .list-group-item .btn {\n  background: transparent;\n  border: transparent;\n  float: left;\n  margin: 0px 2px;\n  margin-bottom: -29px;\n  padding: 0px;\n  width: 28px;\n  height: 28px;\n  position: relative;\n  top: 3px;\n}\n.poll-choices-control .list-group-item .btn .material-icon {\n  width: 28px;\n  height: 28px;\n  font-size: 28px;\n  line-height: 28px;\n}\n.poll-choices-control input,\n.poll-choices-control input:focus,\n.poll-choices-control input:active {\n  background: transparent;\n  border: none;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  outline: none;\n  margin-left: 30px;\n  padding: 6px 12px;\n  width: 100%;\n}\n.posts-list {\n  margin: 0px;\n  padding: 0px;\n  clear: both;\n}\n.posts-list li {\n  list-style: none;\n  margin: 0px;\n  padding: 0px;\n}\n@media screen and (min-width: 992px) {\n  .panel-post .panel-body {\n    display: flex;\n  }\n  .post-side {\n    flex-shrink: 0;\n    width: 260px;\n    padding-right: 15px;\n  }\n  .panel-content {\n    flex: 1 0;\n  }\n}\n.post-side {\n  font-size: 12px;\n}\n.post-side .media {\n  margin: 0px;\n}\n.post-side .poster-avatar {\n  height: 36px;\n  width: 36px;\n}\n@media screen and (min-width: 992px) {\n  .post-side .poster-avatar {\n    margin-top: 4px;\n    height: 82px;\n    width: 82px;\n  }\n}\n.post-side .user-status {\n  margin-right: 4px;\n}\n.post-side .media-heading {\n  display: block;\n}\n.post-side .media-heading {\n  margin: 0px;\n  margin-top: -1px;\n  font-size: 14px;\n}\n.post-side .media-heading .user-status {\n  margin-right: 0;\n  margin-left: 2px;\n}\n.post-side .pull-right {\n  margin-left: 16px;\n}\n@media screen and (min-width: 992px) {\n  .post-side .media-heading {\n    margin-top: 3px;\n    font-size: 18px;\n  }\n  .post-side .media-heading .user-status {\n    display: none;\n  }\n  .post-side .user-title {\n    margin-top: 4px;\n    margin-bottom: 5px;\n  }\n  .post-side .user-postcount {\n    display: block;\n  }\n  .post-side .user-status {\n    display: block;\n  }\n}\n.post-heading {\n  height: 36px;\n}\n@media screen and (max-width: 991px) {\n  .post-heading {\n    margin-top: 10px;\n  }\n}\n.post-heading .pull-right {\n  margin-left: 16px;\n}\n.post-heading > .btn-link {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n.post-heading .label {\n  margin-top: 6px;\n  font-size: 14px;\n  font-weight: normal;\n}\n.post-heading .label-unread {\n  background-color: #36b37e;\n  color: #fff;\n}\n@media screen and (min-width: 992px) {\n  .post-side .pull-right {\n    display: none;\n  }\n}\n@media screen and (max-width: 991px) {\n  .post-heading .pull-right {\n    display: none;\n  }\n}\n.post-body {\n  padding-top: 20px;\n  padding-bottom: 30px;\n}\n.post-status-message {\n  overflow: auto;\n}\n.post-status-message .material-icon {\n  float: left;\n  font-size: 28px;\n  line-height: 28px;\n}\n.post-status-message p {\n  margin: 0px;\n  margin-top: 4px;\n  margin-left: 36px;\n}\n.post-status-best-answer {\n  background-color: #36b37e;\n  color: #fff;\n}\n.post-status-hidden {\n  background-color: #ff5630;\n  color: #fff;\n}\n.post-status-unapproved {\n  background-color: #0052cc;\n  color: #fff;\n}\n.post-status-protected {\n  background-color: #5e6c84;\n  color: #fff;\n}\n.post-footer .pull-left {\n  margin-right: 16px;\n}\n.post-footer .pull-right {\n  margin-left: 16px;\n}\n.post-footer p {\n  padding-top: 7px;\n  padding-bottom: 6px;\n  margin-bottom: 0px;\n}\n.post-attachments {\n  border-top: 1px solid #ebecf0;\n  padding: 6px 16px;\n}\n.post-attachments abbr {\n  white-space: nowrap;\n}\n.post-attachments .attachment-name {\n  word-wrap: break-word;\n}\n.post-attachments .row > div {\n  margin: 10px 0px;\n}\n.post-attachments .post-attachment-preview {\n  float: left;\n  height: 40px;\n  width: 40px;\n  text-align: center;\n}\n.post-attachments .post-attachment {\n  margin-left: 52px;\n}\n.post-attachments .post-thumbnail {\n  display: block;\n  background-size: cover;\n  background-position: center;\n  border-radius: 3px;\n  width: 40px;\n  height: 40px;\n}\n.post-attachments .material-icon {\n  width: 28px;\n  height: 28px;\n  position: relative;\n  top: 5px;\n  font-size: 28px;\n  line-height: 28px;\n}\n.post-attachments .material-icon:link,\n.post-attachments .material-icon:active,\n.post-attachments .material-icon:visited,\n.post-attachments .material-icon:hover,\n.post-attachments .material-icon:focus {\n  color: #172b4d;\n  text-decoration: none;\n}\n.post-attachments .post-attachment-description {\n  margin: 0px;\n  padding: 0px;\n  color: #7a869a;\n  font-size: 12px;\n}\n.post-feed .post-side .media-heading {\n  margin: 0px;\n  font-size: 14px;\n}\n.post-feed .post-side .user-title {\n  margin: 0px;\n  font-size: 12px;\n}\n.post-feed .post-side .btn {\n  display: inline-block;\n}\n.post-feed .post-side img {\n  margin-top: 0px;\n  width: 36px;\n  height: 36px;\n}\n.post-feed .post-heading {\n  height: auto;\n  margin: 10px 0px;\n}\n.post-feed .post-heading .btn {\n  margin-right: 16px;\n  max-width: 100%;\n  text-align: left;\n  white-space: normal;\n  word-wrap: break-word;\n}\n.posts-list .event {\n  margin-bottom: 20px;\n  color: #7a869a;\n}\n.posts-list .event .event-body {\n  display: flex;\n  align-items: flex-start;\n}\n.posts-list .event-label {\n  margin-left: 51px;\n}\n.posts-list .event-label .label-unread {\n  background-color: #36b37e;\n  color: #fff;\n}\n.posts-list .event .event-icon {\n  padding-right: 15px;\n}\n.posts-list .event .event-icon .event-icon-bg {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 36px;\n  width: 36px;\n  background: #ebecf0;\n  border-radius: 4px;\n  color: #5e6c84;\n}\n.posts-list .event .event-icon .material-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 28px;\n}\n.posts-list .event .event-content {\n  flex: 1 0;\n}\n.posts-list .event .event-message {\n  margin-bottom: 5px;\n  font-size: 18px;\n}\n.posts-list .event .event-info {\n  margin: 0px;\n  font-size: 12px;\n}\n.posts-list .event .event-info li {\n  margin-right: 12px;\n}\n.posts-list .event .event-info li:last-child {\n  margin-right: 0px;\n}\n.posts-list .event .event-controls .btn-link {\n  border: 0px;\n  margin: 0px;\n  margin-right: 12px;\n  padding: 0px;\n  font-size: 12px;\n}\n.posts-list .event .event-controls .btn-link:last-child {\n  margin-right: 0px;\n}\n@media screen and (max-width: 767px) {\n  .posts-list .event .event-info {\n    margin-top: 5px;\n  }\n  .posts-list .event .event-controls {\n    clear: both;\n    margin-top: 5px;\n  }\n  .posts-list .event .event-controls .btn-link {\n    margin-right: 20px;\n    font-size: 14px;\n  }\n  .posts-list .event .event-controls .btn-link:last-child {\n    margin-right: 0px;\n  }\n}\n@media screen and (min-width: 992px) {\n  .posts-list .event .event-icon {\n    justify-content: flex-end;\n    flex-shrink: 0;\n    display: flex;\n    width: 275px;\n  }\n  .event-content {\n    flex: 1 0;\n  }\n  .posts-list .event-label {\n    margin-left: 275px;\n  }\n}\n.post-changelog-diff {\n  padding: 0px;\n  margin: 0px;\n}\n.post-changelog-diff .list-unstyled {\n  padding: 0px;\n  margin: 5px 0px;\n}\n.post-changelog-diff .diff-item {\n  padding: 5px 10px;\n}\n.post-changelog-diff .diff-item-sub {\n  color: #ff5630;\n}\n.post-changelog-diff .diff-item-add {\n  color: #36b37e;\n}\n.post-changelog-toolbar .row {\n  margin-left: -12px;\n  margin-right: -12px;\n}\n@media screen and (max-width: 767px) {\n  .post-changelog-toolbar .post-change-label {\n    text-align: center;\n  }\n}\n@media screen and (max-width: 767px) {\n  .page-message .message-panel,\n  .page-error .message-panel {\n    text-align: center;\n  }\n  .page-message .message-icon,\n  .page-error .message-icon {\n    margin: 30px;\n    font-size: 80px;\n  }\n}\n@media screen and (min-width: 768px) {\n  .page-message .message-panel,\n  .page-error .message-panel {\n    margin: 60px auto;\n    max-width: 779.35px;\n    overflow: auto;\n  }\n  .page-message .message-icon,\n  .page-error .message-icon {\n    float: left;\n  }\n  .page-message .message-icon .material-icon,\n  .page-error .message-icon .material-icon {\n    font-size: 80px;\n  }\n  .page-message .message-body,\n  .page-error .message-body {\n    margin-top: 16px;\n    margin-left: 100px;\n    font-size: 18px;\n  }\n  .page-message .message-body p.lead,\n  .page-error .message-body p.lead {\n    font-size: 36px;\n  }\n}\n.threads-list {\n  margin-bottom: 20px;\n}\n.threads-list-item {\n  display: flex;\n  align-items: center;\n}\n.threads-list-item img {\n  width: 32px;\n  height: 32px;\n}\n.threads-list-item-top-row {\n  display: flex;\n  flex: 1;\n  align-items: center;\n  justify-content: center;\n}\n.threads-list-item-bottom-row {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n.threads-list-item-col-icon {\n  padding-right: 15px;\n}\n.threads-list-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 32px;\n  height: 32px;\n  border-radius: 3px;\n  font-size: 16px;\n  line-height: 16px;\n}\n.threads-list-icon:link,\n.threads-list-icon:active,\n.threads-list-icon:focus,\n.threads-list-icon:hover,\n.threads-list-icon:visited {\n  background-color: #ebecf0;\n  color: #7a869a;\n  text-decoration: none;\n}\n.threads-list-icon-new:link,\n.threads-list-icon-new:active,\n.threads-list-icon-new:focus,\n.threads-list-icon-new:hover,\n.threads-list-icon-new:visited {\n  background-color: #0052cc;\n  color: #fff;\n}\n.threads-list-item-col-title {\n  flex: 1;\n}\na.threads-list-item-title:link,\na.threads-list-item-title:active,\na.threads-list-item-title:focus,\na.threads-list-item-title:hover,\na.threads-list-item-title:visited {\n  font-size: 16px;\n  color: #172b4d;\n  overflow-wrap: break-word;\n}\na.threads-list-item-title-sm {\n  font-size: 18px;\n}\na.threads-list-item-title-sm:link,\na.threads-list-item-title-sm:active,\na.threads-list-item-title-sm:focus,\na.threads-list-item-title-sm:hover,\na.threads-list-item-title-sm:visited {\n  color: #5e6c84;\n  overflow-wrap: break-word;\n}\na.threads-list-item-title-new:link,\na.threads-list-item-title-new:active,\na.threads-list-item-title-new:focus,\na.threads-list-item-title-new:hover,\na.threads-list-item-title-new:visited {\n  color: #172b4d;\n}\n.threads-list-item-col-flags {\n  padding-left: 15px;\n}\n.threads-list-item .thread-flags {\n  opacity: 0.8;\n}\n.threads-list-item:hover .thread-flags,\n.threads-list-item:focus .thread-flags {\n  opacity: 1;\n}\n.threads-list-item-col-category {\n  padding-left: 15px;\n  white-space: nowrap;\n}\n.threads-list-category-label {\n  padding: 3px 6px;\n  border-radius: 3px;\n  font-size: 12px;\n  font-weight: bold;\n}\n.threads-list-category-label,\n.threads-list-category-label:link,\n.threads-list-category-label:active,\n.threads-list-category-label:hover,\n.threads-list-category-label:focus,\n.threads-list-category-label:visited {\n  color: #344563;\n  background: #ebecf0;\n  text-decoration: none;\n}\n.threads-list-category-label.threads-list-category-label-color,\n.threads-list-category-label.threads-list-category-label-color:link,\n.threads-list-category-label.threads-list-category-label-color:active,\n.threads-list-category-label.threads-list-category-label-color:hover,\n.threads-list-category-label.threads-list-category-label-color:focus,\n.threads-list-category-label.threads-list-category-label-color:visited {\n  color: #fff;\n  background: var(--label-color);\n}\n.threads-list-item-parent-category {\n  border-radius: 3px 0 0 3px;\n  margin-right: 2px;\n}\n.threads-list-item-parent-category + .threads-list-category-label {\n  border-radius: 0 3px 3px 0;\n}\n.threads-list-item-col-replies {\n  width: 80px;\n  padding-left: 15px;\n}\n.threads-list-item-col-last-poster {\n  padding-left: 15px;\n}\n.threads-list-item-col-last-poster img {\n  border-radius: 3px;\n}\n.threads-list-item-col-last-activity {\n  width: 120px;\n  padding-left: 15px;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n.threads-list-item-col-last-activity a:link,\n.threads-list-item-col-last-activity a:hover,\n.threads-list-item-col-last-activity a:active,\n.threads-list-item-col-last-activity a:visited,\n.threads-list-item-col-last-activity a:focus {\n  color: #344563;\n  font-size: 16px;\n}\n.threads-list-item-col-checkbox,\n.threads-list-item-col-subscription {\n  padding-left: 15px;\n}\n.threads-list-item-title-sm,\n.threads-list-item-col-checkbox-sm {\n  display: none;\n}\n@media screen and (max-width: 767px) {\n  .threads-list {\n    margin-left: -15px;\n    margin-right: -15px;\n  }\n  .threads-list .list-group,\n  .threads-list .list-group-item {\n    border-radius: 0;\n    border-left: 0;\n    border-right: 0;\n  }\n  .threads-list-item-title {\n    display: none;\n  }\n  .threads-list-item-title-sm {\n    display: inline-block;\n  }\n  .threads-list-item-col-icon {\n    display: none;\n  }\n}\n@media screen and (max-width: 991px) {\n  .threads-list-item {\n    display: block;\n  }\n  .threads-list-item img {\n    width: 20px;\n    height: 20px;\n  }\n  .threads-list-item-top-row {\n    align-items: start;\n    margin-bottom: 7.5px;\n  }\n  .threads-list-item-bottom-row {\n    justify-content: end;\n    flex: 0;\n  }\n  .threads-list-item-bottom-row > div {\n    width: auto;\n    padding: 0 0 0 15px;\n  }\n  .threads-list-item-col-subscription,\n  .threads-list-item-col-checkbox {\n    display: none;\n  }\n  .threads-list-item-col-checkbox-sm {\n    display: block;\n    padding-left: 15px;\n  }\n  .threads-list-item-col-checkbox-sm .btn-icon {\n    padding: 4px;\n  }\n  .threads-list-item-col-checkbox-sm .btn-icon .material-icon {\n    font-size: 16px;\n  }\n}\n.threads-list-item-is-busy .btn-icon {\n  opacity: 0.8;\n  animation: busy 0.75s linear infinite;\n}\n@keyframes busy {\n  50% {\n    opacity: 0.5;\n  }\n}\n.threads-list-update-prompt {\n  padding: 0;\n}\n.threads-list-update-prompt-btn {\n  padding: 10px 16px;\n  background: #d6e7ff;\n  color: #003d99;\n  border: none;\n  border-radius: 3px 3px 0 0;\n}\n.threads-list-update-prompt-btn:hover,\n.threads-list-update-prompt-btn:focus {\n  background: #e6f0ff;\n  color: #0052cc;\n}\n.threads-list-update-prompt-btn:active {\n  background: #b3d1ff;\n  color: #0066ff;\n}\n.active-posters li {\n  display: block;\n  overflow: auto;\n}\n.active-posters .rank-user-avatar {\n  float: left;\n}\n@media screen and (max-width: 991px) {\n  .active-posters .rank-user-avatar {\n    height: 42px;\n  }\n  .active-posters .rank-user-avatar img {\n    width: 36px;\n    height: 36px;\n    position: relative;\n    top: 3px;\n  }\n}\n.active-posters .rank-user {\n  float: left;\n  margin-top: 3px;\n}\n@media screen and (max-width: 991px) {\n  .active-posters .rank-user {\n    margin-left: 13.2px;\n    width: 40%;\n  }\n}\n@media screen and (max-width: 767px) {\n  .active-posters .rank-user {\n    float: none;\n    margin-left: 50px;\n    width: auto;\n  }\n}\n@media screen and (min-width: 992px) {\n  .active-posters .rank-user {\n    margin-left: 16px;\n    width: 25%;\n  }\n  .active-posters .rank-user .user-name {\n    font-size: 18px;\n  }\n}\n.active-posters .user-details {\n  overflow: auto;\n  font-family: Sans-Serif;\n}\n.active-posters .user-details .user-status,\n.active-posters .user-details .rank-name,\n.active-posters .user-details .user-title {\n  display: block;\n  float: left;\n  margin-right: 3px;\n  font-size: 12px;\n}\n@media screen and (min-width: 992px) {\n  .active-posters .user-details .user-status,\n  .active-posters .user-details .rank-name,\n  .active-posters .user-details .user-title {\n    margin-right: 8px;\n  }\n}\n.active-posters .user-details .user-title {\n  margin-right: 0px;\n}\n@media screen and (min-width: 992px) {\n  .active-posters .user-details {\n    overflow: visible;\n  }\n  .active-posters .user-details .rank-name,\n  .active-posters .user-details .user-title {\n    height: 14px;\n    overflow: hidden;\n    position: relative;\n    top: 1px;\n    vertical-align: baseline;\n  }\n}\n@media screen and (max-width: 767px) {\n  .active-posters .user-details {\n    margin-top: 3px;\n  }\n  .active-posters .user-details .rank-name,\n  .active-posters .user-details .user-title {\n    font-weight: normal;\n  }\n}\n.active-posters .user-status {\n  overflow: auto;\n  position: relative;\n  top: 1px;\n}\n.active-posters .user-status span {\n  display: block;\n  float: left;\n}\n@media screen and (min-width: 992px) {\n  .active-posters .user-status {\n    height: 14px;\n    overflow: hidden;\n  }\n}\n.active-posters .user-status .status-icon {\n  position: relative;\n}\n@media screen and (max-width: 991px) {\n  .active-posters .user-status .status-icon {\n    top: 0px;\n    width: 12px;\n    height: 12px;\n    font-size: 12px;\n    line-height: 12px;\n  }\n}\n@media screen and (min-width: 992px) {\n  .active-posters .user-status .status-icon {\n    top: 1px;\n    margin-right: 3px;\n    width: 13px;\n    height: 13px;\n    font-size: 13px;\n    line-height: 13px;\n  }\n}\n.active-posters .status-label.ui-preview-text,\n.active-posters .rank-name .ui-preview-text,\n.active-posters .user-title .ui-preview-text {\n  height: 11px;\n  position: relative;\n  top: 2px;\n  font-size: 11px;\n  line-height: 11px;\n}\n.active-posters .rank-name .ui-preview-text,\n.active-posters .user-title .ui-preview-text {\n  position: static;\n}\n.active-posters .rank-position strong,\n.active-posters .rank-posts-counted strong,\n.active-posters .rank-posts-total strong,\n.active-posters .rank-position small,\n.active-posters .rank-posts-counted small,\n.active-posters .rank-posts-total small {\n  display: block;\n}\n@media screen and (max-width: 991px) {\n  .active-posters .rank-position,\n  .active-posters .rank-posts-counted,\n  .active-posters .rank-posts-total {\n    overflow: auto;\n  }\n  .active-posters .rank-position strong,\n  .active-posters .rank-posts-counted strong,\n  .active-posters .rank-posts-total strong,\n  .active-posters .rank-position small,\n  .active-posters .rank-posts-counted small,\n  .active-posters .rank-posts-total small {\n    float: left;\n    font-size: 10.5px;\n  }\n  .active-posters .rank-position strong,\n  .active-posters .rank-posts-counted strong,\n  .active-posters .rank-posts-total strong {\n    min-width: 30px;\n    margin-right: 3px;\n    text-align: right;\n  }\n  .active-posters .rank-position .ui-preview-text,\n  .active-posters .rank-posts-counted .ui-preview-text,\n  .active-posters .rank-posts-total .ui-preview-text {\n    height: 8px;\n    position: relative;\n    top: -1px;\n    font-size: 8px;\n    line-height: 8px;\n  }\n}\n@media screen and (min-width: 992px) {\n  .active-posters .rank-position,\n  .active-posters .rank-posts-counted,\n  .active-posters .rank-posts-total {\n    float: left;\n    margin-top: 3px;\n    width: 23%;\n    font-size: 18px;\n    text-align: center;\n  }\n  .active-posters .rank-position small,\n  .active-posters .rank-posts-counted small,\n  .active-posters .rank-posts-total small {\n    font-size: 12px;\n    font-weight: normal;\n  }\n}\n.user-compact-stats .rank-position strong,\n.user-compact-stats .rank-posts-counted strong,\n.user-compact-stats .rank-position small,\n.user-compact-stats .rank-posts-counted small {\n  display: inline-block;\n  float: none;\n}\n.user-compact-stats .rank-position strong,\n.user-compact-stats .rank-posts-counted strong {\n  min-width: auto;\n}\n.user-compact-stats .rank-position small,\n.user-compact-stats .rank-posts-counted small {\n  margin-right: 20px;\n}\n@media screen and (min-width: 768px) and (max-width: 991px) {\n  .active-posters .rank-position {\n    margin-top: 6px;\n  }\n  .active-posters .rank-posts-total {\n    display: none;\n  }\n}\n@media screen and (min-width: 768px) and (max-width: 991px) {\n  .active-posters .rank-position {\n    margin-top: 6px;\n  }\n  .active-posters .rank-posts-total {\n    display: none;\n  }\n}\n.profile-page-header-avatar {\n  text-align: center;\n  margin: 20px 0;\n}\n.profile-page-header-avatar .user-avatar {\n  border-radius: 4px;\n}\n.profile-data-list {\n  display: block;\n  padding: 0;\n  margin: 0 -12px;\n  font-size: 12px;\n}\n.profile-data-list li {\n  display: inline-block;\n  list-style: none;\n  padding: 5px 12px;\n}\n.profile-data-list .status-icon {\n  margin-right: 3px;\n  position: relative;\n  bottom: 1px;\n}\n.profile-data-list .user-account-disabled {\n  color: #ff5630;\n  font-weight: bold;\n}\n@media screen and (min-width: 768px) {\n  .profile-page-header {\n    display: flex;\n    align-items: flex-end;\n  }\n  .profile-page-header-avatar {\n    margin: 0;\n    margin-right: 30px;\n  }\n}\n@media screen and (min-width: 992px) {\n  .profile-page-header-avatar {\n    position: relative;\n    top: 54px;\n    margin-top: -54px;\n  }\n  .profile-page-header-details {\n    padding-left: 158px;\n  }\n  .profile-data-list {\n    font-size: 14px;\n  }\n}\n@media screen and (min-width: 992px) {\n  .username-history li {\n    display: block;\n    overflow: auto;\n  }\n}\n.username-history .change-avatar {\n  float: left;\n}\n.username-history .change-avatar a,\n.username-history .change-avatar span {\n  margin-right: 10px;\n}\n.username-history .change-avatar a img,\n.username-history .change-avatar span img {\n  width: 42px;\n  height: 42px;\n}\n@media screen and (min-width: 992px) {\n  .username-history .change-avatar a img,\n  .username-history .change-avatar span img {\n    width: 18px;\n    height: 18px;\n    position: relative;\n    bottom: 1px;\n  }\n}\n@media screen and (min-width: 992px) {\n  .username-history .change-author {\n    float: left;\n    width: 30%;\n  }\n}\n.username-history .change {\n  min-height: 20px;\n  overflow: auto;\n}\n.username-history .change span {\n  display: block;\n  float: left;\n}\n.username-history .change .material-icon {\n  margin: 0px 7px;\n  position: relative;\n  top: 4px;\n}\n@media screen and (min-width: 992px) {\n  .username-history .change {\n    float: left;\n    width: 40%;\n  }\n}\n@media screen and (min-width: 992px) {\n  .username-history .change-date {\n    float: left;\n    width: 20%;\n  }\n}\n.search-footer p {\n  margin-top: 20px;\n  color: #5e6c84;\n  font-size: 12px;\n  text-align: center;\n}\n@media screen and (min-width: 768px) {\n  .page-search-form {\n    padding-top: 40px;\n  }\n}\n@media screen and (min-width: 992px) {\n  .page-search-form {\n    padding-bottom: 40px;\n  }\n  .page-search-form h1 {\n    position: relative;\n    top: 5px;\n  }\n  .page-search-form .form-group {\n    margin-bottom: 0px;\n  }\n}\n/*\nDescription: Foundation 4 docs style for highlight.js\nAuthor: Dan Allen <dan.j.allen@gmail.com>\nWebsite: http://foundation.zurb.com/docs/\nVersion: 1.0\nDate: 2013-04-02\n*/\n.hljs {\n  display: block;\n  overflow-x: auto;\n  padding: 0.5em;\n  background: #eee;\n  color: black;\n}\n.hljs-link,\n.hljs-emphasis,\n.hljs-attribute,\n.hljs-addition {\n  color: #070;\n}\n.hljs-emphasis {\n  font-style: italic;\n}\n.hljs-strong,\n.hljs-string,\n.hljs-deletion {\n  color: #d14;\n}\n.hljs-strong {\n  font-weight: bold;\n}\n.hljs-quote,\n.hljs-comment {\n  color: #998;\n  font-style: italic;\n}\n.hljs-section,\n.hljs-title {\n  color: #900;\n}\n.hljs-class .hljs-title,\n.hljs-type {\n  color: #458;\n}\n.hljs-variable,\n.hljs-template-variable {\n  color: #336699;\n}\n.hljs-bullet {\n  color: #997700;\n}\n.hljs-meta {\n  color: #3344bb;\n}\n.hljs-code,\n.hljs-number,\n.hljs-literal,\n.hljs-keyword,\n.hljs-selector-tag {\n  color: #099;\n}\n.hljs-regexp {\n  background-color: #fff0ff;\n  color: #880088;\n}\n.hljs-symbol {\n  color: #990073;\n}\n.hljs-tag,\n.hljs-name,\n.hljs-selector-id,\n.hljs-selector-class {\n  color: #007700;\n}\n.atwho-view {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: none;\n  margin-top: 18px;\n  background: white;\n  color: black;\n  border: 1px solid #DDD;\n  border-radius: 3px;\n  box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);\n  min-width: 120px;\n  z-index: 11110 !important;\n}\n.atwho-view .atwho-header {\n  padding: 5px;\n  margin: 5px;\n  cursor: pointer;\n  border-bottom: solid 1px #eaeff1;\n  color: #6f8092;\n  font-size: 11px;\n  font-weight: bold;\n}\n.atwho-view .atwho-header .small {\n  color: #6f8092;\n  float: right;\n  padding-top: 2px;\n  margin-right: -5px;\n  font-size: 12px;\n  font-weight: normal;\n}\n.atwho-view .atwho-header:hover {\n  cursor: default;\n}\n.atwho-view .cur {\n  background: #3366FF;\n  color: white;\n}\n.atwho-view .cur small {\n  color: white;\n}\n.atwho-view strong {\n  color: #3366FF;\n}\n.atwho-view .cur strong {\n  color: white;\n  font: bold;\n}\n.atwho-view ul {\n  /* width: 100px; */\n  list-style: none;\n  padding: 0;\n  margin: auto;\n  max-height: 200px;\n  overflow-y: auto;\n}\n.atwho-view ul li {\n  display: block;\n  padding: 5px 10px;\n  border-bottom: 1px solid #DDD;\n  cursor: pointer;\n  /* border-top: 1px solid #C8C8C8; */\n}\n.atwho-view small {\n  font-size: smaller;\n  color: #777;\n  font-weight: normal;\n}\nabbr {\n  outline: none;\n  text-decoration: none;\n}\n.shadow-2dp {\n  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.04), 0 3px 1px -2px rgba(0, 0, 0, 0.06), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n}\n.shadow-3dp {\n  box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.04), 0 3px 3px -2px rgba(0, 0, 0, 0.06), 0 1px 8px 0 rgba(0, 0, 0, 0.12);\n}\n.shadow-4dp {\n  box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.04), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n}\n.shadow-6dp {\n  box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.04), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1px rgba(0, 0, 0, 0.06);\n}\n.shadow-8dp {\n  box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.04), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.06);\n}\n.shadow-16dp {\n  box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.04), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.06);\n}\n.shadow-24dp {\n  box-shadow: 0 9px 46px 8px rgba(0, 0, 0, 0.04), 0 11px 15px -7px rgba(0, 0, 0, 0.12), 0 24px 38px 3px rgba(0, 0, 0, 0.06);\n}\n.btn-default,\n.btn-default:disabled,\n.btn-default:disabled:hover,\n.btn-default.disabled,\n.btn-default.disabled:hover,\n.btn-default.disabled:active {\n  background: #ebecf0;\n  border: 1px solid #ebecf0;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default:disabled,\n.btn-default:disabled:hover,\n.btn-default.disabled,\n.btn-default.disabled:hover,\n.btn-default.disabled:active {\n  filter: alpha(opacity=25);\n  opacity: 0.25;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background: #dfe1e6;\n  border: 1px solid #dfe1e6;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default:active:focus,\n.btn-default:active,\n.dropdown.open .dropdown-toggle .btn-default,\n.dropdown.open .dropdown-toggle .btn-default:focus,\n.dropdown.open .dropdown-toggle .btn-default:active:focus,\n.dropdown.open .dropdown-toggle .btn-default:hover {\n  background: #c1c7d0;\n  border: 1px solid #c1c7d0;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default.btn-loading,\n.btn-default.btn-loading:disabled,\n.btn-default.btn-loading:disabled:hover,\n.btn-default.btn-loading:hover,\n.btn-default.btn-loading:focus,\n.btn-default.btn-loading:active:focus,\n.btn-default.btn-loading:active {\n  color: transparent;\n}\n.btn-primary,\n.btn-primary:disabled,\n.btn-primary:disabled:hover,\n.btn-primary.disabled,\n.btn-primary.disabled:hover,\n.btn-primary.disabled:active {\n  background: #6554c0;\n  border: 1px solid #6554c0;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-primary:disabled,\n.btn-primary:disabled:hover,\n.btn-primary.disabled,\n.btn-primary.disabled:hover,\n.btn-primary.disabled:active {\n  filter: alpha(opacity=25);\n  opacity: 0.25;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background: #5243aa;\n  border: 1px solid #5243aa;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-primary:active:focus,\n.btn-primary:active,\n.dropdown.open .dropdown-toggle .btn-primary,\n.dropdown.open .dropdown-toggle .btn-primary:focus,\n.dropdown.open .dropdown-toggle .btn-primary:active:focus,\n.dropdown.open .dropdown-toggle .btn-primary:hover {\n  background: #403294;\n  border: 1px solid #403294;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-primary.btn-loading,\n.btn-primary.btn-loading:disabled,\n.btn-primary.btn-loading:disabled:hover,\n.btn-primary.btn-loading:hover,\n.btn-primary.btn-loading:focus,\n.btn-primary.btn-loading:active:focus,\n.btn-primary.btn-loading:active {\n  color: transparent;\n}\n.btn-success,\n.btn-success:disabled,\n.btn-success:disabled:hover,\n.btn-success.disabled,\n.btn-success.disabled:hover,\n.btn-success.disabled:active {\n  background: #00c853;\n  border: 1px solid #00c853;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-success:disabled,\n.btn-success:disabled:hover,\n.btn-success.disabled,\n.btn-success.disabled:hover,\n.btn-success.disabled:active {\n  filter: alpha(opacity=25);\n  opacity: 0.25;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background: #00af48;\n  border: 1px solid #00af48;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-success:active:focus,\n.btn-success:active,\n.dropdown.open .dropdown-toggle .btn-success,\n.dropdown.open .dropdown-toggle .btn-success:focus,\n.dropdown.open .dropdown-toggle .btn-success:active:focus,\n.dropdown.open .dropdown-toggle .btn-success:hover {\n  background: #007c33;\n  border: 1px solid #007c33;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-success.btn-loading,\n.btn-success.btn-loading:disabled,\n.btn-success.btn-loading:disabled:hover,\n.btn-success.btn-loading:hover,\n.btn-success.btn-loading:focus,\n.btn-success.btn-loading:active:focus,\n.btn-success.btn-loading:active {\n  color: transparent;\n}\n.btn-danger,\n.btn-danger:disabled,\n.btn-danger:disabled:hover,\n.btn-danger.disabled,\n.btn-danger.disabled:hover,\n.btn-danger.disabled:active {\n  background: #ef5350;\n  border: 1px solid #ef5350;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-danger:disabled,\n.btn-danger:disabled:hover,\n.btn-danger.disabled,\n.btn-danger.disabled:hover,\n.btn-danger.disabled:active {\n  filter: alpha(opacity=25);\n  opacity: 0.25;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background: #ff8a80;\n  border: 1px solid #ff8a80;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-danger:active:focus,\n.btn-danger:active,\n.dropdown.open .dropdown-toggle .btn-danger,\n.dropdown.open .dropdown-toggle .btn-danger:focus,\n.dropdown.open .dropdown-toggle .btn-danger:active:focus,\n.dropdown.open .dropdown-toggle .btn-danger:hover {\n  background: #d32f2f;\n  border: 1px solid #d32f2f;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-danger.btn-loading,\n.btn-danger.btn-loading:disabled,\n.btn-danger.btn-loading:disabled:hover,\n.btn-danger.btn-loading:hover,\n.btn-danger.btn-loading:focus,\n.btn-danger.btn-loading:active:focus,\n.btn-danger.btn-loading:active {\n  color: transparent;\n}\n.btn-default.btn-outline,\n.btn-default.btn-outline:disabled,\n.btn-default.btn-outline:disabled:hover,\n.btn-default.btn-outline.disabled,\n.btn-default.btn-outline.disabled:hover,\n.btn-default.btn-outline.disabled:active {\n  background: #ebecf0;\n  border: 1px solid #ebecf0;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default.btn-outline:disabled,\n.btn-default.btn-outline:disabled:hover,\n.btn-default.btn-outline.disabled,\n.btn-default.btn-outline.disabled:hover,\n.btn-default.btn-outline.disabled:active {\n  filter: alpha(opacity=25);\n  opacity: 0.25;\n}\n.btn-default.btn-outline:hover,\n.btn-default.btn-outline:focus {\n  background: #dfe1e6;\n  border: 1px solid #dfe1e6;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default.btn-outline:active:focus,\n.btn-default.btn-outline:active,\n.dropdown.open .btn-default.btn-outline,\n.dropdown.open .btn-default.btn-outline:focus,\n.dropdown.open .btn-default.btn-outline:active:focus,\n.dropdown.open .btn-default.btn-outline:hover {\n  background: #c1c7d0;\n  border: 1px solid #c1c7d0;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default.btn-outline.btn-loading,\n.btn-default.btn-outline.btn-loading:disabled,\n.btn-default.btn-outline.btn-loading:disabled:hover,\n.btn-default.btn-outline.btn-loading:hover,\n.btn-default.btn-outline.btn-loading:focus,\n.btn-default.btn-outline.btn-loading:active:focus,\n.btn-default.btn-outline.btn-loading:active {\n  background: #ebecf0;\n  border: 1px solid #ebecf0;\n  color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-primary.btn-outline,\n.btn-primary.btn-outline:disabled,\n.btn-primary.btn-outline:disabled:hover,\n.btn-primary.btn-outline.disabled,\n.btn-primary.btn-outline.disabled:hover,\n.btn-primary.btn-outline.disabled:active {\n  background: #6554c0;\n  border: 1px solid #6554c0;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-primary.btn-outline:disabled,\n.btn-primary.btn-outline:disabled:hover,\n.btn-primary.btn-outline.disabled,\n.btn-primary.btn-outline.disabled:hover,\n.btn-primary.btn-outline.disabled:active {\n  filter: alpha(opacity=25);\n  opacity: 0.25;\n}\n.btn-primary.btn-outline:hover,\n.btn-primary.btn-outline:focus {\n  background: #5243aa;\n  border: 1px solid #5243aa;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-primary.btn-outline:active:focus,\n.btn-primary.btn-outline:active,\n.dropdown.open .btn-primary.btn-outline,\n.dropdown.open .btn-primary.btn-outline:focus,\n.dropdown.open .btn-primary.btn-outline:active:focus,\n.dropdown.open .btn-primary.btn-outline:hover {\n  background: #403294;\n  border: 1px solid #403294;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-primary.btn-outline.btn-loading,\n.btn-primary.btn-outline.btn-loading:disabled,\n.btn-primary.btn-outline.btn-loading:disabled:hover,\n.btn-primary.btn-outline.btn-loading:hover,\n.btn-primary.btn-outline.btn-loading:focus,\n.btn-primary.btn-outline.btn-loading:active:focus,\n.btn-primary.btn-outline.btn-loading:active {\n  background: #6554c0;\n  border: 1px solid #6554c0;\n  color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.navbar-misago .btn-sign-in {\n  border-radius: 4px;\n}\n.navbar-misago .btn-sign-in,\n.navbar-misago .btn-sign-in:disabled,\n.navbar-misago .btn-sign-in:disabled:hover,\n.navbar-misago .btn-sign-in.disabled,\n.navbar-misago .btn-sign-in.disabled:hover,\n.navbar-misago .btn-sign-in.disabled:active {\n  background: transparent;\n  border: 1px solid #c1c7d0;\n  color: #8993a4;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.navbar-misago .btn-sign-in:disabled,\n.navbar-misago .btn-sign-in:disabled:hover,\n.navbar-misago .btn-sign-in.disabled,\n.navbar-misago .btn-sign-in.disabled:hover,\n.navbar-misago .btn-sign-in.disabled:active {\n  filter: alpha(opacity=25);\n  opacity: 0.25;\n}\n.navbar-misago .btn-sign-in:hover,\n.navbar-misago .btn-sign-in:focus {\n  background: #ebecf0;\n  border: 1px solid #ebecf0;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.navbar-misago .btn-sign-in:active:focus,\n.navbar-misago .btn-sign-in:active,\n.dropdown.open .navbar-misago .btn-sign-in,\n.dropdown.open .navbar-misago .btn-sign-in:focus,\n.dropdown.open .navbar-misago .btn-sign-in:active:focus,\n.dropdown.open .navbar-misago .btn-sign-in:hover {\n  background: #dfe1e6;\n  border: 1px solid #dfe1e6;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.navbar-misago .btn-sign-in.btn-loading,\n.navbar-misago .btn-sign-in.btn-loading:disabled,\n.navbar-misago .btn-sign-in.btn-loading:disabled:hover,\n.navbar-misago .btn-sign-in.btn-loading:hover,\n.navbar-misago .btn-sign-in.btn-loading:focus,\n.navbar-misago .btn-sign-in.btn-loading:active:focus,\n.navbar-misago .btn-sign-in.btn-loading:active {\n  background: transparent;\n  border: 1px solid #c1c7d0;\n  color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.navbar-misago .btn-register {\n  border-radius: 4px;\n}\n.navbar-misago .btn-register,\n.navbar-misago .btn-register:disabled,\n.navbar-misago .btn-register:disabled:hover,\n.navbar-misago .btn-register.disabled,\n.navbar-misago .btn-register.disabled:hover,\n.navbar-misago .btn-register.disabled:active {\n  background: #6554c0;\n  border: 1px solid #6554c0;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.navbar-misago .btn-register:disabled,\n.navbar-misago .btn-register:disabled:hover,\n.navbar-misago .btn-register.disabled,\n.navbar-misago .btn-register.disabled:hover,\n.navbar-misago .btn-register.disabled:active {\n  filter: alpha(opacity=25);\n  opacity: 0.25;\n}\n.navbar-misago .btn-register:hover,\n.navbar-misago .btn-register:focus {\n  background: #5243aa;\n  border: 1px solid #5243aa;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.navbar-misago .btn-register:active:focus,\n.navbar-misago .btn-register:active,\n.dropdown.open .navbar-misago .btn-register,\n.dropdown.open .navbar-misago .btn-register:focus,\n.dropdown.open .navbar-misago .btn-register:active:focus,\n.dropdown.open .navbar-misago .btn-register:hover {\n  background: #403294;\n  border: 1px solid #403294;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.navbar-misago .btn-register.btn-loading,\n.navbar-misago .btn-register.btn-loading:disabled,\n.navbar-misago .btn-register.btn-loading:disabled:hover,\n.navbar-misago .btn-register.btn-loading:hover,\n.navbar-misago .btn-register.btn-loading:focus,\n.navbar-misago .btn-register.btn-loading:active:focus,\n.navbar-misago .btn-register.btn-loading:active {\n  background: #6554c0;\n  border: 1px solid #6554c0;\n  color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-social-battlenet,\n.btn-social-battlenet-oauth2,\n.btn-social-battlenet:disabled,\n.btn-social-battlenet-oauth2:disabled,\n.btn-social-battlenet:disabled:hover,\n.btn-social-battlenet-oauth2:disabled:hover {\n  color: #0e86ca;\n  font-weight: bold;\n}\n.btn-social-bungie,\n.btn-social-bungie:disabled,\n.btn-social-bungie:disabled:hover {\n  color: #0096db;\n  font-weight: bold;\n}\n.btn-social-facebook,\n.btn-social-facebook-app,\n.btn-social-facebook:disabled,\n.btn-social-facebook-app:disabled,\n.btn-social-facebook:disabled:hover,\n.btn-social-facebook-app:disabled:hover {\n  color: #3b5998;\n  font-weight: bold;\n}\n.btn-social-github,\n.btn-social-github-team,\n.btn-social-github-enterprise,\n.btn-social-github-enterprise-org,\n.btn-social-github-enterprise-team,\n.btn-social-github:disabled,\n.btn-social-github-team:disabled,\n.btn-social-github-enterprise:disabled,\n.btn-social-github-enterprise-org:disabled,\n.btn-social-github-enterprise-team:disabled,\n.btn-social-github:disabled:hover,\n.btn-social-github-team:disabled:hover,\n.btn-social-github-enterprise:disabled:hover,\n.btn-social-github-enterprise-org:disabled:hover,\n.btn-social-github-enterprise-team:disabled:hover {\n  color: #000000;\n  font-weight: bold;\n}\n.btn-social-gitlab,\n.btn-social-gitlab:disabled,\n.btn-social-gitlab:disabled:hover {\n  color: #fc6d26;\n  font-weight: bold;\n}\n.btn-social-google,\n.btn-social-google-oauth,\n.btn-social-google-oauth2,\n.btn-social-google-plus,\n.btn-social-google-openidconnect,\n.btn-social-google:disabled,\n.btn-social-google-oauth:disabled,\n.btn-social-google-oauth2:disabled,\n.btn-social-google-plus:disabled,\n.btn-social-google-openidconnect:disabled,\n.btn-social-google:disabled:hover,\n.btn-social-google-oauth:disabled:hover,\n.btn-social-google-oauth2:disabled:hover,\n.btn-social-google-plus:disabled:hover,\n.btn-social-google-openidconnect:disabled:hover {\n  color: #dd4b39;\n  font-weight: bold;\n}\n.btn-social-linkedin,\n.btn-social-linkedin:disabled,\n.btn-social-linkedin:disabled:hover {\n  color: #0077b5;\n  font-weight: bold;\n}\n.btn-social-steam,\n.btn-social-steam:disabled,\n.btn-social-steam:disabled:hover {\n  color: #5c7e10;\n  font-weight: bold;\n}\n.btn-social-twitter,\n.btn-social-twitter:disabled,\n.btn-social-twitter:disabled:hover {\n  color: #1da1f2;\n  font-weight: bold;\n}\n.form-social-auth .row {\n  margin-top: -6px;\n  margin-bottom: -6px;\n}\n.form-social-auth .btn {\n  margin: 6px 0px;\n}\ninput.form-control,\ntextarea.form-control {\n  border-color: #ced0da;\n  box-shadow: inset 0px 0px 0px 1px #ced0da;\n}\ninput.form-control:focus,\ntextarea.form-control:focus {\n  border-color: #66afe9;\n  box-shadow: inset 0px 0px 0px 1px #66afe9;\n}\n.has-error input.form-control {\n  border-color: #ff5630;\n  box-shadow: inset 0px 0px 0px 1px #ff5630;\n}\n.has-error input.form-control:focus {\n  border-color: #ffa996;\n  box-shadow: inset 0px 0px 0px 1px #ffa996;\n}\n.has-success input.form-control {\n  border-color: #36b37e;\n  box-shadow: inset 0px 0px 0px 1px #36b37e;\n}\n.has-success input.form-control:focus {\n  border-color: #79d6af;\n  box-shadow: inset 0px 0px 0px 1px #79d6af;\n}\n.password-strength {\n  margin-top: 10px;\n}\n.password-strength .text-small {\n  margin-top: 4px;\n  color: #3462af;\n  font-size: 12px;\n}\n.password-strength .progress {\n  margin: 0px;\n}\n.auth-message {\n  background: #091e42;\n  padding: 80px 0px;\n  box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.04), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.06);\n}\n.auth-message p {\n  color: #fff;\n}\n.auth-message .btn {\n  background: #f4f5f7;\n  border-color: #f4f5f7;\n  color: #172b4d;\n}\n.auth-message .btn:hover,\n.auth-message .btn:focus {\n  background: #dfe1e6;\n  border-color: #dfe1e6;\n  color: #172b4d;\n}\n.auth-message .btn:active {\n  background: #b3bac5;\n  border-color: #b3bac5;\n  color: #172b4d;\n}\n.dropdown-menu {\n  border: none;\n  box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.04), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n}\n.user-dropdown .dropdown-header strong {\n  display: block;\n  color: #172b4d;\n  font-weight: bold;\n}\n.user-dropdown .dropdown-header .user-stats {\n  margin-top: 10px;\n  font-size: 12px;\n}\n.user-dropdown .dropdown-header .user-stats .material-icon {\n  margin-right: 3px;\n  position: relative;\n  bottom: 1px;\n  width: 14px;\n  height: 14px;\n  font-size: 14px;\n}\n.user-dropdown .guest-preview {\n  padding-bottom: 10px;\n}\n.user-dropdown .badge {\n  background-color: #ff5630;\n}\n.user-dropdown a:hover .badge,\n.user-dropdown a:focus .badge,\n.user-dropdown a:active .badge,\n.user-dropdown .btn-link:hover .badge,\n.user-dropdown .btn-link:focus .badge,\n.user-dropdown .btn-link:active .badge {\n  background-color: #fff;\n  color: #ff5630;\n}\n.mobile-dropdown.open {\n  margin: 0px;\n}\n.navbar-misago {\n  border-bottom: none;\n  box-shadow: 0px 0px 3px #c1c7d0;\n}\n.navbar-misago .user-avatar {\n  background: #fff;\n  border-radius: 3px;\n}\n.navbar-misago .brand-link img {\n  border-radius: 3px;\n}\n.dropdown-search-results {\n  border-radius: 0px 0px 4px 4px;\n}\n.dropdown-search-message {\n  border-top: 1px solid #ebecf0;\n  padding: 10px 16px;\n  color: #7a869a;\n}\n.dropdown-search-loader {\n  border-top: 1px solid #ebecf0;\n  padding: 10px 16px;\n}\n.dropdown-search-header {\n  border-top: 1px solid #ebecf0;\n  padding: 8px 20px;\n  color: #7a869a;\n  font-weight: bold;\n}\n.dropdown-search-thread small,\n.dropdown-search-user small {\n  color: #7a869a;\n}\n.dropdown-search-thread .dropdown-search-post-content {\n  overflow: hidden;\n  white-space: normal;\n  max-height: 47px;\n}\n.dropdown-search-thread .dropdown-search-post-footer {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.dropdown-search-footer {\n  padding-bottom: 5px;\n}\n.dropdown-search-footer:last-child {\n  padding-bottom: 0px;\n}\n.dropdown-menu > li.dropdown-search-footer > a {\n  font-size: small;\n}\n.misago-footer {\n  margin-top: 40px;\n}\n.misago-footer .footer-content {\n  border-top: 1px solid #ebecf0;\n  padding-top: 20px;\n  color: #a5adba;\n}\n@media screen and (max-width: 767px) {\n  .misago-footer .footer-content {\n    text-align: center;\n  }\n  .misago-footer .footer-content .site-footnote {\n    clear: both;\n    margin-bottom: 15px;\n  }\n}\n.misago-footer .footer-content a,\n.misago-footer .footer-content a:link,\n.misago-footer .footer-content a:visited {\n  color: #a5adba;\n}\n.misago-footer .footer-content a:hover,\n.misago-footer .footer-content a:focus {\n  color: #7a8699;\n}\n.misago-footer .footer-content .misago-branding,\n.misago-footer .footer-content .misago-branding:link,\n.misago-footer .footer-content .misago-branding:visited {\n  color: #a5adba;\n}\n.misago-footer .footer-content .misago-branding:hover,\n.misago-footer .footer-content .misago-branding:focus {\n  color: #7a8699;\n}\n.list-group {\n  border-radius: 3px;\n}\n.list-group .list-group-item {\n  border-left-color: #ebecf0;\n  border-right-color: #ebecf0;\n}\n.list-group .list-group-item:first-child {\n  border-top-color: #ebecf0;\n}\n.list-group .list-group-item:last-child {\n  border-bottom-color: #ebecf0;\n}\n.list-group-item.empty-message {\n  padding-top: 20px;\n  padding-bottom: 20px;\n  text-align: center;\n}\n.list-group-item.empty-message p {\n  margin: 10px 0px;\n}\n.nav-side {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.nav-side > .list-group-item {\n  border-left: none;\n  border-right: none;\n  margin-bottom: 1px;\n}\n.nav-side > .list-group-item:first-child {\n  border-top: none;\n}\n.nav-side > .list-group-item:last-child {\n  border-bottom: none;\n}\n.nav-side > .list-group-item,\n.nav-side > .list-group-item:link,\n.nav-side > .list-group-item:visited {\n  background: #f4f5f7;\n  border: none;\n  color: #172b4d;\n}\n.nav-side > .list-group-item:hover,\n.nav-side > .list-group-item:focus,\n.nav-side > .list-group-item:active {\n  background: #ebecf0;\n  color: #172b4d;\n}\n.nav-side > .list-group-item.active,\n.nav-side > .list-group-item.active:link,\n.nav-side > .list-group-item.active:visited,\n.nav-side > .list-group-item.active:hover,\n.nav-side > .list-group-item.active:focus,\n.nav-side > .list-group-item.active:active {\n  background: #091e42;\n  color: #fff;\n  font-weight: bold;\n}\n.nav-side > .list-group-item.active .badge,\n.nav-side > .list-group-item.active:link .badge,\n.nav-side > .list-group-item.active:visited .badge,\n.nav-side > .list-group-item.active:hover .badge,\n.nav-side > .list-group-item.active:focus .badge,\n.nav-side > .list-group-item.active:active .badge {\n  background: #f4f5f7;\n  color: #172b4d;\n}\n.username-history .user-avatar {\n  border-radius: 4px;\n}\n.panel {\n  border: none;\n  border-radius: 4px;\n}\n.panel .panel-heading,\n.panel .panel-footer {\n  background: #fff;\n}\n.panel .panel-title {\n  color: #5e6c84;\n}\n.panel .form-group + .form-group {\n  margin-top: 20px;\n}\n.panel .panel-body > .form-group:first-child {\n  margin-top: 10px;\n}\n.panel fieldset {\n  margin-top: 20px;\n}\n.panel fieldset:first-child {\n  margin-top: 0px;\n}\n.panel fieldset legend {\n  border: none;\n  color: #5e6c84;\n  font-weight: 300;\n}\n.panel-message-body .message-icon {\n  color: #9575cd;\n}\n.panel-form {\n  border: 1px solid #ebecf0;\n  box-shadow: none;\n}\n.panel-form .panel-heading,\n.panel-form .panel-footer {\n  border-color: #ebecf0;\n}\n.poll-form .panel {\n  margin: 0px;\n}\n.help-block,\n.help-block .text-small {\n  color: #7a869a;\n}\n.category-main .media-left .read-status {\n  background: #ebecf0;\n  border-radius: 4px;\n  padding: 5px 8px;\n}\n.category-main .media-left .material-icon {\n  height: 14px;\n  width: 14px;\n  color: #5e6c84;\n  font-size: 14px;\n  line-height: 14px;\n}\n.category-main .media-left .read-status.item-new {\n  background-color: #0052cc;\n}\n.category-main .media-left .read-status.item-new .material-icon {\n  color: #fff;\n}\n@media screen and (min-width: 768px) {\n  .category-main .media-left {\n    padding: 5px 0px;\n  }\n}\n.category-main .media-body {\n  padding-left: 12px;\n}\n@media screen and (max-width: 767px) {\n  .category-main .media-body {\n    padding-left: 3.33333333px;\n  }\n}\n.list-group-category-no-description .category-main .media-heading {\n  margin-top: 10px;\n}\n@media screen and (max-width: 767px) {\n  .list-group-category-no-description .category-main .media-heading {\n    margin-top: 5px;\n  }\n}\n.category-main .media-heading a,\n.category-main .media-heading a:link,\n.category-main .media-heading a:visited {\n  color: #344563;\n}\n.category-main .media-heading a:focus,\n.category-main .media-heading a:hover,\n.category-main .media-heading a:active {\n  color: #172b4d;\n}\n.category-stats {\n  color: #5e6c84;\n}\n.category-main .category-description p {\n  font-size: 12px;\n}\n.category-main .category-description p:last-child {\n  margin-bottom: 0px;\n}\n.category-last-thread img {\n  background-color: #fff;\n  border-radius: 4px;\n}\n.category-last-thread .media-heading {\n  margin-bottom: 2px;\n}\n@media screen and (max-width: 767px) {\n  .category-last-thread .media-heading {\n    margin-top: 10px;\n  }\n}\n.category-last-thread .list-inline {\n  color: #7a869a;\n  font-size: 12px;\n}\n.category-last-thread .list-inline a,\n.category-last-thread .list-inline a:link,\n.category-last-thread .list-inline a:visited {\n  color: #7a869a;\n}\n.category-last-thread .list-inline a:hover,\n.category-last-thread .list-inline a:active,\n.category-last-thread .list-inline a:focus {\n  color: #344563;\n}\n.category-last-thread .list-inline .item-title,\n.category-last-thread .list-inline .item-title:link,\n.category-last-thread .list-inline .item-title:visited {\n  color: #344563;\n}\n.category-last-thread .list-inline .item-title:hover,\n.category-last-thread .list-inline .item-title:active,\n.category-last-thread .list-inline .item-title:focus {\n  color: #172b4d;\n}\n.category-thread-message {\n  color: #7a869a;\n}\n.category-thread-message .material-icon {\n  padding: 6px 0px;\n  margin-right: 3px;\n}\n@media screen and (max-width: 767px) {\n  .category-thread-message {\n    padding-top: 15px;\n    font-size: 12px;\n  }\n  .category-thread-message .material-icon {\n    padding: 3px 0px;\n  }\n}\n.panel-participants {\n  border: 1px solid #ebecf0;\n}\n.participant-card .btn-user {\n  border: 0px !important;\n}\n.participant-card .dropdown-header-owner {\n  color: #0052cc;\n}\n.participant-card .dropdown-header-owner .material-icon {\n  width: 14px;\n  height: 14px;\n  font-size: 14px;\n  line-height: 14px;\n}\n.participant-card .dropdown-header-owner .icon-text {\n  margin-left: 4px;\n  position: relative;\n  top: 2px;\n}\n.panel-participants p {\n  color: #7a869a;\n}\n@media screen and (max-width: 767px) {\n  .panel-participants p {\n    margin-top: 10px;\n    text-align: center;\n  }\n}\n.panel-poll {\n  border: 1px solid #ebecf0;\n}\n.panel-poll .poll-select-choices {\n  margin-top: -10px;\n}\n.panel-poll .poll-details {\n  margin-bottom: 20px;\n  color: #7a869a;\n  font-size: 12px;\n}\n.panel-poll .progress {\n  margin-top: 6.66666667px;\n  margin-bottom: 5px;\n}\n.panel-poll .poll-chart {\n  color: #7a869a;\n  font-size: 12px;\n}\n.panel-poll .poll-options {\n  margin-top: 20px;\n}\n#posting-placeholder {\n  background-color: #fafbfc;\n}\n.posting-message .material-icon {\n  color: #9575cd;\n}\n.posting-message .btn {\n  margin-top: 20px;\n}\n.panel-post {\n  background: #fff;\n  border: 1px solid #ddd;\n}\n.post-side {\n  color: #7a869a;\n}\n.post-side .poster-avatar {\n  border-radius: 4px;\n}\n.post-side .user-title {\n  color: #5e6c84;\n}\n.post-side .user-title a,\n.post-side .user-title a:link,\n.post-side .user-title a:visited,\n.post-side .user-title a:focus,\n.post-side .user-title a:hover,\n.post-side .user-title a:active {\n  color: #5e6c84;\n}\n.post-heading .label-unread {\n  background-color: #aa00ff;\n  margin-right: 16px;\n}\n.post-heading .label-protected {\n  background-color: transparent;\n  margin-left: 24px;\n  position: relative;\n  top: 1px;\n  color: #bdbdbd;\n}\n.post-heading .label-protected .material-icon {\n  margin-right: 2px;\n  position: relative;\n  top: -1px;\n  font-size: 16px;\n  line-height: 16px;\n}\n.post-heading > .btn-link {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n.post-heading > .btn-link,\n.post-heading > .btn-link:link,\n.post-heading > .btn-link:visited {\n  color: #7a869a;\n}\n.post-heading > .btn-link:hover,\n.post-heading > .btn-link:focus,\n.post-heading > .btn-link:focus:active,\n.post-heading > .btn-link:active {\n  color: #172b4d;\n  text-decoration: none;\n}\n.post-heading .btn-see-edits {\n  margin-left: 24px;\n}\n.post-status-message {\n  border-radius: 4px;\n  margin-top: 10px;\n  padding: 6px 12px;\n}\n@media screen and (max-width: 767px) {\n  .post-status-message {\n    font-size: 12px;\n  }\n  .post-status-message .material-icon {\n    margin-top: 3px;\n  }\n  .post-status-message p {\n    margin-top: 0px;\n  }\n}\n.post-body:last-child {\n  padding-bottom: 10px;\n}\n.post-attachments {\n  background-color: #ebecf0;\n  border: none;\n  border-radius: 4px;\n  margin-bottom: 30px;\n}\n.post-attachments:last-child {\n  margin-bottom: 10px;\n}\n@media screen and (max-width: 767px) {\n  .post-attachments {\n    border-radius: 0px;\n    margin: 0px -15px;\n    margin-bottom: 20px;\n  }\n}\n.post-footer > .btn-link {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n.post-footer > .btn-link,\n.post-footer > .btn-link:link,\n.post-footer > .btn-link:visited {\n  color: #7a869a;\n}\n.post-footer > .btn-link:hover,\n.post-footer > .btn-link:focus,\n.post-footer > .btn-link:focus:active,\n.post-footer > .btn-link:active {\n  color: #172b4d;\n  text-decoration: none;\n}\n.post-footer p {\n  color: #7a869a;\n  font-size: 12px;\n}\n.post-body-hidden,\n.post-body-invalid {\n  padding-top: 10px;\n  padding-bottom: 10px;\n}\n.post-body-hidden .lead,\n.post-body-invalid .lead {\n  margin-bottom: 10px;\n}\n.post-body-hidden .text-muted,\n.post-body-invalid .text-muted {\n  margin-bottom: 0px;\n  font-size: 12px;\n}\n.post-hidden {\n  filter: alpha(opacity=75);\n  opacity: 0.75;\n}\n.post-feed .panel-body {\n  padding-bottom: 0px;\n}\n.post-feed .post-body {\n  position: relative;\n  padding-top: 0px;\n  padding-bottom: 20px;\n  max-height: 300px;\n  overflow-y: hidden;\n}\n.post-feed .post-body:after {\n  box-shadow: 0px 0px 16px 16px #ffffff;\n  display: block;\n  position: absolute;\n  bottom: 0px;\n  height: 0px;\n  width: 100%;\n  content: \"-\";\n  color: transparent;\n}\n.posts-list .event .event-label {\n  margin-bottom: 5px;\n}\n.posts-list .event .label-unread {\n  background-color: #aa00ff;\n  color: #fff;\n}\n.posts-list .event-info a,\n.posts-list .event-info a:link,\n.posts-list .event-info a:visited,\n.posts-list .event-info .btn-link {\n  color: #5e6c84;\n}\n.posts-list .event-info a:focus,\n.posts-list .event-info a:active,\n.posts-list .event-info a:focus:active,\n.posts-list .event-info .btn-link:focus,\n.posts-list .event-info .btn-link:active,\n.posts-list .event-info .btn-link:focus:active {\n  color: #172b4d;\n}\n.posts-list .event-hidden {\n  filter: alpha(opacity=33);\n  opacity: 0.33;\n}\n.user-card {\n  background: #f4f5f7;\n}\n.user-card-small-avatar img,\n.user-card-avatar img {\n  border-radius: 4px;\n}\n.user-card-avatar {\n  margin: 20px 0px;\n}\n.user-card-avatar img {\n  width: 150px;\n  height: 150px;\n}\n.user-card-username a,\n.user-card-username a:link,\n.user-card-username a:visited,\n.user-card-username a:hover,\n.user-card-username a:focus,\n.user-card-username a:active {\n  color: #172b4d;\n  font-size: 18px;\n  font-weight: bold;\n}\n.user-card-title span,\n.user-card-title a,\n.user-card-title a:link,\n.user-card-title a:visited {\n  color: #5e6c84;\n}\n.user-card-title a:focus,\n.user-card-title a:hover,\n.user-card-title a:active {\n  color: #172b4d;\n}\n@media screen and (min-width: 768px) {\n  .user-card-stats {\n    margin-top: 20px;\n  }\n}\n.user-card-stats ul {\n  margin: 0px;\n}\n.user-card-stats li {\n  display: inline-block;\n  margin-right: 12px;\n  color: #7a869a;\n  font-size: 12px;\n}\n@media screen and (min-width: 768px) {\n  .user-card-stats li {\n    margin: 0px 6px;\n  }\n}\n.user-card-stats li.user-stat-empty {\n  display: none;\n}\n@media screen and (min-width: 768px) {\n  li.user-stat-divider {\n    display: block;\n    margin: 0px;\n  }\n}\n@media screen and (max-width: 767px) {\n  li.user-stat-divider {\n    display: none;\n  }\n}\n@media screen and (min-width: 768px) {\n  .user-card-stats {\n    min-height: 60px;\n  }\n}\n@media screen and (max-width: 767px) {\n  .user-card-left {\n    padding-right: 0px;\n  }\n}\n.progress,\n.progress .progress-bar {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  height: 8px;\n}\n.misago-markup img {\n  border-radius: 4px;\n}\n.misago-markup .quote-block,\n.misago-markup blockquote {\n  background-color: #ffecb3;\n  border-color: #b3e5fc;\n  overflow: hidden;\n  color: #3e2723;\n}\n.misago-markup .quote-block .quote-heading,\n.misago-markup blockquote .quote-heading {\n  background-color: #ffe082;\n  border: none;\n  color: #795548;\n}\n.misago-markup .quote-block .quote-heading a,\n.misago-markup blockquote .quote-heading a,\n.misago-markup .quote-block .quote-heading a:link,\n.misago-markup blockquote .quote-heading a:link,\n.misago-markup .quote-block .quote-heading a:visited,\n.misago-markup blockquote .quote-heading a:visited {\n  color: #5d4037;\n}\n.misago-markup .quote-block .quote-heading a:hover,\n.misago-markup blockquote .quote-heading a:hover,\n.misago-markup .quote-block .quote-heading a:focus,\n.misago-markup blockquote .quote-heading a:focus,\n.misago-markup .quote-block .quote-heading a:active,\n.misago-markup blockquote .quote-heading a:active {\n  color: #3e2723;\n}\n.misago-markup .quote-block hr,\n.misago-markup blockquote hr {\n  border-color: #ffca28;\n}\n.misago-markup > .quote-block,\n.misago-markup > blockquote {\n  background: #ffecb3;\n  border: none;\n  border-radius: 4px;\n}\n.misago-markup > .quote-block .quote-block,\n.misago-markup > blockquote .quote-block {\n  background: #ffecb3;\n}\n.misago-markup .quote-body {\n  background: #ffecb3;\n}\n.misago-markup .quote-body > .quote-block,\n.misago-markup .quote-body > blockquote {\n  border-color: #ffe082;\n  border-radius: 4px;\n}\n.misago-markup .spoiler-block {\n  background: repeating-linear-gradient(45deg, rgba(235, 236, 240, 0.5), rgba(235, 236, 240, 0.5) 10px, #fff 10px, #fff 20px);\n  border: none;\n}\n.misago-markup .spoiler-body {\n  background: transparent;\n  -webkit-filter: blur(5px);\n  -moz-filter: blur(5px);\n  -o-filter: blur(5px);\n  -ms-filter: blur(5px);\n  filter: blur(5px);\n  color: #172b4d;\n}\n.misago-markup .spoiler-block.revealed .spoiler-body {\n  -webkit-filter: none;\n  -moz-filter: none;\n  -o-filter: none;\n  -ms-filter: none;\n  filter: none;\n}\n.misago-markup .spoiler-overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: rgba(255, 255, 255, 0.1);\n}\n.misago-markup .spoiler-reveal {\n  color: #172b4d;\n  background-color: #ebecf0;\n  border-color: #ccc;\n}\n.misago-markup .spoiler-reveal:focus,\n.misago-markup .spoiler-reveal.focus {\n  color: #172b4d;\n  background-color: #ced0da;\n  border-color: #8c8c8c;\n}\n.misago-markup .spoiler-reveal:hover {\n  color: #172b4d;\n  background-color: #ced0da;\n  border-color: #adadad;\n}\n.misago-markup .spoiler-reveal:active,\n.misago-markup .spoiler-reveal.active,\n.open > .dropdown-toggle.misago-markup .spoiler-reveal {\n  color: #172b4d;\n  background-color: #ced0da;\n  background-image: none;\n  border-color: #adadad;\n}\n.misago-markup .spoiler-reveal:active:hover,\n.misago-markup .spoiler-reveal.active:hover,\n.open > .dropdown-toggle.misago-markup .spoiler-reveal:hover,\n.misago-markup .spoiler-reveal:active:focus,\n.misago-markup .spoiler-reveal.active:focus,\n.open > .dropdown-toggle.misago-markup .spoiler-reveal:focus,\n.misago-markup .spoiler-reveal:active.focus,\n.misago-markup .spoiler-reveal.active.focus,\n.open > .dropdown-toggle.misago-markup .spoiler-reveal.focus {\n  color: #172b4d;\n  background-color: #b9bdcb;\n  border-color: #8c8c8c;\n}\n.misago-markup .spoiler-reveal.disabled:hover,\n.misago-markup .spoiler-reveal[disabled]:hover,\nfieldset[disabled] .misago-markup .spoiler-reveal:hover,\n.misago-markup .spoiler-reveal.disabled:focus,\n.misago-markup .spoiler-reveal[disabled]:focus,\nfieldset[disabled] .misago-markup .spoiler-reveal:focus,\n.misago-markup .spoiler-reveal.disabled.focus,\n.misago-markup .spoiler-reveal[disabled].focus,\nfieldset[disabled] .misago-markup .spoiler-reveal.focus {\n  background-color: #ebecf0;\n  border-color: #ccc;\n}\n.misago-markup .spoiler-reveal .badge {\n  color: #ebecf0;\n  background-color: #172b4d;\n}\n.misago-markup .spoiler-reveal,\n.misago-markup .spoiler-reveal:disabled,\n.misago-markup .spoiler-reveal:disabled:hover,\n.misago-markup .spoiler-reveal.disabled,\n.misago-markup .spoiler-reveal.disabled:hover,\n.misago-markup .spoiler-reveal.disabled:active {\n  background: #ebecf0;\n  border: 1px solid #ebecf0;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.misago-markup .spoiler-reveal:disabled,\n.misago-markup .spoiler-reveal:disabled:hover,\n.misago-markup .spoiler-reveal.disabled,\n.misago-markup .spoiler-reveal.disabled:hover,\n.misago-markup .spoiler-reveal.disabled:active {\n  filter: alpha(opacity=25);\n  opacity: 0.25;\n}\n.misago-markup .spoiler-reveal:hover,\n.misago-markup .spoiler-reveal:focus {\n  background: #dfe1e6;\n  border: 1px solid #dfe1e6;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.misago-markup .spoiler-reveal:active:focus,\n.misago-markup .spoiler-reveal:active,\n.dropdown.open .dropdown-toggle .misago-markup .spoiler-reveal,\n.dropdown.open .dropdown-toggle .misago-markup .spoiler-reveal:focus,\n.dropdown.open .dropdown-toggle .misago-markup .spoiler-reveal:active:focus,\n.dropdown.open .dropdown-toggle .misago-markup .spoiler-reveal:hover {\n  background: #c1c7d0;\n  border: 1px solid #c1c7d0;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.misago-markup .spoiler-reveal.btn-loading,\n.misago-markup .spoiler-reveal.btn-loading:disabled,\n.misago-markup .spoiler-reveal.btn-loading:disabled:hover,\n.misago-markup .spoiler-reveal.btn-loading:hover,\n.misago-markup .spoiler-reveal.btn-loading:focus,\n.misago-markup .spoiler-reveal.btn-loading:active:focus,\n.misago-markup .spoiler-reveal.btn-loading:active {\n  color: transparent;\n}\n.misago-markup .spoiler-reveal,\n.misago-markup .spoiler-reveal:active,\n.misago-markup .spoiler-reveal:hover {\n  border-radius: 4px;\n  box-shadow: 0px 0px 0px 4px #fff;\n  padding: 6px 12px;\n}\n.modal-header {\n  background: #fff;\n  border-bottom-color: #ced0da;\n  border-radius: 6px 6px 0px 0px;\n  color: #172b4d;\n}\n.modal-header .close {\n  padding: 0px 6px;\n  color: #172b4d;\n  font-size: 24px;\n  line-height: 24px;\n  text-shadow: none;\n}\n.modal-message .message-icon {\n  color: #9575cd;\n}\n.modal-body > .form-group {\n  margin: 20px 0px;\n}\n.modal-body > .form-group:first-child {\n  margin-top: 0px;\n}\n.modal-body > .form-group:last-child {\n  margin-bottom: 0px;\n}\n.modal-sign-in .modal-body {\n  padding-top: 0px;\n  padding-bottom: 0px;\n}\n.modal-sign-in .modal-body > .form-group {\n  margin: 20px 0px;\n}\n.legal-footnote label {\n  font-weight: bold;\n}\n.legal-footnote .help-block {\n  margin-left: 20px;\n  color: #ff5630;\n}\n.modal-avatar-index .avatar-preview {\n  background: #fff;\n  border-radius: 6px;\n}\n.modal-avatar-crop .cropit-preview {\n  background: #fff;\n  margin: 20px 0px;\n}\n.modal-avatar-crop .cropit-image-zoom-input {\n  margin-top: 40px;\n  margin-bottom: 20px;\n}\n.modal-post-likers .media {\n  border-bottom: 1px solid #ebecf0;\n  padding-bottom: 15px;\n}\n.modal-post-likers .media img {\n  border-radius: 4px;\n  width: 40px;\n  height: 40px;\n}\n.modal-post-likers .media:last-child {\n  border: none;\n  padding-bottom: 0px;\n}\n.well {\n  border: 1px solid #ddd;\n}\n.active-posters .rank-user-avatar img {\n  border-radius: 4px;\n}\n.active-posters .user-details {\n  color: #7a869a;\n}\n.active-posters .user-details a.rank-name,\n.active-posters .user-details a.rank-name:link,\n.active-posters .user-details a.rank-name:visited {\n  color: #5e6c84;\n  font-weight: normal;\n}\n.active-posters .user-details a.rank-name:focus,\n.active-posters .user-details a.rank-name:hover,\n.active-posters .user-details a.rank-name:active {\n  color: #172b4d;\n}\n.active-posters .user-details span.rank-name {\n  color: #5e6c84;\n  font-weight: normal;\n}\n.active-posters small {\n  color: #7a869a;\n}\n.page-error .message-icon {\n  color: #ef5350;\n}\n.page-message .message-icon {\n  color: #9575cd;\n}\n.page-message-info .message-icon {\n  color: #9575cd;\n}\n.page-message-success .message-icon {\n  color: #81c784;\n}\n.page-options .message-line {\n  color: #7a869a;\n}\n.page-options .message-line a,\n.page-options .message-line a:link,\n.page-options .message-line a:visited {\n  color: #7a869a;\n}\n.page-options .message-line a:hover,\n.page-options .message-line a:focus,\n.page-options .message-line a:focus:active,\n.page-options .message-line a:active {\n  color: #172b4d;\n}\n.panel-profile-details-group.panel {\n  border: 1px solid #ebecf0;\n}\n.panel-profile-details-group.panel .form-group {\n  margin: 0px;\n}\n.panel-profile-details-group .form-control-static p:last-child {\n  margin-bottom: 0px;\n}\n.post-primary .panel-post {\n  border-color: #b388ff;\n}\n.post-primary .user-title {\n  color: #6200ea;\n}\n.post-primary .user-title a,\n.post-primary .user-title a:link,\n.post-primary .user-title a:visited,\n.post-primary .user-title a:focus,\n.post-primary .user-title a:hover,\n.post-primary .user-title a:active {\n  color: #6200ea;\n}\n.post-success .panel-post {\n  border-color: #00c853;\n}\n.post-success .user-title {\n  color: #388e3c;\n}\n.post-success .user-title a,\n.post-success .user-title a:link,\n.post-success .user-title a:visited,\n.post-success .user-title a:focus,\n.post-success .user-title a:hover,\n.post-success .user-title a:active {\n  color: #388e3c;\n}\n.post-warning .panel-post {\n  border-color: #ffab40;\n}\n.post-warning .user-title {\n  color: #ff6d00;\n}\n.post-warning .user-title a,\n.post-warning .user-title a:link,\n.post-warning .user-title a:visited,\n.post-warning .user-title a:focus,\n.post-warning .user-title a:hover,\n.post-warning .user-title a:active {\n  color: #ff6d00;\n}\n.post-danger .panel-post {\n  border-color: #ff8a80;\n}\n.post-danger .user-title {\n  color: #d50000;\n}\n.post-danger .user-title a,\n.post-danger .user-title a:link,\n.post-danger .user-title a:visited,\n.post-danger .user-title a:focus,\n.post-danger .user-title a:hover,\n.post-danger .user-title a:active {\n  color: #d50000;\n}\n.user-card-primary .panel-body {\n  background: #fff;\n  border: 2px solid #b388ff;\n  border-radius: 4px;\n  padding: 13px;\n}\n.user-card-primary .user-card-title {\n  color: #6200ea;\n}\n.user-card-primary .user-card-title a.user-title,\n.user-card-primary .user-card-title a.user-title:link,\n.user-card-primary .user-card-title a.user-title:visited,\n.user-card-primary .user-card-title a.user-title:focus,\n.user-card-primary .user-card-title a.user-title:hover,\n.user-card-primary .user-card-title a.user-title:active {\n  color: #6200ea;\n}\n.user-card-primary .user-card-stats li {\n  color: #9575cd;\n}\n.user-card-success .panel-body {\n  background: #fff;\n  border: 2px solid #00c853;\n  border-radius: 4px;\n  padding: 13px;\n}\n.user-card-success .user-card-title {\n  color: #388e3c;\n}\n.user-card-success .user-card-title a.user-title,\n.user-card-success .user-card-title a.user-title:link,\n.user-card-success .user-card-title a.user-title:visited,\n.user-card-success .user-card-title a.user-title:focus,\n.user-card-success .user-card-title a.user-title:hover,\n.user-card-success .user-card-title a.user-title:active {\n  color: #388e3c;\n}\n.user-card-success .user-card-stats li {\n  color: #66bb6a;\n}\n.user-card-warning .panel-body {\n  background: #fff;\n  border: 2px solid #ffab40;\n  border-radius: 4px;\n  padding: 13px;\n}\n.user-card-warning .user-card-title {\n  color: #ff6d00;\n}\n.user-card-warning .user-card-title a.user-title,\n.user-card-warning .user-card-title a.user-title:link,\n.user-card-warning .user-card-title a.user-title:visited,\n.user-card-warning .user-card-title a.user-title:focus,\n.user-card-warning .user-card-title a.user-title:hover,\n.user-card-warning .user-card-title a.user-title:active {\n  color: #ff6d00;\n}\n.user-card-warning .user-card-stats li {\n  color: #ff6e40;\n}\n.user-card-danger .panel-body {\n  background: #fff;\n  border: 2px solid #ff8a80;\n  border-radius: 4px;\n  padding: 13px;\n}\n.user-card-danger .user-card-title {\n  color: #d50000;\n}\n.user-card-danger .user-card-title a.user-title,\n.user-card-danger .user-card-title a.user-title:link,\n.user-card-danger .user-card-title a.user-title:visited,\n.user-card-danger .user-card-title a.user-title:focus,\n.user-card-danger .user-card-title a.user-title:hover,\n.user-card-danger .user-card-title a.user-title:active {\n  color: #d50000;\n}\n.user-card-danger .user-card-stats li {\n  color: #e57373;\n}\n.list-group .list-group-rank-primary {\n  border-left: 4px solid #7e57c2;\n  padding-left: 11px;\n}\n.list-group .list-group-rank-primary span.rank-name {\n  color: #6200ea;\n}\n.list-group .list-group-rank-primary a.rank-name,\n.list-group .list-group-rank-primary a.rank-name:link,\n.list-group .list-group-rank-primary a.rank-name:visited,\n.list-group .list-group-rank-primary a.rank-name:focus,\n.list-group .list-group-rank-primary a.rank-name:hover,\n.list-group .list-group-rank-primary a.rank-name:active {\n  color: #6200ea;\n}\n.list-group .list-group-rank-success {\n  border-left: 4px solid #9ccc65;\n  padding-left: 11px;\n}\n.list-group .list-group-rank-success span.rank-name {\n  color: #388e3c;\n}\n.list-group .list-group-rank-success a.rank-name,\n.list-group .list-group-rank-success a.rank-name:link,\n.list-group .list-group-rank-success a.rank-name:visited,\n.list-group .list-group-rank-success a.rank-name:focus,\n.list-group .list-group-rank-success a.rank-name:hover,\n.list-group .list-group-rank-success a.rank-name:active {\n  color: #388e3c;\n}\n.list-group .list-group-rank-warning {\n  border-left: 4px solid #ff7043;\n  padding-left: 11px;\n}\n.list-group .list-group-rank-warning span.rank-name {\n  color: #ff6d00;\n}\n.list-group .list-group-rank-warning a.rank-name,\n.list-group .list-group-rank-warning a.rank-name:link,\n.list-group .list-group-rank-warning a.rank-name:visited,\n.list-group .list-group-rank-warning a.rank-name:focus,\n.list-group .list-group-rank-warning a.rank-name:hover,\n.list-group .list-group-rank-warning a.rank-name:active {\n  color: #ff6d00;\n}\n.list-group .list-group-rank-danger {\n  border-left: 4px solid #f44336;\n  padding-left: 11px;\n}\n.list-group .list-group-rank-danger span.rank-name {\n  color: #d50000;\n}\n.list-group .list-group-rank-danger a.rank-name,\n.list-group .list-group-rank-danger a.rank-name:link,\n.list-group .list-group-rank-danger a.rank-name:visited,\n.list-group .list-group-rank-danger a.rank-name:focus,\n.list-group .list-group-rank-danger a.rank-name:hover,\n.list-group .list-group-rank-danger a.rank-name:active {\n  color: #d50000;\n}\n.page-header-rank-primary .user-rank {\n  color: #6200ea;\n}\n.page-header-rank-primary .user-rank a,\n.page-header-rank-primary .user-rank a:link,\n.page-header-rank-primary .user-rank a:visited,\n.page-header-rank-primary .user-rank a:focus,\n.page-header-rank-primary .user-rank a:hover,\n.page-header-rank-primary .user-rank a:active {\n  color: #6200ea;\n}\n.page-header-rank-success .user-rank {\n  color: #388e3c;\n}\n.page-header-rank-success .user-rank a,\n.page-header-rank-success .user-rank a:link,\n.page-header-rank-success .user-rank a:visited,\n.page-header-rank-success .user-rank a:focus,\n.page-header-rank-success .user-rank a:hover,\n.page-header-rank-success .user-rank a:active {\n  color: #388e3c;\n}\n.page-header-rank-warning .user-rank {\n  color: #ff6d00;\n}\n.page-header-rank-warning .user-rank a,\n.page-header-rank-warning .user-rank a:link,\n.page-header-rank-warning .user-rank a:visited,\n.page-header-rank-warning .user-rank a:focus,\n.page-header-rank-warning .user-rank a:hover,\n.page-header-rank-warning .user-rank a:active {\n  color: #ff6d00;\n}\n.page-header-rank-danger .user-rank {\n  color: #d50000;\n}\n.page-header-rank-danger .user-rank a,\n.page-header-rank-danger .user-rank a:link,\n.page-header-rank-danger .user-rank a:visited,\n.page-header-rank-danger .user-rank a:focus,\n.page-header-rank-danger .user-rank a:hover,\n.page-header-rank-danger .user-rank a:active {\n  color: #d50000;\n}\n","// stylelint-disable\n\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n//    without disabling user zoom.\n//\n\nhtml {\n  font-family: sans-serif; // 1\n  -ms-text-size-adjust: 100%; // 2\n  -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n  margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block; // 1\n  vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n  background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n  outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// 1. Remove the bottom border in Chrome 57- and Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n//\n\nabbr[title] {\n  border-bottom: none; // 1\n  text-decoration: underline; // 2\n  text-decoration: underline dotted; // 2\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n  font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n  font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n  border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n  margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n  overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n//    Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit; // 1\n  font: inherit; // 2\n  margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n  overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n//    and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n//    `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button; // 2\n  cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n  line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box; // 1\n  padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield; // 1\n  box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n  border: 0; // 1\n  padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n  overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n  font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  padding: 0;\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type\n\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important; // Black prints faster: h5bp.com/s\n    text-shadow: none !important;\n    background: transparent !important;\n    box-shadow: none !important;\n  }\n\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n\n  // Don't show links that are fragment identifiers,\n  // or use the `javascript:` pseudo protocol\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n\n  thead {\n    display: table-header-group; // h5bp.com/t\n  }\n\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n\n  img {\n    max-width: 100% !important;\n  }\n\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n\n  // Bootstrap specific changes start\n\n  // Bootstrap components\n  .navbar {\n    display: none;\n  }\n  .btn,\n  .dropup > .btn {\n    > .caret {\n      border-top-color: #000 !important;\n    }\n  }\n  .label {\n    border: 1px solid #000;\n  }\n\n  .table {\n    border-collapse: collapse !important;\n\n    td,\n    th {\n      background-color: #fff !important;\n    }\n  }\n  .table-bordered {\n    th,\n    td {\n      border: 1px solid #ddd !important;\n    }\n  }\n}\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// https://getbootstrap.com/docs/3.4/getting-started/#third-box-sizing\n* {\n  .box-sizing(border-box);\n}\n*:before,\n*:after {\n  .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n  font-size: 10px;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nbody {\n  font-family: @font-family-base;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @text-color;\n  background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\n\n// Links\n\na {\n  color: @link-color;\n  text-decoration: none;\n\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: @link-hover-decoration;\n  }\n\n  &:focus {\n    .tab-focus();\n  }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n  margin: 0;\n}\n\n\n// Images\n\nimg {\n  vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n  .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n  border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n  padding: @thumbnail-padding;\n  line-height: @line-height-base;\n  background-color: @thumbnail-bg;\n  border: 1px solid @thumbnail-border;\n  border-radius: @thumbnail-border-radius;\n  .transition(all .2s ease-in-out);\n\n  // Keep them at most 100% wide\n  .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n  border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n  margin-top: @line-height-computed;\n  margin-bottom: @line-height-computed;\n  border: 0;\n  border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: https://a11yproject.com/posts/how-to-hide-content\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n  &:active,\n  &:focus {\n    position: static;\n    width: auto;\n    height: auto;\n    margin: 0;\n    overflow: visible;\n    clip: auto;\n  }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n","// stylelint-disable indentation, property-no-vendor-prefix, selector-no-vendor-prefix\n\n// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n  -webkit-animation: @animation;\n       -o-animation: @animation;\n          animation: @animation;\n}\n.animation-name(@name) {\n  -webkit-animation-name: @name;\n          animation-name: @name;\n}\n.animation-duration(@duration) {\n  -webkit-animation-duration: @duration;\n          animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n  -webkit-animation-timing-function: @timing-function;\n          animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n  -webkit-animation-delay: @delay;\n          animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n  -webkit-animation-iteration-count: @iteration-count;\n          animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n  -webkit-animation-direction: @direction;\n          animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n  -webkit-animation-fill-mode: @fill-mode;\n          animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n  -webkit-backface-visibility: @visibility;\n     -moz-backface-visibility: @visibility;\n          backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n  -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n          box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n  -webkit-box-sizing: @boxmodel;\n     -moz-box-sizing: @boxmodel;\n          box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n  -webkit-column-count: @column-count;\n     -moz-column-count: @column-count;\n          column-count: @column-count;\n  -webkit-column-gap: @column-gap;\n     -moz-column-gap: @column-gap;\n          column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n  -webkit-hyphens: @mode;\n     -moz-hyphens: @mode;\n      -ms-hyphens: @mode; // IE10+\n       -o-hyphens: @mode;\n          hyphens: @mode;\n  word-wrap: break-word;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n  // Firefox\n  &::-moz-placeholder {\n    color: @color;\n    opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n  }\n  &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n  &::-webkit-input-placeholder  { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n  -webkit-transform: scale(@ratio);\n      -ms-transform: scale(@ratio); // IE9 only\n       -o-transform: scale(@ratio);\n          transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n  -webkit-transform: scale(@ratioX, @ratioY);\n      -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n       -o-transform: scale(@ratioX, @ratioY);\n          transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n  -webkit-transform: scaleX(@ratio);\n      -ms-transform: scaleX(@ratio); // IE9 only\n       -o-transform: scaleX(@ratio);\n          transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n  -webkit-transform: scaleY(@ratio);\n      -ms-transform: scaleY(@ratio); // IE9 only\n       -o-transform: scaleY(@ratio);\n          transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n  -webkit-transform: skewX(@x) skewY(@y);\n      -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n       -o-transform: skewX(@x) skewY(@y);\n          transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n  -webkit-transform: translate(@x, @y);\n      -ms-transform: translate(@x, @y); // IE9 only\n       -o-transform: translate(@x, @y);\n          transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n  -webkit-transform: translate3d(@x, @y, @z);\n          transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n  -webkit-transform: rotate(@degrees);\n      -ms-transform: rotate(@degrees); // IE9 only\n       -o-transform: rotate(@degrees);\n          transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n  -webkit-transform: rotateX(@degrees);\n      -ms-transform: rotateX(@degrees); // IE9 only\n       -o-transform: rotateX(@degrees);\n          transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n  -webkit-transform: rotateY(@degrees);\n      -ms-transform: rotateY(@degrees); // IE9 only\n       -o-transform: rotateY(@degrees);\n          transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n  -webkit-perspective: @perspective;\n     -moz-perspective: @perspective;\n          perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n  -webkit-perspective-origin: @perspective;\n     -moz-perspective-origin: @perspective;\n          perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n  -webkit-transform-origin: @origin;\n     -moz-transform-origin: @origin;\n      -ms-transform-origin: @origin; // IE9 only\n          transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n  -webkit-transition: @transition;\n       -o-transition: @transition;\n          transition: @transition;\n}\n.transition-property(@transition-property) {\n  -webkit-transition-property: @transition-property;\n          transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n  -webkit-transition-delay: @transition-delay;\n          transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n  -webkit-transition-duration: @transition-duration;\n          transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n  -webkit-transition-timing-function: @timing-function;\n          transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n  -webkit-transition: -webkit-transform @transition;\n     -moz-transition: -moz-transform @transition;\n       -o-transition: -o-transform @transition;\n          transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n  -webkit-user-select: @select;\n     -moz-user-select: @select;\n      -ms-user-select: @select; // IE10+\n          user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n  // WebKit-specific. Other browsers will keep their default outline style.\n  // (Initially tried to also force default via `outline: initial`,\n  // but that seems to erroneously remove the outline in Firefox altogether.)\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n","// stylelint-disable media-feature-name-no-vendor-prefix, media-feature-parentheses-space-inside, media-feature-name-no-unknown, indentation, at-rule-name-space-after\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n  display: @display;\n  max-width: 100%; // Part 1: Set a maximum relative to the parent\n  height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n  background-image: url(\"@{file-1x}\");\n\n  @media\n  only screen and (-webkit-min-device-pixel-ratio: 2),\n  only screen and ( min--moz-device-pixel-ratio: 2),\n  only screen and ( -o-min-device-pixel-ratio: 2/1),\n  only screen and ( min-device-pixel-ratio: 2),\n  only screen and ( min-resolution: 192dpi),\n  only screen and ( min-resolution: 2dppx) {\n    background-image: url(\"@{file-2x}\");\n    background-size: @width-1x @height-1x;\n  }\n}\n","// stylelint-disable selector-list-comma-newline-after, selector-no-qualifying-type\n\n//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: @headings-font-family;\n  font-weight: @headings-font-weight;\n  line-height: @headings-line-height;\n  color: @headings-color;\n\n  small,\n  .small {\n    font-weight: 400;\n    line-height: 1;\n    color: @headings-small-color;\n  }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n  margin-top: @line-height-computed;\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 65%;\n  }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n  margin-top: (@line-height-computed / 2);\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 75%;\n  }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n  margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n  margin-bottom: @line-height-computed;\n  font-size: floor((@font-size-base * 1.15));\n  font-weight: 300;\n  line-height: 1.4;\n\n  @media (min-width: @screen-sm-min) {\n    font-size: (@font-size-base * 1.5);\n  }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n  font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n  padding: .2em;\n  background-color: @state-warning-bg;\n}\n\n// Alignment\n.text-left           { text-align: left; }\n.text-right          { text-align: right; }\n.text-center         { text-align: center; }\n.text-justify        { text-align: justify; }\n.text-nowrap         { white-space: nowrap; }\n\n// Transformation\n.text-lowercase      { text-transform: lowercase; }\n.text-uppercase      { text-transform: uppercase; }\n.text-capitalize     { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n  color: @text-muted;\n}\n.text-primary {\n  .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n  .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n  .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n  .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n  .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n  // Given the contrast here, this is the only class to have its color inverted\n  // automatically.\n  color: #fff;\n  .bg-variant(@brand-primary);\n}\n.bg-success {\n  .bg-variant(@state-success-bg);\n}\n.bg-info {\n  .bg-variant(@state-info-bg);\n}\n.bg-warning {\n  .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n  .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n  padding-bottom: ((@line-height-computed / 2) - 1);\n  margin: (@line-height-computed * 2) 0 @line-height-computed;\n  border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n  margin-top: 0;\n  margin-bottom: (@line-height-computed / 2);\n  ul,\n  ol {\n    margin-bottom: 0;\n  }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n  .list-unstyled();\n  margin-left: -5px;\n\n  > li {\n    display: inline-block;\n    padding-right: 5px;\n    padding-left: 5px;\n  }\n}\n\n// Description Lists\ndl {\n  margin-top: 0; // Remove browser default\n  margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n  line-height: @line-height-base;\n}\ndt {\n  font-weight: 700;\n}\ndd {\n  margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n  dd {\n    &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n  }\n\n  @media (min-width: @dl-horizontal-breakpoint) {\n    dt {\n      float: left;\n      width: (@dl-horizontal-offset - 20);\n      clear: left;\n      text-align: right;\n      .text-overflow();\n    }\n    dd {\n      margin-left: @dl-horizontal-offset;\n    }\n  }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n}\n\n.initialism {\n  font-size: 90%;\n  .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n  padding: (@line-height-computed / 2) @line-height-computed;\n  margin: 0 0 @line-height-computed;\n  font-size: @blockquote-font-size;\n  border-left: 5px solid @blockquote-border-color;\n\n  p,\n  ul,\n  ol {\n    &:last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  // Note: Deprecated small and .small as of v3.1.0\n  // Context: https://github.com/twbs/bootstrap/issues/11660\n  footer,\n  small,\n  .small {\n    display: block;\n    font-size: 80%; // back to default font-size\n    line-height: @line-height-base;\n    color: @blockquote-small-color;\n\n    &:before {\n      content: \"\\2014 \\00A0\"; // em dash, nbsp\n    }\n  }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid @blockquote-border-color;\n  border-left: 0;\n\n  // Account for citation\n  footer,\n  small,\n  .small {\n    &:before { content: \"\"; }\n    &:after {\n      content: \"\\00A0 \\2014\"; // nbsp, em dash\n    }\n  }\n}\n\n// Addresses\naddress {\n  margin-bottom: @line-height-computed;\n  font-style: normal;\n  line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n  color: @color;\n  a&:hover,\n  a&:focus {\n    color: darken(@color, 10%);\n  }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n  background-color: @color;\n  a&:hover,\n  a&:focus {\n    background-color: darken(@color, 10%);\n  }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n  font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @code-color;\n  background-color: @code-bg;\n  border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @kbd-color;\n  background-color: @kbd-bg;\n  border-radius: @border-radius-small;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n\n  kbd {\n    padding: 0;\n    font-size: 100%;\n    font-weight: 700;\n    box-shadow: none;\n  }\n}\n\n// Blocks of code\npre {\n  display: block;\n  padding: ((@line-height-computed - 1) / 2);\n  margin: 0 0 (@line-height-computed / 2);\n  font-size: (@font-size-base - 1); // 14px to 13px\n  line-height: @line-height-base;\n  color: @pre-color;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: @pre-bg;\n  border: 1px solid @pre-border-color;\n  border-radius: @border-radius-base;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border-radius: 0;\n  }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n  max-height: @pre-scrollable-max-height;\n  overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n  .container-fixed();\n\n  @media (min-width: @screen-sm-min) {\n    width: @container-sm;\n  }\n  @media (min-width: @screen-md-min) {\n    width: @container-md;\n  }\n  @media (min-width: @screen-lg-min) {\n    width: @container-lg;\n  }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n  .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n  .make-row();\n}\n\n.row-no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n\n  [class*=\"col-\"] {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n  .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n  .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n  .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n  padding-right: ceil((@gutter / 2));\n  padding-left: floor((@gutter / 2));\n  margin-right: auto;\n  margin-left: auto;\n  &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n  margin-right: floor((@gutter / -2));\n  margin-left: ceil((@gutter / -2));\n  &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  float: left;\n  width: percentage((@columns / @grid-columns));\n  min-height: 1px;\n  padding-right: (@gutter / 2);\n  padding-left: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n  margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n  left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n  right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-right: (@gutter / 2);\n  padding-left: (@gutter / 2);\n\n  @media (min-width: @screen-sm-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-offset(@columns) {\n  @media (min-width: @screen-sm-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-push(@columns) {\n  @media (min-width: @screen-sm-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-pull(@columns) {\n  @media (min-width: @screen-sm-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-right: (@gutter / 2);\n  padding-left: (@gutter / 2);\n\n  @media (min-width: @screen-md-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-offset(@columns) {\n  @media (min-width: @screen-md-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-push(@columns) {\n  @media (min-width: @screen-md-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-pull(@columns) {\n  @media (min-width: @screen-md-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-right: (@gutter / 2);\n  padding-left: (@gutter / 2);\n\n  @media (min-width: @screen-lg-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-offset(@columns) {\n  @media (min-width: @screen-lg-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-push(@columns) {\n  @media (min-width: @screen-lg-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-pull(@columns) {\n  @media (min-width: @screen-lg-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n","// stylelint-disable declaration-no-important, at-rule-no-vendor-prefix\n\n//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: https://getbootstrap.com/docs/3.4/getting-started/#support-ie10-width\n// Source: https://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: https://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n  width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n\n.visible-xs {\n  @media (max-width: @screen-xs-max) {\n    .responsive-visibility();\n  }\n}\n.visible-xs-block {\n  @media (max-width: @screen-xs-max) {\n    display: block !important;\n  }\n}\n.visible-xs-inline {\n  @media (max-width: @screen-xs-max) {\n    display: inline !important;\n  }\n}\n.visible-xs-inline-block {\n  @media (max-width: @screen-xs-max) {\n    display: inline-block !important;\n  }\n}\n\n.visible-sm {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    .responsive-visibility();\n  }\n}\n.visible-sm-block {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    display: block !important;\n  }\n}\n.visible-sm-inline {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    display: inline !important;\n  }\n}\n.visible-sm-inline-block {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    display: inline-block !important;\n  }\n}\n\n.visible-md {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    .responsive-visibility();\n  }\n}\n.visible-md-block {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    display: block !important;\n  }\n}\n.visible-md-inline {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    display: inline !important;\n  }\n}\n.visible-md-inline-block {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    display: inline-block !important;\n  }\n}\n\n.visible-lg {\n  @media (min-width: @screen-lg-min) {\n    .responsive-visibility();\n  }\n}\n.visible-lg-block {\n  @media (min-width: @screen-lg-min) {\n    display: block !important;\n  }\n}\n.visible-lg-inline {\n  @media (min-width: @screen-lg-min) {\n    display: inline !important;\n  }\n}\n.visible-lg-inline-block {\n  @media (min-width: @screen-lg-min) {\n    display: inline-block !important;\n  }\n}\n\n.hidden-xs {\n  @media (max-width: @screen-xs-max) {\n    .responsive-invisibility();\n  }\n}\n.hidden-sm {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    .responsive-invisibility();\n  }\n}\n.hidden-md {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    .responsive-invisibility();\n  }\n}\n.hidden-lg {\n  @media (min-width: @screen-lg-min) {\n    .responsive-invisibility();\n  }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n  .responsive-invisibility();\n\n  @media print {\n    .responsive-visibility();\n  }\n}\n.visible-print-block {\n  display: none !important;\n\n  @media print {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n\n  @media print {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n\n  @media print {\n    display: inline-block !important;\n  }\n}\n\n.hidden-print {\n  @media print {\n    .responsive-invisibility();\n  }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n  // Common styles for all sizes of grid columns, widths 1-12\n  .col(@index) { // initial\n    @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n    .col((@index + 1), @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n    @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n    .col((@index + 1), ~\"@{list}, @{item}\");\n  }\n  .col(@index, @list) when (@index > @grid-columns) { // terminal\n    @{list} {\n      position: relative;\n      // Prevent columns from collapsing when empty\n      min-height: 1px;\n      // Inner gutter via padding\n      padding-right: floor((@grid-gutter-width / 2));\n      padding-left: ceil((@grid-gutter-width / 2));\n    }\n  }\n  .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n  .col(@index) { // initial\n    @item: ~\".col-@{class}-@{index}\";\n    .col((@index + 1), @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) { // general\n    @item: ~\".col-@{class}-@{index}\";\n    .col((@index + 1), ~\"@{list}, @{item}\");\n  }\n  .col(@index, @list) when (@index > @grid-columns) { // terminal\n    @{list} {\n      float: left;\n    }\n  }\n  .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n  .col-@{class}-@{index} {\n    width: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n  .col-@{class}-push-@{index} {\n    left: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n  .col-@{class}-push-0 {\n    left: auto;\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n  .col-@{class}-pull-@{index} {\n    right: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n  .col-@{class}-pull-0 {\n    right: auto;\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n  .col-@{class}-offset-@{index} {\n    margin-left: percentage((@index / @grid-columns));\n  }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n  .calc-grid-column(@index, @class, @type);\n  // next iteration\n  .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n  .float-grid-columns(@class);\n  .loop-grid-columns(@grid-columns, @class, width);\n  .loop-grid-columns(@grid-columns, @class, pull);\n  .loop-grid-columns(@grid-columns, @class, push);\n  .loop-grid-columns(@grid-columns, @class, offset);\n}\n","// stylelint-disable selector-max-type, selector-max-compound-selectors, selector-no-qualifying-type\n\n//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n  background-color: @table-bg;\n\n  // Table cell sizing\n  //\n  // Reset default table behavior\n\n  col[class*=\"col-\"] {\n    position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n    display: table-column;\n    float: none;\n  }\n\n  td,\n  th {\n    &[class*=\"col-\"] {\n      position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n      display: table-cell;\n      float: none;\n    }\n  }\n}\n\ncaption {\n  padding-top: @table-cell-padding;\n  padding-bottom: @table-cell-padding;\n  color: @text-muted;\n  text-align: left;\n}\n\nth {\n  text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: @line-height-computed;\n  // Cells\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-cell-padding;\n        line-height: @line-height-base;\n        vertical-align: top;\n        border-top: 1px solid @table-border-color;\n      }\n    }\n  }\n  // Bottom align for column headings\n  > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid @table-border-color;\n  }\n  // Remove top border from thead by default\n  > caption + thead,\n  > colgroup + thead,\n  > thead:first-child {\n    > tr:first-child {\n      > th,\n      > td {\n        border-top: 0;\n      }\n    }\n  }\n  // Account for multiple tbody instances\n  > tbody + tbody {\n    border-top: 2px solid @table-border-color;\n  }\n\n  // Nesting\n  .table {\n    background-color: @body-bg;\n  }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-condensed-cell-padding;\n      }\n    }\n  }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n  border: 1px solid @table-border-color;\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        border: 1px solid @table-border-color;\n      }\n    }\n  }\n  > thead > tr {\n    > th,\n    > td {\n      border-bottom-width: 2px;\n    }\n  }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n  > tbody > tr:nth-of-type(odd) {\n    background-color: @table-bg-accent;\n  }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  > tbody > tr:hover {\n    background-color: @table-bg-hover;\n  }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n  min-height: .01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n  overflow-x: auto;\n\n  @media screen and (max-width: @screen-xs-max) {\n    width: 100%;\n    margin-bottom: (@line-height-computed * .75);\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid @table-border-color;\n\n    // Tighten up spacing\n    > .table {\n      margin-bottom: 0;\n\n      // Ensure the content doesn't wrap\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th,\n          > td {\n            white-space: nowrap;\n          }\n        }\n      }\n    }\n\n    // Special overrides for the bordered tables\n    > .table-bordered {\n      border: 0;\n\n      // Nuke the appropriate borders so that the parent can handle them\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th:first-child,\n          > td:first-child {\n            border-left: 0;\n          }\n          > th:last-child,\n          > td:last-child {\n            border-right: 0;\n          }\n        }\n      }\n\n      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n      // chances are there will be only one `tr` in a `thead` and that would\n      // remove the border altogether.\n      > tbody,\n      > tfoot {\n        > tr:last-child {\n          > th,\n          > td {\n            border-bottom: 0;\n          }\n        }\n      }\n\n    }\n  }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n  // Exact selectors below required to override `.table-striped` and prevent\n  // inheritance to nested tables.\n  .table > thead > tr,\n  .table > tbody > tr,\n  .table > tfoot > tr {\n    > td.@{state},\n    > th.@{state},\n    &.@{state} > td,\n    &.@{state} > th {\n      background-color: @background;\n    }\n  }\n\n  // Hover states for `.table-hover`\n  // Note: this is not available for cells or rows within `thead` or `tfoot`.\n  .table-hover > tbody > tr {\n    > td.@{state}:hover,\n    > th.@{state}:hover,\n    &.@{state}:hover > td,\n    &:hover > .@{state},\n    &.@{state}:hover > th {\n      background-color: darken(@background, 5%);\n    }\n  }\n}\n","// stylelint-disable selector-no-qualifying-type, property-no-vendor-prefix, media-feature-name-no-vendor-prefix\n\n//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n  // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n  // so we reset that to ensure it behaves more like a standard block element.\n  // See https://github.com/twbs/bootstrap/issues/12359.\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: @line-height-computed;\n  font-size: (@font-size-base * 1.5);\n  line-height: inherit;\n  color: @legend-color;\n  border: 0;\n  border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n  display: inline-block;\n  max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n  margin-bottom: 5px;\n  font-weight: 700;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\ninput[type=\"search\"] {\n  // Override content-box in Normalize (* isn't specific enough)\n  .box-sizing(border-box);\n\n  // Search inputs in iOS\n  //\n  // This overrides the extra rounded corners on search inputs in iOS so that our\n  // `.form-control` class can properly style them. Note that this cannot simply\n  // be added to `.form-control` as it's not specific enough. For details, see\n  // https://github.com/twbs/bootstrap/issues/11586.\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9; // IE8-9\n  line-height: normal;\n\n  // Apply same disabled cursor tweak as for inputs\n  // Some special care is needed because <label>s don't inherit their parent's `cursor`.\n  //\n  // Note: Neither radios nor checkboxes can be readonly.\n  &[disabled],\n  &.disabled,\n  fieldset[disabled] & {\n    cursor: @cursor-disabled;\n  }\n}\n\ninput[type=\"file\"] {\n  display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  .tab-focus();\n}\n\n// Adjust output element\noutput {\n  display: block;\n  padding-top: (@padding-base-vertical + 1);\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n  background-color: @input-bg;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid @input-border;\n  border-radius: @input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.\n  .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075));\n  .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  .form-control-focus();\n\n  // Placeholder\n  .placeholder();\n\n  // Unstyle the caret on `<select>`s in IE10+.\n  &::-ms-expand {\n    background-color: transparent;\n    border: 0;\n  }\n\n  // Disabled and read-only inputs\n  //\n  // HTML5 says that controls under a fieldset > legend:first-child won't be\n  // disabled if the fieldset is disabled. Due to implementation difficulty, we\n  // don't honor that edge case; we style them as disabled anyway.\n  &[disabled],\n  &[readonly],\n  fieldset[disabled] & {\n    background-color: @input-bg-disabled;\n    opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655\n  }\n\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: @cursor-disabled;\n  }\n\n  // Reset height for `textarea`s\n  textarea& {\n    height: auto;\n  }\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned. As a workaround, we\n// set a pixel line-height that matches the given height of the input, but only\n// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848\n//\n// Note that as of 9.3, iOS doesn't support `week`.\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"],\n  input[type=\"time\"],\n  input[type=\"datetime-local\"],\n  input[type=\"month\"] {\n    &.form-control {\n      line-height: @input-height-base;\n    }\n\n    &.input-sm,\n    .input-group-sm & {\n      line-height: @input-height-small;\n    }\n\n    &.input-lg,\n    .input-group-lg & {\n      line-height: @input-height-large;\n    }\n  }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n  margin-bottom: @form-group-margin-bottom;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n\n  // These are used on elements with <label> descendants\n  &.disabled,\n  fieldset[disabled] & {\n    label {\n      cursor: @cursor-disabled;\n    }\n  }\n\n  label {\n    min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text\n    padding-left: 20px;\n    margin-bottom: 0;\n    font-weight: 400;\n    cursor: pointer;\n  }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: 400;\n  vertical-align: middle;\n  cursor: pointer;\n\n  // These are used directly on <label>s\n  &.disabled,\n  fieldset[disabled] & {\n    cursor: @cursor-disabled;\n  }\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; // space out consecutive inline controls\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n  min-height: (@line-height-computed + @font-size-base);\n  // Size it appropriately next to real form controls\n  padding-top: (@padding-base-vertical + 1);\n  padding-bottom: (@padding-base-vertical + 1);\n  // Remove default margin from `p`\n  margin-bottom: 0;\n\n  &.input-lg,\n  &.input-sm {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// The `.form-group-* form-control` variations are sadly duplicated to avoid the\n// issue documented in https://github.com/twbs/bootstrap/issues/15074.\n\n.input-sm {\n  .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);\n}\n.form-group-sm {\n  .form-control {\n    height: @input-height-small;\n    padding: @padding-small-vertical @padding-small-horizontal;\n    font-size: @font-size-small;\n    line-height: @line-height-small;\n    border-radius: @input-border-radius-small;\n  }\n  select.form-control {\n    height: @input-height-small;\n    line-height: @input-height-small;\n  }\n  textarea.form-control,\n  select[multiple].form-control {\n    height: auto;\n  }\n  .form-control-static {\n    height: @input-height-small;\n    min-height: (@line-height-computed + @font-size-small);\n    padding: (@padding-small-vertical + 1) @padding-small-horizontal;\n    font-size: @font-size-small;\n    line-height: @line-height-small;\n  }\n}\n\n.input-lg {\n  .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);\n}\n.form-group-lg {\n  .form-control {\n    height: @input-height-large;\n    padding: @padding-large-vertical @padding-large-horizontal;\n    font-size: @font-size-large;\n    line-height: @line-height-large;\n    border-radius: @input-border-radius-large;\n  }\n  select.form-control {\n    height: @input-height-large;\n    line-height: @input-height-large;\n  }\n  textarea.form-control,\n  select[multiple].form-control {\n    height: auto;\n  }\n  .form-control-static {\n    height: @input-height-large;\n    min-height: (@line-height-computed + @font-size-large);\n    padding: (@padding-large-vertical + 1) @padding-large-horizontal;\n    font-size: @font-size-large;\n    line-height: @line-height-large;\n  }\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n  // Enable absolute positioning\n  position: relative;\n\n  // Ensure icons don't overlap text\n  .form-control {\n    padding-right: (@input-height-base * 1.25);\n  }\n}\n// Feedback icon (requires .glyphicon classes)\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2; // Ensure icon is above input groups\n  display: block;\n  width: @input-height-base;\n  height: @input-height-base;\n  line-height: @input-height-base;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: @input-height-large;\n  height: @input-height-large;\n  line-height: @input-height-large;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: @input-height-small;\n  height: @input-height-small;\n  line-height: @input-height-small;\n}\n\n// Feedback states\n.has-success {\n  .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n  .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n  .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n// Reposition feedback icon if input has visible label above\n.has-feedback label {\n\n  & ~ .form-control-feedback {\n    top: (@line-height-computed + 5); // Height of the `label` and its margin\n  }\n  &.sr-only ~ .form-control-feedback {\n    top: 0;\n  }\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n  display: block; // account for any element using help-block\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n  // Kick in the inline\n  @media (min-width: @screen-sm-min) {\n    // Inline-block all the things for \"inline\"\n    .form-group {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // In navbar-form, allow folks to *not* use `.form-group`\n    .form-control {\n      display: inline-block;\n      width: auto; // Prevent labels from stacking above inputs in `.form-group`\n      vertical-align: middle;\n    }\n\n    // Make static controls behave like regular ones\n    .form-control-static {\n      display: inline-block;\n    }\n\n    .input-group {\n      display: inline-table;\n      vertical-align: middle;\n\n      .input-group-addon,\n      .input-group-btn,\n      .form-control {\n        width: auto;\n      }\n    }\n\n    // Input groups need that 100% width though\n    .input-group > .form-control {\n      width: 100%;\n    }\n\n    .control-label {\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // Remove default margin on radios/checkboxes that were used for stacking, and\n    // then undo the floating of radios and checkboxes to match.\n    .radio,\n    .checkbox {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      vertical-align: middle;\n\n      label {\n        padding-left: 0;\n      }\n    }\n    .radio input[type=\"radio\"],\n    .checkbox input[type=\"checkbox\"] {\n      position: relative;\n      margin-left: 0;\n    }\n\n    // Re-override the feedback icon.\n    .has-feedback .form-control-feedback {\n      top: 0;\n    }\n  }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n  // Consistent vertical alignment of radios and checkboxes\n  //\n  // Labels also get some reset styles, but that is scoped to a media query below.\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline {\n    padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n  // Account for padding we're adding to ensure the alignment and of help text\n  // and other content below items\n  .radio,\n  .checkbox {\n    min-height: (@line-height-computed + (@padding-base-vertical + 1));\n  }\n\n  // Make form groups behave like rows\n  .form-group {\n    .make-row();\n  }\n\n  // Reset spacing and right align labels, but scope to media queries so that\n  // labels on narrow viewports stack the same as a default form example.\n  @media (min-width: @screen-sm-min) {\n    .control-label {\n      padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n      margin-bottom: 0;\n      text-align: right;\n    }\n  }\n\n  // Validation states\n  //\n  // Reposition the icon because it's now within a grid column and columns have\n  // `position: relative;` on them. Also accounts for the grid gutter padding.\n  .has-feedback .form-control-feedback {\n    right: floor((@grid-gutter-width / 2));\n  }\n\n  // Form group sizes\n  //\n  // Quick utility class for applying `.input-lg` and `.input-sm` styles to the\n  // inputs and labels within a `.form-group`.\n  .form-group-lg {\n    @media (min-width: @screen-sm-min) {\n      .control-label {\n        padding-top: (@padding-large-vertical + 1);\n        font-size: @font-size-large;\n      }\n    }\n  }\n  .form-group-sm {\n    @media (min-width: @screen-sm-min) {\n      .control-label {\n        padding-top: (@padding-small-vertical + 1);\n        font-size: @font-size-small;\n      }\n    }\n  }\n}\n","// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n  // Color the label and help text\n  .help-block,\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline,\n  &.radio label,\n  &.checkbox label,\n  &.radio-inline label,\n  &.checkbox-inline label  {\n    color: @text-color;\n  }\n  // Set the border and box shadow on specific inputs to match\n  .form-control {\n    border-color: @border-color;\n    .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075)); // Redeclare so transitions work\n    &:focus {\n      border-color: darken(@border-color, 10%);\n      @shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px lighten(@border-color, 20%);\n      .box-shadow(@shadow);\n    }\n  }\n  // Set validation states also for addons\n  .input-group-addon {\n    color: @text-color;\n    background-color: @background-color;\n    border-color: @border-color;\n  }\n  // Optional feedback icon\n  .form-control-feedback {\n    color: @text-color;\n  }\n}\n\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n.form-control-focus(@color: @input-border-focus) {\n  @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n  &:focus {\n    border-color: @color;\n    outline: 0;\n    .box-shadow(~\"inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px @{color-rgba}\");\n  }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  height: @input-height;\n  padding: @padding-vertical @padding-horizontal;\n  font-size: @font-size;\n  line-height: @line-height;\n  border-radius: @border-radius;\n\n  select& {\n    height: @input-height;\n    line-height: @input-height;\n  }\n\n  textarea&,\n  select[multiple]& {\n    height: auto;\n  }\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n  display: inline-block;\n  margin-bottom: 0; // For input.btn\n  font-weight: @btn-font-weight;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  touch-action: manipulation;\n  cursor: pointer;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);\n  .user-select(none);\n\n  &,\n  &:active,\n  &.active {\n    &:focus,\n    &.focus {\n      .tab-focus();\n    }\n  }\n\n  &:hover,\n  &:focus,\n  &.focus {\n    color: @btn-default-color;\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    background-image: none;\n    outline: 0;\n    .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: @cursor-disabled;\n    .opacity(.65);\n    .box-shadow(none);\n  }\n\n  a& {\n    &.disabled,\n    fieldset[disabled] & {\n      pointer-events: none; // Future-proof disabling of clicks on `<a>` elements\n    }\n  }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n  .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n  .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n  .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n  .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n  .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  font-weight: 400;\n  color: @link-color;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &.active,\n  &[disabled],\n  fieldset[disabled] & {\n    background-color: transparent;\n    .box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: @link-hover-decoration;\n    background-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus {\n      color: @btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);\n}\n.btn-sm {\n  // line-height: ensure proper height of button next to small input\n  .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n.btn-xs {\n  .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n  color: @color;\n  background-color: @background;\n  border-color: @border;\n\n  &:focus,\n  &.focus {\n    color: @color;\n    background-color: darken(@background, 10%);\n    border-color: darken(@border, 25%);\n  }\n  &:hover {\n    color: @color;\n    background-color: darken(@background, 10%);\n    border-color: darken(@border, 12%);\n  }\n  &:active,\n  &.active,\n  .open > .dropdown-toggle& {\n    color: @color;\n    background-color: darken(@background, 10%);\n    background-image: none;\n    border-color: darken(@border, 12%);\n\n    &:hover,\n    &:focus,\n    &.focus {\n      color: @color;\n      background-color: darken(@background, 17%);\n      border-color: darken(@border, 25%);\n    }\n  }\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus,\n    &.focus {\n      background-color: @background;\n      border-color: @border;\n    }\n  }\n\n  .badge {\n    color: @background;\n    background-color: @color;\n  }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  padding: @padding-vertical @padding-horizontal;\n  font-size: @font-size;\n  line-height: @line-height;\n  border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n  @opacity-ie: (@opacity * 100);  // IE8 filter\n  filter: ~\"alpha(opacity=@{opacity-ie})\";\n  opacity: @opacity;\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  .transition(opacity .15s linear);\n\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n\n  &.in      { display: block; }\n  tr&.in    { display: table-row; }\n  tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  .transition-property(~\"height, visibility\");\n  .transition-duration(.35s);\n  .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: @caret-width-base dashed;\n  border-top: @caret-width-base solid ~\"\\9\"; // IE8\n  border-right: @caret-width-base solid transparent;\n  border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: @zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  font-size: @font-size-base;\n  text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n  list-style: none;\n  background-color: @dropdown-bg;\n  background-clip: padding-box;\n  border: 1px solid @dropdown-fallback-border; // IE8 fallback\n  border: 1px solid @dropdown-border;\n  border-radius: @border-radius-base;\n  .box-shadow(0 6px 12px rgba(0, 0, 0, .175));\n\n  // Aligns the dropdown menu to right\n  //\n  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n  &.pull-right {\n    right: 0;\n    left: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n    .nav-divider(@dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: 400;\n    line-height: @line-height-base;\n    color: @dropdown-link-color;\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\n\n    &:hover,\n    &:focus {\n      color: @dropdown-link-hover-color;\n      text-decoration: none;\n      background-color: @dropdown-link-hover-bg;\n    }\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-active-color;\n    text-decoration: none;\n    background-color: @dropdown-link-active-bg;\n    outline: 0;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-disabled-color;\n  }\n\n  // Nuke hover/focus effects\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    cursor: @cursor-disabled;\n    background-color: transparent;\n    background-image: none; // Remove CSS gradient\n    .reset-filter();\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n  right: 0;\n  left: auto; // Reset the default from `.dropdown-menu`\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: @font-size-small;\n  line-height: @line-height-base;\n  color: @dropdown-header-color;\n  white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    content: \"\";\n    border-top: 0;\n    border-bottom: @caret-width-base dashed;\n    border-bottom: @caret-width-base solid ~\"\\9\"; // IE8\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 2px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      .dropdown-menu-right();\n    }\n    // Necessary for overrides of the default right aligned menu.\n    // Will remove come v4 in all likelihood.\n    .dropdown-menu-left {\n      .dropdown-menu-left();\n    }\n  }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n  height: 1px;\n  margin: ((@line-height-computed / 2) - 1) 0;\n  overflow: hidden;\n  background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n  filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","// stylelint-disable selector-no-qualifying-type, selector-max-type\n\n//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  padding-left: 0; // Override default ul/ol\n  margin-bottom: 0;\n  list-style: none;\n  &:extend(.clearfix all);\n\n  > li {\n    position: relative;\n    display: block;\n\n    > a {\n      position: relative;\n      display: block;\n      padding: @nav-link-padding;\n      &:hover,\n      &:focus {\n        text-decoration: none;\n        background-color: @nav-link-hover-bg;\n      }\n    }\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.disabled > a {\n      color: @nav-disabled-link-color;\n\n      &:hover,\n      &:focus {\n        color: @nav-disabled-link-hover-color;\n        text-decoration: none;\n        cursor: @cursor-disabled;\n        background-color: transparent;\n      }\n    }\n  }\n\n  // Open dropdowns\n  .open > a {\n    &,\n    &:hover,\n    &:focus {\n      background-color: @nav-link-hover-bg;\n      border-color: @link-color;\n    }\n  }\n\n  // Nav dividers (deprecated with v3.0.1)\n  //\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\n  // we missed it. We don't currently support this anywhere, but in the interest\n  // of maintaining backward compatibility in case you use it, it's deprecated.\n  .nav-divider {\n    .nav-divider();\n  }\n\n  // Prevent IE8 from misplacing imgs\n  //\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n    max-width: none;\n  }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid @nav-tabs-border-color;\n  > li {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -1px;\n\n    // Actual tabs (as links)\n    > a {\n      margin-right: 2px;\n      line-height: @line-height-base;\n      border: 1px solid transparent;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n      &:hover {\n        border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n      }\n    }\n\n    // Active state, and its :hover to override normal :hover\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-tabs-active-link-hover-color;\n        cursor: default;\n        background-color: @nav-tabs-active-link-hover-bg;\n        border: 1px solid @nav-tabs-active-link-hover-border-color;\n        border-bottom-color: transparent;\n      }\n    }\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n    .nav-justified();\n    .nav-tabs-justified();\n  }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n    float: left;\n\n    // Links rendered as pills\n    > a {\n      border-radius: @nav-pills-border-radius;\n    }\n    + li {\n      margin-left: 2px;\n    }\n\n    // Active state\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-pills-active-link-hover-color;\n        background-color: @nav-pills-active-link-hover-bg;\n      }\n    }\n  }\n}\n\n\n// Stacked pills\n.nav-stacked {\n  > li {\n    float: none;\n    + li {\n      margin-top: 2px;\n      margin-left: 0; // no need for this gap between nav items\n    }\n  }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n    float: none;\n    > a {\n      margin-bottom: 5px;\n      text-align: center;\n    }\n  }\n\n  > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li {\n      display: table-cell;\n      width: 1%;\n      > a {\n        margin-bottom: 0;\n      }\n    }\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n  border-bottom: 0;\n\n  > li > a {\n    // Override margin from .nav-tabs\n    margin-right: 0;\n    border-radius: @border-radius-base;\n  }\n\n  > .active > a,\n  > .active > a:hover,\n  > .active > a:focus {\n    border: 1px solid @nav-tabs-justified-link-border-color;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li > a {\n      border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n    }\n    > .active > a,\n    > .active > a:hover,\n    > .active > a:focus {\n      border-bottom-color: @nav-tabs-justified-active-link-border-color;\n    }\n  }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  .border-top-radius(0);\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n  border-top-left-radius: @radius;\n  border-top-right-radius: @radius;\n}\n.border-right-radius(@radius) {\n  border-top-right-radius: @radius;\n  border-bottom-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n  border-bottom-right-radius: @radius;\n  border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n  border-top-left-radius: @radius;\n  border-bottom-left-radius: @radius;\n}\n","// stylelint-disable selector-max-type, selector-max-compound-selectors, selector-max-combinators, selector-max-class, declaration-no-important, selector-no-qualifying-type\n\n//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: @navbar-margin-bottom;\n  border: 1px solid transparent;\n\n  // Prevent floats from breaking the navbar\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: @navbar-border-radius;\n  }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n  }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  padding-right: @navbar-padding-horizontal;\n  padding-left: @navbar-padding-horizontal;\n  overflow-x: visible;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n  &:extend(.clearfix all);\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n    overflow-y: auto;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n\n    &.collapse {\n      display: block !important;\n      height: auto !important;\n      padding-bottom: 0; // Override default setting\n      overflow: visible !important;\n    }\n\n    &.in {\n      overflow-y: visible;\n    }\n\n    // Undo the collapse side padding for navbars with containers to ensure\n    // alignment of right-aligned contents.\n    .navbar-fixed-top &,\n    .navbar-static-top &,\n    .navbar-fixed-bottom & {\n      padding-right: 0;\n      padding-left: 0;\n    }\n  }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  .navbar-collapse {\n    max-height: @navbar-collapse-max-height;\n\n    @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n      max-height: 200px;\n    }\n  }\n\n  // Fix the top/bottom navbars when screen real estate supports it\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: @zindex-navbar-fixed;\n\n  // Undo the rounded corners\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; // override .navbar defaults\n  border-width: 1px 0 0;\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n  > .navbar-header,\n  > .navbar-collapse {\n    margin-right: -@navbar-padding-horizontal;\n    margin-left: -@navbar-padding-horizontal;\n\n    @media (min-width: @grid-float-breakpoint) {\n      margin-right: 0;\n      margin-left: 0;\n    }\n  }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  z-index: @zindex-navbar;\n  border-width: 0 0 1px;\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  height: @navbar-height;\n  padding: @navbar-padding-vertical @navbar-padding-horizontal;\n  font-size: @font-size-large;\n  line-height: @line-height-computed;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  > img {\n    display: block;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    .navbar > .container &,\n    .navbar > .container-fluid & {\n      margin-left: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-right: @navbar-padding-horizontal;\n  .navbar-vertical-align(34px);\n  background-color: transparent;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  border-radius: @border-radius-base;\n\n  // We remove the `outline` here, but later compensate by attaching `:hover`\n  // styles to `:focus`.\n  &:focus {\n    outline: 0;\n  }\n\n  // Bars\n  .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n    margin-top: 4px;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    display: none;\n  }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n  > li > a {\n    padding-top: 10px;\n    padding-bottom: 10px;\n    line-height: @line-height-computed;\n  }\n\n  @media (max-width: @grid-float-breakpoint-max) {\n    // Dropdowns get custom display when collapsed\n    .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none;\n      > li > a,\n      .dropdown-header {\n        padding: 5px 15px 5px 25px;\n      }\n      > li > a {\n        line-height: @line-height-computed;\n        &:hover,\n        &:focus {\n          background-image: none;\n        }\n      }\n    }\n  }\n\n  // Uncollapse the nav\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin: 0;\n\n    > li {\n      float: left;\n      > a {\n        padding-top: @navbar-padding-vertical;\n        padding-bottom: @navbar-padding-vertical;\n      }\n    }\n  }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  padding: 10px @navbar-padding-horizontal;\n  margin-right: -@navbar-padding-horizontal;\n  margin-left: -@navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  @shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n  .box-shadow(@shadow);\n\n  // Mixin behavior for optimum display\n  .form-inline();\n\n  .form-group {\n    @media (max-width: @grid-float-breakpoint-max) {\n      margin-bottom: 5px;\n\n      &:last-child {\n        margin-bottom: 0;\n      }\n    }\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  .navbar-vertical-align(@input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    .box-shadow(none);\n  }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  .border-top-radius(@navbar-border-radius);\n  .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  .navbar-vertical-align(@input-height-base);\n\n  &.btn-sm {\n    .navbar-vertical-align(@input-height-small);\n  }\n  &.btn-xs {\n    .navbar-vertical-align(22);\n  }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  .navbar-vertical-align(@line-height-computed);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin-right: @navbar-padding-horizontal;\n    margin-left: @navbar-padding-horizontal;\n  }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-left  { .pull-left(); }\n  .navbar-right {\n    .pull-right();\n    margin-right: -@navbar-padding-horizontal;\n\n    ~ .navbar-right {\n      margin-right: 0;\n    }\n  }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  background-color: @navbar-default-bg;\n  border-color: @navbar-default-border;\n\n  .navbar-brand {\n    color: @navbar-default-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-brand-hover-color;\n      background-color: @navbar-default-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-default-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-default-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-hover-color;\n        background-color: @navbar-default-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-active-color;\n        background-color: @navbar-default-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n        background-color: @navbar-default-link-disabled-bg;\n      }\n    }\n\n    // Dropdown menu items\n    // Remove background color from open dropdown\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-active-color;\n        background-color: @navbar-default-link-active-bg;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display when collapsed\n      .open .dropdown-menu {\n        > li > a {\n          color: @navbar-default-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-hover-color;\n            background-color: @navbar-default-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-active-color;\n            background-color: @navbar-default-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-disabled-color;\n            background-color: @navbar-default-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  .navbar-toggle {\n    border-color: @navbar-default-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-default-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-default-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: @navbar-default-border;\n  }\n\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n    color: @navbar-default-link-color;\n    &:hover {\n      color: @navbar-default-link-hover-color;\n    }\n  }\n\n  .btn-link {\n    color: @navbar-default-link-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-link-hover-color;\n    }\n    &[disabled],\n    fieldset[disabled] & {\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n      }\n    }\n  }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: @navbar-inverse-bg;\n  border-color: @navbar-inverse-border;\n\n  .navbar-brand {\n    color: @navbar-inverse-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-brand-hover-color;\n      background-color: @navbar-inverse-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-inverse-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-inverse-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-hover-color;\n        background-color: @navbar-inverse-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-active-color;\n        background-color: @navbar-inverse-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n        background-color: @navbar-inverse-link-disabled-bg;\n      }\n    }\n\n    // Dropdowns\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-active-color;\n        background-color: @navbar-inverse-link-active-bg;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: @navbar-inverse-border;\n        }\n        .divider {\n          background-color: @navbar-inverse-border;\n        }\n        > li > a {\n          color: @navbar-inverse-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-hover-color;\n            background-color: @navbar-inverse-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-active-color;\n            background-color: @navbar-inverse-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-disabled-color;\n            background-color: @navbar-inverse-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n    border-color: @navbar-inverse-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-inverse-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-inverse-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken(@navbar-inverse-bg, 7%);\n  }\n\n  .navbar-link {\n    color: @navbar-inverse-link-color;\n    &:hover {\n      color: @navbar-inverse-link-hover-color;\n    }\n  }\n\n  .btn-link {\n    color: @navbar-inverse-link-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-link-hover-color;\n    }\n    &[disabled],\n    fieldset[disabled] & {\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n      }\n    }\n  }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n  margin-top: ((@navbar-height - @element-height) / 2);\n  margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n  .clearfix();\n}\n.center-block {\n  .center-block();\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n  display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n  position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n  margin-bottom: @line-height-computed;\n  list-style: none;\n  background-color: @breadcrumb-bg;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline-block;\n\n    + li:before {\n      padding: 0 5px;\n      color: @breadcrumb-color;\n      content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n    }\n  }\n\n  > .active {\n    color: @breadcrumb-active-color;\n  }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: @alert-padding;\n  margin-bottom: @line-height-computed;\n  border: 1px solid transparent;\n  border-radius: @alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n    margin-top: 0;\n    color: inherit; // Specified for the h4 to prevent conflicts of changing @headings-color\n  }\n\n  // Provide class for links that match alerts\n  .alert-link {\n    font-weight: @alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n    margin-bottom: 0;\n  }\n\n  > p + p {\n    margin-top: 5px;\n  }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n// The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: (@alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n  color: @text-color;\n  background-color: @background;\n  border-color: @border;\n\n  hr {\n    border-top-color: darken(@border, 5%);\n  }\n\n  .alert-link {\n    color: darken(@text-color, 10%);\n  }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: 700;\n  line-height: 1;\n  color: @label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // Add hover effects, but only for links\n  a& {\n    &:hover,\n    &:focus {\n      color: @label-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for labels in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  .label-variant(@label-default-bg);\n}\n\n.label-primary {\n  .label-variant(@label-primary-bg);\n}\n\n.label-success {\n  .label-variant(@label-success-bg);\n}\n\n.label-info {\n  .label-variant(@label-info-bg);\n}\n\n.label-warning {\n  .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n  .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n  background-color: @color;\n\n  &[href] {\n    &:hover,\n    &:focus {\n      background-color: darken(@color, 10%);\n    }\n  }\n}\n","// stylelint-disable at-rule-no-vendor-prefix\n\n//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  height: @line-height-computed;\n  margin-bottom: @line-height-computed;\n  overflow: hidden;\n  background-color: @progress-bg;\n  border-radius: @progress-border-radius;\n  .box-shadow(inset 0 1px 2px rgba(0, 0, 0, .1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: @font-size-small;\n  line-height: @line-height-computed;\n  color: @progress-bar-color;\n  text-align: center;\n  background-color: @progress-bar-bg;\n  .box-shadow(inset 0 -1px 0 rgba(0, 0, 0, .15));\n  .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  #gradient > .striped();\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n  .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// stylelint-disable value-no-vendor-prefix, selector-max-id\n\n#gradient {\n\n  // Horizontal gradient, from left to right\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n    background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\", argb(@start-color), argb(@end-color))); // IE9 and down\n    background-repeat: repeat-x;\n  }\n\n  // Vertical gradient, from top to bottom\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Opera 12\n    background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\", argb(@start-color), argb(@end-color))); // IE9 and down\n    background-repeat: repeat-x;\n  }\n\n  .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n    background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n    background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    background-repeat: repeat-x;\n  }\n  .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n    background-repeat: no-repeat;\n  }\n  .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n    background-repeat: no-repeat;\n  }\n  .radial(@inner-color: #555; @outer-color: #333) {\n    background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n    background-image: radial-gradient(circle, @inner-color, @outer-color);\n    background-repeat: no-repeat;\n  }\n  .striped(@color: rgba(255, 255, 255, .15); @angle: 45deg) {\n    background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n  }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n  background-color: @color;\n\n  // Deprecated parent class requirement as of v3.2.0\n  .progress-striped & {\n    #gradient > .striped();\n  }\n}\n","// stylelint-disable selector-no-qualifying-type */\n\n//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n    position: relative;\n    float: left;\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  margin-left: -5px; // Offset the first child's margin\n  &:extend(.clearfix all);\n\n  .btn,\n  .btn-group,\n  .input-group {\n    float: left;\n  }\n  > .btn,\n  > .btn-group,\n  > .input-group {\n    margin-left: 5px;\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n    .border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    .box-shadow(none);\n  }\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: @caret-width-large @caret-width-large 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group,\n  > .btn-group > .btn {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    &:extend(.clearfix all);\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -1px;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    .border-top-radius(@btn-border-radius-base);\n    .border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    .border-top-radius(0);\n    .border-bottom-radius(@btn-border-radius-base);\n  }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n  > .btn,\n  > .btn-group {\n    display: table-cell;\n    float: none;\n    width: 1%;\n  }\n  > .btn-group .btn {\n    width: 100%;\n  }\n\n  > .btn-group .dropdown-menu {\n    left: auto;\n  }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n  > .btn,\n  > .btn-group > .btn {\n    input[type=\"radio\"],\n    input[type=\"checkbox\"] {\n      position: absolute;\n      clip: rect(0, 0, 0, 0);\n      pointer-events: none;\n    }\n  }\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &[class*=\"col-\"] {\n    float: none;\n    padding-right: 0;\n    padding-left: 0;\n  }\n\n  .form-control {\n    // Ensure that the input is always above the *appended* addon button for\n    // proper border colors.\n    position: relative;\n    z-index: 2;\n\n    // IE9 fubars the placeholder attribute in text inputs and the arrows on\n    // select elements in input groups. To fix it, we float the input. Details:\n    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n    float: left;\n\n    width: 100%;\n    margin-bottom: 0;\n\n    &:focus {\n      z-index: 3;\n    }\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  font-weight: 400;\n  line-height: 1;\n  color: @input-color;\n  text-align: center;\n  background-color: @input-group-addon-bg;\n  border: 1px solid @input-group-addon-border-color;\n  border-radius: @input-border-radius;\n\n  // Sizing\n  &.input-sm {\n    padding: @padding-small-vertical @padding-small-horizontal;\n    font-size: @font-size-small;\n    border-radius: @input-border-radius-small;\n  }\n  &.input-lg {\n    padding: @padding-large-vertical @padding-large-horizontal;\n    font-size: @font-size-large;\n    border-radius: @input-border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n    margin-top: 0;\n  }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  .border-right-radius(0);\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  .border-left-radius(0);\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping with `white-space` and\n  // `font-size` in combination with `inline-block` on buttons.\n  font-size: 0;\n  white-space: nowrap;\n\n  // Negative margin for spacing, position for bringing hovered/focused/actived\n  // element above the siblings.\n  > .btn {\n    position: relative;\n    + .btn {\n      margin-left: -1px;\n    }\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active {\n      z-index: 2;\n    }\n  }\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child {\n    > .btn,\n    > .btn-group {\n      margin-right: -1px;\n    }\n  }\n  &:last-child {\n    > .btn,\n    > .btn-group {\n      z-index: 2;\n      margin-left: -1px;\n    }\n  }\n}\n",".media {\n  // Proper spacing between instances of .media\n  margin-top: 15px;\n\n  &:first-child {\n    margin-top: 0;\n  }\n}\n\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n.media-body {\n  width: 10000px;\n}\n\n.media-object {\n  display: block;\n\n  // Fix collapse in webkit from max-width: 100% and display: table-cell.\n  &.img-thumbnail {\n    max-width: none;\n  }\n}\n\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n\n.media-middle {\n  vertical-align: middle;\n}\n\n.media-bottom {\n  vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n  // No need to set list-style: none; since .list-group-item is block level\n  padding-left: 0; // reset padding because ul and ol\n  margin-bottom: 20px;\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  // Place the border on the list items and negative margin up for better styling\n  margin-bottom: -1px;\n  background-color: @list-group-bg;\n  border: 1px solid @list-group-border;\n\n  // Round the first and last items\n  &:first-child {\n    .border-top-radius(@list-group-border-radius);\n  }\n  &:last-child {\n    margin-bottom: 0;\n    .border-bottom-radius(@list-group-border-radius);\n  }\n\n  // Disabled state\n  &.disabled,\n  &.disabled:hover,\n  &.disabled:focus {\n    color: @list-group-disabled-color;\n    cursor: @cursor-disabled;\n    background-color: @list-group-disabled-bg;\n\n    // Force color to inherit for custom content\n    .list-group-item-heading {\n      color: inherit;\n    }\n    .list-group-item-text {\n      color: @list-group-disabled-text-color;\n    }\n  }\n\n  // Active class on item itself, not parent\n  &.active,\n  &.active:hover,\n  &.active:focus {\n    z-index: 2; // Place active items above their siblings for proper border styling\n    color: @list-group-active-color;\n    background-color: @list-group-active-bg;\n    border-color: @list-group-active-border;\n\n    // Force color to inherit for custom content\n    .list-group-item-heading,\n    .list-group-item-heading > small,\n    .list-group-item-heading > .small {\n      color: inherit;\n    }\n    .list-group-item-text {\n      color: @list-group-active-text-color;\n    }\n  }\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item,\nbutton.list-group-item {\n  color: @list-group-link-color;\n\n  .list-group-item-heading {\n    color: @list-group-link-heading-color;\n  }\n\n  // Hover state\n  &:hover,\n  &:focus {\n    color: @list-group-link-hover-color;\n    text-decoration: none;\n    background-color: @list-group-hover-bg;\n  }\n}\n\nbutton.list-group-item {\n  width: 100%;\n  text-align: left;\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n","// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n  .list-group-item-@{state} {\n    color: @color;\n    background-color: @background;\n\n    a&,\n    button& {\n      color: @color;\n\n      .list-group-item-heading {\n        color: inherit;\n      }\n\n      &:hover,\n      &:focus {\n        color: @color;\n        background-color: darken(@background, 5%);\n      }\n      &.active,\n      &.active:hover,\n      &.active:focus {\n        color: #fff;\n        background-color: @color;\n        border-color: @color;\n      }\n    }\n  }\n}\n","// stylelint-disable selector-max-type, selector-max-compound-selectors, selector-max-combinators, no-duplicate-selectors\n\n//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n  margin-bottom: @line-height-computed;\n  background-color: @panel-bg;\n  border: 1px solid transparent;\n  border-radius: @panel-border-radius;\n  .box-shadow(0 1px 1px rgba(0, 0, 0, .05));\n}\n\n// Panel contents\n.panel-body {\n  padding: @panel-body-padding;\n  &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n  padding: @panel-heading-padding;\n  border-bottom: 1px solid transparent;\n  .border-top-radius((@panel-border-radius - 1));\n\n  > .dropdown .dropdown-toggle {\n    color: inherit;\n  }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: ceil((@font-size-base * 1.125));\n  color: inherit;\n\n  > a,\n  > small,\n  > .small,\n  > small > a,\n  > .small > a {\n    color: inherit;\n  }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n  padding: @panel-footer-padding;\n  background-color: @panel-footer-bg;\n  border-top: 1px solid @panel-inner-border;\n  .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n  > .list-group,\n  > .panel-collapse > .list-group {\n    margin-bottom: 0;\n\n    .list-group-item {\n      border-width: 1px 0;\n      border-radius: 0;\n    }\n\n    // Add border top radius for first one\n    &:first-child {\n      .list-group-item:first-child {\n        border-top: 0;\n        .border-top-radius((@panel-border-radius - 1));\n      }\n    }\n\n    // Add border bottom radius for last one\n    &:last-child {\n      .list-group-item:last-child {\n        border-bottom: 0;\n        .border-bottom-radius((@panel-border-radius - 1));\n      }\n    }\n  }\n  > .panel-heading + .panel-collapse > .list-group {\n    .list-group-item:first-child {\n      .border-top-radius(0);\n    }\n  }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n  .list-group-item:first-child {\n    border-top-width: 0;\n  }\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n  > .table,\n  > .table-responsive > .table,\n  > .panel-collapse > .table {\n    margin-bottom: 0;\n\n    caption {\n      padding-right: @panel-body-padding;\n      padding-left: @panel-body-padding;\n    }\n  }\n  // Add border top radius for first one\n  > .table:first-child,\n  > .table-responsive:first-child > .table:first-child {\n    .border-top-radius((@panel-border-radius - 1));\n\n    > thead:first-child,\n    > tbody:first-child {\n      > tr:first-child {\n        border-top-left-radius: (@panel-border-radius - 1);\n        border-top-right-radius: (@panel-border-radius - 1);\n\n        td:first-child,\n        th:first-child {\n          border-top-left-radius: (@panel-border-radius - 1);\n        }\n        td:last-child,\n        th:last-child {\n          border-top-right-radius: (@panel-border-radius - 1);\n        }\n      }\n    }\n  }\n  // Add border bottom radius for last one\n  > .table:last-child,\n  > .table-responsive:last-child > .table:last-child {\n    .border-bottom-radius((@panel-border-radius - 1));\n\n    > tbody:last-child,\n    > tfoot:last-child {\n      > tr:last-child {\n        border-bottom-right-radius: (@panel-border-radius - 1);\n        border-bottom-left-radius: (@panel-border-radius - 1);\n\n        td:first-child,\n        th:first-child {\n          border-bottom-left-radius: (@panel-border-radius - 1);\n        }\n        td:last-child,\n        th:last-child {\n          border-bottom-right-radius: (@panel-border-radius - 1);\n        }\n      }\n    }\n  }\n  > .panel-body + .table,\n  > .panel-body + .table-responsive,\n  > .table + .panel-body,\n  > .table-responsive + .panel-body {\n    border-top: 1px solid @table-border-color;\n  }\n  > .table > tbody:first-child > tr:first-child th,\n  > .table > tbody:first-child > tr:first-child td {\n    border-top: 0;\n  }\n  > .table-bordered,\n  > .table-responsive > .table-bordered {\n    border: 0;\n    > thead,\n    > tbody,\n    > tfoot {\n      > tr {\n        > th:first-child,\n        > td:first-child {\n          border-left: 0;\n        }\n        > th:last-child,\n        > td:last-child {\n          border-right: 0;\n        }\n      }\n    }\n    > thead,\n    > tbody {\n      > tr:first-child {\n        > td,\n        > th {\n          border-bottom: 0;\n        }\n      }\n    }\n    > tbody,\n    > tfoot {\n      > tr:last-child {\n        > td,\n        > th {\n          border-bottom: 0;\n        }\n      }\n    }\n  }\n  > .table-responsive {\n    margin-bottom: 0;\n    border: 0;\n  }\n}\n\n\n// Collapsible panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n  margin-bottom: @line-height-computed;\n\n  // Tighten up margin so it's only between panels\n  .panel {\n    margin-bottom: 0;\n    border-radius: @panel-border-radius;\n\n    + .panel {\n      margin-top: 5px;\n    }\n  }\n\n  .panel-heading {\n    border-bottom: 0;\n\n    + .panel-collapse > .panel-body,\n    + .panel-collapse > .list-group {\n      border-top: 1px solid @panel-inner-border;\n    }\n  }\n\n  .panel-footer {\n    border-top: 0;\n    + .panel-collapse .panel-body {\n      border-bottom: 1px solid @panel-inner-border;\n    }\n  }\n}\n\n\n// Contextual variations\n.panel-default {\n  .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n  .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n  .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n  .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n  .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n  .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n  border-color: @border;\n\n  & > .panel-heading {\n    color: @heading-text-color;\n    background-color: @heading-bg-color;\n    border-color: @heading-border;\n\n    + .panel-collapse > .panel-body {\n      border-top-color: @border;\n    }\n    .badge {\n      color: @heading-bg-color;\n      background-color: @heading-text-color;\n    }\n  }\n  & > .panel-footer {\n    + .panel-collapse > .panel-body {\n      border-bottom-color: @border;\n    }\n  }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  text-align: center;\n  list-style: none;\n  &:extend(.clearfix all);\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: @pager-bg;\n      border: 1px solid @pager-border;\n      border-radius: @pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: @pager-hover-bg;\n    }\n  }\n\n  .next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .disabled {\n    > a,\n    > a:hover,\n    > a:focus,\n    > span {\n      color: @pager-disabled-color;\n      cursor: @cursor-disabled;\n      background-color: @pager-bg;\n    }\n  }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: @padding-base-vertical @padding-base-horizontal;\n      margin-left: -1px;\n      line-height: @line-height-base;\n      color: @pagination-color;\n      text-decoration: none;\n      background-color: @pagination-bg;\n      border: 1px solid @pagination-border;\n\n      &:hover,\n      &:focus {\n        z-index: 2;\n        color: @pagination-hover-color;\n        background-color: @pagination-hover-bg;\n        border-color: @pagination-hover-border;\n      }\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        .border-left-radius(@border-radius-base);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius-base);\n      }\n    }\n  }\n\n  > .active > a,\n  > .active > span {\n    &,\n    &:hover,\n    &:focus {\n      z-index: 3;\n      color: @pagination-active-color;\n      cursor: default;\n      background-color: @pagination-active-bg;\n      border-color: @pagination-active-border;\n    }\n  }\n\n  > .disabled {\n    > span,\n    > span:hover,\n    > span:focus,\n    > a,\n    > a:hover,\n    > a:focus {\n      color: @pagination-disabled-color;\n      cursor: @cursor-disabled;\n      background-color: @pagination-disabled-bg;\n      border-color: @pagination-disabled-border;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  > li {\n    > a,\n    > span {\n      padding: @padding-vertical @padding-horizontal;\n      font-size: @font-size;\n      line-height: @line-height;\n    }\n    &:first-child {\n      > a,\n      > span {\n        .border-left-radius(@border-radius);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius);\n      }\n    }\n  }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n\n  .embed-responsive-item,\n  iframe,\n  embed,\n  object,\n  video {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    border: 0;\n  }\n}\n\n// Modifier class for 16:9 aspect ratio\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n\n// Modifier class for 4:3 aspect ratio\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: @well-bg;\n  border: 1px solid @well-border;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .05));\n  blockquote {\n    border-color: #ddd;\n    border-color: rgba(0, 0, 0, .15);\n  }\n}\n\n// Sizes\n.well-lg {\n  padding: 24px;\n  border-radius: @border-radius-large;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: @border-radius-small;\n}\n","// stylelint-disable property-no-vendor-prefix\n\n//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n  float: right;\n  font-size: (@font-size-base * 1.5);\n  font-weight: @close-font-weight;\n  line-height: 1;\n  color: @close-color;\n  text-shadow: @close-text-shadow;\n  .opacity(.2);\n\n  &:hover,\n  &:focus {\n    color: @close-color;\n    text-decoration: none;\n    cursor: pointer;\n    .opacity(.5);\n  }\n\n  // Additional properties for button version\n  // iOS requires the button element instead of an anchor tag.\n  // If you want the anchor version, it requires `href=\"#\"`.\n  // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n  button& {\n    padding: 0;\n    cursor: pointer;\n    background: transparent;\n    border: 0;\n    -webkit-appearance: none;\n    appearance: none;\n  }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: @font-size-small;\n  font-weight: @badge-font-weight;\n  line-height: @badge-line-height;\n  color: @badge-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  background-color: @badge-bg;\n  border-radius: @badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for badges in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n\n  .btn-xs &,\n  .btn-group-xs > .btn & {\n    top: 0;\n    padding: 1px 5px;\n  }\n\n  // Hover state, but only for links\n  a& {\n    &:hover,\n    &:focus {\n      color: @badge-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Account for badges in navs\n  .list-group-item.active > &,\n  .nav-pills > .active > a > & {\n    color: @badge-active-color;\n    background-color: @badge-active-bg;\n  }\n\n  .list-group-item > & {\n    float: right;\n  }\n\n  .list-group-item > & + & {\n    margin-right: 5px;\n  }\n\n  .nav-pills > li > a > & {\n    margin-left: 3px;\n  }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open      - body class for killing the scroll\n// .modal           - container to scroll within\n// .modal-dialog    - positioning shell for the actual modal\n// .modal-content   - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n  overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: @zindex-modal;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n\n  // Prevent Chrome on Windows from adding a focus outline. For details, see\n  // https://github.com/twbs/bootstrap/pull/10951.\n  outline: 0;\n\n  // When fading in the modal, animate it to slide down\n  &.fade .modal-dialog {\n    .translate(0, -25%);\n    .transition-transform(~\"0.3s ease-out\");\n  }\n  &.in .modal-dialog { .translate(0, 0); }\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n  position: relative;\n  background-color: @modal-content-bg;\n  background-clip: padding-box;\n  border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n  border: 1px solid @modal-content-border-color;\n  border-radius: @border-radius-large;\n  .box-shadow(0 3px 9px rgba(0, 0, 0, .5));\n  // Remove focus outline from opened modal\n  outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: @zindex-modal-background;\n  background-color: @modal-backdrop-bg;\n  // Fade for backdrop\n  &.fade { .opacity(0); }\n  &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n  padding: @modal-title-padding;\n  border-bottom: 1px solid @modal-header-border-color;\n  &:extend(.clearfix all);\n}\n// Close icon\n.modal-header .close {\n  margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n  margin: 0;\n  line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n  position: relative;\n  padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n  padding: @modal-inner-padding;\n  text-align: right; // right align buttons\n  border-top: 1px solid @modal-footer-border-color;\n  &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n  // Properly space out buttons\n  .btn + .btn {\n    margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n    margin-left: 5px;\n  }\n  // but override that for button groups\n  .btn-group .btn + .btn {\n    margin-left: -1px;\n  }\n  // and override it for block buttons as well\n  .btn-block + .btn-block {\n    margin-left: 0;\n  }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n  // Automatically set modal's width for larger viewports\n  .modal-dialog {\n    width: @modal-md;\n    margin: 30px auto;\n  }\n  .modal-content {\n    .box-shadow(0 5px 15px rgba(0, 0, 0, .5));\n  }\n\n  // Modal sizes\n  .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n  .modal-lg { width: @modal-lg; }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n//    contenteditable attribute is included anywhere else in the document.\n//    Otherwise it causes space to appear at the top and bottom of elements\n//    that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n//    `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n  &:before,\n  &:after {\n    display: table; // 2\n    content: \" \"; // 1\n  }\n  &:after {\n    clear: both;\n  }\n}\n","// Center-align a block level element\n\n.center-block() {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n","// stylelint-disable font-family-name-quotes, font-family-no-missing-generic-family-keyword\n\n// CSS image replacement\n//\n// Heads up! v3 launched with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (has been removed in v4)\n.hide-text() {\n  font: ~\"0/0\" a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n  .hide-text();\n}\n","// stylelint-disable declaration-no-important\n\n.responsive-visibility() {\n  display: block !important;\n  table&  { display: table !important; }\n  tr&     { display: table-row !important; }\n  th&,\n  td&     { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n  display: none !important;\n}\n","//\n// Misago Global Scaffolding\n// --------------------------------------------------\n\n// Disable horizontal scroll on mobile displays top-most containers\n@media screen and (max-width: @screen-sm-max) {\n  html,\n  body {\n    overflow-x: hidden;\n  }\n}\n\n// top margin utils\n@media screen and (min-width: @screen-md-min) {\n  .md-margin-top-no {\n    margin-top: 0px !important;\n  }\n}\n\n@media screen and (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n  .sm-margin-top {\n    margin-top: @line-height-computed !important;\n  }\n\n  .sm-margin-top-no {\n    margin-top: 0px !important;\n  }\n\n  .sm-margin-top-half {\n    margin-top: @line-height-computed * 0.33 !important;\n  }\n\n  .sm-align-row-buttons {\n    margin-top: @line-height-computed * 0.25 !important;\n  }\n}\n\n@media screen and (max-width: @screen-xs-max) {\n  .xs-margin-top {\n    margin-top: @line-height-computed !important;\n  }\n\n  .xs-margin-top-half {\n    margin-top: @line-height-computed * 0.33 !important;\n  }\n}\n","//\n// Simple flex row util, inspired by toolbar\n// --------------------------------------------------\n\n.flex-row {\n  display: block;\n  margin: 0 floor(@grid-gutter-width * -0.5);\n}\n\n.flex-row-section {\n  align-items: center;\n  display: flex;\n  flex: 1;\n}\n\n.flex-row-section + .flex-row-section {\n  margin-top: @line-height-computed;\n}\n\n.flex-row-col {\n  flex: 1;\n  padding: 0 floor(@grid-gutter-width * 0.5);\n}\n\n@media screen and (min-width: @screen-sm-min) {\n  .flex-row {\n    display: flex;\n    align-items: center;\n  }\n\n  .flex-row-section + .flex-row-section {\n    margin: 0;\n  }\n\n  .flex-row-section,\n  .flex-row-col {\n    flex: 0;\n\n    align-items: center;\n  }\n\n  .flex-row-section.flex-row-section-auto,\n  .flex-row-section.flex-row-section-auto > .flex-row-col {\n    flex: 1;\n  }\n}\n\n.flex-row-col-shrink {\n  flex: 0 !important;\n}\n","//\n// Auth changed message\n// --------------------------------------------------\n\n.auth-message {\n  background-color: @auth-changed-bg;\n  padding: @line-height-computed 0px;\n  width: 100%;\n\n  position: fixed;\n  top: -100%;\n  left: 0px;\n\n  z-index: @zindex-auth-message;\n\n  transition: top 300ms ease;\n\n  &.show {\n    top: 0px;\n    bottom: auto;\n  }\n\n  p {\n    padding: @line-height-computed / 4 0px;\n\n    color: @auth-changed-color;\n  }\n\n  // Small displays\n  @media screen and (max-width: @screen-sm-max) {\n    text-align: center;\n\n    .btn {\n      padding: @padding-large-vertical @padding-large-horizontal;\n\n      font-size: @font-size-large;\n    }\n  }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n.alerts-snackbar {\n  position: fixed;\n  top: -100%;\n  width: 100%;\n  z-index: @zindex-modal + 10;\n\n  text-align: center;\n  font-size: @font-size-large;\n\n  transition: top 300ms ease;\n\n  pointer-events: none;\n\n  &.in {\n    top: 0px;\n    transition: top 200ms ease;\n  }\n\n  p {\n    display: inline-block;\n    border-radius: 0px 0px @border-radius-base @border-radius-base;\n    margin: 0px;\n\n    pointer-events: all;\n  }\n}\n","//\n// Agreement overlay\n// --------------------------------------------------\n\n.agreement-overlay {\n  position: fixed;\n  width: 100%;\n  height: 100%;\n  top: 0px;\n  left: 0px;\n  z-index: @zindex-modal + 10;\n\n  background-color: fadeOut(@modal-backdrop-bg, @modal-backdrop-opacity * 100);\n  overflow-x: scroll;\n\n  .container {\n    max-width: @modal-lg;\n    padding: @line-height-computed @grid-gutter-width;\n  }\n}\n\n.agreement-content {\n  background-color: @modal-content-bg;\n  border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n  border: 1px solid @modal-content-border-color;\n  border-radius: @border-radius-large;\n  .box-shadow(0 3px 9px rgba(0,0,0,0.5));\n  background-clip: padding-box;\n  outline: 0;\n\n  padding: @padding-large-vertical @padding-large-horizontal;\n}\n\n.agreement-header {\n  padding: @padding-large-vertical 0;\n\n  border-bottom: 1px solid @gray-lighter;\n\n  h2 {\n    margin-top: 0;\n  }\n\n  p {\n    margin: 0;\n    padding: 0;\n  }\n}\n\n.agreement-body {\n  padding: @line-height-computed 0;\n\n  p.lead {\n    margin: 0;\n    padding: 0;\n  }\n}\n\n.agreement-footer {\n  .modal-footer();\n\n  padding: @padding-large-vertical 0;\n}\n\n// utility class disabling scroll on body\nbody.agreement-overlay-visible {\n  overflow: hidden;\n}\n","//\n// Misago Loaders\n// --------------------------------------------------\n\n.loader {\n  width: 100%;\n  height: 49px;\n  text-align: center;\n\n  &.loader-spaced {\n    margin: @line-height-computed * 2 0px;\n  }\n}\n\n.loader-spinning-wheel {\n  width: 49px;\n  height: 49px;\n  margin: 0 auto;\n  border: 3px solid @loader-color;\n  border-radius: 50%;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  animation: cssload-spin 575ms infinite linear;\n  -o-animation: cssload-spin 575ms infinite linear;\n  -ms-animation: cssload-spin 575ms infinite linear;\n  -webkit-animation: cssload-spin 575ms infinite linear;\n  -moz-animation: cssload-spin 575ms infinite linear;\n}\n\n@keyframes cssload-spin {\n  100% {\n    transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@-o-keyframes cssload-spin {\n  100% {\n    -o-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@-ms-keyframes cssload-spin {\n  100% {\n    -ms-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@-webkit-keyframes cssload-spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@-moz-keyframes cssload-spin {\n  100% {\n    -moz-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n","//\n// Misago Navbar\n// --------------------------------------------------\n\n// Remove bottom margin from navbar\n.navbar {\n  margin-bottom: 0px;\n}\n\n// Desktop navbar\n.navbar .navbar-full {\n  // Brand\n  .navbar-brand {\n    padding-top: (@navbar-height - @navbar-icon-height) / 2;\n    padding-bottom: (@navbar-height - @navbar-icon-height) / 2;\n\n    font-size: @font-size-base * 1.5;\n\n    & > * {\n      display: inline-block;\n      vertical-align: middle;\n    }\n\n    img {\n      height: @navbar-icon-height;\n      margin-right: @padding-base-horizontal / 2;\n    }\n  }\n\n  .navbar-nav > li > a {\n    font-size: @font-size-base * 1.2;\n  }\n\n  .navbar-icon {\n    display: block;\n    height: @navbar-height;\n    padding: @nav-link-padding;\n    padding-top: (@navbar-height - 28px) / 2;\n    padding-bottom: (@navbar-height - 28px) / 2;\n    position: relative;\n\n    color: @navbar-default-link-color;\n\n    &:hover,\n    &:focus {\n      color: @navbar-default-link-hover-color;\n      background-color: @navbar-default-link-hover-bg;\n    }\n\n    .material-icon {\n      width: 28px;\n      height: 28px;\n\n      font-size: 28px;\n      line-height: 28px;\n    }\n\n    .badge {\n      background-color: @brand-danger;\n      position: absolute;\n\n      top: 6px;\n      right: 6px;\n\n      font-size: 9px;\n    }\n  }\n\n  .open .navbar-icon {\n    &,\n    &:hover,\n    &:focus {\n      background-color: @navbar-default-link-active-bg;\n\n      color: @navbar-default-link-active-color;\n    }\n  }\n\n  // Pull Guest and User menus to right\n  .nav-guest,\n  .nav-user {\n    float: right;\n\n    .navbar-btn {\n      margin-left: @navbar-padding-horizontal;\n    }\n  }\n\n  // User avatar size\n  .nav-user .dropdown-toggle {\n    padding: (@navbar-height - @navbar-avatar-size) / 2;\n\n    img {\n      width: @navbar-avatar-size;\n      height: @navbar-avatar-size;\n    }\n  }\n}\n\n// Compact (mobile) navbar\n.navbar ul.navbar-compact-nav {\n  border-collapse: collapse;\n  display: table;\n  margin: 0px;\n  table-layout: fixed;\n  width: 100%;\n\n  & > li {\n    display: table-cell;\n    width: 100%;\n  }\n\n  & > li > a,\n  & > li > button {\n    background: none;\n    border: none;\n    display: block;\n    padding-top: 13px;\n    padding-bottom: 13px;\n\n    width: 100%;\n\n    color: @navbar-compact-link-color;\n    text-align: center;\n\n    &.active,\n    &:hover,\n    &:focus {\n      color: @navbar-compact-link-hover-color;\n      background-color: @navbar-compact-link-hover-bg;\n    }\n\n    & > img {\n      width: @navbar-compact-item-size;\n      height: @navbar-compact-item-size;\n    }\n  }\n\n  & > li > button {\n    display: inline-block;\n  }\n\n  & > li > a > .material-icon {\n    font-size: @navbar-compact-item-size;\n    line-height: @navbar-compact-item-size;\n  }\n}\n\n// Make navbar's height match compact nav\n@media (max-width: @grid-float-breakpoint) {\n  .navbar.navbar-misago {\n    min-height: auto;\n  }\n}\n\n// Hide compact navbar above breakpoint\n.navbar-misago .navbar-desktop-nav {\n  display: none;\n}\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-misago ul.navbar-compact-nav {\n    display: none;\n  }\n\n  .navbar-misago .navbar-desktop-nav {\n    display: block;\n  }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n.nav-side > a {\n  & > .material-icon {\n    margin: -5px;\n    margin-right: @line-height-computed / 2;\n\n    position: relative;\n    bottom: 1px;\n\n    width: 24px;\n    height: 24px;\n\n    font-size: 24px;\n    line-height: 24px;\n  }\n\n  .badge {\n    position: relative;\n    top: 1px;\n  }\n}\n\n.nav-pills > li > a {\n  display: flex;\n  align-items: center;\n  padding: @nav-pills-padding-vertical @nav-pills-padding-horizontal;\n\n  .material-icon {\n    margin-right: 3px;\n  }\n\n  &,\n  &:link,\n  &:visited {\n    background-color: @nav-pills-bg;\n    color: @nav-pills-color;\n  }\n\n  &:focus,\n  &:hover,\n  &:active {\n    background-color: @nav-pills-hover-bg;\n    color: @nav-pills-hover-color;\n  }\n}\n\n.nav-pills > li.active > a {\n  &,\n  &:link,\n  &:visited,\n  &:focus,\n  &:hover,\n  &:active {\n    background-color: @nav-pills-active-bg;\n    color: @nav-pills-active-color;\n  }\n}\n\n.nav-container {\n  .btn-block {\n    margin-bottom: @line-height-computed;\n  }\n\n  .nav {\n    margin-right: floor(@line-height-computed / -2);\n    margin-bottom: floor(@line-height-computed * 1.5);\n  }\n\n  li {\n    margin-right: floor(@line-height-computed / 2);\n    margin-bottom: floor(@line-height-computed / 2);\n  }\n}\n","// Breadcrumbs component\n\n.breadcrumbs {\n  display: block;\n\n  padding: 0;\n  margin-bottom: @line-height-computed / 2;\n}\n\n.breadcrumbs-item {\n  display: inline-block;\n  margin-right: @breadcrumbs-gutter;\n  margin-bottom: @line-height-computed / 2;\n  padding: 0;\n  list-style: none;\n}\n\n.breadcrumbs-item a {\n  display: flex;\n  align-items: center;\n  text-decoration: none;\n\n  &,\n  &:visited {\n    color: @breadcrumbs-color;\n  }\n\n  &:hover,\n  &:focus {\n    color: @breadcrumbs-color-hover;\n\n    .breadcrumbs-item-name {\n      text-decoration: underline;\n    }\n  }\n\n  &:active {\n    color: @breadcrumbs-color-active;\n  }\n}\n\n.breadcrumbs-item .material-icon {\n  margin-right: 4px;\n}\n","//\n// Material Icons\n// --------------------------------------------------\n\n@font-face {\n  font-family: \"Material Icons\";\n  font-style: normal;\n  font-weight: 400;\n  src: url(../fonts/MaterialIcons-Regular.eot); /* For IE6-8 */\n  src: local(\"Material Icons\"), local(\"MaterialIcons-Regular\"),\n    url(../fonts/MaterialIcons-Regular.woff2) format(\"woff2\"),\n    url(../fonts/MaterialIcons-Regular.woff) format(\"woff\"),\n    url(../fonts/MaterialIcons-Regular.ttf) format(\"truetype\");\n}\n\n.material-icon {\n  font-family: \"Material Icons\";\n  font-weight: normal;\n  font-style: normal;\n  display: inline-block;\n  width: 1em;\n  height: 1em;\n  line-height: 1;\n  text-align: center;\n  text-transform: none;\n  letter-spacing: normal;\n  vertical-align: middle;\n  word-wrap: normal;\n  white-space: nowrap;\n  direction: ltr;\n\n  /* Support for all WebKit browsers. */\n  -webkit-font-smoothing: antialiased;\n  /* Support for Safari and Chrome. */\n  text-rendering: optimizeLegibility;\n\n  /* Support for Firefox. */\n  -moz-osx-font-smoothing: grayscale;\n\n  /* Support for IE. */\n  font-feature-settings: \"liga\";\n}\n","//\n// Misago Modals\n// --------------------------------------------------\n\n// Modal toolbar\n.modal-toolbar {\n  background: @gray-lighter;\n  border-bottom: 1px solid @modal-header-border-color;\n  overflow: auto;\n  padding: @padding-base-vertical @padding-base-horizontal;\n\n  .pull-left {\n    margin-right: 8px;\n  }\n\n  p {\n    padding: @padding-small-vertical 0px;\n    margin-bottom: 0px;\n  }\n}\n\n// Modals displaying messages\n\n// Small displays\n@media screen and (max-width: @screen-sm-max) {\n  .modal-message {\n    text-align: center;\n\n    .message-icon {\n      margin: @line-height-computed * 1.5;\n\n      .material-icon {\n        font-size: @message-page-icon-size * 2;\n      }\n    }\n  }\n}\n\n// Full displays\n@media screen and (min-width: @screen-md-min) {\n  .modal-message {\n    .modal-body {\n      padding-top: @line-height-computed;\n      padding-bottom: @line-height-computed * 1.5;\n    }\n\n    .message-icon {\n      float: left;\n      position: relative;\n      left: 7px;\n\n      .material-icon {\n        font-size: @line-height-computed * 2.5;\n      }\n    }\n\n    .message-body {\n      margin-left: @line-height-computed * 3.75;\n      margin-top: @line-height-computed * 0.6 - 2px;\n\n      p {\n        margin-top: @line-height-computed;\n      }\n\n      .lead {\n        margin-top: 0px;\n        margin-bottom: 0px;\n      }\n    }\n  }\n}\n\n// Modal loader\n.modal-loader {\n  padding: @line-height-computed * 2.5 0px;\n\n  .loader {\n    width: 100%;\n    height: @loader-size;\n    text-align: center;\n  }\n\n  .loader-spinning-wheel {\n    width: @loader-size;\n    height: @loader-size;\n  }\n}\n\n// Modal form\n.modal-body .form-group {\n  min-height: 34px;\n}\n\n// Errors modal\n.list-item-errors {\n  margin-bottom: @line-height-computed;\n}\n\n.list-errored-items li:last-child .list-item-errors {\n  margin-bottom: 0px;\n}\n\n// Post likes modal\n.modal-post-likers {\n  .media-list {\n    margin: 0px;\n  }\n\n  .item-title {\n    display: block;\n  }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n// Material feedback icon\n.has-feedback .material-icon.form-control-feedback {\n  top: @padding-base-vertical;\n  right: @padding-base-horizontal * 2;\n\n  font-size: @line-height-base;\n  line-height: @line-height-base;\n}\n\n// Well done\n.well.well-form.well-done {\n  font-size: @font-size-large;\n  text-align: center;\n\n  .message-icon {\n    margin-bottom: @line-height-computed / 2;\n\n    font-size: @font-size-large * 5;\n    line-height: @font-size-large * 5;\n  }\n\n  .message-body {\n    margin-bottom: @line-height-computed;\n  }\n}\n\n// Noscript well\n.well.well-form.well-noscript {\n  font-size: @font-size-large;\n  text-align: center;\n\n  .message-icon {\n    margin-bottom: @line-height-computed / 2;\n\n    font-size: @font-size-large * 5;\n    line-height: @font-size-large * 5;\n  }\n}\n","//\n// Inputs\n// --------------------------------------------------\n\n// Button-based inputs\n.btn.btn-yes-no,\n.btn.btn-select {\n  background: transparent;\n  border: 1px solid darken(@gray-lighter, 10%);\n\n  .material-icon {\n    margin: -4px 0px;\n    margin-right: 8px;\n\n    position: relative;\n    bottom: 1px;\n\n    width: 20px;\n    height: 20px;\n\n    font-size: 20px;\n    line-height: 20px;\n  }\n}\n\n@media screen and (max-width: @screen-xs-max) {\n  .btn.btn-yes-no {\n    width: 100%;\n    overflow: auto;\n\n    .material-icon {\n      float: left;\n      margin-top: 1px;\n    }\n\n    .btn-text {\n      display: block;\n\n      margin-left: 30px;\n\n      text-align: left;\n      white-space: normal;\n    }\n  }\n}\n\n// Hidden file input\ninput.hidden-file-upload {\n  position: absolute;\n  top: -9999px;\n  left: -9999px;\n}\n\n// Search field\n.form-search {\n  position: relative;\n\n  .form-control {\n    padding-right: 30px;\n  }\n\n  .material-icon {\n    position: absolute;\n    top: 5px;\n    right: 5px;\n\n    color: @gray-light;\n    font-size: 24px;\n    line-height: 24px;\n\n    pointer-events: none;\n  }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n// Button loading style\n.btn.btn-loading {\n  &,\n  &:link,\n  &:active,\n  &:visited,\n  &:hover,\n  &:focus {\n    // make text transparent, but still take place in button\n    color: transparent;\n\n    // position loader over the text\n    .loader {\n      height: 20px;\n      margin-top: -20px;\n\n      & > div {\n        width: 20px;\n        height: 20px;\n      }\n    }\n  }\n\n  &.btn-default .loader > div {\n    border-top-color: @btn-default-color;\n    border-bottom-color: @btn-default-color;\n  }\n\n  &.btn-primary .loader > div {\n    border-top-color: @btn-primary-color;\n    border-bottom-color: @btn-primary-color;\n  }\n\n  &.btn-success .loader > div {\n    border-top-color: @btn-success-color;\n    border-bottom-color: @btn-success-color;\n  }\n\n  &.btn-info .loader > div {\n    border-top-color: @btn-info-color;\n    border-bottom-color: @btn-info-color;\n  }\n\n  &.btn-warning .loader > div {\n    border-top-color: @btn-warning-color;\n    border-bottom-color: @btn-warning-color;\n  }\n\n  &.btn-danger .loader > div {\n    border-top-color: @btn-danger-color;\n    border-bottom-color: @btn-danger-color;\n  }\n}\n\n// Icons in buttons\n.btn .material-icon {\n  margin-right: 3px;\n  position: relative;\n  bottom: 1px;\n}\n\n// Btn with larger icon\n.btn-icon .material-icon {\n  margin: -1px -4px;\n\n  width: 20px;\n  height: 20px;\n\n  font-size: 20px;\n  line-height: 20px;\n}\n\n.btn-icon .btn-text {\n  margin-left: @padding-small-horizontal;\n}\n\n.btn-icon .btn-text-left {\n  margin-right: @padding-small-horizontal;\n}\n\n// Block btn icon\n.btn-block.btn-icon {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n","//\n// Dropdowns\n// --------------------------------------------------\n\n// Unify .btn-link appearance with anchors\n.dropdown-menu > li > a,\n.dropdown-menu > li > .btn-link,\n.modal-menu > li > a,\n.modal-menu > li > .btn-link {\n  display: block;\n  border: none;\n  clear: both;\n  float: none;\n  padding: 6px 20px;\n  width: 100%;\n\n  color: @dropdown-link-color;\n  font-weight: normal;\n  line-height: @line-height-base;\n  text-align: left;\n  white-space: nowrap;\n\n  &:hover,\n  &:focus {\n    background-color: @dropdown-link-hover-bg;\n\n    color: @dropdown-link-hover-color;\n    text-decoration: none;\n  }\n\n  &:active {\n    background-color: @dropdown-link-hover-bg;\n\n    color: @dropdown-link-hover-color;\n    text-decoration: none;\n  }\n\n  &:disabled {\n    color: fadeOut(@dropdown-link-color, 50);\n  }\n\n  // Set material icons in dropdown menus\n  .material-icon {\n    margin: -2px 0px;\n    margin-right: @line-height-computed * 0.35;\n\n    position: relative;\n    bottom: 1px;\n\n    font-size: 18px;\n  }\n\n  .badge {\n    float: right;\n\n    position: relative;\n    top: 1px;\n  }\n}\n\n// Extra overrides for modal nav\n.modal-menu {\n  margin: @line-height-computed 0px;\n  padding: 0px;\n}\n\n.modal-menu > li {\n  margin: @line-height-computed / 3 0px;\n  padding: 0px;\n\n  list-style: none;\n}\n\n// Bump min dropdown width to 210px\n.dropdown-menu {\n  min-width: 210px;\n}\n\n// Dropdown footer\n.dropdown-menu .dropdown-footer {\n  padding: 6px 20px;\n}\n\n// Dropdown buttons container\n.dropdown-menu .dropdown-buttons {\n  padding: 2px 20px;\n  padding-bottom: 7px;\n\n  .btn {\n    margin: 4px 0px;\n  }\n}\n\n// Navbar's dropdown\n.mobile-dropdown {\n  position: relative;\n}\n\n.mobile-dropdown.open > .dropdown-menu,\n.compact-nav.open > .dropdown-menu {\n  border: none;\n  border-radius: 0;\n\n  display: block;\n  margin: 0px;\n  width: 100%;\n}\n\n// Guest menu\n.user-dropdown .guest-preview {\n  text-align: center;\n\n  .row {\n    margin: 0px;\n  }\n}\n\n// User menu\n.navbar .user-dropdown {\n  width: 240px;\n}\n\n.user-dropdown .dropdown-header {\n  padding: 6px 20px;\n\n  font-size: @font-size-large;\n\n  strong {\n    font-weight: normal;\n  }\n}\n\n// Category picker\n.category-picker .dropdown-menu {\n  // Make category picker wider on desktops\n  @media screen and (min-width: @screen-md-min) {\n    width: 300px;\n  }\n}\n\n.category-picker .dropdown-menu > li > .btn-link {\n  white-space: normal;\n  word-wrap: break-word;\n}\n\n// Stick to bottom on mobile\n@media screen and (max-width: @screen-xs-max) {\n  .dropdown-menu.stick-to-bottom {\n    border-radius: 0px;\n    border: none;\n\n    max-height: 300px;\n    overflow-y: auto;\n\n    .box-shadow(0px 0px @line-height-computed * 1.5 @gray-light);\n\n    clear: both;\n    top: auto;\n    width: 100%;\n\n    position: fixed;\n    bottom: 0px;\n\n    margin: 0px;\n    padding: 0px;\n\n    padding-bottom: @line-height-computed;\n\n    li {\n      float: none;\n\n      margin: 0px;\n\n      clear: both;\n\n      & > a,\n      & > .btn {\n        padding-top: @line-height-computed * 0.75;\n        padding-bottom: @line-height-computed * 0.75;\n\n        border-bottom: 1px solid @dropdown-divider-bg;\n      }\n    }\n  }\n}\n","// Category label is category on threads list\n.category-label {\n  border-radius: 0.25em;\n  padding: 0.2em 0.6em 0.3em;\n}\n\n.category-label-color,\n.category-label-color:link,\n.category-label-color:focus,\n.category-label-color:active,\n.category-label-color:visited,\n.category-label-color:hover {\n  color: @category-label-color;\n}\n\n.category-label-no-color,\n.category-label-no-color:link,\n.category-label-no-color:focus,\n.category-label-no-color:active,\n.category-label-no-color:visited,\n.category-label-no-color:hover {\n  background-color: @category-label-default-bg;\n  color: @category-label-default-color;\n}\n",".thread-flags {\n  display: flex;\n  align-items: center;\n\n  opacity: @thread-flag-icon-opacity;\n\n  margin: 0;\n  padding: 0;\n\n  li {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    width: @thread-flag-block-size;\n    height: @thread-flag-block-size;\n\n    border-radius: @border-radius-small;\n    list-style-type: none;\n\n    cursor: default;\n  }\n\n  li + li {\n    margin-left: @grid-gutter-width / 4;\n  }\n\n  .material-icon {\n    font-size: @thread-flag-icon-size;\n    line-height: @thread-flag-icon-size;\n  }\n}\n\n.thread-flag-pinned-globally {\n  color: @thread-flag-pinned-globally-color;\n  background: @thread-flag-pinned-globally-bg;\n}\n\n.thread-flag-pinned-locally {\n  color: @thread-flag-pinned-locally-color;\n  background: @thread-flag-pinned-locally-bg;\n}\n\n.thread-flag-answered {\n  color: @thread-flag-answered-color;\n  background: @thread-flag-answered-bg;\n}\n\n.thread-flag-poll {\n  color: @thread-flag-poll-color;\n  background: @thread-flag-poll-bg;\n}\n\n.thread-flag-unapproved {\n  color: @thread-flag-unapproved-color;\n  background: @thread-flag-unapproved-bg;\n}\n\n.thread-flag-closed {\n  color: @thread-flag-closed-color;\n  background: @thread-flag-closed-bg;\n}\n\n.thread-flag-hidden {\n  color: @thread-flag-hidden-color;\n  background: @thread-flag-hidden-bg;\n}\n",".threads-replies {\n  display: flex;\n  align-items: center;\n\n  color: @thread-replies-color;\n  font-size: @thread-replies-size;\n  font-weight: bold;\n\n  .material-icon {\n    margin-right: @grid-gutter-width / 4;\n    transform: matrix(-1, 0, 0, 1, 0, 0);\n  }\n}\n",".thread-user-card {\n  display: flex;\n  align-items: center;\n}\n\n.thread-user-card-media {\n  flex: 0;\n  margin-right: floor(@grid-gutter-width * .5;);\n\n  img {\n    border-radius: @border-radius-small;\n  }\n}\n\n.thread-user-card-body {\n  flex: 1;\n\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n","//\n// Search Dropdown\n// --------------------------------------------------\n\n// Default size and position for search dropdown\n.navbar-misago .dropdown-menu.dropdown-search-results {\n  margin: 0px;\n  padding-top: 0px;\n  width: 400px;\n  left: auto;\n  right: 0px;\n}\n\n// Search input\n.dropdown-search-results .form-group {\n  margin: 0px;\n  padding: @padding-base-horizontal;\n}\n\n// Message\nli.dropdown-search-message {\n  text-align: center;\n}\n\n// Thread result\n.dropdown-search-thread {\n  width: 100%;\n\n  h5 {\n    margin: 0px;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n\n  small {\n    display: block;\n    margin: 0px;\n    margin-top: 4px;\n  }\n}\n","//\n// Page Header\n// --------------------------------------------------\n\n// Remove margins from header\n.page-header {\n  margin: 0;\n  margin-top: floor(@line-height-computed * 0.5);\n}\n\n// Add padding to header's banner and message\n.page-header-banner-bg-overlay {\n  padding: @line-height-computed 0;\n}\n\n// Don't rely on header's margins for spacing, force word break\n.page-header h1 {\n  margin: 0;\n\n  overflow-wrap: break-word;\n}\n","// Page container is .container element for page content (excluding header)\n\n.page-container {\n  padding-top: @line-height-computed;\n}\n","//\n// Panels\n// --------------------------------------------------\n\n// Messages\n@media screen and (max-width: @screen-sm-max) {\n  .panel-message-body {\n    text-align: center;\n\n    .message-icon {\n      margin: @line-height-computed * 1.5;\n\n      .material-icon {\n        font-size: @message-page-icon-size * 2;\n      }\n    }\n  }\n}\n\n// Full displays\n@media screen and (min-width: @screen-md-min) {\n  .panel-message-body {\n    padding: @line-height-computed;\n    padding-bottom: @line-height-computed * 1.5;\n\n    .message-icon {\n      float: left;\n\n      .material-icon {\n        font-size: @line-height-computed * 2.5;\n      }\n    }\n\n    .message-body {\n      margin-left: @line-height-computed * 3.25;\n      margin-top: @line-height-computed * 0.6 - 2px;\n\n      .lead {\n        margin-bottom: 0px;\n      }\n\n      .help-block {\n        margin-top: @line-height-computed * 0.66;\n      }\n    }\n  }\n}\n\n// Loading\n.panel-body-loading {\n  padding: 0px;\n\n  text-align: center;\n}\n","//\n// Forum Footer\n// --------------------------------------------------\n\n// Superbasic spacing and layout for easy overriding\n.misago-footer {\n  margin-top: @line-height-computed * 1.5;\n  margin-bottom: @line-height-computed * 2.5;\n\n  .footer-content {\n    border-top: 1px solid @page-header-border-color;\n    padding-top: @line-height-computed * 1.5;\n  }\n}\n\n// Position \"enable JS!\" message's icon\n.misago-footer .noscript-message .material-icon {\n  position: relative;\n  bottom: 1px;\n\n  font-size: @font-size-large;\n}\n","//\n// UI Preview\n// --------------------------------------------------\n\n// Animation\n.ui-preview {\n  color: @ui-preview;\n\n  .animation(ui-preview-animation @ui-preview-frequency linear infinite);\n}\n\n@keyframes ui-preview-animation {\n  0% {\n    .opacity(@ui-preview-in);\n  }\n  50% {\n    .opacity(@ui-preview-out);\n  }\n  100% {\n    .opacity(@ui-preview-in);\n  }\n}\n\n// Text\n.ui-preview-text {\n  background: @ui-preview;\n  border-radius: 100px;\n  display: inline-block;\n  height: @font-size-base;\n\n  position: relative;\n  top: (@line-height-computed - @font-size-base) / 2;\n}\n\n.ui-preview-paragraph {\n  .ui-preview-text {\n    margin-right: 6px;\n\n    &:last-child {\n      margin-right: 0px;\n    }\n  }\n}\n\n// Image\n.ui-preview-img {\n  background: @ui-preview;\n  border-radius: @border-radius-base + 1px;\n}\n","//\n// Misago pager\n// --------------------------------------------------\n\n.pager-undercontent {\n  margin-top: @line-height-computed * -1;\n}\n\n// \"Load more\" button\n.pager-more {\n  text-align: center;\n}\n\n// Large displays\n@media screen and (min-width: @screen-md-min) {\n  .pager-more .btn {\n    padding-left: @line-height-computed;\n    padding-right: @line-height-computed;\n  }\n}\n","//\n// Misago pagination\n// --------------------------------------------------\n\n.misago-pagination {\n  display: flex;\n\n  .btn {\n    display: block;\n    width: 100%;\n  }\n\n  .btn + .btn {\n    margin-left: @grid-gutter-width;\n  }\n}\n\n// Make it full width on small screens (in toolbars)\n@media screen and (max-width: @screen-xs-max) {\n  .toolbar-item .misago-pagination {\n    flex: 1;\n  }\n}\n","//\n// Poll\n// --------------------------------------------------\n\n.panel-poll h2 {\n  margin-top: 0px;\n}\n\n.poll-select-choice .btn {\n  &,\n  &:active,\n  &:focus,\n  &:hover {\n    background: transparent;\n    border: transparent;\n    .box-shadow(none);\n\n    margin: @padding-base-vertical 0px;\n    padding: 0px;\n    padding-left: @padding-base-vertical;\n\n    outline: none;\n\n    text-align: left;\n  }\n\n  .material-icon {\n    margin-right: @padding-base-vertical;\n\n    height: 28px;\n    width: 28px;\n\n    font-size: 28px;\n    line-heigh: 28px;\n\n    color: darken(@gray-lighter, 10%);\n  }\n\n  &.btn-selected .material-icon {\n    color: @brand-primary;\n  }\n}\n\n.poll-help {\n  font-size: @font-size-small;\n}\n\n.poll-chart-selected .material-icon {\n  margin-right: 4px;\n\n  position: relative;\n  bottom: 1px;\n\n  height: 14px;\n  width: 14px;\n\n  color: @brand-success;\n  font-size: 14px;\n  line-heigh: 14px;\n}\n\n.poll-options {\n  margin-bottom: 0px;\n\n  @media screen and (max-width: @screen-xs-max) {\n    margin-top: @padding-base-vertical * -1;\n\n    .btn {\n      margin: @padding-base-vertical 0px;\n    }\n  }\n}\n","//\n// Misago User Status\n// --------------------------------------------------\n\n// Colors\n.user-status {\n  &.user-banned .status-icon {\n    color: @user-status-banned;\n  }\n\n  &.user-online .status-icon {\n    color: @user-status-online;\n  }\n\n  &.user-offline .status-icon {\n    color: @user-status-offline;\n  }\n}\n","//\n// User Card\n// --------------------------------------------------\n\n// Center card's content on larger displays\n.user-card {\n  @media screen and (min-width: @screen-sm-min) {\n    text-align: center;\n  }\n}\n\n// Max out small avatar's width\n.user-card-small-avatar img {\n  width: 100%;\n  height: auto;\n}\n\n// Toggle avatar visibility\n@media screen and (min-width: @screen-sm-min) {\n  .user-card-small-avatar {\n    display: none;\n  }\n}\n\n@media screen and (max-width: @screen-xs-max) {\n  .user-card-avatar {\n    display: none;\n  }\n}\n","//\n// Misago Toolbar\n// --------------------------------------------------\n\n.toolbar {\n  display: block;\n  margin: 0 floor(@grid-gutter-width * -0.5);\n}\n\n.toolbar-section {\n  justify-items: center;\n  display: flex;\n  flex: 1;\n  margin-bottom: @line-height-computed;\n}\n\n.toolbar-item {\n  flex: 1;\n  padding: 0 floor(@grid-gutter-width * 0.5);\n\n  h3,\n  p {\n    margin: 0;\n  }\n}\n\n.toolbar-item-shrink {\n  flex: 0;\n}\n\n.toolbar-spacer {\n  display: none;\n}\n\n@media screen and (min-width: @screen-sm-min) {\n  .toolbar {\n    display: flex;\n  }\n\n  .toolbar-section,\n  .toolbar-item {\n    flex: 0;\n\n    align-items: center;\n  }\n\n  .toolbar-section.toolbar-section-auto,\n  .toolbar-section.toolbar-section-auto .toolbar-item {\n    flex: 1;\n  }\n\n  .toolbar-spacer {\n    display: block;\n    flex: 1;\n  }\n\n  .toolbar-item .form-search {\n    width: 250px;\n  }\n}\n\n// Center paragraph of text on portrait phones\n// Used for pagination messages\n@media screen and (max-width: @screen-xs-max) {\n  .toolbar-item p {\n    text-align: center;\n  }\n}\n","//\n// Typography\n// --------------------------------------------------\n\nabbr {\n  border: none !important;\n}\n\n.item-title {\n  color: @text-color;\n  font-weight: bold;\n  text-decoration: none;\n}\n\na.item-title {\n  &:link,\n  &:active,\n  &:visited,\n  &:hover {\n    color: @text-color;\n    font-weight: bold;\n  }\n\n  &:hover {\n    text-decoration: underline;\n  }\n}\n\n.message-line {\n  text-align: center;\n\n  .material-icon {\n    margin-right: @line-height-computed / 3;\n\n    font-size: 20px;\n    line-height: 20px;\n\n    height: 20px;\n    width: 20px;\n  }\n}\n\n.text-ellipsis {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n","//\n// Markup styles\n// --------------------------------------------------\n\n// Force word wrap for user text\n.misago-markup {\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6,\n  p {\n    word-wrap: break-word;\n  }\n}\n\n// Add upper margins for headers\n.misago-markup {\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    margin-top: @line-height-computed * 2;\n  }\n}\n\n// Even out blocks\n.misago-markup > *,\n.misago-markup blockquote > * {\n  margin: @line-height-computed 0px;\n\n  &:first-child {\n    margin-top: 0px;\n  }\n\n  &:last-child {\n    margin-bottom: 0px;\n  }\n}\n\n// Downscale images so they don't expand area\n.misago-markup img {\n  max-width: 100%;\n  max-height: 500px;\n}\n\n// Make quotes stand out a little\n.misago-markup .quote-block,\n.misago-markup blockquote {\n  background: @gray-lighter;\n  border: none;\n\n  font-size: @font-size-base;\n\n  .quote-heading {\n    border-bottom: 1px solid darken(@gray-lighter, 8%);\n    padding: (@line-height-computed / 2) @line-height-computed;\n\n    font-size: @font-size-small;\n    font-weight: bold;\n  }\n}\n\n.misago-markup > .quote-block,\n.misago-markup > blockquote {\n  border: 1px solid darken(@gray-lighter, 8%);\n}\n\n.misago-markup .quote-body {\n  background: @body-bg;\n  margin: 0px;\n  padding: @line-height-computed;\n\n  & > .quote-block,\n  & > blockquote {\n    border: 1px solid darken(@gray-lighter, 8%);\n  }\n}\n\n// Style spoilers\n.misago-markup .spoiler-block {\n  background: @gray-lighter;\n  border: none;\n\n  font-size: @font-size-base;\n}\n\n.misago-markup > .spoiler-block {\n  border: 1px solid darken(@gray-lighter, 8%);\n  position: relative;\n}\n\n.misago-markup .spoiler-body {\n  background: @body-bg;\n  margin: 0px;\n  padding: @line-height-computed;\n}\n\n.misago-markup .spoiler-overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: @body-bg;\n}\n\n.misago-markup .spoiler-block.revealed .spoiler-overlay {\n  display: none;\n}\n\n// Add bullets to lists\n.misago-markup ul {\n  list-style-type: square;\n\n  li {\n    list-style-type: square;\n  }\n}\n\n.misago-markup ol {\n  list-style-type: decimal;\n\n  li {\n    list-style-type: decimal;\n  }\n}\n\n// Expand code blocks a little\n.misago-markup pre {\n  background: #eee;\n  border: none;\n  padding: @padding-large-vertical;\n  overflow: hidden;\n\n  color: #000;\n\n  code.hljs {\n    margin: @padding-large-vertical * -1;\n    padding: ((@line-height-computed - 1) / 2);\n  }\n}\n","//\n// Change Avatar Modal\n// --------------------------------------------------\n\n// Index\n.modal-change-avatar .modal-avatar-index {\n  .avatar-preview {\n    border-radius: @border-radius-large;\n    margin: 0px auto;\n    overflow: hidden;\n    position: relative;\n\n    width: 200px;\n    height: 200px;\n\n    .loader {\n      display: none;\n\n      position: absolute;\n      top: 50px;\n      height: 100px;\n\n      .loader-spinning-wheel {\n        border-width: 10px;\n        border-color: #fff;\n        border-left-color: transparent;\n        border-right-color: transparent;\n\n        width: 100px;\n        height: 100px;\n      }\n    }\n\n    &.preview-loading {\n      img {\n        .opacity(0.33);\n      }\n\n      .loader {\n        display: block;\n      }\n    }\n\n    @media (max-width: (@grid-float-breakpoint - 1)) {\n      margin-bottom: @line-height-computed;\n\n      width: 150px;\n      height: 150px;\n\n      img {\n        width: 150px;\n        height: 150px;\n      }\n\n      .loader {\n        top: 25px;\n        height: 100px;\n\n        .loader-spinning-wheel {\n          width: 100px;\n          height: 100px;\n        }\n      }\n    }\n  }\n\n  .btn {\n    text-align: left;\n  }\n}\n\n// Upload\n.modal-change-avatar .modal-avatar-upload {\n  text-align: center;\n\n  .btn-pick-file {\n    background: transparent;\n    border: 2px solid @gray-lighter;\n    border-radius: @border-radius-large;\n    padding: @padding-large-vertical @padding-large-horizontal * 1.5;\n    .box-shadow(none);\n\n    color: @gray-light;\n    font-size: @font-size-large;\n    text-align: center;\n\n    & > .material-icon {\n      display: block;\n      margin: 0px auto;\n      margin-bottom: @line-height-computed * 0.66;\n\n      font-size: @line-height-computed * 2.5;\n      width: @line-height-computed * 2.5;\n      height: @line-height-computed * 2.5;\n    }\n\n    &:hover,\n    &:active {\n      border-color: @brand-primary;\n      color: @brand-primary;\n    }\n  }\n\n  .text-muted {\n    margin-top: @line-height-computed * 0.66;\n  }\n\n  .upload-progress {\n    img {\n      border-radius: @border-radius-base;\n      margin-bottom: @line-height-computed;\n\n      max-height: 80px;\n      width: auto;\n    }\n\n    .progress {\n      width: 70%;\n      margin: 0px auto;\n    }\n  }\n}\n\n// Crop\n.modal-avatar-crop .crop-form {\n  margin: 0px auto;\n\n  .cropit-image-zoom-input {\n    margin-top: @line-height-computed / 2;\n\n    // removes default webkit styles\n    -webkit-appearance: none;\n\n    // fix for FF unable to apply focus style bug\n    border: 1px solid white;\n\n    // required for proper track sizing in FF\n    width: 100%;\n\n    &::-webkit-slider-runnable-track {\n      width: 100%;\n      height: 8px;\n      background: @gray-lighter;\n      border: none;\n      border-radius: 3px;\n    }\n\n    &::-webkit-slider-thumb {\n      -webkit-appearance: none;\n      border: none;\n      height: 20px;\n      width: 20px;\n      border-radius: 50%;\n      background: @gray-light;\n      margin-top: -6px;\n    }\n\n    &:focus {\n      outline: none;\n    }\n\n    &:focus::-webkit-slider-runnable-track {\n      background: @gray-lighter;\n    }\n\n    &::-moz-range-track {\n      width: 100%;\n      height: 8px;\n      background: @gray-lighter;\n      border: none;\n      border-radius: 4px;\n    }\n\n    &::-moz-range-thumb {\n      border: none;\n      height: 20px;\n      width: 20px;\n      border-radius: 50%;\n      background: @gray-light;\n    }\n\n    /*hide the outline behind the border*/\n    &:-moz-focusring {\n      outline: 1px solid white;\n      outline-offset: -1px;\n    }\n\n    &::-ms-track {\n      width: 100%;\n      height: 8px;\n\n      /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */\n      background: transparent;\n\n      /*leave room for the larger thumb to overflow with a transparent border */\n      border-color: transparent;\n      border-width: 8px 0;\n\n      /*remove default tick marks*/\n      color: transparent;\n    }\n\n    &::-ms-fill-lower {\n      background: @gray-lighter;\n      border-radius: 16px;\n    }\n\n    &::-ms-fill-upper {\n      background: @gray-lighter;\n      border-radius: 16px;\n    }\n\n    &::-ms-thumb {\n      border: none;\n      height: 20px;\n      width: 20px;\n      border-radius: 50%;\n      background: @gray-light;\n    }\n\n    &:focus::-ms-fill-lower {\n      background: @gray-lighter;\n    }\n\n    &:focus::-ms-fill-upper {\n      background: @gray-lighter;\n    }\n  }\n}\n\n// Gallery\n.modal-change-avatar .modal-avatar-gallery {\n  padding-bottom: 0px;\n\n  .avatars-gallery {\n    margin-bottom: @line-height-computed;\n\n    h3 {\n      margin-top: 0px;\n    }\n  }\n\n  .avatars-gallery-images {\n    .row {\n      margin-bottom: @line-height-computed / 2;\n    }\n\n    .btn {\n      border-radius: @border-radius-base + 2px;\n      border: 2px solid @gray-lighter;\n      background: none;\n      padding: 2px;\n      position: relative;\n\n      &:hover,\n      &:focus {\n        border-color: @gray-light;\n      }\n\n      &.avatar-selected,\n      &:active {\n        border-color: @link-color;\n      }\n\n      img {\n        border-radius: @border-radius-base;\n        width: 100%;\n        height: auto;\n      }\n    }\n  }\n}\n","//\n// Categories Lists\n// --------------------------------------------------\n\n// Category Block\n// --------------------------------------------------\n\n// Thread unread state icon\n.category-main .read-status .material-icon {\n  color: @category-read-color;\n}\n\n.category-main .read-status.item-new .material-icon {\n  color: @category-new-color;\n}\n\n// Last thread\n.category-last-thread .media-heading {\n  a {\n    display: inline-block;\n    overflow: hidden;\n\n    white-space: nowrap;\n    width: 290px; // md-3 - avatar column\n\n    text-overflow: ellipsis;\n    vertical-align: top;\n\n    @media screen and (max-width: @screen-sm-max) {\n      width: 275px; // md-3 - avatar column\n    }\n\n    @media screen and (max-width: @screen-xs-max) {\n      width: 260px; // md-3 - avatar column\n    }\n  }\n}\n\n// Last thread message\n.category-thread-message {\n  .material-icon {\n    width: 28px;\n    height: 28px;\n\n    font-size: 28px;\n    line-height: 28px;\n  }\n\n  p {\n    margin: 0px;\n  }\n}\n\n// Subcategories list\n// --------------------------------------------------\n.list-inline.subcategories-list {\n  overflow: auto;\n  margin-top: @line-height-computed / -2;\n\n  li {\n    display: block;\n    float: left;\n\n    a,\n    a:link,\n    a:visited,\n    a:active,\n    a:hover,\n    a:focus {\n      background-color: @gray-lighter;\n      border: 1px solid darken(@gray-lighter, 5%);\n      border-radius: @border-radius-base;\n      display: inline-block;\n      margin-top: @line-height-computed / 2;\n      padding: @padding-base-vertical @padding-base-horizontal;\n\n      color: @gray;\n    }\n\n    &:focus,\n    a:hover,\n    a:active {\n      background-color: darken(@gray-lighter, 5%);\n\n      color: @text-color;\n      text-decoration: none;\n    }\n  }\n}\n\n.row.subcategories-list {\n  .btn {\n    margin-top: @line-height-computed;\n\n    text-align: left;\n  }\n}\n","//\n// Posting\n// --------------------------------------------------\n\n// Affix and style placeholder\n#posting-placeholder {\n  background-color: @gray-lighter;\n  display: none;\n  margin-top: @line-height-computed * 1.5;\n  margin-bottom: @line-height-computed * -1.5;\n  padding: @line-height-computed 0px;\n\n  transition: height 300ms;\n\n  &.slide-in {\n    display: block;\n  }\n}\n\n// First row\n#posting-placeholder .first-row {\n  margin-bottom: @line-height-computed;\n\n  .form-control {\n    border: 1px solid darken(@gray-lighter, 15%);\n  }\n\n  .posting-options {\n    .btn {\n      padding-top: 4px;\n      padding-bottom: 4px;\n\n      .btn-text {\n        margin-left: @line-height-computed / 4;\n\n        position: relative;\n        top: 1px;\n      }\n    }\n\n    .material-icon {\n      width: 14px;\n      height: 24px;\n\n      margin-right: 0px;\n\n      position: relative;\n      top: 5px;\n\n      font-size: 14px;\n      line-height: 14px;\n      text-align: center;\n    }\n  }\n}\n\n// Posting ui preview\n.posting-ui-preview {\n  padding: @line-height-computed 0px;\n  position: relative;\n\n  .form-control {\n    box-shadow: none;\n    resize: none;\n  }\n}\n\n// Posting Loader\n.posting-loader {\n  text-align: center;\n}\n\n.posting-loader .loader {\n  height: 100px;\n\n  .loader-spinning-wheel {\n    width: 100px;\n    height: 100px;\n  }\n}\n\n// Posting message\n@posting-icon-width: 28px;\n\n.posting-message {\n  text-align: center;\n\n  .material-icon {\n    margin-right: @line-height-computed / 3;\n    position: relative;\n    top: -1px;\n\n    width: @posting-icon-width;\n    height: @posting-icon-width;\n\n    font-size: @posting-icon-width;\n    line-height: @posting-icon-width;\n  }\n\n  .message-body {\n    p {\n      font-size: @font-size-large;\n    }\n  }\n}\n","//\n// Editor\n// --------------------------------------------------\n\n@editor-border: darken(@gray-lighter, 15%);\n\n.editor-border {\n  background-color: #fff;\n  border: 1px solid @editor-border;\n  border-radius: @border-radius-base;\n}\n\n.editor-border .form-control {\n  // remove border and resizing\n  border: none;\n  resize: none;\n\n  // remove shadow from control\n  &,\n  &:focus,\n  &:active {\n    .box-shadow(none);\n  }\n}\n\n// Footer styles\n.editor-footer {\n  border-top: 1px solid @editor-border;\n  padding: @padding-base-vertical @padding-base-horizontal;\n  overflow: auto;\n\n  .pull-left {\n    margin-right: @padding-base-horizontal;\n  }\n\n  .pull-right {\n    margin-left: @padding-base-horizontal;\n  }\n\n  .btn-icon .material-icon {\n    margin-bottom: -2px;\n  }\n\n  // center buttons on small devices\n  @media screen and (max-width: @screen-sm-max) {\n    .buttons-list {\n      float: none !important;\n\n      margin: 0px;\n      margin-bottom: @line-height-computed / 2;\n\n      .btn {\n        display: inline-block;\n        float: none !important;\n\n        margin: @line-height-computed / 3;\n      }\n    }\n\n    .btn-protect {\n      .btn-text {\n        margin-left: @padding-small-horizontal;\n      }\n\n      .material-icon {\n        position: relative;\n        bottom: 2px;\n\n        width: 14px;\n        height: 14px;\n\n        font-size: 14px;\n        line-height: 14px;\n      }\n    }\n  }\n}\n\n@media screen and (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n  .buttons-list .btn {\n    &:first-child {\n      margin-left: 0px;\n    }\n  }\n}\n\n// make lock button full width\n@media screen and (max-width: @screen-xs-max) {\n  .buttons-list {\n    text-align: center;\n\n    .btn-protect {\n      display: block;\n      float: none !important;\n\n      width: 100%;\n\n      margin: 0px;\n      margin-top: @line-height-computed / 2;\n    }\n  }\n}\n\n// Attachments list\n.editor-attachments-list {\n  margin: 0px;\n  padding: 0px;\n\n  li {\n    margin: 0px;\n  }\n}\n\n.editor-attachment-complete {\n  border-top: 1px solid @editor-border;\n  padding: @padding-base-vertical 0px;\n  padding-right: @padding-base-horizontal;\n\n  .editor-attachment-image {\n    float: left;\n    width: 50px;\n\n    a {\n      background-size: cover;\n      background-position: center;\n      border-radius: @border-radius-small;\n      display: block;\n\n      margin: 0px auto;\n      width: 36px;\n      height: 36px;\n    }\n  }\n\n  .editor-attachment-icon {\n    float: left;\n    width: 50px;\n\n    text-align: center;\n\n    .material-icon {\n      position: relative;\n      top: 2px;\n\n      height: 28px;\n      width: 28px;\n\n      font-size: 28px;\n      line-height: 28px;\n    }\n  }\n\n  .editor-attachment-details {\n    margin-left: 50px;\n\n    h4,\n    p {\n      margin: 0px;\n      padding: 0px;\n\n      font-size: @font-size-base;\n    }\n\n    p {\n      margin-top: @padding-base-vertical / 2;\n\n      color: @gray-light;\n      font-size: @font-size-small;\n    }\n\n    abbr {\n      white-space: nowrap;\n    }\n  }\n}\n\n.editor-attachment-actions {\n  @media screen and (min-width: @screen-sm-min) {\n    padding-top: 3px;\n  }\n\n  @media screen and (max-width: @screen-xs-max) {\n    padding-left: @padding-base-horizontal;\n    padding-right: @padding-base-horizontal;\n  }\n}\n\n.editor-attachment-error {\n  border-top: 1px solid @editor-border;\n  padding: @padding-base-vertical 0px;\n  padding-right: @padding-base-horizontal;\n}\n\n.editor-attachment-error-icon {\n  float: left;\n  width: 50px;\n\n  text-align: center;\n\n  .material-icon {\n    position: relative;\n    top: 2px;\n\n    height: 28px;\n    width: 28px;\n\n    font-size: 28px;\n    line-height: 28px;\n  }\n}\n\n.editor-attachment-error-message {\n  margin-left: 50px;\n  padding: @padding-base-vertical 0px;\n  position: relative;\n\n  h4,\n  p {\n    margin: 0px;\n    padding: 0px;\n\n    font-size: @font-size-base;\n  }\n\n  p {\n    margin-top: @padding-base-vertical / 2;\n    font-size: @font-size-small;\n  }\n\n  .btn {\n    position: absolute;\n    top: @padding-base-vertical + 3px;\n    right: @padding-base-horizontal;\n\n    @media screen and (max-width: @screen-xs-max) {\n      display: block;\n\n      margin-top: @line-height-computed / 2;\n\n      position: static;\n    }\n  }\n}\n\n.editor-attachment-progress-bar {\n  background: @editor-border;\n  overflow: auto;\n}\n\n.editor-attachment-progress {\n  background: @brand-primary;\n  float: left;\n  height: 1px;\n}\n\n.editor-attachment-upload-message {\n  margin: 0px;\n  padding: @padding-base-vertical @padding-base-horizontal;\n}\n\n// Hide file input outside of viewport\n#editor-upload-field {\n  position: absolute;\n  left: -1000px;\n  top: -1000px;\n}\n\n// Scale avatar in at.js suggestion\n.atwho-view ul li img {\n  border-radius: @border-radius-small;\n  margin-right: @font-size-base / 3;\n\n  width: @line-height-computed;\n  height: @line-height-computed;\n}\n","//\n// Thread Participants\n// --------------------------------------------------\n\n.participant-card .btn-user,\n.participant-card .dropdown.open .btn-user {\n  margin-bottom: @line-height-computed;\n\n  &,\n  &:hover,\n  &:focus,\n  &:focus:active {\n    padding: 0px;\n\n    overflow: hidden;\n\n    text-align: left;\n  }\n\n  img {\n    background-color: #fff;\n    width: 34px;\n    height: 34px;\n\n    margin-right: 8px;\n  }\n}\n\n// Panel copy\n.panel-participants p {\n  margin: 0px;\n  margin-top: @padding-base-vertical + 1px;\n}\n","//\n// Poll Editor\n// --------------------------------------------------\n\n.poll-choices-control {\n  .list-group-item {\n    padding: 0px;\n  }\n\n  .list-group-item .btn {\n    background: transparent;\n    border: transparent;\n    float: left;\n    margin: 0px 2px;\n    margin-bottom: -29px;\n    padding: 0px;\n    width: 28px;\n    height: 28px;\n\n    position: relative;\n    top: 3px;\n\n    .material-icon {\n      width: 28px;\n      height: 28px;\n\n      font-size: 28px;\n      line-height: 28px;\n    }\n  }\n\n  input {\n    &,\n    &:focus,\n    &:active {\n      background: transparent;\n      border: none;\n      .box-shadow(none);\n      outline: none;\n      margin-left: 30px;\n      padding: @padding-base-vertical @padding-base-horizontal;\n      width: 100%;\n    }\n  }\n}\n","//\n// Posts List\n// --------------------------------------------------\n\n// Remove paddings and margins from items list\n.posts-list {\n  margin: 0px;\n  padding: 0px;\n  clear: both;\n\n  li {\n    list-style: none;\n    margin: 0px;\n    padding: 0px;\n  }\n}\n","//\n// Posts List Post\n// --------------------------------------------------\n\n@media screen and (min-width: @screen-md-min) {\n  .panel-post .panel-body {\n    display: flex;\n  }\n\n  .post-side {\n    flex-shrink: 0;\n    width: @post-side-width;\n    padding-right: @post-side-padding;\n  }\n\n  .panel-content {\n    flex: 1 0;\n  }\n}\n\n// Post side\n.post-side {\n  font-size: @font-size-small;\n\n  .media {\n    margin: 0px;\n  }\n\n  .poster-avatar {\n    height: 36px;\n    width: 36px;\n\n    @media screen and (min-width: @screen-md-min) {\n      margin-top: 4px;\n\n      height: 82px;\n      width: 82px;\n    }\n  }\n\n  .user-status {\n    margin-right: 4px;\n  }\n\n  .media-heading {\n    display: block;\n  }\n\n  .media-heading {\n    margin: 0px;\n    margin-top: -1px;\n\n    font-size: @font-size-base;\n\n    .user-status {\n      margin-right: 0;\n      margin-left: 2px;\n    }\n  }\n\n  .pull-right {\n    margin-left: @padding-large-horizontal;\n  }\n\n  // Lay user details vertically\n  @media screen and (min-width: @screen-md-min) {\n    .media-heading {\n      margin-top: 3px;\n\n      font-size: @font-size-large;\n\n      .user-status {\n        display: none;\n      }\n    }\n\n    .user-title {\n      margin-top: 4px;\n      margin-bottom: 5px;\n    }\n\n    .user-postcount {\n      display: block;\n    }\n\n    .user-status {\n      display: block;\n    }\n  }\n}\n\n// Heading\n.post-heading {\n  height: 36px;\n\n  @media screen and (max-width: @screen-sm-max) {\n    margin-top: @line-height-computed / 2;\n  }\n\n  .pull-right {\n    margin-left: @padding-large-horizontal;\n  }\n\n  & > .btn-link {\n    padding-left: 0px;\n    padding-right: 0px;\n  }\n\n  .label {\n    margin-top: 6px;\n\n    font-size: @font-size-base;\n    font-weight: normal;\n  }\n\n  .label-unread {\n    background-color: @brand-success;\n\n    color: #fff;\n  }\n}\n\n// Move controls up\n@media screen and (min-width: @screen-md-min) {\n  .post-side .pull-right {\n    display: none;\n  }\n}\n\n@media screen and (max-width: @screen-sm-max) {\n  .post-heading .pull-right {\n    display: none;\n  }\n}\n\n// Body\n.post-body {\n  padding-top: @line-height-computed;\n  padding-bottom: @line-height-computed * 1.5;\n}\n\n// Status\n.post-status-message {\n  overflow: auto;\n\n  .material-icon {\n    float: left;\n\n    font-size: 28px;\n    line-height: 28px;\n  }\n\n  p {\n    margin: 0px;\n    margin-top: (28px - @line-height-computed) / 2;\n    margin-left: 36px;\n  }\n}\n\n.post-status-best-answer {\n  background-color: @brand-success;\n\n  color: #fff;\n}\n\n.post-status-hidden {\n  background-color: @brand-danger;\n\n  color: #fff;\n}\n\n.post-status-unapproved {\n  background-color: @brand-primary;\n\n  color: #fff;\n}\n\n.post-status-protected {\n  background-color: @gray;\n\n  color: #fff;\n}\n\n// Footer\n.post-footer {\n  .pull-left {\n    margin-right: @padding-large-horizontal;\n  }\n\n  .pull-right {\n    margin-left: @padding-large-horizontal;\n  }\n\n  p {\n    padding-top: 7px;\n    padding-bottom: 6px;\n    margin-bottom: 0px;\n  }\n}\n\n// Attachments\n.post-attachments {\n  @post-preview-width: 40px;\n\n  border-top: 1px solid @gray-lighter;\n  padding: @padding-base-vertical @padding-large-horizontal;\n\n  abbr {\n    white-space: nowrap;\n  }\n\n  .attachment-name {\n    word-wrap: break-word;\n  }\n\n  .row > div {\n    margin: @padding-large-vertical 0px;\n  }\n\n  .post-attachment-preview {\n    float: left;\n    height: @post-preview-width;\n    width: @post-preview-width;\n\n    text-align: center;\n  }\n\n  .post-attachment {\n    margin-left: @post-preview-width + 12px;\n  }\n\n  .post-thumbnail {\n    display: block;\n    background-size: cover;\n    background-position: center;\n    border-radius: @border-radius-small;\n    width: @post-preview-width;\n    height: @post-preview-width;\n  }\n\n  .material-icon {\n    width: 28px;\n    height: 28px;\n\n    position: relative;\n    top: 5px;\n\n    font-size: 28px;\n    line-height: 28px;\n\n    &:link,\n    &:active,\n    &:visited,\n    &:hover,\n    &:focus {\n      color: @gray-darker;\n      text-decoration: none;\n    }\n  }\n\n  .post-attachment-description {\n    margin: 0px;\n    padding: 0px;\n\n    color: @text-muted;\n    font-size: @font-size-small;\n  }\n}\n","//\n// Post Feed\n// --------------------------------------------------\n\n.post-feed .post-side {\n  .media-heading {\n    margin: 0px;\n\n    font-size: @font-size-base;\n  }\n\n  .user-title {\n    margin: 0px;\n\n    font-size: @font-size-small;\n  }\n}\n\n.post-feed .post-side .btn {\n  display: inline-block;\n}\n\n.post-feed .post-side img {\n  margin-top: 0px;\n\n  width: 36px;\n  height: 36px;\n}\n\n.post-feed .post-heading {\n  height: auto;\n  margin: @line-height-computed / 2 0px;\n}\n\n.post-feed .post-heading .btn {\n  margin-right: @padding-large-horizontal;\n  max-width: 100%;\n\n  text-align: left;\n  white-space: normal;\n  word-wrap: break-word;\n}\n","//\n// Posts List Event\n// --------------------------------------------------\n\n// Event style\n.posts-list .event {\n  margin-bottom: @line-height-computed;\n\n  color: @text-muted;\n}\n\n.posts-list .event .event-body {\n  display: flex;\n  align-items: flex-start;\n}\n\n// Event label\n.posts-list .event-label {\n  margin-left: @event-icon-size + 8px + @post-side-padding;\n\n  .label-unread {\n    background-color: @brand-success;\n\n    color: #fff;\n  }\n}\n\n// Event icon\n.posts-list .event .event-icon {\n  padding-right: @post-side-padding;\n\n  .event-icon-bg {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    height: @event-icon-size + 8px;\n    width: @event-icon-size + 8px;\n\n    background: @event-icon-bg;\n    border-radius: @border-radius-base;\n    color: @event-icon-color;\n  }\n\n  .material-icon {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    font-size: @event-icon-size;\n  }\n}\n\n// Event content\n.posts-list .event .event-content {\n  flex: 1 0;\n}\n\n// Event first and second rows\n.posts-list .event .event-message {\n  margin-bottom: @line-height-computed / 4;\n\n  font-size: @font-size-large;\n}\n\n.posts-list .event .event-info {\n  margin: 0px;\n\n  font-size: @font-size-small;\n\n  li {\n    margin-right: @padding-base-horizontal;\n\n    &:last-child {\n      margin-right: 0px;\n    }\n  }\n}\n\n// Event controls\n.posts-list .event .event-controls {\n  .btn-link {\n    border: 0px;\n    margin: 0px;\n    margin-right: @padding-base-horizontal;\n    padding: 0px;\n\n    font-size: @font-size-small;\n\n    &:last-child {\n      margin-right: 0px;\n    }\n  }\n}\n\n// Mobile tweaks\n@media screen and (max-width: @screen-xs-max) {\n  .posts-list .event .event-info {\n    margin-top: @line-height-computed / 4;\n  }\n\n  .posts-list .event .event-controls {\n    clear: both;\n    margin-top: @line-height-computed / 4;\n\n    .btn-link {\n      margin-right: @line-height-computed;\n\n      font-size: @font-size-base;\n\n      &:last-child {\n        margin-right: 0px;\n      }\n    }\n  }\n}\n\n@media screen and (min-width: @screen-md-min) {\n  .posts-list .event .event-icon {\n    display: flex;\n    justify-content: flex-end;\n    flex-shrink: 0;\n    display: flex;\n    width: @post-side-width + @panel-body-padding;\n  }\n\n  .event-content {\n    flex: 1 0;\n  }\n\n  .posts-list .event-label {\n    margin-left: @post-side-width + @panel-body-padding;\n  }\n}\n","//\n// Post Changelog Modal\n// --------------------------------------------------\n\n.post-changelog-diff {\n  padding: 0px;\n  margin: 0px;\n\n  .list-unstyled {\n    padding: 0px;\n    margin: @padding-small-vertical 0px;\n  }\n\n  .diff-item {\n    padding: @padding-small-vertical @padding-small-horizontal;\n  }\n\n  .diff-item-sub {\n    color: @brand-danger;\n  }\n\n  .diff-item-add {\n    color: @brand-success;\n  }\n}\n\n.post-changelog-toolbar .row {\n  margin-left: -12px;\n  margin-right: -12px;\n}\n\n.post-changelog-toolbar .post-change-label {\n  @media screen and (max-width: @screen-xs-max) {\n    text-align: center;\n  }\n}\n","//\n// Message Pages\n// --------------------------------------------------\n\n// Small displays\n@media screen and (max-width: @screen-xs-max) {\n  .page-message,\n  .page-error {\n    .message-panel {\n      text-align: center;\n    }\n\n    .message-icon {\n      margin: @line-height-computed * 1.5;\n      font-size: @message-page-icon-size;\n    }\n  }\n}\n\n// Full displays\n@media screen and (min-width: @screen-sm-min) {\n  .page-message,\n  .page-error {\n    .message-panel {\n      margin: @line-height-computed * 3 auto;\n      max-width: @screen-md-max * 0.65;\n      overflow: auto;\n    }\n\n    .message-icon {\n      float: left;\n\n      .material-icon {\n        font-size: @message-page-icon-size;\n      }\n    }\n\n    .message-body {\n      margin-top: @message-page-icon-size / 5;\n      margin-left: @message-page-icon-size + @line-height-computed;\n\n      font-size: @font-size-large;\n\n      p.lead {\n        font-size: @font-size-large * 2;\n      }\n    }\n  }\n}\n","//\n// Threads Lists\n// --------------------------------------------------\n\n.threads-list {\n  margin-bottom: @line-height-computed;\n}\n\n// Make list row flexbox row\n.threads-list-item {\n  display: flex;\n  align-items: center;\n\n  img {\n    width: @thread-read-block-size;\n    height: @thread-read-block-size;\n  }\n}\n\n.threads-list-item-top-row {\n  display: flex;\n  flex: 1;\n  align-items: center;\n  justify-content: center;\n}\n\n.threads-list-item-bottom-row {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n// Thread icon\n.threads-list-item-col-icon {\n  padding-right: @grid-gutter-width / 2;\n}\n\n.threads-list-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: @thread-read-block-size;\n  height: @thread-read-block-size;\n\n  border-radius: @border-radius-small;\n  font-size: @thread-read-icon-size;\n  line-height: @thread-read-icon-size;\n\n  &:link,\n  &:active,\n  &:focus,\n  &:hover,\n  &:visited {\n    background-color: @thread-read-icon-bg;\n    color: @thread-read-icon-color;\n    text-decoration: none;\n  }\n}\n\n.threads-list-icon-new {\n  &:link,\n  &:active,\n  &:focus,\n  &:hover,\n  &:visited {\n    background-color: @thread-new-icon-bg;\n    color: @thread-new-icon-color;\n  }\n}\n\n// Thread title\n.threads-list-item-col-title {\n  flex: 1;\n}\n\na.threads-list-item-title {\n  &:link,\n  &:active,\n  &:focus,\n  &:hover,\n  &:visited {\n    font-size: @threads-list-title-size;\n\n    color: @thread-color;\n    overflow-wrap: break-word;\n  }\n}\n\na.threads-list-item-title-sm {\n  font-size: @threads-list-title-size-sm;\n\n  &:link,\n  &:active,\n  &:focus,\n  &:hover,\n  &:visited {\n    color: @thread-read-color;\n    overflow-wrap: break-word;\n  }\n}\n\na.threads-list-item-title-new {\n  &:link,\n  &:active,\n  &:focus,\n  &:hover,\n  &:visited {\n    color: @thread-new-color;\n  }\n}\n\n// Thread status flags\n.threads-list-item-col-flags {\n  padding-left: @grid-gutter-width / 2;\n}\n\n.threads-list-item .thread-flags {\n  opacity: @thread-flag-icon-opacity;\n}\n\n.threads-list-item:hover,\n.threads-list-item:focus {\n  .thread-flags {\n    opacity: @thread-flag-icon-opacity-hover;\n  }\n}\n\n// Thread category\n.threads-list-item-col-category {\n  padding-left: @grid-gutter-width / 2;\n\n  white-space: nowrap;\n}\n\n.threads-list-category-label {\n  padding: 3px 6px;\n\n  border-radius: @border-radius-small;\n\n  font-size: @font-size-small;\n  font-weight: bold;\n\n  &,\n  &:link,\n  &:active,\n  &:hover,\n  &:focus,\n  &:visited {\n    color: @category-label-default-color;\n    background: @category-label-default-bg;\n    text-decoration: none;\n  }\n\n  &.threads-list-category-label-color {\n    &,\n    &:link,\n    &:active,\n    &:hover,\n    &:focus,\n    &:visited {\n      color: #fff;\n      background: var(--label-color);\n    }\n  }\n}\n\n.threads-list-item-parent-category {\n  border-radius: @border-radius-small 0 0 @border-radius-small;\n  margin-right: 2px;\n}\n\n.threads-list-item-parent-category + .threads-list-category-label {\n  border-radius: 0 @border-radius-small @border-radius-small 0;\n}\n\n// Replies\n.threads-list-item-col-replies {\n  width: 80px;\n  padding-left: @grid-gutter-width / 2;\n}\n\n// Last poster\n.threads-list-item-col-last-poster {\n  padding-left: @grid-gutter-width / 2;\n\n  img {\n    border-radius: @border-radius-small;\n  }\n}\n\n// Last activity\n.threads-list-item-col-last-activity {\n  width: 120px;\n  padding-left: @grid-gutter-width / 2;\n\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n\n  a:link,\n  a:hover,\n  a:active,\n  a:visited,\n  a:focus {\n    color: @thread-last-activity-color;\n    font-size: @thread-last-activity-size;\n  }\n}\n\n// Subscription and checkbox\n.threads-list-item-col-checkbox,\n.threads-list-item-col-subscription {\n  padding-left: @grid-gutter-width / 2;\n}\n\n// Make list responsive\n.threads-list-item-title-sm,\n.threads-list-item-col-checkbox-sm {\n  display: none;\n}\n\n@media screen and (max-width: @screen-xs-max) {\n  // Make card full-width\n  .threads-list {\n    margin-left: @grid-gutter-width * -0.5;\n    margin-right: @grid-gutter-width * -0.5;\n\n    .list-group,\n    .list-group-item {\n      border-radius: 0;\n      border-left: 0;\n      border-right: 0;\n    }\n  }\n\n  // Swap title with sm one\n  .threads-list-item-title {\n    display: none;\n  }\n\n  .threads-list-item-title-sm {\n    display: inline-block;\n  }\n\n  // Make thread read icon disappear\n  .threads-list-item-col-icon {\n    display: none;\n  }\n}\n\n@media screen and (max-width: @screen-sm-max) {\n  // Use two rows per item\n  .threads-list-item {\n    display: block;\n\n    // Make avatar same size as flag icons\n    img {\n      width: @thread-flag-block-size;\n      height: @thread-flag-block-size;\n    }\n  }\n\n  // Insert bottom marin to top row, align itss contents to top\n  .threads-list-item-top-row {\n    align-items: start;\n    margin-bottom: @grid-gutter-width / 4;\n  }\n\n  // Make all cols in second row auto, align them to right\n  .threads-list-item-bottom-row {\n    justify-content: end;\n    flex: 0;\n\n    & > div {\n      width: auto;\n      padding: 0 0 0 @grid-gutter-width / 2;\n    }\n  }\n\n  // Make thread subscription and checkbox icons disappear\n  .threads-list-item-col-subscription,\n  .threads-list-item-col-checkbox {\n    display: none;\n  }\n\n  // Reveal checkbox in top row, make it smol\n  .threads-list-item-col-checkbox-sm {\n    display: block;\n    padding-left: @grid-gutter-width / 2;\n\n    .btn-icon {\n      padding: 4px;\n\n      .material-icon {\n        font-size: 16px;\n      }\n    }\n  }\n}\n\n// Make thread buttons flash when thread is busy\n.threads-list-item-is-busy .btn-icon {\n  opacity: 0.8;\n  animation: busy 0.75s linear infinite;\n}\n\n@keyframes busy {\n  50% {\n    opacity: 0.5;\n  }\n}\n\n// Threads list update prompt\n.threads-list-update-prompt {\n  padding: 0;\n}\n\n.threads-list-update-prompt-btn {\n  padding: @padding-large-vertical @padding-large-horizontal;\n\n  background: @update-threads-prompt-bg;\n  color: @update-threads-prompt-color;\n  border: none;\n  border-radius: @list-group-border-radius @list-group-border-radius 0 0;\n}\n\n.threads-list-update-prompt-btn:hover,\n.threads-list-update-prompt-btn:focus {\n  background: @update-threads-prompt-hover-bg;\n  color: @update-threads-prompt-hover-color;\n}\n\n.threads-list-update-prompt-btn:active {\n  background: @update-threads-prompt-active-bg;\n  color: @update-threads-prompt-active-color;\n}\n","//\n// Active posters list\n// --------------------------------------------------\n\n// List layout\n.active-posters {\n  li {\n    display: block;\n    overflow: auto;\n  }\n}\n\n// User avatar\n.active-posters .rank-user-avatar {\n  float: left;\n\n  @media screen and (max-width: @screen-sm-max) {\n    height: 42px; // even list item vertically\n\n    img {\n      width: 36px;\n      height: 36px;\n\n      position: relative;\n      top: 3px;\n    }\n  }\n}\n\n// User\n.active-posters .rank-user {\n  float: left;\n  margin-top: 3px;\n\n  @media screen and (max-width: @screen-sm-max) {\n    margin-left: @line-height-computed * 0.66;\n    width: 40%;\n  }\n\n  @media screen and (max-width: @screen-xs-max) {\n    float: none;\n    margin-left: 50px;\n    width: auto;\n  }\n\n  @media screen and (min-width: @screen-md-min) {\n    margin-left: @line-height-computed * 0.8;\n    width: 25%;\n\n    .user-name {\n      font-size: @font-size-large;\n    }\n  }\n}\n\n// User details\n.active-posters .user-details {\n  overflow: auto;\n\n  font-family: Sans-Serif;\n\n  .user-status,\n  .rank-name,\n  .user-title {\n    display: block;\n    float: left;\n    margin-right: 3px;\n\n    font-size: @font-size-small;\n\n    @media screen and (min-width: @screen-md-min) {\n      margin-right: 8px;\n    }\n  }\n\n  .user-title {\n    margin-right: 0px;\n  }\n\n  @media screen and (min-width: @screen-md-min) {\n    overflow: visible;\n\n    .rank-name,\n    .user-title {\n      height: 14px;\n      overflow: hidden;\n\n      position: relative;\n      top: 1px;\n\n      vertical-align: baseline;\n    }\n  }\n\n  @media screen and (max-width: @screen-xs-max) {\n    margin-top: @padding-base-vertical / 2;\n\n    .rank-name,\n    .user-title {\n      font-weight: normal;\n    }\n  }\n}\n\n// User status\n.active-posters .user-status {\n  overflow: auto;\n\n  position: relative;\n  top: 1px;\n\n  span {\n    display: block;\n    float: left;\n  }\n\n  @media screen and (min-width: @screen-md-min) {\n    height: 14px;\n    overflow: hidden;\n  }\n\n  .status-icon {\n    position: relative;\n\n    @media screen and (max-width: @screen-sm-max) {\n      top: 0px;\n\n      width: 12px;\n      height: 12px;\n\n      font-size: 12px;\n      line-height: 12px;\n    }\n\n    @media screen and (min-width: @screen-md-min) {\n      top: 1px;\n\n      margin-right: 3px;\n\n      width: 13px;\n      height: 13px;\n\n      font-size: 13px;\n      line-height: 13px;\n    }\n  }\n}\n\n// User status UI preview\n.active-posters {\n  .status-label.ui-preview-text,\n  .rank-name .ui-preview-text,\n  .user-title .ui-preview-text {\n    height: 11px;\n\n    position: relative;\n    top: 2px;\n\n    font-size: 11px;\n    line-height: 11px;\n  }\n\n  // even rank/title preview with status\n  .rank-name,\n  .user-title {\n    .ui-preview-text {\n      position: static;\n    }\n  }\n}\n\n// Rank stats\n.active-posters {\n  .rank-position,\n  .rank-posts-counted,\n  .rank-posts-total {\n    strong,\n    small {\n      display: block;\n    }\n\n    @media screen and (max-width: @screen-sm-max) {\n      overflow: auto;\n\n      strong,\n      small {\n        float: left;\n\n        font-size: @font-size-base * 0.75;\n      }\n\n      strong {\n        min-width: 30px;\n        margin-right: 3px;\n\n        text-align: right;\n      }\n\n      .ui-preview-text {\n        height: 8px;\n\n        position: relative;\n        top: -1px;\n\n        font-size: 8px;\n        line-height: 8px;\n      }\n    }\n\n    @media screen and (min-width: @screen-md-min) {\n      float: left;\n      margin-top: 3px;\n      width: 23%;\n\n      font-size: @font-size-large;\n      text-align: center;\n\n      small {\n        font-size: @font-size-small;\n        font-weight: normal;\n      }\n    }\n  }\n}\n\n.user-compact-stats {\n  .rank-position,\n  .rank-posts-counted {\n    strong,\n    small {\n      display: inline-block;\n      float: none;\n    }\n\n    strong {\n      min-width: auto;\n    }\n\n    small {\n      margin-right: @line-height-computed;\n    }\n  }\n}\n\n// Tablet displays\n@media screen and (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n  // Margin top first state so its even with username\n  .active-posters .rank-position {\n    margin-top: 6px;\n  }\n\n  // Hide rank-posts-total on small displays (cos it overflows for crazy posters)\n  .active-posters .rank-posts-total {\n    display: none;\n  }\n}\n\n// Mobile displays\n@media screen and (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n  // Margin top first state so its even with username\n  .active-posters .rank-position {\n    margin-top: 6px;\n  }\n\n  // Hide rank-posts-total on small displays (cos it overflows for crazy posters)\n  .active-posters .rank-posts-total {\n    display: none;\n  }\n}\n","//\n// User Profile\n// --------------------------------------------------\n\n.profile-page-header-avatar {\n  text-align: center;\n  margin: @line-height-computed 0;\n\n  .user-avatar {\n    border-radius: @border-radius-base;\n  }\n}\n\n// Make profile data horizontal and insert space between elements\n.profile-data-list {\n  display: block;\n  padding: 0;\n  margin: 0 (@padding-base-horizontal * -1);\n\n  font-size: @font-size-small;\n\n  li {\n    display: inline-block;\n    list-style: none;\n    padding: floor(@line-height-computed / 4) @padding-base-horizontal;\n  }\n\n  .status-icon {\n    margin-right: 3px;\n    position: relative;\n    bottom: 1px;\n  }\n\n  .user-account-disabled {\n    color: @brand-danger;\n    font-weight: bold;\n  }\n}\n\n// On tablets and up make layout horizontal\n@media screen and (min-width: @screen-sm-min) {\n  .profile-page-header {\n    display: flex;\n    align-items: flex-end;\n  }\n\n  .profile-page-header-avatar {\n    margin: 0;\n    margin-right: @grid-gutter-width;\n  }\n}\n\n// On desktops make avatar overlap on details, make details larger\n@media screen and (min-width: @screen-md-min) {\n  .profile-page-header-avatar {\n    position: relative;\n    top: @profile-header-avatar-offset;\n    margin-top: @profile-header-avatar-offset * -1;\n  }\n\n  .profile-page-header-details {\n    padding-left: 128px + @grid-gutter-width;\n  }\n\n  .profile-data-list {\n    font-size: @font-size-base;\n  }\n}\n","//\n// Username History\n// --------------------------------------------------\n\n// Change tabular on larger displays\n.username-history li {\n  @media screen and (min-width: @screen-md-min) {\n    display: block;\n    overflow: auto;\n  }\n}\n\n// Change avatar\n.username-history .change-avatar {\n  float: left;\n\n  a,\n  span {\n    margin-right: @line-height-computed / 2;\n\n    img {\n      width: 42px;\n      height: 42px;\n    }\n  }\n\n  @media screen and (min-width: @screen-md-min) {\n    a,\n    span {\n      img {\n        width: 18px;\n        height: 18px;\n\n        position: relative;\n        bottom: 1px;\n      }\n    }\n  }\n}\n\n// Change author\n.username-history .change-author {\n  @media screen and (min-width: @screen-md-min) {\n    float: left;\n    width: 30%;\n  }\n}\n\n// Old to new name change\n.username-history .change {\n  min-height: @line-height-computed; // we need that for ui-preview-text\n  overflow: auto;\n\n  span {\n    display: block;\n    float: left;\n  }\n\n  .material-icon {\n    margin: 0px @font-size-base / 2;\n\n    position: relative;\n    top: 4px;\n  }\n\n  @media screen and (min-width: @screen-md-min) {\n    float: left;\n    width: 40%;\n  }\n}\n\n// Date\n.username-history .change-date {\n  @media screen and (min-width: @screen-md-min) {\n    float: left;\n    width: 20%;\n  }\n}\n","//\n// Search Page\n// --------------------------------------------------\n\n.search-footer p {\n  margin-top: @line-height-computed;\n\n  color: @gray;\n  font-size: @font-size-small;\n  text-align: center;\n}\n\n.page-search-form {\n  @media screen and (min-width: @screen-sm-min) {\n    padding-top: @line-height-computed * 2;\n  }\n\n  @media screen and (min-width: @screen-md-min) {\n    padding-bottom: @line-height-computed * 2;\n\n    h1 {\n      position: relative;\n      top: @padding-small-vertical;\n    }\n\n    .form-group {\n      margin-bottom: 0px;\n    }\n  }\n}\n","/*\nDescription: Foundation 4 docs style for highlight.js\nAuthor: Dan Allen <dan.j.allen@gmail.com>\nWebsite: http://foundation.zurb.com/docs/\nVersion: 1.0\nDate: 2013-04-02\n*/\n\n.hljs {\n  display: block;\n  overflow-x: auto;\n  padding: 0.5em;\n  background: #eee; color: black;\n}\n\n.hljs-link,\n.hljs-emphasis,\n.hljs-attribute,\n.hljs-addition {\n  color: #070;\n}\n\n.hljs-emphasis {\n  font-style: italic;\n}\n\n.hljs-strong,\n.hljs-string,\n.hljs-deletion {\n  color: #d14;\n}\n\n.hljs-strong {\n  font-weight: bold;\n}\n\n.hljs-quote,\n.hljs-comment {\n  color: #998;\n  font-style: italic;\n}\n\n.hljs-section,\n.hljs-title {\n  color: #900;\n}\n\n.hljs-class .hljs-title,\n.hljs-type {\n  color: #458;\n}\n\n.hljs-variable,\n.hljs-template-variable {\n  color: #336699;\n}\n\n.hljs-bullet {\n  color: #997700;\n}\n\n.hljs-meta {\n  color: #3344bb;\n}\n\n.hljs-code,\n.hljs-number,\n.hljs-literal,\n.hljs-keyword,\n.hljs-selector-tag {\n  color: #099;\n}\n\n.hljs-regexp {\n  background-color: #fff0ff;\n  color: #880088;\n}\n\n.hljs-symbol {\n  color: #990073;\n}\n\n.hljs-tag,\n.hljs-name,\n.hljs-selector-id,\n.hljs-selector-class {\n  color: #007700;\n}\n",".atwho-view {\n    position:absolute;\n    top: 0;\n    left: 0;\n    display: none;\n    margin-top: 18px;\n    background: white;\n    color: black;\n    border: 1px solid #DDD;\n    border-radius: 3px;\n    box-shadow: 0 0 5px rgba(0,0,0,0.1);\n    min-width: 120px;\n    z-index: 11110 !important;\n}\n\n.atwho-view .atwho-header {\n    padding: 5px;\n    margin: 5px;\n    cursor: pointer;\n    border-bottom: solid 1px #eaeff1;\n    color: #6f8092;\n    font-size: 11px;\n    font-weight: bold;\n}\n\n.atwho-view .atwho-header .small {\n    color: #6f8092;\n    float: right;\n    padding-top: 2px;\n    margin-right: -5px;\n    font-size: 12px;\n    font-weight: normal;\n}\n\n.atwho-view .atwho-header:hover {\n    cursor: default;\n}\n\n.atwho-view .cur {\n    background: #3366FF;\n    color: white;\n}\n.atwho-view .cur small {\n    color: white;\n}\n.atwho-view strong {\n    color: #3366FF;\n}\n.atwho-view .cur strong {\n    color: white;\n    font:bold;\n}\n.atwho-view ul {\n    /* width: 100px; */\n    list-style:none;\n    padding:0;\n    margin:auto;\n    max-height: 200px;\n    overflow-y: auto;\n}\n.atwho-view ul li {\n    display: block;\n    padding: 5px 10px;\n    border-bottom: 1px solid #DDD;\n    cursor: pointer;\n    /* border-top: 1px solid #C8C8C8; */\n}\n.atwho-view small {\n    font-size: smaller;\n    color: #777;\n    font-weight: normal;\n}\n","//\n// Typography Flavor\n// --------------------------------------------------\n\nabbr {\n  outline: none;\n  text-decoration: none;\n}\n","//\n// Flavor Shadows\n// --------------------------------------------------\n\n.shadow-2dp {\n  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, @shadow-key-penumbra-opacity),\n    0 3px 1px -2px rgba(0, 0, 0, @shadow-key-umbra-opacity),\n    0 1px 5px 0 rgba(0, 0, 0, @shadow-ambient-shadow-opacity);\n}\n\n.shadow-3dp {\n  box-shadow: 0 3px 4px 0 rgba(0, 0, 0, @shadow-key-penumbra-opacity),\n    0 3px 3px -2px rgba(0, 0, 0, @shadow-key-umbra-opacity),\n    0 1px 8px 0 rgba(0, 0, 0, @shadow-ambient-shadow-opacity);\n}\n\n.shadow-4dp {\n  box-shadow: 0 4px 5px 0 rgba(0, 0, 0, @shadow-key-penumbra-opacity),\n    0 1px 10px 0 rgba(0, 0, 0, @shadow-ambient-shadow-opacity),\n    0 2px 4px -1px rgba(0, 0, 0, @shadow-key-umbra-opacity);\n}\n\n.shadow-6dp {\n  box-shadow: 0 6px 10px 0 rgba(0, 0, 0, @shadow-key-penumbra-opacity),\n    0 1px 18px 0 rgba(0, 0, 0, @shadow-ambient-shadow-opacity),\n    0 3px 5px -1px rgba(0, 0, 0, @shadow-key-umbra-opacity);\n}\n\n.shadow-8dp {\n  box-shadow: 0 8px 10px 1px rgba(0, 0, 0, @shadow-key-penumbra-opacity),\n    0 3px 14px 2px rgba(0, 0, 0, @shadow-ambient-shadow-opacity),\n    0 5px 5px -3px rgba(0, 0, 0, @shadow-key-umbra-opacity);\n}\n\n.shadow-16dp {\n  box-shadow: 0 16px 24px 2px rgba(0, 0, 0, @shadow-key-penumbra-opacity),\n    0 6px 30px 5px rgba(0, 0, 0, @shadow-ambient-shadow-opacity),\n    0 8px 10px -5px rgba(0, 0, 0, @shadow-key-umbra-opacity);\n}\n\n.shadow-24dp {\n  box-shadow: 0 9px 46px 8px rgba(0, 0, 0, @shadow-key-penumbra-opacity),\n    0 11px 15px -7px rgba(0, 0, 0, @shadow-ambient-shadow-opacity),\n    0 24px 38px 3px rgba(0, 0, 0, @shadow-key-umbra-opacity);\n}\n","//\n// Buttons Flavor\n// --------------------------------------------------\n\n// mixins\n.misago-btn(@color, @bg, @color-hover, @bg-hover, @color-active, @bg-active) {\n  &,\n  &:disabled,\n  &:disabled:hover,\n  &.disabled,\n  &.disabled:hover,\n  &.disabled:active {\n    background: @bg;\n    border: 1px solid @bg;\n\n    color: @color;\n\n    .box-shadow(none);\n  }\n\n  &:disabled,\n  &:disabled:hover,\n  &.disabled,\n  &.disabled:hover,\n  &.disabled:active {\n    .opacity(0.25);\n  }\n\n  &:hover,\n  &:focus {\n    background: @bg-hover;\n    border: 1px solid @bg-hover;\n\n    color: @color-hover;\n\n    .box-shadow(none);\n  }\n\n  &:active:focus,\n  &:active,\n  .dropdown.open .dropdown-toggle &,\n  .dropdown.open .dropdown-toggle &:focus,\n  .dropdown.open .dropdown-toggle &:active:focus,\n  .dropdown.open .dropdown-toggle &:hover {\n    background: @bg-active;\n    border: 1px solid @bg-active;\n\n    color: @color-active;\n\n    .box-shadow(none);\n  }\n\n  &.btn-loading {\n    &,\n    &:disabled,\n    &:disabled:hover,\n    &:hover,\n    &:focus,\n    &:active:focus,\n    &:active {\n      color: transparent;\n    }\n  }\n}\n\n.misago-btn-outline(@color, @bg, @border,\n                    @color-hover, @bg-hover, @border-hover,\n                    @color-active, @bg-active, @border-active) {\n  &,\n  &:disabled,\n  &:disabled:hover,\n  &.disabled,\n  &.disabled:hover,\n  &.disabled:active {\n    background: @bg;\n    border: 1px solid @border;\n\n    color: @color;\n\n    .box-shadow(none);\n  }\n\n  &:disabled,\n  &:disabled:hover,\n  &.disabled,\n  &.disabled:hover,\n  &.disabled:active {\n    .opacity(0.25);\n  }\n\n  &:hover,\n  &:focus {\n    background: @bg-hover;\n    border: 1px solid @border-hover;\n\n    color: @color-hover;\n\n    .box-shadow(none);\n  }\n\n  &:active:focus,\n  &:active,\n  .dropdown.open &,\n  .dropdown.open &:focus,\n  .dropdown.open &:active:focus,\n  .dropdown.open &:hover {\n    background: @bg-active;\n    border: 1px solid @border-active;\n\n    color: @color-active;\n\n    .box-shadow(none);\n  }\n\n  &.btn-loading {\n    &,\n    &:disabled,\n    &:disabled:hover,\n    &:hover,\n    &:focus,\n    &:active:focus,\n    &:active {\n      background: @bg;\n      border: 1px solid @border;\n\n      color: transparent;\n\n      .box-shadow(none);\n    }\n  }\n}\n\n// button styles\n.btn-default {\n  .misago-btn(\n    @btn-default-color,\n    @btn-default-bg,\n\n    @btn-default-hover-color,\n    @btn-default-hover-bg,\n\n    @btn-default-active-color,\n    @btn-default-active-bg\n  );\n}\n\n.btn-primary {\n  .misago-btn(\n    @btn-primary-color,\n    @btn-primary-bg,\n\n    @btn-primary-hover-color,\n    @btn-primary-hover-bg,\n\n    @btn-primary-active-color,\n    @btn-primary-active-bg\n  );\n}\n\n.btn-success {\n  .misago-btn(\n    @btn-success-color,\n    @btn-success-bg,\n\n    @btn-success-hover-color,\n    @btn-success-hover-bg,\n\n    @btn-success-active-color,\n    @btn-success-active-bg\n  );\n}\n\n.btn-danger {\n  .misago-btn(\n    @btn-danger-color,\n    @btn-danger-bg,\n\n    @btn-danger-hover-color,\n    @btn-danger-hover-bg,\n\n    @btn-danger-active-color,\n    @btn-danger-active-bg\n  );\n}\n\n// outlined button styles\n.btn-default.btn-outline {\n  .misago-btn-outline(\n    @btn-default-outline-color,\n    @btn-default-outline-bg,\n    @btn-default-outline-border,\n\n    @btn-default-outline-hover-color,\n    @btn-default-outline-hover-bg,\n    @btn-default-outline-hover-border,\n\n    @btn-default-outline-active-color,\n    @btn-default-outline-active-bg,\n    @btn-default-outline-active-border\n  );\n}\n\n.btn-primary.btn-outline {\n  .misago-btn-outline(\n    @btn-primary-outline-color,\n    @btn-primary-outline-bg,\n    @btn-primary-outline-border,\n\n    @btn-primary-outline-hover-color,\n    @btn-primary-outline-hover-bg,\n    @btn-primary-outline-hover-border,\n\n    @btn-primary-outline-active-color,\n    @btn-primary-outline-active-bg,\n    @btn-primary-outline-active-border\n  );\n}\n\n// sign in and register buttons in navbar\n.navbar-misago {\n  .btn-sign-in {\n    border-radius: @navbar-btn-sign-in-radius;\n\n    .misago-btn-outline(\n      @navbar-btn-sign-in-color,\n      @navbar-btn-sign-in-bg,\n      @navbar-btn-sign-in-border,\n\n      @navbar-btn-sign-in-hover-color,\n      @navbar-btn-sign-in-hover-bg,\n      @navbar-btn-sign-in-hover-border,\n\n      @navbar-btn-sign-in-active-color,\n      @navbar-btn-sign-in-active-bg,\n      @navbar-btn-sign-in-active-border\n    );\n  }\n\n  .btn-register {\n    border-radius: @navbar-btn-register-radius;\n\n    .misago-btn-outline(\n      @navbar-btn-register-color,\n      @navbar-btn-register-bg,\n      @navbar-btn-register-border,\n\n      @navbar-btn-register-hover-color,\n      @navbar-btn-register-hover-bg,\n      @navbar-btn-register-hover-border,\n\n      @navbar-btn-register-active-color,\n      @navbar-btn-register-active-bg,\n      @navbar-btn-register-active-border\n    );\n  }\n}\n","//\n// Social Buttons Flavor\n// --------------------------------------------------\n\n// Those buttons simply add brand color over the .btn-default\n.misago-social-btn(@color) {\n  &,\n  &:disabled,\n  &:disabled:hover {\n    color: @color;\n    font-weight: bold;\n  }\n}\n\n.btn-social-battlenet,\n.btn-social-battlenet-oauth2 {\n  .misago-social-btn(#0e86ca);\n}\n\n.btn-social-bungie {\n  .misago-social-btn(#0096db);\n}\n\n.btn-social-facebook,\n.btn-social-facebook-app {\n  .misago-social-btn(#3b5998);\n}\n\n.btn-social-github,\n.btn-social-github-team,\n.btn-social-github-enterprise,\n.btn-social-github-enterprise-org,\n.btn-social-github-enterprise-team {\n  .misago-social-btn(#000000);\n}\n\n.btn-social-gitlab {\n  .misago-social-btn(#fc6d26);\n}\n\n.btn-social-google,\n.btn-social-google-oauth,\n.btn-social-google-oauth2,\n.btn-social-google-plus,\n.btn-social-google-openidconnect {\n  .misago-social-btn(#dd4b39);\n}\n\n.btn-social-linkedin {\n  .misago-social-btn(#0077b5);\n}\n\n.btn-social-steam {\n  .misago-social-btn(#5c7e10);\n}\n\n.btn-social-twitter {\n  .misago-social-btn(#1da1f2);\n}\n\n.form-social-auth {\n  .row {\n    margin-top: @padding-base-vertical * -1;\n    margin-bottom: @padding-base-vertical * -1;\n  }\n\n  .btn {\n    margin: @padding-base-vertical 0px;\n  }\n}\n","//\n// Inputs Flavor\n// --------------------------------------------------\n\n// default input\ninput.form-control,\ntextarea.form-control {\n  border-color: @input-border;\n  box-shadow: inset 0px 0px 0px 1px @input-border;\n\n  &:focus {\n    border-color: @input-border-focus;\n    box-shadow: inset 0px 0px 0px 1px @input-border-focus;\n  }\n}\n\n.has-error input.form-control {\n  border-color: @state-danger-border;\n  box-shadow: inset 0px 0px 0px 1px @state-danger-border;\n\n  &:focus {\n    border-color: lighten(@state-danger-border, 20%);\n    box-shadow: inset 0px 0px 0px 1px lighten(@state-danger-border, 20%);\n  }\n}\n\n.has-success input.form-control {\n  border-color: @state-success-border;\n  box-shadow: inset 0px 0px 0px 1px @state-success-border;\n\n  &:focus {\n    border-color: lighten(@state-success-border, 20%);\n    box-shadow: inset 0px 0px 0px 1px lighten(@state-success-border, 20%);\n  }\n}\n\n// password strenght marker\n.password-strength {\n  margin-top: @line-height-computed / 2;\n\n  .text-small {\n    margin-top: @line-height-computed / 5;\n\n    color: lighten(@text-color, 25%);\n    font-size: @font-size-small;\n  }\n\n  .progress {\n    margin: 0px;\n  }\n}\n","//\n// Flavor Auth Message\n// --------------------------------------------------\n\n.auth-message {\n  background: @auth-message-bg;\n  padding: @line-height-computed * 4 0px;\n\n  .shadow-8dp();\n\n  p {\n    color: @auth-message-text-color;\n  }\n\n  .btn {\n    & {\n      background: @auth-message-btn-default-bg;\n      border-color: @auth-message-btn-default-border;\n\n      color: @auth-message-btn-default-color;\n    }\n\n    &:hover,\n    &:focus {\n      background: @auth-message-btn-default-hover-bg;\n      border-color: @auth-message-btn-default-hover-border;\n\n      color: @auth-message-btn-default-hover-color;\n    }\n\n    &:active {\n      background: @auth-message-btn-default-active-bg;\n      border-color: @auth-message-btn-default-active-border;\n\n      color: @auth-message-btn-default-active-color;\n    }\n  }\n}\n","//\n// Dropdown Flavor\n// --------------------------------------------------\n\n.dropdown-menu {\n  border: none;\n\n  .shadow-4dp();\n}\n\n// Navbar dropdown\n.user-dropdown .dropdown-header {\n  strong {\n    display: block;\n\n    color: @text-color;\n    font-weight: bold;\n  }\n\n  .user-stats {\n    margin-top: @line-height-computed / 2;\n\n    font-size: @font-size-small;\n\n    .material-icon {\n      margin-right: 3px;\n\n      position: relative;\n      bottom: 1px;\n\n      width: 14px;\n      height: 14px;\n\n      font-size: 14px;\n    }\n  }\n}\n\n.user-dropdown .guest-preview {\n  padding-bottom: @padding-large-vertical;\n}\n\n.user-dropdown .badge {\n  background-color: @brand-danger;\n}\n\n.user-dropdown {\n  a:hover,\n  a:focus,\n  a:active,\n  .btn-link:hover,\n  .btn-link:focus,\n  .btn-link:active {\n    .badge {\n      background-color: #fff;\n\n      color: @brand-danger;\n    }\n  }\n}\n\n// Mobile dropdown\n.mobile-dropdown.open {\n  margin: 0px;\n}\n","//\n// Flavor Navbar\n// --------------------------------------------------\n\n.navbar-misago {\n  border-bottom: none;\n  box-shadow: 0px 0px 3px @navbar-default-border;\n}\n\n// Round up user's avatar\n.navbar-misago .user-avatar {\n  background: #fff;\n  border-radius: @border-radius-small;\n}\n\n// Round up brand's icon\n.navbar-misago .brand-link img {\n  border-radius: @border-radius-small;\n}\n","//\n// Search Dropdown\n// --------------------------------------------------\n\n.dropdown-search-results {\n  border-radius: 0px 0px @border-radius-base @border-radius-base;\n}\n\n.dropdown-search-message {\n  border-top: 1px solid @gray-lighter;\n  padding: @padding-large-vertical @padding-large-horizontal;\n\n  color: @text-muted;\n}\n\n.dropdown-search-loader {\n  border-top: 1px solid @gray-lighter;\n  padding: @padding-large-vertical @padding-large-horizontal;\n}\n\n.dropdown-search-header {\n  border-top: 1px solid @gray-lighter;\n  padding: 8px 20px;\n\n  color: @text-muted;\n  font-weight: bold;\n}\n\n// result\n.dropdown-search-thread,\n.dropdown-search-user {\n  small {\n    color: @text-muted;\n  }\n}\n\n.dropdown-search-thread {\n  .dropdown-search-post-content {\n    overflow: hidden;\n    white-space: normal;\n    max-height: 47px;\n  }\n\n  .dropdown-search-post-footer {\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n}\n\n// footer\n.dropdown-search-footer {\n  padding-bottom: @padding-small-vertical;\n\n  &:last-child {\n    padding-bottom: 0px;\n  }\n}\n\n.dropdown-menu > li.dropdown-search-footer > a {\n  font-size: small;\n}\n","//\n// Flavor Footer\n// --------------------------------------------------\n\n// Make footer full width\n.misago-footer {\n  margin-top: @line-height-computed * 2;\n\n  .footer-content {\n    border-top: 1px solid @gray-lighter;\n    padding-top: @line-height-computed * 1;\n\n    color: @page-footer-text-color;\n\n    @media screen and (max-width: @screen-xs-max) {\n      text-align: center;\n\n      .site-footnote {\n        clear: both;\n        margin-bottom: @line-height-computed * 0.75;\n      }\n    }\n\n    a,\n    a:link,\n    a:visited {\n      color: @page-footer-link-color;\n    }\n\n    a:hover,\n    a:focus {\n      color: @page-footer-link-hover-color;\n    }\n\n    .misago-branding {\n      &,\n      &:link,\n      &:visited {\n        color: @page-footer-brand-color;\n      }\n\n      &:hover,\n      &:focus {\n        color: @page-footer-brand-hover-color;\n      }\n    }\n  }\n}\n","//\n// List Groups Flavor\n// --------------------------------------------------\n\n.list-group {\n  border-radius: @list-group-border-radius;\n\n  .list-group-item {\n    border-left-color: @list-group-outer-border;\n    border-right-color: @list-group-outer-border;\n  }\n\n  .list-group-item:first-child {\n    border-top-color: @list-group-outer-border;\n  }\n\n  .list-group-item:last-child {\n    border-bottom-color: @list-group-outer-border;\n  }\n}\n\n.list-group-item.empty-message {\n  padding-top: @line-height-computed;\n  padding-bottom: @line-height-computed;\n\n  text-align: center;\n\n  p {\n    margin: @line-height-computed / 2 0px;\n  }\n}\n","//\n// Navs Flavor\n// --------------------------------------------------\n\n.nav-side {\n  .box-shadow(none);\n}\n\n.nav-side > .list-group-item {\n  border-left: none;\n  border-right: none;\n  margin-bottom: 1px;\n\n  &:first-child {\n    border-top: none;\n  }\n\n  &:last-child {\n    border-bottom: none;\n  }\n\n  &,\n  &:link,\n  &:visited {\n    background: @side-nav-bg;\n    border: none;\n\n    color: @side-nav-color;\n  }\n\n  &:hover,\n  &:focus,\n  &:active {\n    background: @side-nav-hover-bg;\n\n    color: @side-nav-hover-color;\n  }\n\n  &.active {\n    &,\n    &:link,\n    &:visited,\n    &:hover,\n    &:focus,\n    &:active {\n      background: @side-nav-active-bg;\n\n      color: @side-nav-active-color;\n      font-weight: bold;\n\n      .badge {\n        background: @side-nav-bg;\n\n        color: @side-nav-color;\n      }\n    }\n  }\n}\n","//\n// Username History Flavor\n// --------------------------------------------------\n\n.username-history .user-avatar {\n  border-radius: @border-radius-base;\n}\n","//\n// Panels Flavor\n// --------------------------------------------------\n\n.panel {\n  border: none;\n  border-radius: @border-radius-base;\n\n  .panel-heading,\n  .panel-footer {\n    background: @panel-bg;\n  }\n\n  .panel-title {\n    color: @panel-title-color;\n  }\n\n  .form-group + .form-group {\n    margin-top: @line-height-computed;\n  }\n\n  .panel-body > .form-group:first-child {\n    margin-top: @line-height-computed / 2;\n  }\n\n  fieldset {\n    margin-top: @line-height-computed;\n\n    &:first-child {\n      margin-top: 0px;\n    }\n\n    legend {\n      border: none;\n\n      color: @panel-fieldset-color;\n      font-weight: 300;\n    }\n  }\n}\n\n// use default message icon color for panel messages\n.panel-message-body .message-icon {\n  color: @message-icon-color;\n}\n","//\n// Forms Flavor\n// --------------------------------------------------\n\n.panel-form {\n  border: 1px solid @panel-form-border;\n  box-shadow: none;\n}\n\n.panel-form .panel-heading,\n.panel-form .panel-footer {\n  border-color: @panel-form-border;\n}\n\n// remove bottom margin from poll panel\n.poll-form .panel {\n  margin: 0px;\n}\n\n// Override help text color\n.help-block,\n.help-block .text-small {\n  color: @gray-light;\n}\n","//\n// Categories Lists Flavor\n// --------------------------------------------------\n\n// Make category read status icon visually larger\n.category-main .media-left {\n  .read-status {\n    background: @category-read-color;\n    border-radius: @border-radius-base;\n    padding: @padding-small-vertical (@padding-large-vertical - 2px);\n  }\n\n  .material-icon {\n    height: 14px;\n    width: 14px;\n\n    color: @gray;\n    font-size: 14px;\n    line-height: 14px;\n  }\n\n  .read-status.item-new {\n    background-color: @category-new-color;\n\n    .material-icon {\n      color: #fff;\n    }\n  }\n\n  @media screen and (min-width: @screen-sm-min) {\n    padding: @padding-small-vertical 0px;\n  }\n}\n\n// Fix category main alignment\n.category-main .media-body {\n  padding-left: @padding-base-horizontal;\n\n  @media screen and (max-width: @screen-xs-max) {\n    padding-left: @padding-small-horizontal / 3;\n  }\n}\n\n.list-group-category-no-description {\n  .category-main .media-heading {\n    margin-top: @padding-large-vertical;\n\n    @media screen and (max-width: @screen-xs-max) {\n      margin-top: @padding-large-vertical / 2;\n    }\n  }\n}\n\n// Make category name larger\n.category-main .media-heading {\n  a,\n  a:link,\n  a:visited {\n    color: @gray-dark;\n  }\n\n  a:focus,\n  a:hover,\n  a:active {\n    color: @text-color;\n  }\n}\n\n// Fade out stats\n.category-stats {\n  color: @gray;\n}\n\n// Fade out category description\n.category-main .category-description p {\n  font-size: @font-size-small;\n\n  &:last-child {\n    margin-bottom: 0px;\n  }\n}\n\n// Round last poster's up avatar\n.category-last-thread img {\n  background-color: #fff;\n  border-radius: @border-radius-base;\n}\n\n// Last thread\n.category-last-thread .media-heading {\n  margin-bottom: 2px;\n\n  @media screen and (max-width: @screen-xs-max) {\n    margin-top: @line-height-computed / 2;\n  }\n}\n\n.category-last-thread .list-inline {\n  color: @gray-light;\n  font-size: @font-size-small;\n\n  a,\n  a:link,\n  a:visited {\n    color: @gray-light;\n  }\n\n  a:hover,\n  a:active,\n  a:focus {\n    color: @gray-dark;\n  }\n\n  .item-title {\n    &,\n    &:link,\n    &:visited {\n      color: @gray-dark;\n    }\n\n    &:hover,\n    &:active,\n    &:focus {\n      color: @text-color;\n    }\n  }\n}\n\n// Last thread message\n.category-thread-message {\n  color: @gray-light;\n\n  .material-icon {\n    padding: @padding-base-vertical 0px;\n    margin-right: @padding-base-vertical / 2;\n  }\n\n  @media screen and (max-width: @screen-xs-max) {\n    padding-top: @line-height-computed * 0.75;\n\n    font-size: @font-size-small;\n\n    .material-icon {\n      padding: 3px 0px;\n    }\n  }\n}\n","//\n// Thread Participants Flavor\n// --------------------------------------------------\n\n.panel-participants {\n  border: 1px solid @panel-form-border;\n}\n\n.participant-card .btn-user {\n  border: 0px !important;\n}\n\n.participant-card .dropdown-header-owner {\n  color: @brand-primary;\n\n  .material-icon {\n    width: 14px;\n    height: 14px;\n\n    font-size: 14px;\n    line-height: 14px;\n  }\n\n  .icon-text {\n    margin-left: 4px;\n\n    position: relative;\n    top: 2px;\n  }\n}\n\n.panel-participants p {\n  color: @gray-light;\n\n  @media screen and (max-width: @screen-xs-max) {\n    margin-top: @line-height-computed / 2;\n\n    text-align: center;\n  }\n}\n","//\n// Polls Flavor\n// --------------------------------------------------\n\n.panel-poll {\n  border: 1px solid @panel-form-border;\n}\n\n// Poll vote form\n.panel-poll .poll-select-choices {\n  margin-top: @line-height-computed / -2;\n}\n\n// Poll results styles\n.panel-poll .poll-details {\n  margin-bottom: @line-height-computed;\n\n  color: @gray-light;\n  font-size: @font-size-small;\n}\n\n.panel-poll .progress {\n  margin-top: @line-height-computed / 3;\n  margin-bottom: @line-height-computed / 4;\n}\n\n.panel-poll .poll-chart {\n  color: @gray-light;\n  font-size: @font-size-small;\n}\n\n.panel-poll .poll-options {\n  margin-top: @line-height-computed;\n}\n","//\n// Posting Form Flavor\n// --------------------------------------------------\n\n#posting-placeholder {\n  background-color: #fafbfc;\n}\n\n.posting-message {\n  .material-icon {\n    color: @message-info-icon-color;\n  }\n\n  .btn {\n    margin-top: @line-height-computed;\n  }\n}\n","//\n// Posts Flavor\n// --------------------------------------------------\n\n// Post body\n.panel-post {\n  background: @post-bg;\n  border: 1px solid @post-border;\n}\n\n// Post side\n.post-side {\n  color: @gray-light;\n\n  .poster-avatar {\n    border-radius: @border-radius-base;\n  }\n\n  .user-title {\n    color: @gray;\n\n    a,\n    a:link,\n    a:visited,\n    a:focus,\n    a:hover,\n    a:active {\n      color: @gray;\n    }\n  }\n}\n\n// Header\n.post-heading {\n  .label-unread {\n    background-color: @post-unread-label;\n    margin-right: @padding-large-horizontal;\n  }\n\n  .label-protected {\n    background-color: transparent;\n    margin-left: @padding-base-horizontal * 2;\n\n    position: relative;\n    top: 1px;\n\n    color: @post-protected-icon;\n\n    .material-icon {\n      margin-right: 2px;\n\n      position: relative;\n      top: -1px;\n\n      font-size: 16px;\n      line-height: 16px;\n    }\n  }\n\n  & > .btn-link {\n    padding-left: 0px;\n    padding-right: 0px;\n\n    &,\n    &:link,\n    &:visited {\n      color: @gray-light;\n    }\n\n    &:hover,\n    &:focus,\n    &:focus:active,\n    &:active {\n      color: @text-color;\n      text-decoration: none;\n    }\n  }\n\n  .btn-see-edits {\n    margin-left: @padding-base-horizontal * 2;\n  }\n}\n\n// Status\n.post-status-message {\n  border-radius: @border-radius-base;\n  margin-top: @line-height-computed / 2;\n  padding: @padding-base-vertical @padding-base-horizontal;\n\n  @media screen and (max-width: @screen-xs-max) {\n    font-size: @font-size-small;\n\n    .material-icon {\n      margin-top: 3px;\n    }\n\n    p {\n      margin-top: 0px;\n    }\n  }\n}\n\n// Post body\n.post-body:last-child {\n  padding-bottom: @line-height-computed / 2;\n}\n\n// Attachments\n.post-attachments {\n  background-color: @gray-lighter;\n  border: none;\n  border-radius: @border-radius-base;\n  margin-bottom: @line-height-computed * 1.5;\n\n  &:last-child {\n    margin-bottom: @line-height-computed / 2;\n  }\n\n  @media screen and (max-width: @screen-xs-max) {\n    border-radius: 0px;\n    margin: 0px -15px;\n    margin-bottom: @line-height-computed;\n  }\n}\n\n// Footer\n.post-footer {\n  & > .btn-link {\n    padding-left: 0px;\n    padding-right: 0px;\n\n    &,\n    &:link,\n    &:visited {\n      color: @gray-light;\n    }\n\n    &:hover,\n    &:focus,\n    &:focus:active,\n    &:active {\n      color: @text-color;\n      text-decoration: none;\n    }\n  }\n\n  p {\n    color: @gray-light;\n    font-size: @font-size-small;\n  }\n}\n\n// Hidden and invalid messages\n.post-body-hidden,\n.post-body-invalid {\n  padding-top: @line-height-computed / 2;\n  padding-bottom: @line-height-computed / 2;\n\n  .lead {\n    margin-bottom: @line-height-computed / 2;\n  }\n\n  .text-muted {\n    margin-bottom: 0px;\n\n    font-size: @font-size-small;\n  }\n}\n\n// Fade out hidden posts a little\n.post-hidden {\n  .opacity(0.75);\n}\n","//\n// Post Feed Flavor\n// --------------------------------------------------\n\n.post-feed .panel-body {\n  padding-bottom: 0px;\n}\n\n.post-feed .post-body {\n  position: relative;\n  padding-top: 0px;\n  padding-bottom: @line-height-computed;\n  max-height: 300px;\n  overflow-y: hidden;\n\n  &:after {\n    box-shadow: 0px 0px 16px 16px #ffffff;\n    display: block;\n\n    position: absolute;\n    bottom: 0px;\n\n    height: 0px;\n    width: 100%;\n\n    content: \"-\";\n    color: transparent;\n  }\n}\n","//\n// Events Flavor\n// --------------------------------------------------\n\n// Style label\n.posts-list .event .event-label {\n  margin-bottom: @line-height-computed / 4;\n}\n\n.posts-list .event .label-unread {\n  background-color: @post-unread-label;\n\n  color: #fff;\n}\n\n// Style info text\n.posts-list .event-info {\n  a,\n  a:link,\n  a:visited,\n  .btn-link {\n    color: @gray;\n  }\n\n  a:focus,\n  a:active,\n  a:focus:active,\n  .btn-link:focus,\n  .btn-link:active,\n  .btn-link:focus:active {\n    color: @text-color;\n  }\n}\n\n// Fade out hidden event\n.posts-list .event-hidden {\n  .opacity(0.33);\n}\n","//\n// User Card Flavor\n// --------------------------------------------------\n\n// Background color\n.user-card {\n  background: @user-card-bg;\n}\n\n// Round avatar corners\n.user-card-small-avatar,\n.user-card-avatar {\n  img {\n    border-radius: @border-radius-base;\n  }\n}\n\n// Sizing and spacing on large avatar\n.user-card-avatar {\n  margin: @line-height-computed 0px;\n\n  img {\n    width: 150px;\n    height: 150px;\n  }\n}\n\n// Upsize the user name\n.user-card-username {\n  a,\n  a:link,\n  a:visited,\n  a:hover,\n  a:focus,\n  a:active {\n    color: @text-color;\n    font-size: @font-size-large;\n    font-weight: bold;\n  }\n}\n\n// User title\n.user-card-title {\n  span,\n  a,\n  a:link,\n  a:visited {\n    color: @gray;\n  }\n\n  a:focus,\n  a:hover,\n  a:active {\n    color: @text-color;\n  }\n}\n\n// User stats\n.user-card-stats {\n  @media screen and (min-width: @screen-sm-min) {\n    margin-top: @line-height-computed;\n  }\n\n  ul {\n    margin: 0px;\n  }\n\n  li {\n    display: inline-block;\n    margin-right: @padding-base-horizontal;\n\n    color: @gray-light;\n    font-size: @font-size-small;\n\n    @media screen and (min-width: @screen-sm-min) {\n      margin: 0px @padding-base-horizontal / 2;\n    }\n  }\n\n  li.user-stat-empty {\n    display: none;\n  }\n}\n\n// Divide stats in two on larger screen\n@media screen and (min-width: @screen-sm-min) {\n  li.user-stat-divider {\n    display: block;\n    margin: 0px;\n  }\n}\n\n@media screen and (max-width: @screen-xs-max) {\n  li.user-stat-divider {\n    display: none;\n  }\n}\n\n// Make stats 60px min height on tablets and up\n@media screen and (min-width: @screen-sm-min) {\n  .user-card-stats {\n    min-height: 60px;\n  }\n}\n\n// Reduce gutter on small grid\n@media screen and (max-width: @screen-xs-max) {\n  .user-card-left {\n    padding-right: 0px;\n  }\n}\n","//\n// Progress Bars Flavor\n// --------------------------------------------------\n\n// Make progress bars flat\n.progress,\n.progress .progress-bar {\n  .box-shadow(none);\n\n  height: 8px;\n}\n","//\n// Markup Flavor\n// --------------------------------------------------\n\n// Round images\n.misago-markup img {\n  border-radius: @border-radius-base;\n}\n\n// Quote block\n.misago-markup .quote-block,\n.misago-markup blockquote {\n  background-color: #ffecb3;\n  border-color: #b3e5fc;\n  overflow: hidden;\n\n  color: #3e2723;\n\n  .quote-heading {\n    background-color: #ffe082;\n    border: none;\n\n    color: #795548;\n\n    a,\n    a:link,\n    a:visited {\n      color: #5d4037;\n    }\n\n    a:hover,\n    a:focus,\n    a:active {\n      color: #3e2723;\n    }\n  }\n\n  hr {\n    border-color: #ffca28;\n  }\n}\n\n.misago-markup > .quote-block,\n.misago-markup > blockquote {\n  background: #ffecb3;\n  border: none;\n  border-radius: @border-radius-base;\n\n  .quote-block {\n    background: #ffecb3;\n  }\n}\n\n.misago-markup .quote-body {\n  background: #ffecb3;\n\n  & > .quote-block,\n  & > blockquote {\n    border-color: #ffe082;\n    border-radius: @border-radius-base;\n  }\n}\n\n// Spoiler block\n.misago-markup .spoiler-block {\n  background: repeating-linear-gradient(\n    45deg,\n    fadeout(@gray-lighter, 50%),\n    fadeout(@gray-lighter, 50%) 10px,\n    @post-bg 10px,\n    @post-bg 20px\n  );\n  border: none;\n}\n\n.misago-markup .spoiler-body {\n  background: transparent;\n  -webkit-filter: blur(5px);\n  -moz-filter: blur(5px);\n  -o-filter: blur(5px);\n  -ms-filter: blur(5px);\n  filter: blur(5px);\n  color: @text-color;\n}\n\n.misago-markup .spoiler-block.revealed .spoiler-body {\n  -webkit-filter: none;\n  -moz-filter: none;\n  -o-filter: none;\n  -ms-filter: none;\n  filter: none;\n}\n\n.misago-markup .spoiler-overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: fadeout(@post-bg, 90%);\n}\n\n.misago-markup .spoiler-reveal {\n  .btn-default();\n}\n\n.misago-markup .spoiler-reveal,\n.misago-markup .spoiler-reveal:active,\n.misago-markup .spoiler-reveal:hover {\n  border-radius: 4px;\n  box-shadow: 0px 0px 0px 4px @post-bg;\n  padding: @padding-base-vertical @padding-base-horizontal;\n}\n","//\n// Modal Flavor\n// --------------------------------------------------\n\n// Custom header styles\n.modal-header {\n  background: @modal-header-bg;\n  border-bottom-color: @modal-header-border-color;\n  border-radius: @border-radius-large @border-radius-large 0px 0px;\n\n  color: @modal-header-color;\n\n  .close {\n    padding: 0px 6px;\n\n    color: @modal-header-color;\n    font-size: 24px;\n    line-height: 24px;\n    text-shadow: none;\n  }\n}\n\n// Color message icon\n.modal-message .message-icon {\n  color: @message-icon-color;\n}\n\n// Even out space between form fields\n.modal-body > .form-group {\n  margin: @line-height-computed 0px;\n\n  &:first-child {\n    margin-top: 0px;\n  }\n\n  &:last-child {\n    margin-bottom: 0px;\n  }\n}\n\n// Sign in modal\n.modal-sign-in {\n  .modal-body {\n    padding-top: 0px;\n    padding-bottom: 0px;\n\n    & > .form-group {\n      margin: @line-height-computed 0px;\n    }\n  }\n}\n\n// Register modal\n.legal-footnote {\n  label {\n    font-weight: bold;\n  }\n\n  .help-block {\n    margin-left: 20px;\n\n    color: @brand-danger;\n  }\n}\n\n// Avatar crop\n.modal-avatar-index {\n  .avatar-preview {\n    background: #fff;\n    border-radius: @border-radius-large;\n  }\n}\n\n.modal-avatar-crop {\n  .cropit-preview {\n    background: #fff;\n    margin: @line-height-computed 0px;\n  }\n\n  .cropit-image-zoom-input {\n    margin-top: @line-height-computed * 2;\n    margin-bottom: @line-height-computed;\n  }\n}\n\n// Post likes\n.modal-post-likers {\n  .media {\n    border-bottom: 1px solid @gray-lighter;\n    padding-bottom: 15px; // hardcoded in BS less\n\n    img {\n      border-radius: @border-radius-base;\n\n      width: 40px;\n      height: 40px;\n    }\n\n    &:last-child {\n      border: none;\n      padding-bottom: 0px;\n    }\n  }\n}\n","//\n// Well Flavor\n// --------------------------------------------------\n\n.well {\n  border: 1px solid @well-border;\n}\n","//\n// Active Posters Flavor\n// --------------------------------------------------\n\n.active-posters .rank-user-avatar img {\n  border-radius: @border-radius-base;\n}\n\n.active-posters .user-details {\n  color: @gray-light;\n\n  a.rank-name {\n    &,\n    &:link,\n    &:visited {\n      color: @gray;\n      font-weight: normal;\n    }\n\n    &:focus,\n    &:hover,\n    &:active {\n      color: @text-color;\n    }\n  }\n\n  span.rank-name {\n    color: @gray;\n    font-weight: normal;\n  }\n}\n\n.active-posters small {\n  color: @gray-light;\n}\n","//\n// Message Pages Flavor\n// --------------------------------------------------\n\n.page-error .message-icon {\n  color: @error-icon-color;\n}\n\n.page-message .message-icon {\n  color: @message-icon-color;\n}\n\n.page-message-info .message-icon {\n  color: @message-info-icon-color;\n}\n\n.page-message-success .message-icon {\n  color: @message-success-icon-color;\n}\n","//\n// User Options Flavor\n// --------------------------------------------------\n\n.page-options .message-line {\n  color: @gray-light;\n\n  a,\n  a:link,\n  a:visited {\n    color: @gray-light;\n  }\n\n  a:hover,\n  a:focus,\n  a:focus:active,\n  a:active {\n    color: @text-color;\n  }\n}\n","//\n// Profile Details\n// --------------------------------------------------\n\n.panel-profile-details-group.panel {\n  border: 1px solid @panel-form-border;\n}\n\n.panel-profile-details-group.panel .form-group {\n  margin: 0px;\n}\n\n.panel-profile-details-group .form-control-static {\n  p:last-child {\n    margin-bottom: 0px;\n  }\n}\n","//\n// Default flavors for user ranks\n// --------------------------------------------------\n\n.post-rank-flavor(@border, @title) {\n  .panel-post {\n    border-color: @border;\n  }\n\n  .user-title {\n    color: @title;\n\n    a,\n    a:link,\n    a:visited,\n    a:focus,\n    a:hover,\n    a:active {\n      color: @title;\n    }\n  }\n}\n\n.card-rank-flavor(@border, @title, @color) {\n  .panel-body {\n    background: @body-bg;\n    border: 2px solid @border;\n    border-radius: @panel-border-radius;\n    padding: @panel-body-padding - 2px;\n  }\n\n  .user-card-title {\n    color: @title;\n\n    a.user-title {\n      &,\n      &:link,\n      &:visited,\n      &:focus,\n      &:hover,\n      &:active {\n        color: @title;\n      }\n    }\n  }\n\n  .user-card-stats li {\n    color: @color;\n  }\n}\n\n.list-group-rank-flavor(@border, @title) {\n  border-left: 4px solid @border;\n  padding-left: 11px;\n\n  span.rank-name {\n    color: @title;\n  }\n\n  a.rank-name {\n    &,\n    &:link,\n    &:visited,\n    &:focus,\n    &:hover,\n    &:active {\n      color: @title;\n    }\n  }\n}\n\n.user-profile-rank-flavor(@color) {\n  .user-rank {\n    color: @color;\n\n    a,\n    a:link,\n    a:visited,\n    a:focus,\n    a:hover,\n    a:active {\n      color: @color;\n    }\n  }\n}\n\n// Posts\n.post-primary {\n  .post-rank-flavor(#b388ff, #6200ea);\n}\n\n.post-success {\n  .post-rank-flavor(#00c853, #388e3c);\n}\n\n.post-warning {\n  .post-rank-flavor(#ffab40, #ff6d00);\n}\n\n.post-danger {\n  .post-rank-flavor(#ff8a80, #d50000);\n}\n\n// Cards\n.user-card-primary {\n  .card-rank-flavor(#b388ff, #6200ea, #9575cd);\n}\n\n.user-card-success {\n  .card-rank-flavor(#00c853, #388e3c, #66bb6a);\n}\n\n.user-card-warning {\n  .card-rank-flavor(#ffab40, #ff6d00, #ff6e40);\n}\n\n.user-card-danger {\n  .card-rank-flavor(#ff8a80, #d50000, #e57373);\n}\n\n// Posters ranking\n.list-group {\n  .list-group-rank-primary {\n    .list-group-rank-flavor(#7e57c2, #6200ea);\n  }\n\n  .list-group-rank-success {\n    .list-group-rank-flavor(#9ccc65, #388e3c);\n  }\n\n  .list-group-rank-warning {\n    .list-group-rank-flavor(#ff7043, #ff6d00);\n  }\n\n  .list-group-rank-danger {\n    .list-group-rank-flavor(#f44336, #d50000);\n  }\n}\n\n// User profiles\n.page-header-rank-primary {\n  .user-profile-rank-flavor(#6200ea);\n}\n\n.page-header-rank-success {\n  .user-profile-rank-flavor(#388e3c);\n}\n\n.page-header-rank-warning {\n  .user-profile-rank-flavor(#ff6d00);\n}\n\n.page-header-rank-danger {\n  .user-profile-rank-flavor(#d50000);\n}\n"],"names":[],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"../css/misago.css","mappings":"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,COhZA,YAAuB,gBPmZvB,COlZA,aAAuB,iBPqZvB,COpZA,cAAuB,kBPuZvB,COtZA,aAAuB,kBPyZvB,COtZA,gBAAuB,wBPyZvB,COxZA,gBAAuB,wBP2ZvB,CO1ZA,iBAAuB,yBP6ZvB,CO1ZA,YACE,aP4ZF,CO1ZA,cCvGE,aRogBF,CQngBE,0CAEE,aRqgBJ,CO9ZA,cC1GE,aR2gBF,CQ1gBE,0CAEE,aR4gBJ,COlaA,WC7GE,aRkhBF,CQjhBE,oCAEE,aRmhBJ,COtaA,cChHE,aRyhBF,CQxhBE,0CAEE,aR0hBJ,CO1aA,aCnHE,aRgiBF,CQ/hBE,wCAEE,aRiiBJ,CO1aA,YE1HE,yBF6HA,UP2aF,CSviBE,sCAEE,wBTyiBJ,CO5aA,YEhIE,wBT+iBF,CS9iBE,sCAEE,wBTgjBJ,COhbA,SEnIE,wBTsjBF,CSrjBE,gCAEE,wBTujBJ,COpbA,YEtIE,wBT6jBF,CS5jBE,sCAEE,wBT8jBJ,COxbA,WEzIE,wBTokBF,CSnkBE,oCAEE,wBTqkBJ,COvbA,aAGE,gCADA,mBADA,kBP2bF,COjbA,MAGE,mBADA,YPobF,COtbA,wBAMI,ePsbJ,COzaA,4BAJE,eAAgB,CADhB,cPubF,COlbA,aAEE,gBPgbF,COlbA,gBAKI,oBAAqB,CAErB,gBAAiB,CADjB,iBPibJ,CO3aA,GAEE,mBADA,YP8aF,CO3aA,MAEE,sBP6aF,CO3aA,GACE,eP6aF,CO3aA,GACE,aP6aF,COhaE,2CAII,UAAW,CAFX,UAAW,CGrNf,eAAgB,CHwNZ,gBAAiB,CGvNrB,sBAAuB,CACvB,kBAAmB,CHoNf,WPuaJ,CO1aA,kBASI,iBPoaJ,CACF,CO1ZA,sCAEE,WP4ZF,COzZA,YACE,aAAc,CA9IO,wBP0iBvB,COvZA,WAIE,8BADA,iBADA,gBADA,iBP4ZF,COpZI,0EACE,ePwZN,COlaA,qDAsBI,cAHA,aAAc,CACd,aAAc,CACd,sBPqZJ,COlZI,0EACE,qBPsZN,CO9YA,0CAME,aAAc,CADd,+BAFA,cAAe,CADf,kBAAmB,CAEnB,gBPkZF,CO1YI,gNAAW,UPkZf,COjZI,0MACE,qBPwZN,COlZA,QAEE,iBAAkB,CAClB,uBAFA,kBPsZF,CW5rBA,kBAIE,uDX8rBF,CW1rBA,KAIE,yBACA,kBAFA,aX8rBF,CWxrBA,SAPE,aAAc,CADd,eXwsBF,CWhsBA,IAIE,sBACA,kBACA,0CAHA,UX6rBF,CWhsBA,QAYI,eAAgB,CAFhB,cAAe,CACf,eAAgB,CAFhB,SX6rBJ,CWrrBA,IAQE,oBAAqB,CACrB,yBACA,sBACA,kBALA,cALA,aAAc,CAGd,eACA,uBAFA,gBADA,cAKA,oBX2rBF,CWlsBA,SAmBI,4BAA6B,CAC7B,eAAgB,CAHhB,aAAc,CADd,iBAAkB,CADlB,SAAU,CAGV,oBXwrBJ,CWjrBA,gBACE,iBACA,iBXmrBF,CY7uBA,WCAE,gBAAiB,CADjB,iBAAkB,CADlB,kBADA,kBbsvBF,CYhvBE,oCACE,WZmvBF,CACF,CYlvBE,oCACE,WZqvBF,CACF,CYpvBE,qCACE,YZuvBF,CACF,CY9uBA,iBCpBE,gBAAiB,CADjB,iBAAkB,CADlB,kBADA,kBb2wBF,CY3uBA,KCtBE,kBADA,kBbswBF,CY3uBA,gBAEE,aAAc,CADd,cZ8uBF,CY/uBA,8BAMI,cAAe,CADf,eZ8uBJ,Cc7xBC,4eCmBK,cAAe,CAGf,kBADA,mBAJA,iBfi0BN,Ccl1BC,2HCuCK,UfyzBN,Cch2BC,WC+CG,UfozBJ,Ccn2BC,WC+CG,kBfuzBJ,Cct2BC,WC+CG,kBf0zBJ,Ccz2BC,UC+CG,Sf6zBJ,Cc52BC,UC+CG,kBfg0BJ,Cc/2BC,UC+CG,kBfm0BJ,Ccl3BC,UC+CG,Sfs0BJ,Ccr3BC,UC+CG,kBfy0BJ,Ccx3BC,UC+CG,kBf40BJ,Cc33BC,UC+CG,Sf+0BJ,Cc93BC,UC+CG,kBfk1BJ,Ccj4BC,UC+CG,iBfq1BJ,Ccp4BC,gBC8DG,Ufy0BJ,Ccv4BC,gBC8DG,kBf40BJ,Cc14BC,gBC8DG,kBf+0BJ,Cc74BC,eC8DG,Sfk1BJ,Cch5BC,eC8DG,kBfq1BJ,Ccn5BC,eC8DG,kBfw1BJ,Cct5BC,eC8DG,Sf21BJ,Ccz5BC,eC8DG,kBf81BJ,Cc55BC,eC8DG,kBfi2BJ,Cc/5BC,eC8DG,Sfo2BJ,Ccl6BC,eC8DG,kBfu2BJ,Ccr6BC,eC8DG,iBf02BJ,Ccx6BC,eCmEG,Ufw2BJ,Cc36BC,gBCoDG,Sf03BJ,Cc96BC,gBCoDG,iBf63BJ,Ccj7BC,gBCoDG,iBfg4BJ,Ccp7BC,eCoDG,Qfm4BJ,Ccv7BC,eCoDG,iBfs4BJ,Cc17BC,eCoDG,iBfy4BJ,Cc77BC,eCoDG,Qf44BJ,Cch8BC,eCoDG,iBf+4BJ,Ccn8BC,eCoDG,iBfk5BJ,Cct8BC,eCoDG,Qfq5BJ,Ccz8BC,eCoDG,iBfw5BJ,Cc58BC,eCoDG,gBf25BJ,Cc/8BC,eCyDG,Sfy5BJ,Ccl9BC,kBCwEG,gBf64BJ,Ccr9BC,kBCwEG,wBfg5BJ,Ccx9BC,kBCwEG,wBfm5BJ,Cc39BC,iBCwEG,efs5BJ,Cc99BC,iBCwEG,wBfy5BJ,Ccj+BC,iBCwEG,wBf45BJ,Ccp+BC,iBCwEG,ef+5BJ,Ccv+BC,iBCwEG,wBfk6BJ,Cc1+BC,iBCwEG,wBfq6BJ,Cc7+BC,iBCwEG,efw6BJ,Cch/BC,iBCwEG,wBf26BJ,Ccn/BC,iBCwEG,uBf86BJ,Cct/BC,iBCwEG,afi7BJ,CYh7BA,yBEzEC,2HCuCK,Ufi+BJ,CcxgCD,WC+CG,Uf49BF,Cc3gCD,WC+CG,kBf+9BF,Cc9gCD,WC+CG,kBfk+BF,CcjhCD,UC+CG,Sfq+BF,CcphCD,UC+CG,kBfw+BF,CcvhCD,UC+CG,kBf2+BF,Cc1hCD,UC+CG,Sf8+BF,Cc7hCD,UC+CG,kBfi/BF,CchiCD,UC+CG,kBfo/BF,CcniCD,UC+CG,Sfu/BF,CctiCD,UC+CG,kBf0/BF,CcziCD,UC+CG,iBf6/BF,Cc5iCD,gBC8DG,Ufi/BF,Cc/iCD,gBC8DG,kBfo/BF,CcljCD,gBC8DG,kBfu/BF,CcrjCD,eC8DG,Sf0/BF,CcxjCD,eC8DG,kBf6/BF,Cc3jCD,eC8DG,kBfggCF,Cc9jCD,eC8DG,SfmgCF,CcjkCD,eC8DG,kBfsgCF,CcpkCD,eC8DG,kBfygCF,CcvkCD,eC8DG,Sf4gCF,Cc1kCD,eC8DG,kBf+gCF,Cc7kCD,eC8DG,iBfkhCF,CchlCD,eCmEG,UfghCF,CcnlCD,gBCoDG,SfkiCF,CctlCD,gBCoDG,iBfqiCF,CczlCD,gBCoDG,iBfwiCF,Cc5lCD,eCoDG,Qf2iCF,Cc/lCD,eCoDG,iBf8iCF,CclmCD,eCoDG,iBfijCF,CcrmCD,eCoDG,QfojCF,CcxmCD,eCoDG,iBfujCF,Cc3mCD,eCoDG,iBf0jCF,Cc9mCD,eCoDG,Qf6jCF,CcjnCD,eCoDG,iBfgkCF,CcpnCD,eCoDG,gBfmkCF,CcvnCD,eCyDG,SfikCF,Cc1nCD,kBCwEG,gBfqjCF,Cc7nCD,kBCwEG,wBfwjCF,CchoCD,kBCwEG,wBf2jCF,CcnoCD,iBCwEG,ef8jCF,CctoCD,iBCwEG,wBfikCF,CczoCD,iBCwEG,wBfokCF,Cc5oCD,iBCwEG,efukCF,Cc/oCD,iBCwEG,wBf0kCF,CclpCD,iBCwEG,wBf6kCF,CcrpCD,iBCwEG,efglCF,CcxpCD,iBCwEG,wBfmlCF,Cc3pCD,iBCwEG,uBfslCF,Cc9pCD,iBCwEG,afylCF,CACF,CYhlCA,yBElFC,2HCuCK,Uf0oCJ,CcjrCD,WC+CG,UfqoCF,CcprCD,WC+CG,kBfwoCF,CcvrCD,WC+CG,kBf2oCF,Cc1rCD,UC+CG,Sf8oCF,Cc7rCD,UC+CG,kBfipCF,CchsCD,UC+CG,kBfopCF,CcnsCD,UC+CG,SfupCF,CctsCD,UC+CG,kBf0pCF,CczsCD,UC+CG,kBf6pCF,Cc5sCD,UC+CG,SfgqCF,Cc/sCD,UC+CG,kBfmqCF,CcltCD,UC+CG,iBfsqCF,CcrtCD,gBC8DG,Uf0pCF,CcxtCD,gBC8DG,kBf6pCF,Cc3tCD,gBC8DG,kBfgqCF,Cc9tCD,eC8DG,SfmqCF,CcjuCD,eC8DG,kBfsqCF,CcpuCD,eC8DG,kBfyqCF,CcvuCD,eC8DG,Sf4qCF,Cc1uCD,eC8DG,kBf+qCF,Cc7uCD,eC8DG,kBfkrCF,CchvCD,eC8DG,SfqrCF,CcnvCD,eC8DG,kBfwrCF,CctvCD,eC8DG,iBf2rCF,CczvCD,eCmEG,UfyrCF,Cc5vCD,gBCoDG,Sf2sCF,Cc/vCD,gBCoDG,iBf8sCF,CclwCD,gBCoDG,iBfitCF,CcrwCD,eCoDG,QfotCF,CcxwCD,eCoDG,iBfutCF,Cc3wCD,eCoDG,iBf0tCF,Cc9wCD,eCoDG,Qf6tCF,CcjxCD,eCoDG,iBfguCF,CcpxCD,eCoDG,iBfmuCF,CcvxCD,eCoDG,QfsuCF,Cc1xCD,eCoDG,iBfyuCF,Cc7xCD,eCoDG,gBf4uCF,CchyCD,eCyDG,Sf0uCF,CcnyCD,kBCwEG,gBf8tCF,CctyCD,kBCwEG,wBfiuCF,CczyCD,kBCwEG,wBfouCF,Cc5yCD,iBCwEG,efuuCF,Cc/yCD,iBCwEG,wBf0uCF,CclzCD,iBCwEG,wBf6uCF,CcrzCD,iBCwEG,efgvCF,CcxzCD,iBCwEG,wBfmvCF,Cc3zCD,iBCwEG,wBfsvCF,Cc9zCD,iBCwEG,efyvCF,Ccj0CD,iBCwEG,wBf4vCF,Ccp0CD,iBCwEG,uBf+vCF,Ccv0CD,iBCwEG,afkwCF,CACF,CYhvCA,0BE3FC,2HCuCK,UfmzCJ,Cc11CD,WC+CG,Uf8yCF,Cc71CD,WC+CG,kBfizCF,Cch2CD,WC+CG,kBfozCF,Ccn2CD,UC+CG,SfuzCF,Cct2CD,UC+CG,kBf0zCF,Ccz2CD,UC+CG,kBf6zCF,Cc52CD,UC+CG,Sfg0CF,Cc/2CD,UC+CG,kBfm0CF,Ccl3CD,UC+CG,kBfs0CF,Ccr3CD,UC+CG,Sfy0CF,Ccx3CD,UC+CG,kBf40CF,Cc33CD,UC+CG,iBf+0CF,Cc93CD,gBC8DG,Ufm0CF,Ccj4CD,gBC8DG,kBfs0CF,Ccp4CD,gBC8DG,kBfy0CF,Ccv4CD,eC8DG,Sf40CF,Cc14CD,eC8DG,kBf+0CF,Cc74CD,eC8DG,kBfk1CF,Cch5CD,eC8DG,Sfq1CF,Ccn5CD,eC8DG,kBfw1CF,Cct5CD,eC8DG,kBf21CF,Ccz5CD,eC8DG,Sf81CF,Cc55CD,eC8DG,kBfi2CF,Cc/5CD,eC8DG,iBfo2CF,Ccl6CD,eCmEG,Ufk2CF,Ccr6CD,gBCoDG,Sfo3CF,Ccx6CD,gBCoDG,iBfu3CF,Cc36CD,gBCoDG,iBf03CF,Cc96CD,eCoDG,Qf63CF,Ccj7CD,eCoDG,iBfg4CF,Ccp7CD,eCoDG,iBfm4CF,Ccv7CD,eCoDG,Qfs4CF,Cc17CD,eCoDG,iBfy4CF,Cc77CD,eCoDG,iBf44CF,Cch8CD,eCoDG,Qf+4CF,Ccn8CD,eCoDG,iBfk5CF,Cct8CD,eCoDG,gBfq5CF,Ccz8CD,eCyDG,Sfm5CF,Cc58CD,kBCwEG,gBfu4CF,Cc/8CD,kBCwEG,wBf04CF,Ccl9CD,kBCwEG,wBf64CF,Ccr9CD,iBCwEG,efg5CF,Ccx9CD,iBCwEG,wBfm5CF,Cc39CD,iBCwEG,wBfs5CF,Cc99CD,iBCwEG,efy5CF,Ccj+CD,iBCwEG,wBf45CF,Ccp+CD,iBCwEG,wBf+5CF,Ccv+CD,iBCwEG,efk6CF,Cc1+CD,iBCwEG,wBfq6CF,Cc7+CD,iBCwEG,uBfw6CF,Cch/CD,iBCwEG,af26CF,CACF,CgB7+CA,MACE,4BhB++CF,CgBh/CA,uBASI,oBAAqB,CACrB,UAAW,CAFX,ehB6+CJ,CgBt+CI,4CAEE,kBAAmB,CACnB,UAAW,CAFX,ehB2+CN,CgBp+CA,QAGE,cADA,mBADA,ehBy+CF,CgBn+CA,WAHE,ehBy+CF,CgB/9CA,OAGE,mBADA,cAAe,CADf,UhBm+CF,CgBp+CA,kHAcQ,0BAFA,uBADA,YAEA,kBhBk+CR,CgB/+CA,mBAqBI,6BADA,qBhB+9CJ,CgBn/CA,oPA8BQ,YhB69CR,CgB3/CA,mBAoCI,yBhB09CJ,CgB9/CA,cAyCI,qBhBw9CJ,CgBj9CA,8KAOQ,WhBk9CR,CgBv8CA,wLAQQ,qBhB08CR,CgBl9CA,wDAeM,uBhBu8CN,CgB77CA,yCAEI,wBhB87CJ,CiBlkDE,oVAOI,wBjB4kDN,CiBtkDE,4LAMI,wBjBukDN,CiB1lDE,oUAOI,wBjBimDN,CiB3lDE,iMAMI,wBjB4lDN,CiB/mDE,gSAOI,wBjBsnDN,CiBhnDE,kLAMI,wBjBinDN,CiBpoDE,oUAOI,wBjB2oDN,CiBroDE,iMAMI,wBjBsoDN,CiBzpDE,wTAOI,wBjBgqDN,CiB1pDE,4LAMI,wBjB2pDN,CgBvgDA,kBACE,gBACA,ehBygDF,CgBvgDE,sDAIE,2CAA4C,CAC5C,sBAHA,mBACA,iBAAkB,CAFlB,UhB8gDF,CgB/gDA,yBASI,ehBygDJ,CgBlhDA,8NAkBU,kBhBwgDV,CgB1hDA,kCA0BI,QhBmgDJ,CgB7hDA,4VAmCU,ahBkgDV,CgBriDA,sVAuCU,chBsgDV,CgB7iDA,oOAoDU,ehB+/CV,CACF,CkBztDA,SAME,QAAS,CAFT,WlB2tDF,CkBrtDA,gBAHE,QAAS,CAFT,SlBquDF,CkBhuDA,OASE,gCAFA,cANA,aAAc,CAId,eACA,mBAAoB,CAFpB,mBAFA,UlB8tDF,CkBptDA,MACE,oBAAqB,CAGrB,eAAgB,CADhB,iBAAkB,CADlB,clBwtDF,CkB5sDA,mBAUE,uBAAwB,CACxB,eAAgB,CdkBhB,8BACG,2BACK,qBJorDV,CkBpsDA,uCAIE,kBAAmB,CAFnB,cAAe,CACf,gBlBusDF,CkBhsDE,iMAGE,kBlBqsDJ,CkBjsDA,iBACE,alBmsDF,CkB/rDA,kBACE,aAAc,CACd,UlBisDF,CkB7rDA,8BAEE,WlB+rDF,CkB3rDA,0Eb1FE,yCAA0C,CAC1C,mBL0xDF,CkB1rDA,OAEE,elB+rDF,CkBlqDA,qBA1BE,cAJA,aAAc,CAEd,eACA,sBlB+sDF,CkBprDA,cAQE,sBACA,qBAAsB,CACtB,yBACA,kBd3EA,oDACQ,4CckER,YACA,iBdsDA,6EACK,wEACG,qEc1DR,UlBkrDF,CmBlwDE,oBACE,qBfaF,iFACQ,yEebN,SnBswDJ,CIxtDE,gCACE,WACA,SJ0tDJ,CIxtDE,oCAA0B,UJ2tD5B,CI1tDE,yCAAgC,UJ6tDlC,CkB9qDE,0BACE,4BAA6B,CAC7B,QlBgrDJ,CkBxqDE,iFAGE,yBACA,SlB0qDJ,CkBvqDE,yDAEE,kBlByqDJ,CkBrqDE,sBACE,WlBuqDJ,CkBzpDA,qDAKI,mIACE,gBlB0pDJ,CkBvpDE,kQAEE,gBlB+pDJ,CkB5pDE,kQAEE,gBlBoqDJ,CACF,CkB1pDA,YACE,kBlB4pDF,CkBppDA,iBAGE,aAAc,CAEd,kBAAmB,CADnB,eAAgB,CAFhB,iBlBypDF,CkBnpDE,kHAGI,kBlBspDN,CkBjqDA,6BAoBI,cAAe,CADf,eAAgB,CADhB,eAAgB,CAFhB,gBACA,iBlBwpDJ,CkBlpDA,8HAME,iBAAkB,CADlB,gBAAkB,CADlB,iBlBspDF,CkBjpDA,kCAEE,elBmpDF,CkB/oDA,+BAQE,cAAe,CALf,oBAAqB,CAGrB,eAAgB,CADhB,eAAgB,CADhB,iBAAkB,CAFlB,iBAAkB,CAKlB,qBlBkpDF,CkB9oDE,sHAEE,kBlBkpDJ,CkB/oDA,8DAGE,gBAAiB,CADjB,YlBkpDF,CkBxoDA,qBAME,eAAgB,CALhB,gBAGA,mBADA,elB2oDF,CkBtoDE,4DAGE,cAAe,CADf,elByoDJ,CkB3nDA,UCvPE,kBAFA,eAFA,YAGA,gBAFA,gBnB43DF,CmBv3DE,gBACE,YACA,gBnBy3DJ,CmBt3DE,4CAEE,WnBw3DJ,CkBvoDA,6BAMI,kBAFA,eAFA,YAGA,gBAFA,gBlB2oDJ,CkB9oDA,mCASI,YACA,gBlBwoDJ,CkBlpDA,kFAcI,WlBwoDJ,CkBtpDA,oCAoBI,eAHA,YAIA,gBAHA,gBACA,gBlB0oDJ,CkBpoDA,UCnRE,kBAFA,eAFA,YAGA,sBAFA,iBnBi6DF,CmB55DE,gBACE,YACA,gBnB85DJ,CmB35DE,4CAEE,WnB65DJ,CkBhpDA,6BAMI,kBAFA,eAFA,YAGA,sBAFA,iBlBopDJ,CkBvpDA,mCASI,YACA,gBlBipDJ,CkB3pDA,kFAcI,WlBipDJ,CkB/pDA,oCAoBI,eAHA,YAIA,sBAHA,gBACA,iBlBmpDJ,CkBxoDA,cAEE,iBlByoDF,CkB3oDA,4BAMI,oBlBwoDJ,CkBpoDA,uBAKE,aAAc,CAEd,YACA,iBAEA,mBAAoB,CATpB,iBAAkB,CAElB,OAAQ,CAMR,iBAAkB,CAPlB,KAAM,CAIN,WAFA,SlB4oDF,CkBpoDA,4HAIE,YACA,iBAFA,UlBwoDF,CkBpoDA,4HAIE,YACA,iBAFA,UlBwoDF,CkBloDA,iRClZI,anBgiEJ,CkB9oDA,2BC9YI,qBfiDF,oDACQ,2CJ++DV,CmB/hEI,iCACE,qBf8CJ,oEACQ,2DJo/DV,CkBxpDA,gCCnYI,yBACA,qBAFA,anBiiEJ,CkB7pDA,oCC9XI,anB8hEJ,CkB7pDA,iRCrZI,anB8jEJ,CkBzqDA,2BCjZI,qBfiDF,oDACQ,2CJ6gEV,CmB7jEI,iCACE,qBf8CJ,oEACQ,2DJkhEV,CkBnrDA,gCCtYI,yBACA,qBAFA,anB+jEJ,CkBxrDA,oCCjYI,anB4jEJ,CkBxrDA,6PCxZI,anB4lEJ,CkBpsDA,yBCpZI,qBfiDF,oDACQ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FA,0BAqBI,oBAAqB,CACrB,qBlBiwFJ,CkBvxFA,gIA2BM,UlBiwFN,CkB5xFA,wCAiCI,UlB8vFJ,CkB/xFA,4BAqCI,eAAgB,CAChB,qBlB6vFJ,CkBnyFA,2CA6CI,oBAAqB,CAErB,eAAgB,CADhB,YAAa,CAEb,qBlB0vFJ,CkB1yFA,uDAmDM,clB2vFN,CkB9yFA,kFAyDI,aAAc,CADd,iBlB2vFJ,CkBnzFA,kDA8DI,KlBwvFJ,CACF,C6Bj+FI,kDACE,iB7Bo+FJ,C6Bl+FI,oCACE,e7Bo+FN,CACF,C6B59FE,sCAME,QAAS,CzBvPX,wBACQ,gByBqPN,aAAc,CADd,cAAe,CADf,gBAAiB,CADjB,aAAc,CADd,U7Bs+FF,CACF,C6Bz9FA,8BDnUE,yBACA,0BCmUA,Y7B69FF,C6Bz9FA,mDD/TE,4BADA,6BARA,2BACA,4BCwUA,e7B+9FF,C6Br9FA,YC/UE,mBADA,e9ByyGF,C6Bt9FE,mBClVA,mBADA,e9B6yGF,C6Bv9FE,mBCrVA,mBADA,e9BizGF,C6Bj9FA,aC/VE,mBADA,e9BqzGF,C6Bl9FE,sCACE,UAAW,CAEX,iBADA,iB7Bs9FF,C6Bv8FA,aEtWA,oB/BkzGA,C6B38FA,cE1WA,qBAAuB,CF4WrB,kB7B68FF,C6B/8FA,4BAKI,c7B68FJ,CAXF,C6Bx7FA,gBACE,sBACA,oB7Bs8FF,C6Bx8FA,8BAKI,a7Bs8FJ,C6Br8FI,wEAGE,6BADA,a7Bw8FN,C6Bh9FA,6BAcI,U7Bq8FJ,C6Bn9FA,iCAmBM,a7Bm8FN,C6Bj8FM,8EAGE,6BADA,a7Bo8FR,C6B/7FM,8HAIE,yBADA,a7Bk8FR,C6B77FM,oIAIE,6BADA,a7Bg8FR,C6Bx7FM,wHAIE,yBADA,a7B27FR,C6Bt7FI,+EAIM,a7Bs7FR,C6Br7FQ,wHAGE,6BADA,a7Bw7FV,C6Bn7FQ,6LAIE,yBADA,a7Bs7FV,C6Bj7FQ,mMAIE,6BADA,a7Bo7FV,CACF,C6BngGA,+BAuFI,iB7B+6FJ,C6B96FI,0EAEE,qB7Bg7FN,C6B1gGA,yCA6FM,qB7Bg7FN,C6B7gGA,8DAmGI,oB7B86FJ,C6BjhGA,6BA4GI,a7Bw6FJ,C6Bv6FI,mCACE,a7By6FN,C6BvhGA,0BAmHI,a7Bu6FJ,C6Bt6FI,gEAEE,a7Bw6FN,C6Bp6FM,0LAEE,a7Bw6FR,C6Bh6FA,gBACE,sBACA,oB7Bk6FF,C6Bp6FA,8BAKI,a7Bk6FJ,C6Bj6FI,wEAGE,6BADA,U7Bo6FN,C6B56FA,8DAmBM,a7B+5FN,C6B75FM,8EAGE,6BADA,U7Bg6FR,C6B35FM,8HAIE,yBADA,U7B85FR,C6Bz5FM,oIAIE,6BADA,U7B45FR,C6Br5FM,wHAIE,yBADA,U7Bw5FR,C6Bn5FI,2FAIM,oB7Bm5FR,C6Bv5FE,0DAOM,wB7Bm5FR,C6B15FE,sDAUM,a7Bm5FR,C6Bl5FQ,wHAGE,6BADA,U7Bq5FV,C6Bh5FQ,6LAIE,yBADA,U7Bm5FV,C6B94FQ,mMAIE,6BADA,U7Bi5FV,CACF,C6Br+FA,+BA6FI,iB7B24FJ,C6B14FI,0EAEE,qB7B44FN,C6B5+FA,yCAmGM,qB7B44FN,C6B/+FA,8DAyGI,oB7B04FJ,C6Bn/FA,6BA6GI,a7By4FJ,C6Bx4FI,mCACE,U7B04FN,C6Bz/FA,0BAoHI,a7Bw4FJ,C6Bv4FI,gEAEE,U7By4FN,C6Br4FM,0LAEE,U7By4FR,CgC/gHA,YAIE,yBACA,kBAFA,eAAgB,CADhB,mBADA,gBhCqhHF,CgCthHA,eAQI,oBhCihHJ,CgCzhHA,yBAYM,WACA,iBAFA,ahCmhHN,CgC9hHA,oBAkBI,ahC+gHJ,CiC9hHA,OAGE,4BAA6B,CAC7B,kBAFA,mBADA,YjCmiHF,CiCpiHA,UASI,aAAc,CADd,YjCgiHJ,CiCxiHA,mBAcI,ejC6hHJ,CiC3iHA,mBAoBI,ejC2hHJ,CiC/iHA,WAwBI,cjC0hHJ,CiCjhHA,sCAEE,kBjCmhHF,CiCrhHA,oDASI,aAAc,CAHd,iBAAkB,CAElB,WAAY,CADZ,QjCqhHJ,CiC3gHA,eCtDE,yBACA,qBAFA,UlCukHF,CiChhHA,kBClDI,wBlCqkHJ,CiCnhHA,2BC9CI,alCokHJ,CiClhHA,YC1DE,yBACA,qBAFA,UlCklHF,CiCvhHA,eCtDI,wBlCglHJ,CiC1hHA,wBClDI,alC+kHJ,CiCzhHA,eC9DE,yBACA,qBAFA,UlC6lHF,CiC9hHA,kBC1DI,wBlC2lHJ,CiCjiHA,2BCtDI,alC0lHJ,CiChiHA,cClEE,yBACA,qBAFA,UlCwmHF,CiCriHA,iBC9DI,wBlCsmHJ,CiCxiHA,0BC1DI,alCqmHJ,CmC7mHA,OAUE,oBAJA,WALA,cAAe,CAEf,aAAc,CACd,eAAgB,CAChB,aAAc,CAHd,uBAKA,iBAAkB,CAElB,uBAAwB,CADxB,kBnCinHF,CmC3mHI,4BAEE,WAEA,cAAe,CADf,oBnC8mHN,CmCxmHE,aACE,YnC0mHJ,CmCtmHE,YACE,iBAAkB,CAClB,QnCwmHJ,CmCjmHA,eCtCE,wBpC0oHF,CoCvoHI,sDAEE,wBpCyoHN,CmCpmHA,eC1CE,wBpCipHF,CoC9oHI,sDAEE,wBpCgpHN,CmCvmHA,eC9CE,wBpCwpHF,CoCrpHI,sDAEE,wBpCupHN,CmC1mHA,YClDE,wBpC+pHF,CoC5pHI,gDAEE,wBpC8pHN,CmC7mHA,eCtDE,wBpCsqHF,CoCnqHI,sDAEE,wBpCqqHN,CmChnHA,cC1DE,wBpC6qHF,CoC1qHI,oDAEE,wBpC4qHN,CqCzqHA,wCACE,GAAQ,0BrC4qHR,CqC3qHA,GAAQ,uBrC8qHR,CACF,CqC3qHA,gCACE,GAAQ,0BrC8qHR,CqC7qHA,GAAQ,uBrCgrHR,CACF,CqCzqHA,UAIE,yBACA,kBjCsCA,kDACQ,0CiC3CR,YACA,mBACA,erC+qHF,CqCxqHA,cAQE,yBjCyBA,kDACQ,0CiC5BR,WALA,UAAW,CAGX,eADA,WAAY,CAEZ,iBAEA,iBAAkB,CjCoJlB,kCACK,6BACG,0BiC3JR,OrCqrHF,CqCrqHA,sDCDI,8KACA,+KACA,sKDEF,yBrCyqHF,CqClqHA,oDjC5CE,0DACK,qDACG,iDJktHV,CqC/pHA,sBEvEE,wBvCyuHF,CuCtuHE,wCDgDE,8KACA,+KACA,qKtCyrHJ,CqCnqHA,mBE3EE,wBvCivHF,CuC9uHE,qCDgDE,8KACA,+KACA,qKtCisHJ,CqCvqHA,sBE/EE,wBvCyvHF,CuCtvHE,wCDgDE,8KACA,+KACA,qKtCysHJ,CqC3qHA,qBEnFE,wBvCiwHF,CuC9vHE,uCDgDE,8KACA,+KACA,qKtCitHJ,CwClwHA,+BAGE,oBAAqB,CADrB,iBAAkB,CAElB,qBxCowHF,CwCxwHA,yCAOI,UAAW,CADX,iBxCuwHJ,CwCpwHI,wNAIE,SxC0wHN,CwCpwHA,4GAKI,gBxCqwHJ,CwChwHA,aACE,gBxCkwHF,CwCnwHA,oEAOI,UxCiwHJ,CwCxwHA,oEAYI,exCiwHJ,CwC7vHA,yEACE,exC+vHF,CwC3vHA,4BACE,axC6vHF,CwC5vHE,mEZnDA,6BADA,yB5BozHF,CwC3vHA,2FZhDE,4BADA,wB5BizHF,CwC1vHA,sBACE,UxC4vHF,CwC1vHA,8DACE,exC4vHF,CwC1vHA,uIZpEE,6BADA,yB5Bo0HF,CwCzvHA,oEZlEE,4BADA,wB5Bg0HF,CwCxvHA,oEAEE,SxC0vHF,CwCzuHA,iCAEE,gBAAiB,CADjB,iBxC4uHF,CwCzuHA,oCAEE,iBAAkB,CADlB,kBxC4uHF,CwCtuHA,iCpC/CE,oDACQ,2CJwxHV,CwCtuHE,0CpCnDA,wBACQ,eJ4xHV,CwCnuHA,YACE,axCquHF,CwCluHA,eAEE,sBxCouHF,CwCjuHA,uBACE,sBxCmuHF,CwC5tHA,4FAII,aAAc,CACd,UAAW,CAEX,cAAe,CADf,UxC8tHJ,CwCpuHA,oCAcM,UxCytHN,CwCvuHA,gJAuBI,aAAc,CADd,exCwtHJ,CwCltHE,4DACE,exCotHJ,CwCltHE,sDZpKA,4BADA,6BARA,2BACA,2B5Bo4HF,CwCptHE,sDZxKA,8BADA,+BARA,yBACA,yB5B04HF,CwCrtHA,uEACE,exCutHF,CwCrtHA,yJZhLE,4BADA,4B5B24HF,CwCptHA,6EZ/LE,yBACA,yB5Bs5HF,CwChtHA,qBAIE,wBAAyB,CAHzB,aAAc,CAEd,kBAAmB,CADnB,UxCotHF,CwCttHA,0DAOI,kBAAmB,CACnB,UAAW,CACX,QxCmtHJ,CwC5tHA,qCAYI,UxCmtHJ,CwC/tHA,+CAgBI,SxCktHJ,CwCjsHA,gNAMM,kBAAsB,CACtB,mBAAoB,CAFpB,iBxCosHN,CyC56HA,aAGE,wBAAyB,CADzB,aAAc,CADd,iBzCg7HF,CyC36HE,0BACE,UAAW,CAEX,cAAe,CADf,ezC86HJ,CyCt7HA,2BAqBI,UAAW,CAGX,eAAgB,CAThB,iBAAkB,CAQlB,UAAW,CAPX,SzC66HJ,CyCn6HI,iCACE,SzCq6HN,CyC35HA,uGtB4BE,kBAFA,eAFA,YAGA,sBAFA,iBnB24HF,CmBt4HE,yHACE,YACA,gBnB04HJ,CmBv4HE,sRAEE,WnB64HJ,CyC76HA,uGtBuBE,kBAFA,eAFA,YAGA,gBAFA,gBnBk6HF,CmB75HE,yHACE,YACA,gBnBi6HJ,CmB95HE,sRAEE,WnBo6HJ,CyC37HA,+DAGE,kBzC67HF,CyC37HE,wKACE,ezC+7HJ,CyC37HA,oCAIE,qBAAsB,CADtB,kBAAmB,CADnB,QzC+7HF,CyCx7HA,mBAOE,yBACA,yBACA,kBAJA,cAHA,eACA,eAAgB,CAChB,aAAc,CAHd,iBAKA,iBzC67HF,CyCv7HE,4BAGE,kBADA,eADA,gBzC27HJ,CyCv7HE,4BAGE,kBADA,eADA,iBzC27HJ,CyC78HA,6EA0BI,YzCu7HJ,CyCl7HA,wUbrGE,6BADA,yB5BkiIF,CyCn7HA,+BACE,czCq7HF,CyCn7HA,iTbzGE,4BADA,wB5BuiIF,CyCp7HA,8BACE,azCs7HF,CyCj7HA,iBAIE,WAAY,CACZ,kBzCi7HF,CyCt7HA,uCACE,iBzCw7HF,CyCz7HA,2BAYM,gBzCg7HN,CyC76HI,qFAGE,SzC+6HN,CyC16HE,0EAGI,iBzC26HN,CyCx6HE,wEAII,gBAAiB,CADjB,SzC06HN,C0CllIA,OAEE,e1CmlIF,C0CjlIE,mBACE,Y1CmlIJ,C0C/kIA,mBAGE,MAAO,CADP,e1CklIF,C0C9kIA,YACE,a1CglIF,C0C7kIA,cACE,a1C+kIF,C0C5kIE,4BACE,c1C8kIJ,C0C1kIA,gCAEE,iB1C4kIF,C0CzkIA,8BAEE,kB1C2kIF,C0CxkIA,qCAGE,kBAAmB,CACnB,kB1C0kIF,C0CvkIA,cACE,qB1CykIF,C0CtkIA,cACE,qB1CwkIF,C0CpkIA,eAEE,iBAAkB,CADlB,Y1CukIF,C0ChkIA,YAEE,eAAgB,CADhB,c1CmkIF,C2CvnIA,YAGE,kBAAmB,CADnB,c3CynIF,C2ChnIA,iBAME,sBACA,yBALA,aAAc,CAGd,kBAAmB,CAFnB,iBAAkB,CAFlB,iB3CunIF,C2C9mIE,6Bf7BA,2BACA,2B5B8oIF,C2C/mIE,4BfvBA,8BADA,+BeyBE,e3CmnIJ,C2C9mIE,0FAKE,yBAFA,cACA,kB3CinIJ,C2CrnIE,qKASI,a3CinIN,C2C1nIE,4JAYI,a3CmnIN,C2C9mIE,oFAKE,sBACA,qBAFA,cADA,S3CmnIJ,C2CtnIE,ogBAYI,a3CqnIN,C2CjoIE,sJAeI,U3CunIN,C2C5mIA,yCAEE,a3C8mIF,C2ChnIA,2FAKI,U3C+mIJ,C2C3mIE,0GAIE,sBAFA,cACA,oB3CgnIJ,C2C3mIA,uBAEE,eAAgB,CADhB,U3C8mIF,CcptIC,yB8BKG,yBADA,a5CotIJ,C4CjtII,yDAEE,a5CmtIN,C4CrtII,2GAKI,a5CotIR,C4CjtIM,0IAGE,yBADA,a5CstIR,C4CntIM,6OAIE,yBACA,qBAFA,U5C0tIR,CcjvIC,sB8BKG,yBADA,a5CivIJ,C4C9uII,mDAEE,a5CgvIN,C4ClvII,qGAKI,a5CivIR,C4C9uIM,8HAGE,yBADA,a5CmvIR,C4ChvIM,2NAIE,yBACA,qBAFA,U5CuvIR,Cc9wIC,yB8BKG,yBADA,a5C8wIJ,C4C3wII,yDAEE,a5C6wIN,C4C/wII,2GAKI,a5C8wIR,C4C3wIM,0IAGE,yBADA,a5CgxIR,C4C7wIM,6OAIE,yBACA,qBAFA,U5CoxIR,Cc3yIC,wB8BKG,yBADA,a5C2yIJ,C4CxyII,uDAEE,a5C0yIN,C4C5yII,yGAKI,a5C2yIR,C4CxyIM,sIAGE,yBADA,a5C6yIR,C4C1yIM,uOAIE,yBACA,qBAFA,U5CizIR,C2C9sIA,yBAEE,iBAAkB,CADlB,Y3CitIF,C2C9sIA,sBAEE,eAAgB,CADhB,e3CitIF,C6Cx0IA,OAEE,sBACA,4BAA6B,CzC2D7B,6CACQ,qCyC9DR,kB7C+0IF,C6Cv0IA,YACE,Y7Cy0IF,C6Cp0IA,eAEE,mCAAoC,CjBtBpC,2BACA,4BiBoBA,iB7Cy0IF,C6C/zIA,uDALI,a7C60IJ,C6Cx0IA,aAGE,eADA,eAAgB,CADhB,Y7Cu0IF,C6Cx0IA,iGAWI,a7Co0IJ,C6C/zIA,cAEE,sBjBxCA,8BADA,+BiB0CA,6BAFA,iB7Cq0IF,C6CzzIA,sDAGI,e7C0zIJ,C6C7zIA,wFAOM,eAAgB,CADhB,kB7C4zIN,C6CvzII,wIAEI,YAAa,CjBzEnB,2BACA,2B5Bm4IF,C6CrzII,oIAEI,eAAgB,CjBxEtB,8BADA,8B5Bk4IF,C6C90IA,+EjB5DE,yBACA,yB5B64IF,C6C5yIA,kFACE,kB7CizIF,C6CzyIA,4EAII,e7C0yIJ,C6C9yIA,oGAQM,kBADA,kB7C6yIN,C6CpzIA,0XAmBQ,2BACA,2B7C4yIR,C6Ch0IA,wsBAwBU,0B7CkzIV,C6C10IA,gsBA4BU,2B7CwzIV,C6Cp1IA,yWA0CQ,8BADA,8B7CuzIR,C6Ch2IA,4qBA8CU,6B7C4zIV,C6C12IA,oqBAkDU,8B7Ck0IV,C6Cp3IA,8HA2DI,yB7C+zIJ,C6C13IA,oGA+DI,Y7C+zIJ,C6C93IA,gEAmEI,Q7C+zIJ,C6Cl4IA,gqBA0EU,a7Cs0IV,C6Ch5IA,opBA8EU,c7Cg1IV,C6C95IA,w3BAgGU,e7Ck1IV,C6Cl7IA,yBAuGI,QAAS,CADT,e7Cg1IJ,C6Cr0IA,aACE,kB7Cu0IF,C6Cx0IA,oBAMI,kBADA,e7Cu0IJ,C6C50IA,2BASM,c7Cs0IN,C6C/0IA,4BAcI,e7Co0IJ,C6Cl1IA,gHAkBM,4B7Co0IN,C6Ct1IA,2BAuBI,Y7Ck0IJ,C6Cz1IA,uDAyBM,+B7Cm0IN,C6C5zIA,eC5PE,iB9C2jJF,C8CzjJE,8BAEE,sBACA,kBAFA,a9C6jJJ,C8C9jJE,0DAMI,qB9C2jJN,C8CjkJE,qCAUI,yBADA,U9C4jJN,C8CxjJE,yDAEI,wB9CyjJN,C6C30IA,eC/PE,oB9C6kJF,C8C3kJE,8BAEE,yBACA,qBAFA,U9C+kJJ,C8ChlJE,0DAMI,wB9C6kJN,C8CnlJE,qCAUI,sBADA,a9C8kJN,C8C1kJE,yDAEI,2B9C2kJN,C6C11IA,eClQE,oB9C+lJF,C8C7lJE,8BAEE,yBACA,qBAFA,a9CimJJ,C8ClmJE,0DAMI,wB9C+lJN,C8CrmJE,qCAUI,yBADA,a9CgmJN,C8C5lJE,yDAEI,2B9C6lJN,C6Cz2IA,YCrQE,oB9CinJF,C8C/mJE,2BAEE,yBACA,qBAFA,a9CmnJJ,C8CpnJE,uDAMI,wB9CinJN,C8CvnJE,kCAUI,yBADA,a9CknJN,C8C9mJE,sDAEI,2B9C+mJN,C6Cx3IA,eCxQE,oB9CmoJF,C8CjoJE,8BAEE,yBACA,qBAFA,a9CqoJJ,C8CtoJE,0DAMI,wB9CmoJN,C8CzoJE,qCAUI,yBADA,a9CooJN,C8ChoJE,yDAEI,2B9CioJN,C6Cv4IA,cC3QE,oB9CqpJF,C8CnpJE,6BAEE,yBACA,qBAFA,a9CupJJ,C8CxpJE,yDAMI,wB9CqpJN,C8C3pJE,oCAUI,yBADA,a9CspJN,C8ClpJE,wDAEI,2B9CmpJN,C+ClqJA,OAIE,eAAgB,CAFhB,cADA,cAAe,CAEf,iB/CqqJF,C+CxqJA,UAOI,c/CoqJJ,C+C3qJA,2BAYM,sBACA,sBACA,mBAJA,oBAAqB,CACrB,gB/CwqJN,C+CnrJA,oCAoBM,yBADA,oB/CqqJN,C+CxrJA,iCA2BM,W/CiqJN,C+C5rJA,yCAkCM,U/C8pJN,C+ChsJA,2FA6CM,sBAFA,cACA,kB/C4pJN,CgD1sJA,YAIE,kBAHA,oBAAqB,CAErB,cADA,chD8sJF,CgDhtJA,eAOI,chD4sJJ,CgDntJA,qCAiBM,sBACA,sBAHA,cAJA,UAAW,CAGX,uBADA,gBAAiB,CADjB,iBAFA,iBAAkB,CAMlB,oBhD+sJN,CgD3sJM,kGAIE,yBACA,kBAFA,cADA,ShDktJR,CgD5sJI,6DpBfF,8BADA,2BoBmBM,ahD+sJR,CgD3sJI,2DpB9BF,+BADA,2B5B+uJF,CgDtsJI,qKAME,yBACA,qBAHA,WACA,cAAe,CAFf,ShD+sJN,CgD/vJA,iLAiEM,sBACA,kBAHA,cACA,kBhD0sJN,CgD/rJA,2CCvEM,eACA,sBAFA,iBjD6wJN,CiDzwJI,mErBMF,8BADA,0B5BywJF,CiDxwJI,iErBRF,+BADA,2B5BsxJF,CgD1sJA,2CC5EM,eACA,gBAFA,gBjD6xJN,CiDzxJI,mErBMF,8BADA,0B5ByxJF,CiDxxJI,iErBRF,+BADA,2B5BsyJF,CkDzyJA,kBAEE,aAAc,CACd,QA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AU,2B1DmrKV,C0DlrKA,4BACU,4B1DqrKV,Cc9mKA,kBACE,uBdknKF,Cc9mKA,mBACE,wBdknKF,Cc9mKA,yBACE,8BdknKF,CAdF,Cc/lKE,4D4C3FA,uB1D6sKA,C0D5sKA,iBAAU,uB1D+sKV,C0D9sKA,cAAU,2B1DitKV,C0DhtKA,4BACU,4B1DmtKV,CcvnKA,kBACE,uBd2nKF,CcvnKA,mBACE,wBd2nKF,CcvnKA,yBACE,8Bd2nKF,CAdF,CcxmKE,sC4ChHA,uB1D2uKA,C0D1uKA,iBAAU,uB1D6uKV,C0D5uKA,cAAU,2B1D+uKV,C0D9uKA,4BACU,4B1DivKV,CchoKA,kBACE,uBdooKF,CchoKA,mBACE,wBdooKF,CchoKA,yBACE,8BdooKF,CAdF,CcjnKE,oC4C7HA,sB1DiwKA,CACF,CchoKE,0D4ClIA,sB1DswKA,CACF,CchoKE,2D4CvIA,sB1D2wKA,CACF,CchoKE,qC4C5IA,sB1DgxKA,CACF,Cc1nKA,e4CvJE,sB1DoxKF,Cc1nKE,4B4ClKA,uB1DgyKA,C0D/xKA,oBAAU,uB1DkyKV,C0DjyKA,iBAAU,2B1DoyKV,C0DnyKA,kCACU,4B1DsyKV,CACF,CcroKA,qBACE,sBduoKF,CcroKE,kCACE,uBdwoKF,CACF,CctoKA,sBACE,sBdwoKF,CctoKE,mCACE,wBdyoKF,CACF,CcvoKA,4BACE,sBdyoKF,CcvoKE,yCACE,8Bd0oKF,CcroKA,c4CrLA,sB1D+zKA,CAJF,C2Dj0KA,oCACE,UAEE,iB3Dw0KF,CACF,C2Dp0KA,oCACE,kBACE,sB3Ds0KF,CACF,C2Dn0KA,0DACE,eACE,yB3Dq0KF,C2Dl0KA,kBACE,sB3Do0KF,C2Dj0KA,oBACE,0B3Dm0KF,C2Dh0KA,sBACE,wB3Dk0KF,CACF,C2D/zKA,oCACE,eACE,yB3Di0KF,C2D9zKA,oBACE,0B3Dg0KF,CACF,C4Dx2KA,UACE,aAAc,CACd,c5D02KF,C4Dv2KA,kBACE,kBAAmB,CACnB,YAAa,CACb,M5Dy2KF,C4Dt2KA,oCACE,e5Dw2KF,C4Dr2KA,cACE,MAAO,CACP,c5Du2KF,C4Dp2KA,oCACE,UAEE,kBA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m5QJ,CiH94QE,iI3FhBA,yBACA,WtBq6QF,CiH94QE,sCAEE,mBACA,yB7GuCF,wBACQ,gB6GtCN,ajHi5QJ,CiH54QE,2PAME,mBACA,yB7GyBF,wBACQ,gB6GxBN,ajH+4QJ,CiHz4QI,uOAOE,iBjH24QN,CiHj8QE,8IAME,mBACA,yB7GyDF,wBACQ,gB6GxDN,UjHo8QJ,CiH/7QE,iI3FhBA,yBACA,WtBs9QF,CiH/7QE,sCAEE,mBACA,yB7GuCF,wBACQ,gB6GtCN,UjHk8QJ,CiH77QE,2PAME,mBACA,yB7GyBF,wBACQ,gB6GxBN,UjHg8QJ,CiH17QI,uOAOE,iBjH47QN,CiHl/QE,8IAME,mBACA,yB7GyDF,wBACQ,gB6GxDN,UjHq/QJ,CiHh/QE,iI3FhBA,yBACA,WtBugRF,CiHh/QE,sCAEE,mBACA,yB7GuCF,wBACQ,gB6GtCN,UjHm/QJ,CiH9+QE,2PAME,mBACA,yB7GyBF,wBACQ,gB6GxBN,UjHi/QJ,CiH3+QI,uOAOE,iBjH6+QN,CiHniRE,wIAME,mBACA,yB7GyDF,wBACQ,gB6GxDN,UjHsiRJ,CiHjiRE,4H3FhBA,yBACA,WtBwjRF,CiHjiRE,oCAEE,mBACA,yB7GuCF,wBACQ,gB6GtCN,UjHoiRJ,CiH/hRE,qPAME,mBACA,yB7GyBF,wBACQ,gB6GxBN,UjHkiRJ,CiH5hRI,gOAOE,iBjH8hRN,CiHthRE,sNAME,mBACA,yB7GLF,wBACQ,gB6GMN,ajHyhRJ,CiHphRE,6L3F9EA,yBACA,WtBymRF,CiHphRE,8DAEE,mBACA,yB7GvBF,wBACQ,gB6GwBN,ajHuhRJ,CiHlhRE,+PAME,mBACA,yB7GrCF,wBACQ,gB6GsCN,ajHqhRJ,CiH/gRI,2TAOE,mBACA,yB7GrDJ,wBACQ,gB6GsDJ,iBjHkhRN,CiH3kRE,sNAME,mBACA,yB7GLF,wBACQ,gB6GMN,UjH8kRJ,CiHzkRE,6L3F9EA,yBACA,WtB8pRF,CiHzkRE,8DAEE,mBACA,yB7GvBF,wBACQ,gB6GwBN,UjH4kRJ,CiHvkRE,+PAME,mBACA,yB7GrCF,wBACQ,gB6GsCN,UjH0kRJ,CiHpkRI,2TAOE,mBACA,yB7GrDJ,wBACQ,gB6GsDJ,iBjHukRN,CiHz+QA,4BAEI,iBjH0+QJ,CiHnoRE,wOAME,uBACA,yB7GLF,wBACQ,gB6GMN,ajHsoRJ,CiHjoRE,4M3F9EA,yBACA,WtBstRF,CiHjoRE,oEAEE,mBACA,yB7GvBF,wBACQ,gB6GwBN,ajHooRJ,CiH/nRE,iRAME,mBACA,yB7GrCF,wBACQ,gB6GsCN,ajHkoRJ,CiH5nRI,gVAOE,uBACA,yB7GrDJ,wBACQ,gB6GsDJ,iBjH+nRN,CiHjiRA,6BAoBI,iBjHghRJ,CiH3rRE,8OAME,mBACA,yB7GLF,wBACQ,gB6GMN,UjH8rRJ,CiHzrRE,iN3F9EA,yBACA,WtB8wRF,CiHzrRE,sEAEE,mBACA,yB7GvBF,wBACQ,gB6GwBN,UjH4rRJ,CiHvrRE,uRAME,mBACA,yB7GrCF,wBACQ,gB6GsCN,UjH0rRJ,CiHprRI,uVAOE,mBACA,yB7GrDJ,wBACQ,gB6GsDJ,iBjHurRN,CkH9yRE,yMAGE,cACA,elHmzRJ,CkHvzRE,iFAGE,cACA,elHyzRJ,CkH7zRE,0LAGE,cACA,elHk0RJ,CkHt0RE,kiBAGE,WACA,elHo1RJ,CkHx1RE,iFAGE,cACA,elH01RJ,CkH91RE,qfAGE,cACA,elH42RJ,CkHh3RE,uFAGE,cACA,elHk3RJ,CkHt3RE,8EAGE,cACA,elHw3RJ,CkH53RE,oFAGE,cACA,elH83RJ,CkH50RA,uBAGI,mBADA,elH80RJ,CkHh1RA,uBAOI,YlH40RJ,CmH14RA,yCAEE,qBACA,kCnH44RF,CmH14RE,qDACE,qBACA,kCnH64RJ,CmHz4RA,8BACE,qBACA,kCnH24RF,CmHz4RE,oCACE,qBACA,kCnH24RJ,CmHv4RA,gCACE,qBACA,kCnHy4RF,CmHv4RE,sCACE,qBACA,kCnHy4RJ,CmHp4RA,mBACE,enHs4RF,CmHv4RA,+BAMI,cACA,eAHA,cnHw4RJ,CmH54RA,6BAWI,QnHo4RJ,CoHh7RA,cACE,mBJwBA,wGIvBA,cpHm7RF,CoHr7RA,gBAOI,UpHi7RJ,CoHx7RA,mBAYM,mBACA,qBAEA,apH86RN,CoH36RI,kDAEE,mBACA,qBAEA,apH46RN,CoHz6RI,0BACE,mBACA,qBAEA,apH06RN,CqHx8RA,eACE,WAAY,CLYZ,kGhH+7RF,CqHr8RA,uCAII,cAFA,aAAc,CAGd,erHq8RJ,CqH18RA,4CAWI,eAFA,erHq8RJ,CqH98RA,2DAiBM,UAAW,CAKX,cAAe,CAFf,WAAY,CANZ,gBAAiB,CAEjB,iBAAkB,CAGlB,UrHm8RN,CqH37RA,8BACE,mBrH67RF,CqH17RA,sBACE,wBrH47RF,CqHz7RA,8MAQM,qBAAsB,CAEtB,arHw7RN,CqHl7RA,sBACE,QrHo7RF,CsH/+RA,eACE,kBAAmB,CACnB,0BtHi/RF,CsH7+RA,4BACE,eAAgB,CAChB,iBtH++RF,CsH3+RA,+BACE,iBtH6+RF,CuH1/RA,yBACE,yBvH4/RF,CuHz/RA,yBAIE,avH0/RF,CuHv/RA,iDANE,6BACA,iBvHggSF,CuHt/RA,wBACE,6BAGA,cACA,eAAiB,CAHjB,gBvH0/RF,CuHn/RA,0DAGI,avHo/RJ,CuHh/RA,sDAII,eAAgB,CAFhB,eAAgB,CAChB,kBvHk/RJ,CuHr/RA,qDASI,eAAgB,CAChB,sBAAuB,CAFvB,kBvHk/RJ,CuH3+RA,wBACE,kBvH6+RF,CuH3+RE,mCACE,gBvH6+RJ,CuHz+RA,2CACE,evH2+RF,CwHliSA,eACE,exHoiSF,CwHriSA,+BAII,6BAGA,cAFA,gBxHqiSJ,CwHjiSI,mEACE,iBxHoiSJ,CwHriSE,8CAII,UAAW,CACX,kBxHoiSN,CACF,CwHnjSA,gHAqBM,axHmiSN,CwHxjSA,8EA0BM,axHkiSN,CwH9hSM,6JAGE,axHgiSR,CwH7hSM,4GAEE,axH+hSR,CyHtkSA,YACE,iBzHwkSF,CyHzkSA,6BAII,0BACA,0BzHwkSJ,CyH7kSA,yCASI,wBzHukSJ,CyHhlSA,wCAaI,2BzHskSJ,CyHlkSA,+BAEE,oBADA,iBAGA,iBzHmkSF,CyHvkSA,iCAOI,azHmkSJ,C0H3lSA,UtHkEE,wBACQ,eJ4hSV,C0H3lSA,2BACE,gBAAiB,CACjB,iBAAkB,CAClB,iB1H6lSF,C0H3lSE,uCACE,e1H6lSJ,C0H1lSE,sCACE,kB1H4lSJ,C0HzlSE,8FAGE,mBACA,WAAY,CAEZ,a1H0lSJ,C0HvlSE,oGAGE,mBAEA,a1HwlSJ,C0HplSI,4OAME,mBAEA,WACA,e1HqlSN,C0H9lSI,sRAYI,mBAEA,a1HylSR,C2H1oSA,+BACE,iB3H4oSF,C4H7oSA,OACE,WAAY,CACZ,iB5H+oSF,C4HjpSA,2CAMI,e5H+oSJ,C4HrpSA,oBAUI,a5H8oSJ,C4HxpSA,+BAcI,e5H6oSJ,C4H3pSA,2CAkBI,e5H4oSJ,C4H9pSA,gBAsBI,e5H2oSJ,C4HzoSI,4BACE,Y5H2oSN,C4HpqSA,uBA6BM,WAAY,CAEZ,cACA,e5HyoSN,C4HnoSA,kCACE,a5HqoSF,C6H5qSA,YACE,yBACA,e7H8qSF,C6H3qSA,qDAEE,oB7H6qSF,C6HzqSA,kBACE,Q7H2qSF,C6HvqSA,oCAEE,a7HyqSF,C8H1rSA,wCAEI,mBACA,kBACA,e9H2rSJ,C8H/rSA,0CAWI,cACA,cAAe,CAJf,WAAY,CAKZ,gBAAiB,CAJjB,U9H6rSJ,C8HtsSA,iDAiBI,wB9HwrSJ,C8HzsSA,gEAoBM,U9HwrSN,C8HprSE,+DACE,a9HurSF,CACF,C8HnrSA,2BACE,iB9HqrSF,C8HnrSE,+DACE,yB9HsrSF,CACF,C8HnrSA,kEAEI,e9HorSJ,C8HlrSI,sGACE,c9HqrSJ,CACF,C8HhrSA,6GAII,a9HirSJ,C8HrrSA,mHAUI,a9HgrSJ,C8H3qSA,gBACE,a9H6qSF,C8HzqSA,uCACE,c9H2qSF,C8HzqSE,kDACE,e9H2qSJ,C8HtqSA,0BACE,qBAAsB,CACtB,iB9HwqSF,C8HpqSA,qCACE,iB9HsqSF,C8HpqSE,yEACE,e9HuqSF,CACF,C8HpqSA,mCACE,cACA,c9HsqSF,C8HxqSA,4HAOI,a9HsqSJ,C8H5pSI,4RAGE,a9HmqSN,C8HhqSI,gKAGE,a9HkqSN,C8H5pSA,yBACE,a9H8pSF,C8H/pSA,wCAKI,iBADA,a9H+pSJ,C8H3pSE,6DAGE,eAFA,gB9H+pSF,C8HhqSA,wCAMI,a9H6pSJ,CACF,C+HzySA,oBACE,wB/H2ySF,C+HxySA,4BACE,kB/H0ySF,C+HvySA,yCACE,a/HyySF,C+H1ySA,wDAOI,cAAe,CAFf,WAAY,CAGZ,gBAAiB,CAJjB,U/H4ySJ,C+HhzSA,oDAYI,eAAgB,CAEhB,iBAAkB,CAClB,O/HsySJ,C+HlySA,sBACE,a/HoySF,C+HlySE,0DACE,gBAEA,iB/HoySF,CACF,CgIt0SA,YACE,wBhIw0SF,CgIp0SA,iCACE,gBhIs0SF,CgIl0SA,0BAGE,cACA,eAHA,kBhIs0SF,CgIh0SA,sBAEE,kBADA,uBhIm0SF,CgI/zSA,wBACE,cACA,chIi0SF,CgI9zSA,0BACE,ehIg0SF,CiI51SA,qBACE,wBjI81SF,CiI31SA,gCAEI,ajI41SJ,CiI91SA,sBAMI,ejI21SJ,CkIp2SA,YACE,gBACA,qBlIs2SF,CkIl2SA,WACE,alIo2SF,CkIr2SA,0BAII,iBlIo2SJ,CkIx2SA,6MAgBM,alIm2SN,CkI71SA,4BAEI,sBACA,iBlI81SJ,CkIj2SA,+BAOI,4BAA6B,CAM7B,cALA,iBAEA,iBAAkB,CAClB,OlI61SJ,CkIx2SA,8CAqBM,cAAe,CACf,gBAAiB,CANjB,gBAAiB,CAEjB,iBAAkB,CAClB,QlI41SN,CkIr1SE,wBACE,cAAiB,CACjB,elIu1SJ,CkIr1SI,qFAGE,alIu1SN,CkIp1SI,gIAIE,cACA,oBlIs1SN,CkI/3SA,6BA8CI,gBlIo1SJ,CkI/0SA,qBACE,kBACA,gBACA,gBlIi1SF,CkI/0SE,yDACE,clIk1SF,CkIn1SA,oCAII,clIk1SJ,CkIt1SA,uBAQI,YlIi1SJ,CACF,CkI50SA,sBACE,mBlI80SF,CkI10SA,kBACE,yBACA,WAAY,CACZ,kBACA,kBlI40SF,CkI10SE,6BACE,kBlI40SJ,CkIz0SE,sDACE,eAAkB,CAElB,mBlI40SF,CACF,CkIv0SE,uBACE,cAAiB,CACjB,elIy0SJ,CkIv0SI,kFAGE,alIy0SN,CkIt0SI,4HAIE,cACA,oBlIw0SN,CkIx1SA,eAqBI,cACA,clIs0SJ,CkIj0SA,qCAGE,oBADA,gBlIo0SF,CkIt0SA,iDAMI,kBlIo0SJ,CkI10SA,6DAYI,eAFA,elIq0SJ,CkI9zSA,a5GtKE,yBACA,WtBu+SF,CmIx+SA,uBACE,gBnI0+SF,CmIv+SA,sBAIE,gBAAiB,CACjB,iBAAkB,CAFlB,oBADA,aAAgB,CADhB,iBnI6+SF,CmIv+SE,4BAKE,QAAW,CAJX,6BAAqC,CAUrC,iBAAkB,CADlB,WAAY,CARZ,aAAc,CAKd,QAAW,CAHX,iBAAkB,CAIlB,UnIy+SJ,CoI3/SA,gCACE,iBpI6/SF,CoI1/SA,iCACE,sBAEA,UpI2/SF,CoIv/SA,6HAKI,apIw/SJ,CoI7/SA,wOAcI,apIu/SJ,CoIl/SA,0B9G/BE,yBACA,WtBohTF,CqIphTA,WACE,kBrIshTF,CqIlhTA,kDAGI,iBrImhTJ,CqI9gTA,kBACE,arIghTF,CqIjhTA,sBAKI,YAAa,CADb,WrIihTJ,CqI3gTA,oKAOI,cACA,eACA,erI4gTJ,CqIvgTA,4FAKI,arIwgTJ,CqI7gTA,4EAWI,arIugTJ,CqIjgTE,qDACE,erIogTF,CACF,CqIvgTA,oBAMI,QrIogTJ,CqI1gTA,oBAaI,cAHA,oBAAqB,CAIrB,eAHA,iBrIqgTJ,CqIhgTI,wDACE,YrImgTJ,CACF,CqIrhTA,oCAsBI,YrIkgTJ,CqI7/SA,oCACE,qBACE,aAAc,CACd,QrI+/SF,CACF,CqI5/SA,oCACE,qBACE,YrI8/SF,CACF,CqI1/SA,oCACE,iBACE,erI4/SF,CACF,CqIx/SA,oCACE,gBACE,erI0/SF,CACF,CsIlmTA,kClIiEE,wBACQ,gBkI9DR,UtIomTF,CuIxmTA,mBACE,iBvI0mTF,CuItmTA,sDAEE,wBAAyB,CACzB,oBAAqB,CAGrB,aAAc,CAFd,evIymTF,CuI7mTA,oFASI,wBAAyB,CACzB,WAAY,CAEZ,avIumTJ,CuInnTA,kSAiBM,avI0mTN,CuI3nTA,8SAuBM,avI4mTN,CuInoTA,4DA4BI,oBvI2mTJ,CuIvmTA,sDAEE,kBAAmB,CACnB,WAAY,CACZ,iBvIymTF,CuIlmTA,2GACE,kBvIwmTF,CuItmTE,8EAEE,oBAAqB,CACrB,iBvIwmTJ,CuInmTA,8BACE,4GAOA,WvI+lTF,CuI5lTA,6BACE,sBAAuB,CAMvB,cALA,wBAAyB,CACzB,qBAAsB,CACtB,mBAAoB,CACpB,oBAAqB,CACrB,gBvI+lTF,CuI3lTA,qDACE,mBAAoB,CACpB,gBAAiB,CACjB,cAAe,CACf,eAAgB,CAChB,WvI6lTF,CuI1lTA,gCAOE,kBAAmB,CAEnB,8BAHA,YAAa,CADb,WAAY,CAGZ,sBAAuB,CALvB,MAAO,CAFP,iBAAkB,CAClB,KAAM,CAEN,UvIimTF,CuIzlTA,+BlHlGE,yBACA,kBAFA,arBisTF,CqB7rTE,0EAGE,yBACA,qBAFA,arBisTJ,CqB7rTE,qCAEE,yBACA,qBAFA,arBisTJ,CqB7rTE,iIAIE,yBACA,qBAAsB,CACtB,qBAHA,arBksTJ,CqB7rTI,ybAIE,yBACA,qBAFA,arBusTN,CqB/rTI,+bAGE,yBACA,iBrBusTN,CuI1oTA,sClHvDI,yBADA,arBssTJ,CiHjvTE,0PAME,mBACA,yB7GyDF,wBACQ,gB6GxDN,ajHovTJ,CiH/uTE,2N3FhBA,yBACA,WtBswTF,CiH/uTE,0EAEE,mBACA,yB7GuCF,wBACQ,gB6GtCN,ajHkvTJ,CiH7uTE,uWAME,mBACA,yB7GyBF,wBACQ,gB6GxBN,ajHgvTJ,CiH1uTI,qWAOE,iBjH4uTN,CuI3rTA,0GAGE,iBAAkB,CAClB,0BACA,gBvI6rTF,CwI1yTA,cACE,gBACA,4BACA,0BAEA,axI2yTF,CwIhzTA,qBAUI,cACA,cAAe,CACf,gBAAiB,CAJjB,aAAgB,CAKhB,gBxI0yTJ,CwIryTA,6BACE,axIuyTF,CwInyTA,wBACE,axIqyTF,CwInyTE,oCACE,YxIqyTJ,CwIlyTE,mCACE,exIoyTJ,CwI/xTA,2BAGI,gBAAmB,CADnB,axIiyTJ,CwI9xTI,uCACE,axIgyTN,CwI1xTA,sBAEI,exI2xTJ,CwI7xTA,4BAQI,cAFA,gBxI2xTJ,CwIpxTA,oCAEI,eAAgB,CAChB,iBxIqxTJ,CwIjxTA,mCAEI,eAAgB,CAChB,axIkxTJ,CwIrxTA,4CAQI,mBADA,exIkxTJ,CwI5wTA,0BAEI,gCACA,mBxI6wTJ,CwIhxTA,8BAMM,kBAGA,WAAY,CADZ,UxI6wTN,CwIzwTI,qCACE,WAAY,CACZ,gBxI2wTN,CyI32TA,MACE,qBzI62TF,C0I92TA,sCACE,iB1Ig3TF,C0I72TA,8BACE,a1I+2TF,C0I52TI,2IAGE,cACA,e1I82TN,C0I32TI,iJAGE,a1I62TN,C0I33TA,6CAmBI,cACA,e1I22TJ,C0Iv2TA,sBACE,a1Iy2TF,C2It4TA,0BACE,a3Iw4TF,C2Ij4TA,6DACE,a3Is4TF,C2In4TA,oCACE,a3Iq4TF,C4Il5TA,mIAMI,a5Io5TJ,C4I15TA,wJAaI,a5Im5TJ,C6Ih6TA,mCACE,wB7Ik6TF,C6I/5TA,+CACE,Q7Ii6TF,C6I95TA,+DAEI,e7I+5TJ,C8It1TA,0BAjFI,oB9I06TJ,C8Iz1TA,kOArEM,a9Iy6TN,C8Ih2TA,0BArFI,oB9Iw7TJ,C8In2TA,kOAzEM,a9Iu7TN,C8I12TA,0BAzFI,oB9Is8TJ,C8I72TA,kOA7EM,a9Iq8TN,C8Ip3TA,yBA7FI,oB9Io9TJ,C8Iv3TA,2NAjFM,a9Im9TN,C8I73TA,+BA/EI,gBACA,yBACA,kBACA,Y9I+8TJ,C8Ix8TM,0WAME,a9I68TR,C8I94TA,uCAzDI,a9I08TJ,C8I74TA,+BAnFI,gBACA,yBACA,kBACA,Y9Im+TJ,C8I59TM,0WAME,a9Ii+TR,C8I95TA,uCA7DI,a9I89TJ,C8I75TA,+BAvFI,gBACA,yBACA,kBACA,Y9Iu/TJ,C8Ih/TM,0WAME,a9Iq/TR,C8I96TA,uCAjEI,a9Ik/TJ,C8I76TA,8BA3FI,gBACA,yBACA,kBACA,Y9I2gUJ,C8IpgUM,mWAME,a9IygUR,C8I97TA,sCArEI,a9IsgUJ,C8I57TA,qCArEE,8BACA,iB9IogUF,C8I7/TI,0XAME,a9IkgUN,C8I38TA,qCArEE,8BACA,iB9ImhUF,C8I5gUI,0XAME,a9IihUN,C8I19TA,qCArEE,8BACA,iB9IkiUF,C8I3hUI,0XAME,a9IgiUN,C8Iz+TA,oCArEE,8BACA,iB9IijUF,C8I1iUI,mXAME,a9I+iUN,C8Ir+TA,+SA3DM,a9I2iUN,C8I5+TA,+SA/DM,a9IsjUN,C8In/TA,+SAnEM,a9IikUN,C8I1/TA,wSAvEM,a9I4kUN","sources":["webpack://misago/./src/style/index.less","webpack://misago/./node_modules/bootstrap/less/normalize.less","webpack://misago/./node_modules/bootstrap/less/print.less","webpack://misago/./node_modules/bootstrap/less/scaffolding.less","webpack://misago/./node_modules/bootstrap/less/mixins/vendor-prefixes.less","webpack://misago/./node_modules/bootstrap/less/mixins/tab-focus.less","webpack://misago/./node_modules/bootstrap/less/mixins/image.less","webpack://misago/./node_modules/bootstrap/less/type.less","webpack://misago/./node_modules/bootstrap/less/mixins/text-emphasis.less","webpack://misago/./node_modules/bootstrap/less/mixins/background-variant.less","webpack://misago/./node_modules/bootstrap/less/mixins/text-overflow.less","webpack://misago/./node_modules/bootstrap/less/code.less","webpack://misago/./node_modules/bootstrap/less/grid.less","webpack://misago/./node_modules/bootstrap/less/mixins/grid.less","webpack://misago/./node_modules/bootstrap/less/responsive-utilities.less","webpack://misago/./node_modules/bootstrap/less/mixins/grid-framework.less","webpack://misago/./node_modules/bootstrap/less/tables.less","webpack://misago/./node_modules/bootstrap/less/mixins/table-row.less","webpack://misago/./node_modules/bootstrap/less/forms.less","webpack://misago/./node_modules/bootstrap/less/mixins/forms.less","webpack://misago/./node_modules/bootstrap/less/buttons.less","webpack://misago/./node_modules/bootstrap/less/mixins/buttons.less","webpack://misago/./node_modules/bootstrap/less/mixins/opacity.less","webpack://misago/./node_modules/bootstrap/less/component-animations.less","webpack://misago/./node_modules/bootstrap/less/dropdowns.less","webpack://misago/./node_modules/bootstrap/less/mixins/nav-divider.less","webpack://misago/./node_modules/bootstrap/less/mixins/reset-filter.less","webpack://misago/./node_modules/bootstrap/less/navs.less","webpack://misago/./node_modules/bootstrap/less/mixins/border-radius.less","webpack://misago/./node_modules/bootstrap/less/navbar.less","webpack://misago/./node_modules/bootstrap/less/mixins/nav-vertical-align.less","webpack://misago/./node_modules/bootstrap/less/utilities.less","webpack://misago/./node_modules/bootstrap/less/breadcrumbs.less","webpack://misago/./node_modules/bootstrap/less/alerts.less","webpack://misago/./node_modules/bootstrap/less/mixins/alerts.less","webpack://misago/./node_modules/bootstrap/less/labels.less","webpack://misago/./node_modules/bootstrap/less/mixins/labels.less","webpack://misago/./node_modules/bootstrap/less/progress-bars.less","webpack://misago/./node_modules/bootstrap/less/mixins/gradients.less","webpack://misago/./node_modules/bootstrap/less/mixins/progress-bar.less","webpack://misago/./node_modules/bootstrap/less/button-groups.less","webpack://misago/./node_modules/bootstrap/less/input-groups.less","webpack://misago/./node_modules/bootstrap/less/media.less","webpack://misago/./node_modules/bootstrap/less/list-group.less","webpack://misago/./node_modules/bootstrap/less/mixins/list-group.less","webpack://misago/./node_modules/bootstrap/less/panels.less","webpack://misago/./node_modules/bootstrap/less/mixins/panels.less","webpack://misago/./node_modules/bootstrap/less/pager.less","webpack://misago/./node_modules/bootstrap/less/pagination.less","webpack://misago/./node_modules/bootstrap/less/mixins/pagination.less","webpack://misago/./node_modules/bootstrap/less/responsive-embed.less","webpack://misago/./node_modules/bootstrap/less/wells.less","webpack://misago/./node_modules/bootstrap/less/close.less","webpack://misago/./node_modules/bootstrap/less/badges.less","webpack://misago/./node_modules/bootstrap/less/modals.less","webpack://misago/./node_modules/bootstrap/less/mixins/clearfix.less","webpack://misago/./node_modules/bootstrap/less/mixins/center-block.less","webpack://misago/./node_modules/bootstrap/less/mixins/hide-text.less","webpack://misago/./node_modules/bootstrap/less/mixins/responsive-visibility.less","webpack://misago/./src/style/misago/scaffolding.less","webpack://misago/./src/style/misago/flex-row.less","webpack://misago/./src/style/misago/auth-message.less","webpack://misago/./src/style/misago/alerts-snackbar.less","webpack://misago/./src/style/misago/agreement-overlay.less","webpack://misago/./src/style/misago/loaders.less","webpack://misago/./src/style/misago/navbar.less","webpack://misago/./src/style/misago/navs.less","webpack://misago/./src/style/misago/breadcrumbs.less","webpack://misago/./src/style/misago/material-icons.less","webpack://misago/./src/style/misago/modals.less","webpack://misago/./src/style/misago/forms.less","webpack://misago/./src/style/misago/inputs.less","webpack://misago/./src/style/misago/buttons.less","webpack://misago/./src/style/misago/dropdowns.less","webpack://misago/./src/style/misago/category-label.less","webpack://misago/./src/style/misago/thread-flags.less","webpack://misago/./src/style/misago/thread-replies.less","webpack://misago/./src/style/misago/thread-user-card.less","webpack://misago/./src/style/misago/search-dropdown.less","webpack://misago/./src/style/misago/page-header.less","webpack://misago/./src/style/misago/page-container.less","webpack://misago/./src/style/misago/panels.less","webpack://misago/./src/style/misago/footer.less","webpack://misago/./src/style/misago/ui-preview.less","webpack://misago/./src/style/misago/pager.less","webpack://misago/./src/style/misago/pagination.less","webpack://misago/./src/style/misago/poll.less","webpack://misago/./src/style/misago/user-status.less","webpack://misago/./src/style/misago/user-card.less","webpack://misago/./src/style/misago/toolbar.less","webpack://misago/./src/style/misago/type.less","webpack://misago/./src/style/misago/markup.less","webpack://misago/./src/style/misago/change-avatar.less","webpack://misago/./src/style/misago/categories-lists.less","webpack://misago/./src/style/misago/posting.less","webpack://misago/./src/style/misago/editor.less","webpack://misago/./src/style/misago/participants.less","webpack://misago/./src/style/misago/poll-editor.less","webpack://misago/./src/style/misago/posts-list.less","webpack://misago/./src/style/misago/post.less","webpack://misago/./src/style/misago/post-feed.less","webpack://misago/./src/style/misago/event.less","webpack://misago/./src/style/misago/post-changelog.less","webpack://misago/./src/style/misago/message-pages.less","webpack://misago/./src/style/misago/threads-lists.less","webpack://misago/./src/style/misago/active-posters.less","webpack://misago/./src/style/misago/user-profile.less","webpack://misago/./src/style/misago/username-history.less","webpack://misago/./src/style/misago/search.less","webpack://misago/./highlight/styles/foundation.css","webpack://misago/./node_modules/at.js/dist/css/jquery.atwho.css","webpack://misago/./src/style/flavor/typo.less","webpack://misago/./src/style/flavor/shadows.less","webpack://misago/./src/style/flavor/buttons.less","webpack://misago/./src/style/flavor/social-buttons.less","webpack://misago/./src/style/flavor/inputs.less","webpack://misago/./src/style/flavor/auth-message.less","webpack://misago/./src/style/flavor/dropdowns.less","webpack://misago/./src/style/flavor/navbar.less","webpack://misago/./src/style/flavor/search-dropdown.less","webpack://misago/./src/style/flavor/page-footer.less","webpack://misago/./src/style/flavor/list-group.less","webpack://misago/./src/style/flavor/navs.less","webpack://misago/./src/style/flavor/username-history.less","webpack://misago/./src/style/flavor/panels.less","webpack://misago/./src/style/flavor/form.less","webpack://misago/./src/style/flavor/categories-lists.less","webpack://misago/./src/style/flavor/participants.less","webpack://misago/./src/style/flavor/poll.less","webpack://misago/./src/style/flavor/posting.less","webpack://misago/./src/style/flavor/post.less","webpack://misago/./src/style/flavor/post-feed.less","webpack://misago/./src/style/flavor/event.less","webpack://misago/./src/style/flavor/user-card.less","webpack://misago/./src/style/flavor/progress-bars.less","webpack://misago/./src/style/flavor/markup.less","webpack://misago/./src/style/flavor/modals.less","webpack://misago/./src/style/flavor/wells.less","webpack://misago/./src/style/flavor/active-posters.less","webpack://misago/./src/style/flavor/message-pages.less","webpack://misago/./src/style/flavor/user-options.less","webpack://misago/./src/style/flavor/profile-details.less","webpack://misago/./src/style/flavor/ranks-flavors.less"],"sourcesContent":["/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: none;\n  text-decoration: underline;\n  text-decoration: underline dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\nmark {\n  background: #ff0;\n  color: #000;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\nsup {\n  top: -0.5em;\n}\nsub {\n  bottom: -0.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  box-sizing: content-box;\n  height: 0;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit;\n  font: inherit;\n  margin: 0;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: textfield;\n  box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n  border: 0;\n  padding: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n* {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #172b4d;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #0065ff;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #0747a6;\n  text-decoration: underline;\n}\na:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n  -o-transition: all 0.2s ease-in-out;\n  transition: all 0.2s ease-in-out;\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #ebecf0;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n[role=\"button\"] {\n  cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: 400;\n  line-height: 1;\n  color: #7a869a;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #7a869a;\n}\n.text-primary {\n  color: #0052cc;\n}\na.text-primary:hover,\na.text-primary:focus {\n  color: #003d99;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #0052cc;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n  background-color: #003d99;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #ebecf0;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n  margin-left: -5px;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: 700;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 700px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    clear: left;\n    text-align: right;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #ebecf0;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #7a869a;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: \"\\2014 \\00A0\";\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #ebecf0;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: \"\";\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: \"\\00A0 \\2014\";\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: 700;\n  box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #344563;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.row-no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n}\n.row-no-gutters [class*=\"col-\"] {\n  padding-right: 0;\n  padding-left: 0;\n}\n.col-xs-1,\n.col-sm-1,\n.col-md-1,\n.col-lg-1,\n.col-xs-2,\n.col-sm-2,\n.col-md-2,\n.col-lg-2,\n.col-xs-3,\n.col-sm-3,\n.col-md-3,\n.col-lg-3,\n.col-xs-4,\n.col-sm-4,\n.col-md-4,\n.col-lg-4,\n.col-xs-5,\n.col-sm-5,\n.col-md-5,\n.col-lg-5,\n.col-xs-6,\n.col-sm-6,\n.col-md-6,\n.col-lg-6,\n.col-xs-7,\n.col-sm-7,\n.col-md-7,\n.col-lg-7,\n.col-xs-8,\n.col-sm-8,\n.col-md-8,\n.col-lg-8,\n.col-xs-9,\n.col-sm-9,\n.col-md-9,\n.col-lg-9,\n.col-xs-10,\n.col-sm-10,\n.col-md-10,\n.col-lg-10,\n.col-xs-11,\n.col-sm-11,\n.col-md-11,\n.col-lg-11,\n.col-xs-12,\n.col-sm-12,\n.col-md-12,\n.col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0%;\n}\n@media (min-width: 768px) {\n  .col-sm-1,\n  .col-sm-2,\n  .col-sm-3,\n  .col-sm-4,\n  .col-sm-5,\n  .col-sm-6,\n  .col-sm-7,\n  .col-sm-8,\n  .col-sm-9,\n  .col-sm-10,\n  .col-sm-11,\n  .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0%;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1,\n  .col-md-2,\n  .col-md-3,\n  .col-md-4,\n  .col-md-5,\n  .col-md-6,\n  .col-md-7,\n  .col-md-8,\n  .col-md-9,\n  .col-md-10,\n  .col-md-11,\n  .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0%;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1,\n  .col-lg-2,\n  .col-lg-3,\n  .col-lg-4,\n  .col-lg-5,\n  .col-lg-6,\n  .col-lg-7,\n  .col-lg-8,\n  .col-lg-9,\n  .col-lg-10,\n  .col-lg-11,\n  .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0%;\n  }\n}\ntable {\n  background-color: transparent;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #7a869a;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: 0.01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #344563;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: 700;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  -webkit-appearance: none;\n  appearance: none;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #172b4d;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #172b4d;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ced0da;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  background-color: #ebecf0;\n  opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n}\ntextarea.form-control {\n  height: auto;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm,\n  .input-group-sm input[type=\"date\"],\n  .input-group-sm input[type=\"time\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg,\n  .input-group-lg input[type=\"date\"],\n  .input-group-lg input[type=\"time\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: 400;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: 400;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\n.form-control-static {\n  min-height: 34px;\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 30px;\n  min-height: 32px;\n  padding: 6px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 46px;\n  min-height: 38px;\n  padding: 11px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #3462af;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 11px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n    font-size: 12px;\n  }\n}\n.btn {\n  display: inline-block;\n  margin-bottom: 0;\n  font-weight: normal;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  touch-action: manipulation;\n  cursor: pointer;\n  background-image: none;\n  border: 1px solid transparent;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  border-radius: 4px;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #172b4d;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  opacity: 0.65;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n.btn-default {\n  color: #172b4d;\n  background-color: #ebecf0;\n  border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n  color: #172b4d;\n  background-color: #ced0da;\n  border-color: #8c8c8c;\n}\n.btn-default:hover {\n  color: #172b4d;\n  background-color: #ced0da;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #172b4d;\n  background-color: #ced0da;\n  background-image: none;\n  border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n  color: #172b4d;\n  background-color: #b9bdcb;\n  border-color: #8c8c8c;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n  background-color: #ebecf0;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #ebecf0;\n  background-color: #172b4d;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #6554c0;\n  border-color: #5643b7;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n  color: #fff;\n  background-color: #4d3da4;\n  border-color: #2a215a;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #4d3da4;\n  border-color: #41338a;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #4d3da4;\n  background-image: none;\n  border-color: #41338a;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n  color: #fff;\n  background-color: #41338a;\n  border-color: #2a215a;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n  background-color: #6554c0;\n  border-color: #5643b7;\n}\n.btn-primary .badge {\n  color: #6554c0;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #00c853;\n  border-color: #00af48;\n}\n.btn-success:focus,\n.btn-success.focus {\n  color: #fff;\n  background-color: #00953e;\n  border-color: #002f14;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #00953e;\n  border-color: #00712f;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #00953e;\n  background-image: none;\n  border-color: #00712f;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n  color: #fff;\n  background-color: #00712f;\n  border-color: #002f14;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n  background-color: #00c853;\n  border-color: #00af48;\n}\n.btn-success .badge {\n  color: #00c853;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #3d5afe;\n  border-color: #2444fe;\n}\n.btn-info:focus,\n.btn-info.focus {\n  color: #fff;\n  background-color: #0a2ffe;\n  border-color: #0119a1;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: #0a2ffe;\n  border-color: #0123e3;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #0a2ffe;\n  background-image: none;\n  border-color: #0123e3;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n  color: #fff;\n  background-color: #0123e3;\n  border-color: #0119a1;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n  background-color: #3d5afe;\n  border-color: #2444fe;\n}\n.btn-info .badge {\n  color: #3d5afe;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #ffab00;\n  border-color: #e69a00;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n  color: #fff;\n  background-color: #cc8900;\n  border-color: #664400;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: #cc8900;\n  border-color: #a87100;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #cc8900;\n  background-image: none;\n  border-color: #a87100;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n  color: #fff;\n  background-color: #a87100;\n  border-color: #664400;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n  background-color: #ffab00;\n  border-color: #e69a00;\n}\n.btn-warning .badge {\n  color: #ffab00;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #ef5350;\n  border-color: #ed3c39;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n  color: #fff;\n  background-color: #eb2521;\n  border-color: #98110e;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #eb2521;\n  border-color: #d51713;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #eb2521;\n  background-image: none;\n  border-color: #d51713;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n  color: #fff;\n  background-color: #d51713;\n  border-color: #98110e;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n  background-color: #ef5350;\n  border-color: #ed3c39;\n}\n.btn-danger .badge {\n  color: #ef5350;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: 400;\n  color: #0065ff;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #0747a6;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #7a869a;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity 0.15s linear;\n  -o-transition: opacity 0.15s linear;\n  transition: opacity 0.15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-property: height, visibility;\n  transition-property: height, visibility;\n  -webkit-transition-duration: 0.35s;\n  transition-duration: 0.35s;\n  -webkit-transition-timing-function: ease;\n  transition-timing-function: ease;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-top: 4px solid \\9;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #ebecf0;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: 400;\n  line-height: 1.42857143;\n  color: #172b4d;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #172b4d;\n  text-decoration: none;\n  background-color: #ebecf0;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #172b4d;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #7a869a;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #7a869a;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px dashed;\n  border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px;\n}\n@media (min-width: 700px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #ebecf0;\n}\n.nav > li.disabled > a {\n  color: #7a869a;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #7a869a;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #ebecf0;\n  border-color: #0065ff;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #ebecf0 #ebecf0 #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #5e6c84;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #0065ff;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 54px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 700px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 700px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 700px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n@media (min-width: 700px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 700px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 700px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-brand {\n  float: left;\n  height: 54px;\n  padding: 17px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 700px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-right: 15px;\n  margin-top: 10px;\n  margin-bottom: 10px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 700px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 8.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 699px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 700px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 17px;\n    padding-bottom: 17px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-right: -15px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 699px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 700px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 12px;\n  margin-bottom: 12px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 16px;\n  margin-bottom: 16px;\n}\n.navbar-text {\n  margin-top: 17px;\n  margin-bottom: 17px;\n}\n@media (min-width: 700px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 700px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #ffffff;\n  border-color: #c1c7d0;\n}\n.navbar-default .navbar-brand {\n  color: #344563;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #344563;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #8993a4;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #505f79;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #6b778c;\n  background-color: #dfe1e6;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #c1c7d0;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #6b778c;\n  background-color: #dfe1e6;\n}\n@media (max-width: 699px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #8993a4;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #505f79;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #6b778c;\n    background-color: #dfe1e6;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #c1c7d0;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #c1c7d0;\n}\n.navbar-default .navbar-link {\n  color: #8993a4;\n}\n.navbar-default .navbar-link:hover {\n  color: #505f79;\n}\n.navbar-default .btn-link {\n  color: #8993a4;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #505f79;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #c1c7d0;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #a5aebb;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #a5aebb;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #a5aebb;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 699px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #a5aebb;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-link {\n  color: #a5aebb;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #a5aebb;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #7a869a;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #fff;\n  background-color: #00875a;\n  border-color: #00875a;\n}\n.alert-success hr {\n  border-top-color: #006e49;\n}\n.alert-success .alert-link {\n  color: #e6e6e6;\n}\n.alert-info {\n  color: #fff;\n  background-color: #448aff;\n  border-color: #448aff;\n}\n.alert-info hr {\n  border-top-color: #2a7aff;\n}\n.alert-info .alert-link {\n  color: #e6e6e6;\n}\n.alert-warning {\n  color: #fff;\n  background-color: #ff8b00;\n  border-color: #ff8b00;\n}\n.alert-warning hr {\n  border-top-color: #e67d00;\n}\n.alert-warning .alert-link {\n  color: #e6e6e6;\n}\n.alert-danger {\n  color: #fff;\n  background-color: #de350b;\n  border-color: #de350b;\n}\n.alert-danger hr {\n  border-top-color: #c62f0a;\n}\n.alert-danger .alert-link {\n  color: #e6e6e6;\n}\n.label {\n  display: inline;\n  padding: 0.2em 0.6em 0.3em;\n  font-size: 75%;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #7a869a;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #616d80;\n}\n.label-primary {\n  background-color: #0052cc;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #003d99;\n}\n.label-success {\n  background-color: #36b37e;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #2a8c62;\n}\n.label-info {\n  background-color: #3d5afe;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #0a2ffe;\n}\n.label-warning {\n  background-color: #ffab00;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #cc8900;\n}\n.label-danger {\n  background-color: #ff5630;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #fc2e00;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #ebecf0;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #6554c0;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  -webkit-transition: width 0.6s ease;\n  -o-transition: width 0.6s ease;\n  transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n  -o-animation: progress-bar-stripes 2s linear infinite;\n  animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #36b37e;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #3d5afe;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #ffab00;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #ff5630;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group .form-control:focus {\n  z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: 400;\n  line-height: 1;\n  color: #172b4d;\n  text-align: center;\n  background-color: #ebecf0;\n  border: 1px solid #ced0da;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  z-index: 2;\n  margin-left: -1px;\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media-body {\n  width: 10000px;\n}\n.media-object {\n  display: block;\n}\n.media-object.img-thumbnail {\n  max-width: none;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ebecf0;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #7a869a;\n  cursor: not-allowed;\n  background-color: #ebecf0;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #7a869a;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #0065ff;\n  background-color: #fff;\n  border-color: #ebecf0;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #ffffff;\n}\na.list-group-item,\nbutton.list-group-item {\n  color: #7a869a;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n  color: #172b4d;\n  text-decoration: none;\n  background-color: #fff;\n}\nbutton.list-group-item {\n  width: 100%;\n  text-align: left;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 14px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 14px 15px;\n  background-color: #fff;\n  border-top: 1px solid #ebecf0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ebecf0;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ebecf0;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #344563;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #fff;\n  background-color: #344563;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #0052cc;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #0052cc;\n  border-color: #0052cc;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #0052cc;\n}\n.panel-primary > .panel-heading .badge {\n  color: #0052cc;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #0052cc;\n}\n.panel-success {\n  border-color: #36b37e;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #36b37e;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #36b37e;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #36b37e;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ff5630;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ff5630;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ff5630;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ff5630;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #ebecf0;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #7a869a;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #0065ff;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  z-index: 2;\n  color: #0747a6;\n  background-color: #ebecf0;\n  border-color: #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 3;\n  color: #fff;\n  cursor: default;\n  background-color: #0052cc;\n  border-color: #0052cc;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #7a869a;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: 0.2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: 0.5;\n}\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n  appearance: none;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  background-color: #7a869a;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #0065ff;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transform: translate(0, -25%);\n  -ms-transform: translate(0, -25%);\n  -o-transform: translate(0, -25%);\n  transform: translate(0, -25%);\n  -webkit-transition: -webkit-transform 0.3s ease-out;\n  -moz-transition: -moz-transform 0.3s ease-out;\n  -o-transition: -o-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  outline: 0;\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #091e42;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: 0.5;\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #ced0da;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #ced0da;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.panel-body:before,\n.panel-body:after,\n.pager:before,\n.pager:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after,\n.agreement-footer:before,\n.agreement-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.panel-body:after,\n.pager:after,\n.modal-header:after,\n.modal-footer:after,\n.agreement-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n@media screen and (max-width: 991px) {\n  html,\n  body {\n    overflow-x: hidden;\n  }\n}\n@media screen and (min-width: 992px) {\n  .md-margin-top-no {\n    margin-top: 0px !important;\n  }\n}\n@media screen and (min-width: 768px) and (max-width: 991px) {\n  .sm-margin-top {\n    margin-top: 20px !important;\n  }\n  .sm-margin-top-no {\n    margin-top: 0px !important;\n  }\n  .sm-margin-top-half {\n    margin-top: 6.6px !important;\n  }\n  .sm-align-row-buttons {\n    margin-top: 5px !important;\n  }\n}\n@media screen and (max-width: 767px) {\n  .xs-margin-top {\n    margin-top: 20px !important;\n  }\n  .xs-margin-top-half {\n    margin-top: 6.6px !important;\n  }\n}\n.flex-row {\n  display: block;\n  margin: 0 -15px;\n}\n.flex-row-section {\n  align-items: center;\n  display: flex;\n  flex: 1;\n}\n.flex-row-section + .flex-row-section {\n  margin-top: 20px;\n}\n.flex-row-col {\n  flex: 1;\n  padding: 0 15px;\n}\n@media screen and (min-width: 768px) {\n  .flex-row {\n    display: flex;\n    align-items: center;\n  }\n  .flex-row-section + .flex-row-section {\n    margin: 0;\n  }\n  .flex-row-section,\n  .flex-row-col {\n    flex: 0;\n    align-items: center;\n  }\n  .flex-row-section.flex-row-section-auto,\n  .flex-row-section.flex-row-section-auto > .flex-row-col {\n    flex: 1;\n  }\n}\n.flex-row-col-shrink {\n  flex: 0 !important;\n}\n.auth-message {\n  background-color: #ebecf0;\n  padding: 20px 0px;\n  width: 100%;\n  position: fixed;\n  top: -100%;\n  left: 0px;\n  z-index: 1070;\n  transition: top 300ms ease;\n}\n.auth-message.show {\n  top: 0px;\n  bottom: auto;\n}\n.auth-message p {\n  padding: 5px 0px;\n  color: #172b4d;\n}\n@media screen and (max-width: 991px) {\n  .auth-message {\n    text-align: center;\n  }\n  .auth-message .btn {\n    padding: 10px 16px;\n    font-size: 18px;\n  }\n}\n.alerts-snackbar {\n  position: fixed;\n  top: -100%;\n  width: 100%;\n  z-index: 1060;\n  text-align: center;\n  font-size: 18px;\n  transition: top 300ms ease;\n  pointer-events: none;\n}\n.alerts-snackbar.in {\n  top: 0px;\n  transition: top 200ms ease;\n}\n.alerts-snackbar p {\n  display: inline-block;\n  border-radius: 0px 0px 4px 4px;\n  margin: 0px;\n  pointer-events: all;\n}\n.agreement-overlay {\n  position: fixed;\n  width: 100%;\n  height: 100%;\n  top: 0px;\n  left: 0px;\n  z-index: 1060;\n  background-color: rgba(9, 30, 66, 0.5);\n  overflow-x: scroll;\n}\n.agreement-overlay .container {\n  max-width: 900px;\n  padding: 20px 30px;\n}\n.agreement-content {\n  background-color: #fff;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  background-clip: padding-box;\n  outline: 0;\n  padding: 10px 16px;\n}\n.agreement-header {\n  padding: 10px 0;\n  border-bottom: 1px solid #ebecf0;\n}\n.agreement-header h2 {\n  margin-top: 0;\n}\n.agreement-header p {\n  margin: 0;\n  padding: 0;\n}\n.agreement-body {\n  padding: 20px 0;\n}\n.agreement-body p.lead {\n  margin: 0;\n  padding: 0;\n}\n.agreement-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #ced0da;\n  padding: 10px 0;\n}\n.agreement-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.agreement-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.agreement-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\nbody.agreement-overlay-visible {\n  overflow: hidden;\n}\n.loader {\n  width: 100%;\n  height: 49px;\n  text-align: center;\n}\n.loader.loader-spaced {\n  margin: 40px 0px;\n}\n.loader-spinning-wheel {\n  width: 49px;\n  height: 49px;\n  margin: 0 auto;\n  border: 3px solid #7a869a;\n  border-radius: 50%;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  animation: cssload-spin 575ms infinite linear;\n  -o-animation: cssload-spin 575ms infinite linear;\n  -ms-animation: cssload-spin 575ms infinite linear;\n  -webkit-animation: cssload-spin 575ms infinite linear;\n  -moz-animation: cssload-spin 575ms infinite linear;\n}\n@keyframes cssload-spin {\n  100% {\n    transform: rotate(360deg);\n  }\n}\n@-o-keyframes cssload-spin {\n  100% {\n    -o-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-ms-keyframes cssload-spin {\n  100% {\n    -ms-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-webkit-keyframes cssload-spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-moz-keyframes cssload-spin {\n  100% {\n    -moz-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n.navbar {\n  margin-bottom: 0px;\n}\n.navbar .navbar-full .navbar-brand {\n  padding-top: 11px;\n  padding-bottom: 11px;\n  font-size: 21px;\n}\n.navbar .navbar-full .navbar-brand > * {\n  display: inline-block;\n  vertical-align: middle;\n}\n.navbar .navbar-full .navbar-brand img {\n  height: 32px;\n  margin-right: 6px;\n}\n.navbar .navbar-full .navbar-nav > li > a {\n  font-size: 16.8px;\n}\n.navbar .navbar-full .navbar-icon {\n  display: block;\n  height: 54px;\n  padding: 10px 15px;\n  padding-top: 13px;\n  padding-bottom: 13px;\n  position: relative;\n  color: #8993a4;\n}\n.navbar .navbar-full .navbar-icon:hover,\n.navbar .navbar-full .navbar-icon:focus {\n  color: #505f79;\n  background-color: transparent;\n}\n.navbar .navbar-full .navbar-icon .material-icon {\n  width: 28px;\n  height: 28px;\n  font-size: 28px;\n  line-height: 28px;\n}\n.navbar .navbar-full .navbar-icon .badge {\n  background-color: #ff5630;\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  font-size: 9px;\n}\n.navbar .navbar-full .open .navbar-icon,\n.navbar .navbar-full .open .navbar-icon:hover,\n.navbar .navbar-full .open .navbar-icon:focus {\n  background-color: #dfe1e6;\n  color: #6b778c;\n}\n.navbar .navbar-full .nav-guest,\n.navbar .navbar-full .nav-user {\n  float: right;\n}\n.navbar .navbar-full .nav-guest .navbar-btn,\n.navbar .navbar-full .nav-user .navbar-btn {\n  margin-left: 15px;\n}\n.navbar .navbar-full .nav-user .dropdown-toggle {\n  padding: 10px;\n}\n.navbar .navbar-full .nav-user .dropdown-toggle img {\n  width: 34px;\n  height: 34px;\n}\n.navbar ul.navbar-compact-nav {\n  border-collapse: collapse;\n  display: table;\n  margin: 0px;\n  table-layout: fixed;\n  width: 100%;\n}\n.navbar ul.navbar-compact-nav > li {\n  display: table-cell;\n  width: 100%;\n}\n.navbar ul.navbar-compact-nav > li > a,\n.navbar ul.navbar-compact-nav > li > button {\n  background: none;\n  border: none;\n  display: block;\n  padding-top: 13px;\n  padding-bottom: 13px;\n  width: 100%;\n  color: #8993a4;\n  text-align: center;\n}\n.navbar ul.navbar-compact-nav > li > a.active,\n.navbar ul.navbar-compact-nav > li > button.active,\n.navbar ul.navbar-compact-nav > li > a:hover,\n.navbar ul.navbar-compact-nav > li > button:hover,\n.navbar ul.navbar-compact-nav > li > a:focus,\n.navbar ul.navbar-compact-nav > li > button:focus {\n  color: #6b778c;\n  background-color: #dfe1e6;\n}\n.navbar ul.navbar-compact-nav > li > a > img,\n.navbar ul.navbar-compact-nav > li > button > img {\n  width: 24px;\n  height: 24px;\n}\n.navbar ul.navbar-compact-nav > li > button {\n  display: inline-block;\n}\n.navbar ul.navbar-compact-nav > li > a > .material-icon {\n  font-size: 24px;\n  line-height: 24px;\n}\n@media (max-width: 700px) {\n  .navbar.navbar-misago {\n    min-height: auto;\n  }\n}\n.navbar-misago .navbar-desktop-nav {\n  display: none;\n}\n@media (min-width: 700px) {\n  .navbar-misago ul.navbar-compact-nav {\n    display: none;\n  }\n  .navbar-misago .navbar-desktop-nav {\n    display: block;\n  }\n}\n.nav-side > a > .material-icon {\n  margin: -5px;\n  margin-right: 10px;\n  position: relative;\n  bottom: 1px;\n  width: 24px;\n  height: 24px;\n  font-size: 24px;\n  line-height: 24px;\n}\n.nav-side > a .badge {\n  position: relative;\n  top: 1px;\n}\n.nav-pills > li > a {\n  display: flex;\n  align-items: center;\n  padding: 5px 10px;\n}\n.nav-pills > li > a .material-icon {\n  margin-right: 3px;\n}\n.nav-pills > li > a,\n.nav-pills > li > a:link,\n.nav-pills > li > a:visited {\n  background-color: #ebecf0;\n  color: #344563;\n}\n.nav-pills > li > a:focus,\n.nav-pills > li > a:hover,\n.nav-pills > li > a:active {\n  background-color: #dcdee5;\n  color: #344563;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:link,\n.nav-pills > li.active > a:visited,\n.nav-pills > li.active > a:focus,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:active {\n  background-color: #344563;\n  color: #fff;\n}\n.nav-container .btn-block {\n  margin-bottom: 20px;\n}\n.nav-container .nav {\n  margin-right: -10px;\n  margin-bottom: 30px;\n}\n.nav-container li {\n  margin-right: 10px;\n  margin-bottom: 10px;\n}\n.breadcrumbs {\n  display: block;\n  padding: 0;\n  margin-bottom: 10px;\n}\n.breadcrumbs-item {\n  display: inline-block;\n  margin-right: 15px;\n  margin-bottom: 10px;\n  padding: 0;\n  list-style: none;\n}\n.breadcrumbs-item a {\n  display: flex;\n  align-items: center;\n  text-decoration: none;\n}\n.breadcrumbs-item a,\n.breadcrumbs-item a:visited {\n  color: #5e6c84;\n}\n.breadcrumbs-item a:hover,\n.breadcrumbs-item a:focus {\n  color: #172b4d;\n}\n.breadcrumbs-item a:hover .breadcrumbs-item-name,\n.breadcrumbs-item a:focus .breadcrumbs-item-name {\n  text-decoration: underline;\n}\n.breadcrumbs-item a:active {\n  color: #172b4d;\n}\n.breadcrumbs-item .material-icon {\n  margin-right: 4px;\n}\n@font-face {\n  font-family: \"Material Icons\";\n  font-style: normal;\n  font-weight: 400;\n  src: url(./fonts/MaterialIcons-Regular.eot);\n  /* For IE6-8 */\n  src: local(\"Material Icons\"), local(\"MaterialIcons-Regular\"), url(./fonts/MaterialIcons-Regular.woff2) format(\"woff2\"), url(./fonts/MaterialIcons-Regular.woff) format(\"woff\"), url(./fonts/MaterialIcons-Regular.ttf) format(\"truetype\");\n}\n.material-icon {\n  font-family: \"Material Icons\";\n  font-weight: normal;\n  font-style: normal;\n  display: inline-block;\n  width: 1em;\n  height: 1em;\n  line-height: 1;\n  text-align: center;\n  text-transform: none;\n  letter-spacing: normal;\n  vertical-align: middle;\n  word-wrap: normal;\n  white-space: nowrap;\n  direction: ltr;\n  /* Support for all WebKit browsers. */\n  -webkit-font-smoothing: antialiased;\n  /* Support for Safari and Chrome. */\n  text-rendering: optimizeLegibility;\n  /* Support for Firefox. */\n  -moz-osx-font-smoothing: grayscale;\n  /* Support for IE. */\n  font-feature-settings: \"liga\";\n}\n.modal-toolbar {\n  background: #ebecf0;\n  border-bottom: 1px solid #ced0da;\n  overflow: auto;\n  padding: 6px 12px;\n}\n.modal-toolbar .pull-left {\n  margin-right: 8px;\n}\n.modal-toolbar p {\n  padding: 5px 0px;\n  margin-bottom: 0px;\n}\n@media screen and (max-width: 991px) {\n  .modal-message {\n    text-align: center;\n  }\n  .modal-message .message-icon {\n    margin: 30px;\n  }\n  .modal-message .message-icon .material-icon {\n    font-size: 160px;\n  }\n}\n@media screen and (min-width: 992px) {\n  .modal-message .modal-body {\n    padding-top: 20px;\n    padding-bottom: 30px;\n  }\n  .modal-message .message-icon {\n    float: left;\n    position: relative;\n    left: 7px;\n  }\n  .modal-message .message-icon .material-icon {\n    font-size: 50px;\n  }\n  .modal-message .message-body {\n    margin-left: 75px;\n    margin-top: 10px;\n  }\n  .modal-message .message-body p {\n    margin-top: 20px;\n  }\n  .modal-message .message-body .lead {\n    margin-top: 0px;\n    margin-bottom: 0px;\n  }\n}\n.modal-loader {\n  padding: 50px 0px;\n}\n.modal-loader .loader {\n  width: 100%;\n  height: 80px;\n  text-align: center;\n}\n.modal-loader .loader-spinning-wheel {\n  width: 80px;\n  height: 80px;\n}\n.modal-body .form-group {\n  min-height: 34px;\n}\n.list-item-errors {\n  margin-bottom: 20px;\n}\n.list-errored-items li:last-child .list-item-errors {\n  margin-bottom: 0px;\n}\n.modal-post-likers .media-list {\n  margin: 0px;\n}\n.modal-post-likers .item-title {\n  display: block;\n}\n.has-feedback .material-icon.form-control-feedback {\n  top: 6px;\n  right: 24px;\n  font-size: 1.42857143;\n  line-height: 1.42857143;\n}\n.well.well-form.well-done {\n  font-size: 18px;\n  text-align: center;\n}\n.well.well-form.well-done .message-icon {\n  margin-bottom: 10px;\n  font-size: 90px;\n  line-height: 90px;\n}\n.well.well-form.well-done .message-body {\n  margin-bottom: 20px;\n}\n.well.well-form.well-noscript {\n  font-size: 18px;\n  text-align: center;\n}\n.well.well-form.well-noscript .message-icon {\n  margin-bottom: 10px;\n  font-size: 90px;\n  line-height: 90px;\n}\n.btn.btn-yes-no,\n.btn.btn-select {\n  background: transparent;\n  border: 1px solid #ced0da;\n}\n.btn.btn-yes-no .material-icon,\n.btn.btn-select .material-icon {\n  margin: -4px 0px;\n  margin-right: 8px;\n  position: relative;\n  bottom: 1px;\n  width: 20px;\n  height: 20px;\n  font-size: 20px;\n  line-height: 20px;\n}\n@media screen and (max-width: 767px) {\n  .btn.btn-yes-no {\n    width: 100%;\n    overflow: auto;\n  }\n  .btn.btn-yes-no .material-icon {\n    float: left;\n    margin-top: 1px;\n  }\n  .btn.btn-yes-no .btn-text {\n    display: block;\n    margin-left: 30px;\n    text-align: left;\n    white-space: normal;\n  }\n}\ninput.hidden-file-upload {\n  position: absolute;\n  top: -9999px;\n  left: -9999px;\n}\n.form-search {\n  position: relative;\n}\n.form-search .form-control {\n  padding-right: 30px;\n}\n.form-search .material-icon {\n  position: absolute;\n  top: 5px;\n  right: 5px;\n  color: #7a869a;\n  font-size: 24px;\n  line-height: 24px;\n  pointer-events: none;\n}\n.btn.btn-loading,\n.btn.btn-loading:link,\n.btn.btn-loading:active,\n.btn.btn-loading:visited,\n.btn.btn-loading:hover,\n.btn.btn-loading:focus {\n  color: transparent;\n}\n.btn.btn-loading .loader,\n.btn.btn-loading:link .loader,\n.btn.btn-loading:active .loader,\n.btn.btn-loading:visited .loader,\n.btn.btn-loading:hover .loader,\n.btn.btn-loading:focus .loader {\n  height: 20px;\n  margin-top: -20px;\n}\n.btn.btn-loading .loader > div,\n.btn.btn-loading:link .loader > div,\n.btn.btn-loading:active .loader > div,\n.btn.btn-loading:visited .loader > div,\n.btn.btn-loading:hover .loader > div,\n.btn.btn-loading:focus .loader > div {\n  width: 20px;\n  height: 20px;\n}\n.btn.btn-loading.btn-default .loader > div {\n  border-top-color: #172b4d;\n  border-bottom-color: #172b4d;\n}\n.btn.btn-loading.btn-primary .loader > div {\n  border-top-color: #fff;\n  border-bottom-color: #fff;\n}\n.btn.btn-loading.btn-success .loader > div {\n  border-top-color: #fff;\n  border-bottom-color: #fff;\n}\n.btn.btn-loading.btn-info .loader > div {\n  border-top-color: #fff;\n  border-bottom-color: #fff;\n}\n.btn.btn-loading.btn-warning .loader > div {\n  border-top-color: #fff;\n  border-bottom-color: #fff;\n}\n.btn.btn-loading.btn-danger .loader > div {\n  border-top-color: #fff;\n  border-bottom-color: #fff;\n}\n.btn .material-icon {\n  margin-right: 3px;\n  position: relative;\n  bottom: 1px;\n}\n.btn-icon .material-icon {\n  margin: -1px -4px;\n  width: 20px;\n  height: 20px;\n  font-size: 20px;\n  line-height: 20px;\n}\n.btn-icon .btn-text {\n  margin-left: 10px;\n}\n.btn-icon .btn-text-left {\n  margin-right: 10px;\n}\n.btn-block.btn-icon {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n.dropdown-menu > li > a,\n.dropdown-menu > li > .btn-link,\n.modal-menu > li > a,\n.modal-menu > li > .btn-link {\n  display: block;\n  border: none;\n  clear: both;\n  float: none;\n  padding: 6px 20px;\n  width: 100%;\n  color: #172b4d;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > .btn-link:hover,\n.modal-menu > li > a:hover,\n.modal-menu > li > .btn-link:hover,\n.dropdown-menu > li > a:focus,\n.dropdown-menu > li > .btn-link:focus,\n.modal-menu > li > a:focus,\n.modal-menu > li > .btn-link:focus {\n  background-color: #ebecf0;\n  color: #172b4d;\n  text-decoration: none;\n}\n.dropdown-menu > li > a:active,\n.dropdown-menu > li > .btn-link:active,\n.modal-menu > li > a:active,\n.modal-menu > li > .btn-link:active {\n  background-color: #ebecf0;\n  color: #172b4d;\n  text-decoration: none;\n}\n.dropdown-menu > li > a:disabled,\n.dropdown-menu > li > .btn-link:disabled,\n.modal-menu > li > a:disabled,\n.modal-menu > li > .btn-link:disabled {\n  color: rgba(23, 43, 77, 0.5);\n}\n.dropdown-menu > li > a .material-icon,\n.dropdown-menu > li > .btn-link .material-icon,\n.modal-menu > li > a .material-icon,\n.modal-menu > li > .btn-link .material-icon {\n  margin: -2px 0px;\n  margin-right: 7px;\n  position: relative;\n  bottom: 1px;\n  font-size: 18px;\n}\n.dropdown-menu > li > a .badge,\n.dropdown-menu > li > .btn-link .badge,\n.modal-menu > li > a .badge,\n.modal-menu > li > .btn-link .badge {\n  float: right;\n  position: relative;\n  top: 1px;\n}\n.modal-menu {\n  margin: 20px 0px;\n  padding: 0px;\n}\n.modal-menu > li {\n  margin: 6.66666667px 0px;\n  padding: 0px;\n  list-style: none;\n}\n.dropdown-menu {\n  min-width: 210px;\n}\n.dropdown-menu .dropdown-footer {\n  padding: 6px 20px;\n}\n.dropdown-menu .dropdown-buttons {\n  padding: 2px 20px;\n  padding-bottom: 7px;\n}\n.dropdown-menu .dropdown-buttons .btn {\n  margin: 4px 0px;\n}\n.mobile-dropdown {\n  position: relative;\n}\n.mobile-dropdown.open > .dropdown-menu,\n.compact-nav.open > .dropdown-menu {\n  border: none;\n  border-radius: 0;\n  display: block;\n  margin: 0px;\n  width: 100%;\n}\n.user-dropdown .guest-preview {\n  text-align: center;\n}\n.user-dropdown .guest-preview .row {\n  margin: 0px;\n}\n.navbar .user-dropdown {\n  width: 240px;\n}\n.user-dropdown .dropdown-header {\n  padding: 6px 20px;\n  font-size: 18px;\n}\n.user-dropdown .dropdown-header strong {\n  font-weight: normal;\n}\n@media screen and (min-width: 992px) {\n  .category-picker .dropdown-menu {\n    width: 300px;\n  }\n}\n.category-picker .dropdown-menu > li > .btn-link {\n  white-space: normal;\n  word-wrap: break-word;\n}\n@media screen and (max-width: 767px) {\n  .dropdown-menu.stick-to-bottom {\n    border-radius: 0px;\n    border: none;\n    max-height: 300px;\n    overflow-y: auto;\n    -webkit-box-shadow: 0px 0px 30px #7a869a;\n    box-shadow: 0px 0px 30px #7a869a;\n    clear: both;\n    top: auto;\n    width: 100%;\n    position: fixed;\n    bottom: 0px;\n    margin: 0px;\n    padding: 0px;\n    padding-bottom: 20px;\n  }\n  .dropdown-menu.stick-to-bottom li {\n    float: none;\n    margin: 0px;\n    clear: both;\n  }\n  .dropdown-menu.stick-to-bottom li > a,\n  .dropdown-menu.stick-to-bottom li > .btn {\n    padding-top: 15px;\n    padding-bottom: 15px;\n    border-bottom: 1px solid #ebecf0;\n  }\n}\n.category-label {\n  border-radius: 0.25em;\n  padding: 0.2em 0.6em 0.3em;\n}\n.category-label-color,\n.category-label-color:link,\n.category-label-color:focus,\n.category-label-color:active,\n.category-label-color:visited,\n.category-label-color:hover {\n  color: #fff;\n}\n.category-label-no-color,\n.category-label-no-color:link,\n.category-label-no-color:focus,\n.category-label-no-color:active,\n.category-label-no-color:visited,\n.category-label-no-color:hover {\n  background-color: #ebecf0;\n  color: #344563;\n}\n.thread-flags {\n  display: flex;\n  align-items: center;\n  opacity: 0.8;\n  margin: 0;\n  padding: 0;\n}\n.thread-flags li {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 20px;\n  height: 20px;\n  border-radius: 3px;\n  list-style-type: none;\n  cursor: default;\n}\n.thread-flags li + li {\n  margin-left: 7.5px;\n}\n.thread-flags .material-icon {\n  font-size: 16px;\n  line-height: 16px;\n}\n.thread-flag-pinned-globally {\n  color: #2563eb;\n  background: #dbeafe;\n}\n.thread-flag-pinned-locally {\n  color: #3b82f6;\n  background: #dbeafe;\n}\n.thread-flag-answered {\n  color: #4d7c0f;\n  background: #d9f99d;\n}\n.thread-flag-poll {\n  color: #c026d3;\n  background: #f5d0fe;\n}\n.thread-flag-unapproved {\n  color: #ffffff;\n  background: #dc2626;\n}\n.thread-flag-closed {\n  color: #dc2626;\n  background: #fecaca;\n}\n.thread-flag-hidden {\n  color: #ffffff;\n  background: #64748b;\n}\n.threads-replies {\n  display: flex;\n  align-items: center;\n  color: #5e6c84;\n  font-size: 16px;\n  font-weight: bold;\n}\n.threads-replies .material-icon {\n  margin-right: 7.5px;\n  transform: matrix(-1, 0, 0, 1, 0, 0);\n}\n.thread-user-card {\n  display: flex;\n  align-items: center;\n}\n.thread-user-card-media {\n  flex: 0;\n  margin-right: 15px;\n}\n.thread-user-card-media img {\n  border-radius: 3px;\n}\n.thread-user-card-body {\n  flex: 1;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.navbar-misago .dropdown-menu.dropdown-search-results {\n  margin: 0px;\n  padding-top: 0px;\n  width: 400px;\n  left: auto;\n  right: 0px;\n}\n.dropdown-search-results .form-group {\n  margin: 0px;\n  padding: 12px;\n}\nli.dropdown-search-message {\n  text-align: center;\n}\n.dropdown-search-thread {\n  width: 100%;\n}\n.dropdown-search-thread h5 {\n  margin: 0px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.dropdown-search-thread small {\n  display: block;\n  margin: 0px;\n  margin-top: 4px;\n}\n.page-header {\n  margin: 0;\n  margin-top: 10px;\n}\n.page-header-banner-bg-overlay {\n  padding: 20px 0;\n}\n.page-header h1 {\n  margin: 0;\n  overflow-wrap: break-word;\n}\n.page-container {\n  padding-top: 20px;\n}\n@media screen and (max-width: 991px) {\n  .panel-message-body {\n    text-align: center;\n  }\n  .panel-message-body .message-icon {\n    margin: 30px;\n  }\n  .panel-message-body .message-icon .material-icon {\n    font-size: 160px;\n  }\n}\n@media screen and (min-width: 992px) {\n  .panel-message-body {\n    padding: 20px;\n    padding-bottom: 30px;\n  }\n  .panel-message-body .message-icon {\n    float: left;\n  }\n  .panel-message-body .message-icon .material-icon {\n    font-size: 50px;\n  }\n  .panel-message-body .message-body {\n    margin-left: 65px;\n    margin-top: 10px;\n  }\n  .panel-message-body .message-body .lead {\n    margin-bottom: 0px;\n  }\n  .panel-message-body .message-body .help-block {\n    margin-top: 13.2px;\n  }\n}\n.panel-body-loading {\n  padding: 0px;\n  text-align: center;\n}\n.misago-footer {\n  margin-top: 30px;\n  margin-bottom: 50px;\n}\n.misago-footer .footer-content {\n  border-top: 1px solid #ebecf0;\n  padding-top: 30px;\n}\n.misago-footer .noscript-message .material-icon {\n  position: relative;\n  bottom: 1px;\n  font-size: 18px;\n}\n.ui-preview {\n  color: #ebecf0;\n  -webkit-animation: ui-preview-animation 1s linear infinite;\n  -o-animation: ui-preview-animation 1s linear infinite;\n  animation: ui-preview-animation 1s linear infinite;\n}\n@keyframes ui-preview-animation {\n  0% {\n    filter: alpha(opacity=100);\n    opacity: 1;\n  }\n  50% {\n    filter: alpha(opacity=10);\n    opacity: 0.1;\n  }\n  100% {\n    filter: alpha(opacity=100);\n    opacity: 1;\n  }\n}\n.ui-preview-text {\n  background: #ebecf0;\n  border-radius: 100px;\n  display: inline-block;\n  height: 14px;\n  position: relative;\n  top: 3px;\n}\n.ui-preview-paragraph .ui-preview-text {\n  margin-right: 6px;\n}\n.ui-preview-paragraph .ui-preview-text:last-child {\n  margin-right: 0px;\n}\n.ui-preview-img {\n  background: #ebecf0;\n  border-radius: 5px;\n}\n.pager-undercontent {\n  margin-top: -20px;\n}\n.pager-more {\n  text-align: center;\n}\n@media screen and (min-width: 992px) {\n  .pager-more .btn {\n    padding-left: 20px;\n    padding-right: 20px;\n  }\n}\n.misago-pagination {\n  display: flex;\n}\n.misago-pagination .btn {\n  display: block;\n  width: 100%;\n}\n.misago-pagination .btn + .btn {\n  margin-left: 30px;\n}\n@media screen and (max-width: 767px) {\n  .toolbar-item .misago-pagination {\n    flex: 1;\n  }\n}\n.panel-poll h2 {\n  margin-top: 0px;\n}\n.poll-select-choice .btn,\n.poll-select-choice .btn:active,\n.poll-select-choice .btn:focus,\n.poll-select-choice .btn:hover {\n  background: transparent;\n  border: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  margin: 6px 0px;\n  padding: 0px;\n  padding-left: 6px;\n  outline: none;\n  text-align: left;\n}\n.poll-select-choice .btn .material-icon {\n  margin-right: 6px;\n  height: 28px;\n  width: 28px;\n  font-size: 28px;\n  line-heigh: 28px;\n  color: #ced0da;\n}\n.poll-select-choice .btn.btn-selected .material-icon {\n  color: #0052cc;\n}\n.poll-help {\n  font-size: 12px;\n}\n.poll-chart-selected .material-icon {\n  margin-right: 4px;\n  position: relative;\n  bottom: 1px;\n  height: 14px;\n  width: 14px;\n  color: #36b37e;\n  font-size: 14px;\n  line-heigh: 14px;\n}\n.poll-options {\n  margin-bottom: 0px;\n}\n@media screen and (max-width: 767px) {\n  .poll-options {\n    margin-top: -6px;\n  }\n  .poll-options .btn {\n    margin: 6px 0px;\n  }\n}\n.user-status.user-banned .status-icon {\n  color: #ff5630;\n}\n.user-status.user-online .status-icon {\n  color: #36b37e;\n}\n.user-status.user-offline .status-icon {\n  color: #7a869a;\n}\n@media screen and (min-width: 768px) {\n  .user-card {\n    text-align: center;\n  }\n}\n.user-card-small-avatar img {\n  width: 100%;\n  height: auto;\n}\n@media screen and (min-width: 768px) {\n  .user-card-small-avatar {\n    display: none;\n  }\n}\n@media screen and (max-width: 767px) {\n  .user-card-avatar {\n    display: none;\n  }\n}\n.toolbar {\n  display: block;\n  margin: 0 -15px;\n}\n.toolbar-section {\n  justify-items: center;\n  display: flex;\n  flex: 1;\n  margin-bottom: 20px;\n}\n.toolbar-item {\n  flex: 1;\n  padding: 0 15px;\n}\n.toolbar-item h3,\n.toolbar-item p {\n  margin: 0;\n}\n.toolbar-item-shrink {\n  flex: 0;\n}\n.toolbar-spacer {\n  display: none;\n}\n@media screen and (min-width: 768px) {\n  .toolbar {\n    display: flex;\n  }\n  .toolbar-section,\n  .toolbar-item {\n    flex: 0;\n    align-items: center;\n  }\n  .toolbar-section.toolbar-section-auto,\n  .toolbar-section.toolbar-section-auto .toolbar-item {\n    flex: 1;\n  }\n  .toolbar-spacer {\n    display: block;\n    flex: 1;\n  }\n  .toolbar-item .form-search {\n    width: 250px;\n  }\n}\n@media screen and (max-width: 767px) {\n  .toolbar-item p {\n    text-align: center;\n  }\n}\nabbr {\n  border: none !important;\n}\n.item-title {\n  color: #172b4d;\n  font-weight: bold;\n  text-decoration: none;\n}\na.item-title:link,\na.item-title:active,\na.item-title:visited,\na.item-title:hover {\n  color: #172b4d;\n  font-weight: bold;\n}\na.item-title:hover {\n  text-decoration: underline;\n}\n.message-line {\n  text-align: center;\n}\n.message-line .material-icon {\n  margin-right: 6.66666667px;\n  font-size: 20px;\n  line-height: 20px;\n  height: 20px;\n  width: 20px;\n}\n.text-ellipsis {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.misago-markup h1,\n.misago-markup h2,\n.misago-markup h3,\n.misago-markup h4,\n.misago-markup h5,\n.misago-markup h6,\n.misago-markup p {\n  word-wrap: break-word;\n}\n.misago-markup h1,\n.misago-markup h2,\n.misago-markup h3,\n.misago-markup h4,\n.misago-markup h5,\n.misago-markup h6 {\n  margin-top: 40px;\n}\n.misago-markup > *,\n.misago-markup blockquote > * {\n  margin: 20px 0px;\n}\n.misago-markup > *:first-child,\n.misago-markup blockquote > *:first-child {\n  margin-top: 0px;\n}\n.misago-markup > *:last-child,\n.misago-markup blockquote > *:last-child {\n  margin-bottom: 0px;\n}\n.misago-markup img {\n  max-width: 100%;\n  max-height: 500px;\n}\n.misago-markup .quote-block,\n.misago-markup blockquote {\n  background: #ebecf0;\n  border: none;\n  font-size: 14px;\n}\n.misago-markup .quote-block .quote-heading,\n.misago-markup blockquote .quote-heading {\n  border-bottom: 1px solid #d4d6df;\n  padding: 10px 20px;\n  font-size: 12px;\n  font-weight: bold;\n}\n.misago-markup > .quote-block,\n.misago-markup > blockquote {\n  border: 1px solid #d4d6df;\n}\n.misago-markup .quote-body {\n  background: #fff;\n  margin: 0px;\n  padding: 20px;\n}\n.misago-markup .quote-body > .quote-block,\n.misago-markup .quote-body > blockquote {\n  border: 1px solid #d4d6df;\n}\n.misago-markup .spoiler-block {\n  background: #ebecf0;\n  border: none;\n  font-size: 14px;\n}\n.misago-markup > .spoiler-block {\n  border: 1px solid #d4d6df;\n  position: relative;\n}\n.misago-markup .spoiler-body {\n  background: #fff;\n  margin: 0px;\n  padding: 20px;\n}\n.misago-markup .spoiler-overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: #fff;\n}\n.misago-markup .spoiler-block.revealed .spoiler-overlay {\n  display: none;\n}\n.misago-markup ul {\n  list-style-type: square;\n}\n.misago-markup ul li {\n  list-style-type: square;\n}\n.misago-markup ol {\n  list-style-type: decimal;\n}\n.misago-markup ol li {\n  list-style-type: decimal;\n}\n.misago-markup pre {\n  background: #eee;\n  border: none;\n  padding: 10px;\n  overflow: hidden;\n  color: #000;\n}\n.misago-markup pre code.hljs {\n  margin: -10px;\n  padding: 9.5px;\n}\n.modal-change-avatar .modal-avatar-index .avatar-preview {\n  border-radius: 6px;\n  margin: 0px auto;\n  overflow: hidden;\n  position: relative;\n  width: 200px;\n  height: 200px;\n}\n.modal-change-avatar .modal-avatar-index .avatar-preview .loader {\n  display: none;\n  position: absolute;\n  top: 50px;\n  height: 100px;\n}\n.modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel {\n  border-width: 10px;\n  border-color: #fff;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  width: 100px;\n  height: 100px;\n}\n.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading img {\n  filter: alpha(opacity=33);\n  opacity: 0.33;\n}\n.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading .loader {\n  display: block;\n}\n@media (max-width: 699px) {\n  .modal-change-avatar .modal-avatar-index .avatar-preview {\n    margin-bottom: 20px;\n    width: 150px;\n    height: 150px;\n  }\n  .modal-change-avatar .modal-avatar-index .avatar-preview img {\n    width: 150px;\n    height: 150px;\n  }\n  .modal-change-avatar .modal-avatar-index .avatar-preview .loader {\n    top: 25px;\n    height: 100px;\n  }\n  .modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel {\n    width: 100px;\n    height: 100px;\n  }\n}\n.modal-change-avatar .modal-avatar-index .btn {\n  text-align: left;\n}\n.modal-change-avatar .modal-avatar-upload {\n  text-align: center;\n}\n.modal-change-avatar .modal-avatar-upload .btn-pick-file {\n  background: transparent;\n  border: 2px solid #ebecf0;\n  border-radius: 6px;\n  padding: 10px 24px;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  color: #7a869a;\n  font-size: 18px;\n  text-align: center;\n}\n.modal-change-avatar .modal-avatar-upload .btn-pick-file > .material-icon {\n  display: block;\n  margin: 0px auto;\n  margin-bottom: 13.2px;\n  font-size: 50px;\n  width: 50px;\n  height: 50px;\n}\n.modal-change-avatar .modal-avatar-upload .btn-pick-file:hover,\n.modal-change-avatar .modal-avatar-upload .btn-pick-file:active {\n  border-color: #0052cc;\n  color: #0052cc;\n}\n.modal-change-avatar .modal-avatar-upload .text-muted {\n  margin-top: 13.2px;\n}\n.modal-change-avatar .modal-avatar-upload .upload-progress img {\n  border-radius: 4px;\n  margin-bottom: 20px;\n  max-height: 80px;\n  width: auto;\n}\n.modal-change-avatar .modal-avatar-upload .upload-progress .progress {\n  width: 70%;\n  margin: 0px auto;\n}\n.modal-avatar-crop .crop-form {\n  margin: 0px auto;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input {\n  margin-top: 10px;\n  -webkit-appearance: none;\n  border: 1px solid white;\n  width: 100%;\n  /*hide the outline behind the border*/\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 8px;\n  background: #ebecf0;\n  border: none;\n  border-radius: 3px;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  border: none;\n  height: 20px;\n  width: 20px;\n  border-radius: 50%;\n  background: #7a869a;\n  margin-top: -6px;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus {\n  outline: none;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-webkit-slider-runnable-track {\n  background: #ebecf0;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-track {\n  width: 100%;\n  height: 8px;\n  background: #ebecf0;\n  border: none;\n  border-radius: 4px;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-thumb {\n  border: none;\n  height: 20px;\n  width: 20px;\n  border-radius: 50%;\n  background: #7a869a;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input:-moz-focusring {\n  outline: 1px solid white;\n  outline-offset: -1px;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-track {\n  width: 100%;\n  height: 8px;\n  /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */\n  background: transparent;\n  /*leave room for the larger thumb to overflow with a transparent border */\n  border-color: transparent;\n  border-width: 8px 0;\n  /*remove default tick marks*/\n  color: transparent;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-lower {\n  background: #ebecf0;\n  border-radius: 16px;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-upper {\n  background: #ebecf0;\n  border-radius: 16px;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-thumb {\n  border: none;\n  height: 20px;\n  width: 20px;\n  border-radius: 50%;\n  background: #7a869a;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-lower {\n  background: #ebecf0;\n}\n.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-upper {\n  background: #ebecf0;\n}\n.modal-change-avatar .modal-avatar-gallery {\n  padding-bottom: 0px;\n}\n.modal-change-avatar .modal-avatar-gallery .avatars-gallery {\n  margin-bottom: 20px;\n}\n.modal-change-avatar .modal-avatar-gallery .avatars-gallery h3 {\n  margin-top: 0px;\n}\n.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .row {\n  margin-bottom: 10px;\n}\n.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn {\n  border-radius: 6px;\n  border: 2px solid #ebecf0;\n  background: none;\n  padding: 2px;\n  position: relative;\n}\n.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:hover,\n.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:focus {\n  border-color: #7a869a;\n}\n.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn.avatar-selected,\n.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:active {\n  border-color: #0065ff;\n}\n.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn img {\n  border-radius: 4px;\n  width: 100%;\n  height: auto;\n}\n.category-main .read-status .material-icon {\n  color: #ebecf0;\n}\n.category-main .read-status.item-new .material-icon {\n  color: #0052cc;\n}\n.category-last-thread .media-heading a {\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  width: 290px;\n  text-overflow: ellipsis;\n  vertical-align: top;\n}\n@media screen and (max-width: 991px) {\n  .category-last-thread .media-heading a {\n    width: 275px;\n  }\n}\n@media screen and (max-width: 767px) {\n  .category-last-thread .media-heading a {\n    width: 260px;\n  }\n}\n.category-thread-message .material-icon {\n  width: 28px;\n  height: 28px;\n  font-size: 28px;\n  line-height: 28px;\n}\n.category-thread-message p {\n  margin: 0px;\n}\n.list-inline.subcategories-list {\n  overflow: auto;\n  margin-top: -10px;\n}\n.list-inline.subcategories-list li {\n  display: block;\n  float: left;\n}\n.list-inline.subcategories-list li a,\n.list-inline.subcategories-list li a:link,\n.list-inline.subcategories-list li a:visited,\n.list-inline.subcategories-list li a:active,\n.list-inline.subcategories-list li a:hover,\n.list-inline.subcategories-list li a:focus {\n  background-color: #ebecf0;\n  border: 1px solid #dcdee5;\n  border-radius: 4px;\n  display: inline-block;\n  margin-top: 10px;\n  padding: 6px 12px;\n  color: #5e6c84;\n}\n.list-inline.subcategories-list li:focus,\n.list-inline.subcategories-list li a:hover,\n.list-inline.subcategories-list li a:active {\n  background-color: #dcdee5;\n  color: #172b4d;\n  text-decoration: none;\n}\n.row.subcategories-list .btn {\n  margin-top: 20px;\n  text-align: left;\n}\n#posting-placeholder {\n  background-color: #ebecf0;\n  display: none;\n  margin-top: 30px;\n  margin-bottom: -30px;\n  padding: 20px 0px;\n  transition: height 300ms;\n}\n#posting-placeholder.slide-in {\n  display: block;\n}\n#posting-placeholder .first-row {\n  margin-bottom: 20px;\n}\n#posting-placeholder .first-row .form-control {\n  border: 1px solid #bfc2cf;\n}\n#posting-placeholder .first-row .posting-options .btn {\n  padding-top: 4px;\n  padding-bottom: 4px;\n}\n#posting-placeholder .first-row .posting-options .btn .btn-text {\n  margin-left: 5px;\n  position: relative;\n  top: 1px;\n}\n#posting-placeholder .first-row .posting-options .material-icon {\n  width: 14px;\n  height: 24px;\n  margin-right: 0px;\n  position: relative;\n  top: 5px;\n  font-size: 14px;\n  line-height: 14px;\n  text-align: center;\n}\n.posting-ui-preview {\n  padding: 20px 0px;\n  position: relative;\n}\n.posting-ui-preview .form-control {\n  box-shadow: none;\n  resize: none;\n}\n.posting-loader {\n  text-align: center;\n}\n.posting-loader .loader {\n  height: 100px;\n}\n.posting-loader .loader .loader-spinning-wheel {\n  width: 100px;\n  height: 100px;\n}\n.posting-message {\n  text-align: center;\n}\n.posting-message .material-icon {\n  margin-right: 6.66666667px;\n  position: relative;\n  top: -1px;\n  width: 28px;\n  height: 28px;\n  font-size: 28px;\n  line-height: 28px;\n}\n.posting-message .message-body p {\n  font-size: 18px;\n}\n.editor-border {\n  background-color: #fff;\n  border: 1px solid #bfc2cf;\n  border-radius: 4px;\n}\n.editor-border .form-control {\n  border: none;\n  resize: none;\n}\n.editor-border .form-control,\n.editor-border .form-control:focus,\n.editor-border .form-control:active {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.editor-footer {\n  border-top: 1px solid #bfc2cf;\n  padding: 6px 12px;\n  overflow: auto;\n}\n.editor-footer .pull-left {\n  margin-right: 12px;\n}\n.editor-footer .pull-right {\n  margin-left: 12px;\n}\n.editor-footer .btn-icon .material-icon {\n  margin-bottom: -2px;\n}\n@media screen and (max-width: 991px) {\n  .editor-footer .buttons-list {\n    float: none !important;\n    margin: 0px;\n    margin-bottom: 10px;\n  }\n  .editor-footer .buttons-list .btn {\n    display: inline-block;\n    float: none !important;\n    margin: 6.66666667px;\n  }\n  .editor-footer .btn-protect .btn-text {\n    margin-left: 10px;\n  }\n  .editor-footer .btn-protect .material-icon {\n    position: relative;\n    bottom: 2px;\n    width: 14px;\n    height: 14px;\n    font-size: 14px;\n    line-height: 14px;\n  }\n}\n@media screen and (min-width: 768px) and (max-width: 991px) {\n  .buttons-list .btn:first-child {\n    margin-left: 0px;\n  }\n}\n@media screen and (max-width: 767px) {\n  .buttons-list {\n    text-align: center;\n  }\n  .buttons-list .btn-protect {\n    display: block;\n    float: none !important;\n    width: 100%;\n    margin: 0px;\n    margin-top: 10px;\n  }\n}\n.editor-attachments-list {\n  margin: 0px;\n  padding: 0px;\n}\n.editor-attachments-list li {\n  margin: 0px;\n}\n.editor-attachment-complete {\n  border-top: 1px solid #bfc2cf;\n  padding: 6px 0px;\n  padding-right: 12px;\n}\n.editor-attachment-complete .editor-attachment-image {\n  float: left;\n  width: 50px;\n}\n.editor-attachment-complete .editor-attachment-image a {\n  background-size: cover;\n  background-position: center;\n  border-radius: 3px;\n  display: block;\n  margin: 0px auto;\n  width: 36px;\n  height: 36px;\n}\n.editor-attachment-complete .editor-attachment-icon {\n  float: left;\n  width: 50px;\n  text-align: center;\n}\n.editor-attachment-complete .editor-attachment-icon .material-icon {\n  position: relative;\n  top: 2px;\n  height: 28px;\n  width: 28px;\n  font-size: 28px;\n  line-height: 28px;\n}\n.editor-attachment-complete .editor-attachment-details {\n  margin-left: 50px;\n}\n.editor-attachment-complete .editor-attachment-details h4,\n.editor-attachment-complete .editor-attachment-details p {\n  margin: 0px;\n  padding: 0px;\n  font-size: 14px;\n}\n.editor-attachment-complete .editor-attachment-details p {\n  margin-top: 3px;\n  color: #7a869a;\n  font-size: 12px;\n}\n.editor-attachment-complete .editor-attachment-details abbr {\n  white-space: nowrap;\n}\n@media screen and (min-width: 768px) {\n  .editor-attachment-actions {\n    padding-top: 3px;\n  }\n}\n@media screen and (max-width: 767px) {\n  .editor-attachment-actions {\n    padding-left: 12px;\n    padding-right: 12px;\n  }\n}\n.editor-attachment-error {\n  border-top: 1px solid #bfc2cf;\n  padding: 6px 0px;\n  padding-right: 12px;\n}\n.editor-attachment-error-icon {\n  float: left;\n  width: 50px;\n  text-align: center;\n}\n.editor-attachment-error-icon .material-icon {\n  position: relative;\n  top: 2px;\n  height: 28px;\n  width: 28px;\n  font-size: 28px;\n  line-height: 28px;\n}\n.editor-attachment-error-message {\n  margin-left: 50px;\n  padding: 6px 0px;\n  position: relative;\n}\n.editor-attachment-error-message h4,\n.editor-attachment-error-message p {\n  margin: 0px;\n  padding: 0px;\n  font-size: 14px;\n}\n.editor-attachment-error-message p {\n  margin-top: 3px;\n  font-size: 12px;\n}\n.editor-attachment-error-message .btn {\n  position: absolute;\n  top: 9px;\n  right: 12px;\n}\n@media screen and (max-width: 767px) {\n  .editor-attachment-error-message .btn {\n    display: block;\n    margin-top: 10px;\n    position: static;\n  }\n}\n.editor-attachment-progress-bar {\n  background: #bfc2cf;\n  overflow: auto;\n}\n.editor-attachment-progress {\n  background: #0052cc;\n  float: left;\n  height: 1px;\n}\n.editor-attachment-upload-message {\n  margin: 0px;\n  padding: 6px 12px;\n}\n#editor-upload-field {\n  position: absolute;\n  left: -1000px;\n  top: -1000px;\n}\n.atwho-view ul li img {\n  border-radius: 3px;\n  margin-right: 4.66666667px;\n  width: 20px;\n  height: 20px;\n}\n.participant-card .btn-user,\n.participant-card .dropdown.open .btn-user {\n  margin-bottom: 20px;\n}\n.participant-card .btn-user,\n.participant-card .dropdown.open .btn-user,\n.participant-card .btn-user:hover,\n.participant-card .dropdown.open .btn-user:hover,\n.participant-card .btn-user:focus,\n.participant-card .dropdown.open .btn-user:focus,\n.participant-card .btn-user:focus:active,\n.participant-card .dropdown.open .btn-user:focus:active {\n  padding: 0px;\n  overflow: hidden;\n  text-align: left;\n}\n.participant-card .btn-user img,\n.participant-card .dropdown.open .btn-user img {\n  background-color: #fff;\n  width: 34px;\n  height: 34px;\n  margin-right: 8px;\n}\n.panel-participants p {\n  margin: 0px;\n  margin-top: 7px;\n}\n.poll-choices-control .list-group-item {\n  padding: 0px;\n}\n.poll-choices-control .list-group-item .btn {\n  background: transparent;\n  border: transparent;\n  float: left;\n  margin: 0px 2px;\n  margin-bottom: -29px;\n  padding: 0px;\n  width: 28px;\n  height: 28px;\n  position: relative;\n  top: 3px;\n}\n.poll-choices-control .list-group-item .btn .material-icon {\n  width: 28px;\n  height: 28px;\n  font-size: 28px;\n  line-height: 28px;\n}\n.poll-choices-control input,\n.poll-choices-control input:focus,\n.poll-choices-control input:active {\n  background: transparent;\n  border: none;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  outline: none;\n  margin-left: 30px;\n  padding: 6px 12px;\n  width: 100%;\n}\n.posts-list {\n  margin: 0px;\n  padding: 0px;\n  clear: both;\n}\n.posts-list li {\n  list-style: none;\n  margin: 0px;\n  padding: 0px;\n}\n@media screen and (min-width: 992px) {\n  .panel-post .panel-body {\n    display: flex;\n  }\n  .post-side {\n    flex-shrink: 0;\n    width: 260px;\n    padding-right: 15px;\n  }\n  .panel-content {\n    flex: 1 0;\n  }\n}\n.post-side {\n  font-size: 12px;\n}\n.post-side .media {\n  margin: 0px;\n}\n.post-side .poster-avatar {\n  height: 36px;\n  width: 36px;\n}\n@media screen and (min-width: 992px) {\n  .post-side .poster-avatar {\n    margin-top: 4px;\n    height: 82px;\n    width: 82px;\n  }\n}\n.post-side .user-status {\n  margin-right: 4px;\n}\n.post-side .media-heading {\n  display: block;\n}\n.post-side .media-heading {\n  margin: 0px;\n  margin-top: -1px;\n  font-size: 14px;\n}\n.post-side .media-heading .user-status {\n  margin-right: 0;\n  margin-left: 2px;\n}\n.post-side .pull-right {\n  margin-left: 16px;\n}\n@media screen and (min-width: 992px) {\n  .post-side .media-heading {\n    margin-top: 3px;\n    font-size: 18px;\n  }\n  .post-side .media-heading .user-status {\n    display: none;\n  }\n  .post-side .user-title {\n    margin-top: 4px;\n    margin-bottom: 5px;\n  }\n  .post-side .user-postcount {\n    display: block;\n  }\n  .post-side .user-status {\n    display: block;\n  }\n}\n.post-heading {\n  height: 36px;\n}\n@media screen and (max-width: 991px) {\n  .post-heading {\n    margin-top: 10px;\n  }\n}\n.post-heading .pull-right {\n  margin-left: 16px;\n}\n.post-heading > .btn-link {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n.post-heading .label {\n  margin-top: 6px;\n  font-size: 14px;\n  font-weight: normal;\n}\n.post-heading .label-unread {\n  background-color: #36b37e;\n  color: #fff;\n}\n@media screen and (min-width: 992px) {\n  .post-side .pull-right {\n    display: none;\n  }\n}\n@media screen and (max-width: 991px) {\n  .post-heading .pull-right {\n    display: none;\n  }\n}\n.post-body {\n  padding-top: 20px;\n  padding-bottom: 30px;\n}\n.post-status-message {\n  overflow: auto;\n}\n.post-status-message .material-icon {\n  float: left;\n  font-size: 28px;\n  line-height: 28px;\n}\n.post-status-message p {\n  margin: 0px;\n  margin-top: 4px;\n  margin-left: 36px;\n}\n.post-status-best-answer {\n  background-color: #36b37e;\n  color: #fff;\n}\n.post-status-hidden {\n  background-color: #ff5630;\n  color: #fff;\n}\n.post-status-unapproved {\n  background-color: #0052cc;\n  color: #fff;\n}\n.post-status-protected {\n  background-color: #5e6c84;\n  color: #fff;\n}\n.post-footer .pull-left {\n  margin-right: 16px;\n}\n.post-footer .pull-right {\n  margin-left: 16px;\n}\n.post-footer p {\n  padding-top: 7px;\n  padding-bottom: 6px;\n  margin-bottom: 0px;\n}\n.post-attachments {\n  border-top: 1px solid #ebecf0;\n  padding: 6px 16px;\n}\n.post-attachments abbr {\n  white-space: nowrap;\n}\n.post-attachments .attachment-name {\n  word-wrap: break-word;\n}\n.post-attachments .row > div {\n  margin: 10px 0px;\n}\n.post-attachments .post-attachment-preview {\n  float: left;\n  height: 40px;\n  width: 40px;\n  text-align: center;\n}\n.post-attachments .post-attachment {\n  margin-left: 52px;\n}\n.post-attachments .post-thumbnail {\n  display: block;\n  background-size: cover;\n  background-position: center;\n  border-radius: 3px;\n  width: 40px;\n  height: 40px;\n}\n.post-attachments .material-icon {\n  width: 28px;\n  height: 28px;\n  position: relative;\n  top: 5px;\n  font-size: 28px;\n  line-height: 28px;\n}\n.post-attachments .material-icon:link,\n.post-attachments .material-icon:active,\n.post-attachments .material-icon:visited,\n.post-attachments .material-icon:hover,\n.post-attachments .material-icon:focus {\n  color: #172b4d;\n  text-decoration: none;\n}\n.post-attachments .post-attachment-description {\n  margin: 0px;\n  padding: 0px;\n  color: #7a869a;\n  font-size: 12px;\n}\n.post-feed .post-side {\n  width: 100%;\n  padding-right: 0;\n}\n.post-feed .post-side .media-heading {\n  margin: 0px;\n  font-size: 14px;\n}\n.post-feed .post-side .user-title {\n  margin: 0px;\n  font-size: 12px;\n}\n.post-feed .post-side .btn {\n  display: inline-block;\n}\n.post-feed .post-side img {\n  margin-top: 0px;\n  width: 36px;\n  height: 36px;\n}\n.post-feed .post-heading {\n  height: auto;\n  margin: 10px 0px;\n}\n.post-feed .post-heading .btn {\n  margin-right: 16px;\n  max-width: 100%;\n  text-align: left;\n  white-space: normal;\n  word-wrap: break-word;\n}\n.posts-list .event {\n  margin-bottom: 20px;\n  color: #7a869a;\n}\n.posts-list .event .event-body {\n  display: flex;\n  align-items: flex-start;\n}\n.posts-list .event-label {\n  margin-left: 51px;\n}\n.posts-list .event-label .label-unread {\n  background-color: #36b37e;\n  color: #fff;\n}\n.posts-list .event .event-icon {\n  padding-right: 15px;\n}\n.posts-list .event .event-icon .event-icon-bg {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 36px;\n  width: 36px;\n  background: #ebecf0;\n  border-radius: 4px;\n  color: #5e6c84;\n}\n.posts-list .event .event-icon .material-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 28px;\n}\n.posts-list .event .event-content {\n  flex: 1 0;\n}\n.posts-list .event .event-message {\n  margin-bottom: 5px;\n  font-size: 18px;\n}\n.posts-list .event .event-info {\n  margin: 0px;\n  font-size: 12px;\n}\n.posts-list .event .event-info li {\n  margin-right: 12px;\n}\n.posts-list .event .event-info li:last-child {\n  margin-right: 0px;\n}\n.posts-list .event .event-controls .btn-link {\n  border: 0px;\n  margin: 0px;\n  margin-right: 12px;\n  padding: 0px;\n  font-size: 12px;\n}\n.posts-list .event .event-controls .btn-link:last-child {\n  margin-right: 0px;\n}\n@media screen and (max-width: 767px) {\n  .posts-list .event .event-info {\n    margin-top: 5px;\n  }\n  .posts-list .event .event-controls {\n    clear: both;\n    margin-top: 5px;\n  }\n  .posts-list .event .event-controls .btn-link {\n    margin-right: 20px;\n    font-size: 14px;\n  }\n  .posts-list .event .event-controls .btn-link:last-child {\n    margin-right: 0px;\n  }\n}\n@media screen and (min-width: 992px) {\n  .posts-list .event .event-icon {\n    justify-content: flex-end;\n    flex-shrink: 0;\n    display: flex;\n    width: 275px;\n  }\n  .event-content {\n    flex: 1 0;\n  }\n  .posts-list .event-label {\n    margin-left: 275px;\n  }\n}\n.post-changelog-diff {\n  padding: 0px;\n  margin: 0px;\n}\n.post-changelog-diff .list-unstyled {\n  padding: 0px;\n  margin: 5px 0px;\n}\n.post-changelog-diff .diff-item {\n  padding: 5px 10px;\n}\n.post-changelog-diff .diff-item-sub {\n  color: #ff5630;\n}\n.post-changelog-diff .diff-item-add {\n  color: #36b37e;\n}\n.post-changelog-toolbar .row {\n  margin-left: -12px;\n  margin-right: -12px;\n}\n@media screen and (max-width: 767px) {\n  .post-changelog-toolbar .post-change-label {\n    text-align: center;\n  }\n}\n@media screen and (max-width: 767px) {\n  .page-message .message-panel,\n  .page-error .message-panel {\n    text-align: center;\n  }\n  .page-message .message-icon,\n  .page-error .message-icon {\n    margin: 30px;\n    font-size: 80px;\n  }\n}\n@media screen and (min-width: 768px) {\n  .page-message .message-panel,\n  .page-error .message-panel {\n    margin: 60px auto;\n    max-width: 779.35px;\n    overflow: auto;\n  }\n  .page-message .message-icon,\n  .page-error .message-icon {\n    float: left;\n  }\n  .page-message .message-icon .material-icon,\n  .page-error .message-icon .material-icon {\n    font-size: 80px;\n  }\n  .page-message .message-body,\n  .page-error .message-body {\n    margin-top: 16px;\n    margin-left: 100px;\n    font-size: 18px;\n  }\n  .page-message .message-body p.lead,\n  .page-error .message-body p.lead {\n    font-size: 36px;\n  }\n}\n.threads-list {\n  margin-bottom: 20px;\n}\n.threads-list-item {\n  display: flex;\n  align-items: center;\n}\n.threads-list-item img {\n  width: 32px;\n  height: 32px;\n}\n.threads-list-item-top-row {\n  display: flex;\n  flex: 1;\n  align-items: center;\n  justify-content: center;\n}\n.threads-list-item-bottom-row {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n.threads-list-item-col-icon {\n  padding-right: 15px;\n}\n.threads-list-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 32px;\n  height: 32px;\n  border-radius: 3px;\n  font-size: 16px;\n  line-height: 16px;\n}\n.threads-list-icon:link,\n.threads-list-icon:active,\n.threads-list-icon:focus,\n.threads-list-icon:hover,\n.threads-list-icon:visited {\n  background-color: #ebecf0;\n  color: #7a869a;\n  text-decoration: none;\n}\n.threads-list-icon-new:link,\n.threads-list-icon-new:active,\n.threads-list-icon-new:focus,\n.threads-list-icon-new:hover,\n.threads-list-icon-new:visited {\n  background-color: #0052cc;\n  color: #fff;\n}\n.threads-list-item-col-title {\n  flex: 1;\n}\na.threads-list-item-title:link,\na.threads-list-item-title:active,\na.threads-list-item-title:focus,\na.threads-list-item-title:hover,\na.threads-list-item-title:visited {\n  font-size: 16px;\n  color: #172b4d;\n  overflow-wrap: break-word;\n}\na.threads-list-item-title-sm {\n  font-size: 18px;\n}\na.threads-list-item-title-sm:link,\na.threads-list-item-title-sm:active,\na.threads-list-item-title-sm:focus,\na.threads-list-item-title-sm:hover,\na.threads-list-item-title-sm:visited {\n  color: #5e6c84;\n  overflow-wrap: break-word;\n}\na.threads-list-item-title-new:link,\na.threads-list-item-title-new:active,\na.threads-list-item-title-new:focus,\na.threads-list-item-title-new:hover,\na.threads-list-item-title-new:visited {\n  color: #172b4d;\n}\n.threads-list-item-col-flags {\n  padding-left: 15px;\n}\n.threads-list-item .thread-flags {\n  opacity: 0.8;\n}\n.threads-list-item:hover .thread-flags,\n.threads-list-item:focus .thread-flags {\n  opacity: 1;\n}\n.threads-list-item-col-category {\n  padding-left: 15px;\n  white-space: nowrap;\n}\n.threads-list-category-label {\n  padding: 3px 6px;\n  border-radius: 3px;\n  font-size: 12px;\n  font-weight: bold;\n}\n.threads-list-category-label,\n.threads-list-category-label:link,\n.threads-list-category-label:active,\n.threads-list-category-label:hover,\n.threads-list-category-label:focus,\n.threads-list-category-label:visited {\n  color: #344563;\n  background: #ebecf0;\n  text-decoration: none;\n}\n.threads-list-category-label.threads-list-category-label-color,\n.threads-list-category-label.threads-list-category-label-color:link,\n.threads-list-category-label.threads-list-category-label-color:active,\n.threads-list-category-label.threads-list-category-label-color:hover,\n.threads-list-category-label.threads-list-category-label-color:focus,\n.threads-list-category-label.threads-list-category-label-color:visited {\n  color: #fff;\n  background: var(--label-color);\n}\n.threads-list-item-parent-category {\n  border-radius: 3px 0 0 3px;\n  margin-right: 2px;\n}\n.threads-list-item-parent-category + .threads-list-category-label {\n  border-radius: 0 3px 3px 0;\n}\n.threads-list-item-col-replies {\n  width: 80px;\n  padding-left: 15px;\n}\n.threads-list-item-col-last-poster {\n  padding-left: 15px;\n}\n.threads-list-item-col-last-poster img {\n  border-radius: 3px;\n}\n.threads-list-item-col-last-activity {\n  width: 120px;\n  padding-left: 15px;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n.threads-list-item-col-last-activity a:link,\n.threads-list-item-col-last-activity a:hover,\n.threads-list-item-col-last-activity a:active,\n.threads-list-item-col-last-activity a:visited,\n.threads-list-item-col-last-activity a:focus {\n  color: #344563;\n  font-size: 16px;\n}\n.threads-list-item-col-checkbox,\n.threads-list-item-col-subscription {\n  padding-left: 15px;\n}\n.threads-list-item-title-sm,\n.threads-list-item-col-checkbox-sm {\n  display: none;\n}\n@media screen and (max-width: 767px) {\n  .threads-list {\n    margin-left: -15px;\n    margin-right: -15px;\n  }\n  .threads-list .list-group,\n  .threads-list .list-group-item {\n    border-radius: 0;\n    border-left: 0;\n    border-right: 0;\n  }\n  .threads-list-item-title {\n    display: none;\n  }\n  .threads-list-item-title-sm {\n    display: inline-block;\n  }\n  .threads-list-item-col-icon {\n    display: none;\n  }\n}\n@media screen and (max-width: 991px) {\n  .threads-list-item {\n    display: block;\n  }\n  .threads-list-item img {\n    width: 20px;\n    height: 20px;\n  }\n  .threads-list-item-top-row {\n    align-items: start;\n    margin-bottom: 7.5px;\n  }\n  .threads-list-item-bottom-row {\n    justify-content: end;\n    flex: 0;\n  }\n  .threads-list-item-bottom-row > div {\n    width: auto;\n    padding: 0 0 0 15px;\n  }\n  .threads-list-item-col-subscription,\n  .threads-list-item-col-checkbox {\n    display: none;\n  }\n  .threads-list-item-col-checkbox-sm {\n    display: block;\n    padding-left: 15px;\n  }\n  .threads-list-item-col-checkbox-sm .btn-icon {\n    padding: 4px;\n  }\n  .threads-list-item-col-checkbox-sm .btn-icon .material-icon {\n    font-size: 16px;\n  }\n}\n.threads-list-item-is-busy .btn-icon {\n  opacity: 0.8;\n  animation: busy 0.75s linear infinite;\n}\n@keyframes busy {\n  50% {\n    opacity: 0.5;\n  }\n}\n.threads-list-update-prompt {\n  padding: 0;\n}\n.threads-list-update-prompt-btn {\n  padding: 10px 16px;\n  background: #d6e7ff;\n  color: #003d99;\n  border: none;\n  border-radius: 3px 3px 0 0;\n}\n.threads-list-update-prompt-btn:hover,\n.threads-list-update-prompt-btn:focus {\n  background: #e6f0ff;\n  color: #0052cc;\n}\n.threads-list-update-prompt-btn:active {\n  background: #b3d1ff;\n  color: #0066ff;\n}\n.active-posters li {\n  display: block;\n  overflow: auto;\n}\n.active-posters .rank-user-avatar {\n  float: left;\n}\n@media screen and (max-width: 991px) {\n  .active-posters .rank-user-avatar {\n    height: 42px;\n  }\n  .active-posters .rank-user-avatar img {\n    width: 36px;\n    height: 36px;\n    position: relative;\n    top: 3px;\n  }\n}\n.active-posters .rank-user {\n  float: left;\n  margin-top: 3px;\n}\n@media screen and (max-width: 991px) {\n  .active-posters .rank-user {\n    margin-left: 13.2px;\n    width: 40%;\n  }\n}\n@media screen and (max-width: 767px) {\n  .active-posters .rank-user {\n    float: none;\n    margin-left: 50px;\n    width: auto;\n  }\n}\n@media screen and (min-width: 992px) {\n  .active-posters .rank-user {\n    margin-left: 16px;\n    width: 25%;\n  }\n  .active-posters .rank-user .user-name {\n    font-size: 18px;\n  }\n}\n.active-posters .user-details {\n  overflow: auto;\n  font-family: Sans-Serif;\n}\n.active-posters .user-details .user-status,\n.active-posters .user-details .rank-name,\n.active-posters .user-details .user-title {\n  display: block;\n  float: left;\n  margin-right: 3px;\n  font-size: 12px;\n}\n@media screen and (min-width: 992px) {\n  .active-posters .user-details .user-status,\n  .active-posters .user-details .rank-name,\n  .active-posters .user-details .user-title {\n    margin-right: 8px;\n  }\n}\n.active-posters .user-details .user-title {\n  margin-right: 0px;\n}\n@media screen and (min-width: 992px) {\n  .active-posters .user-details {\n    overflow: visible;\n  }\n  .active-posters .user-details .rank-name,\n  .active-posters .user-details .user-title {\n    height: 14px;\n    overflow: hidden;\n    position: relative;\n    top: 1px;\n    vertical-align: baseline;\n  }\n}\n@media screen and (max-width: 767px) {\n  .active-posters .user-details {\n    margin-top: 3px;\n  }\n  .active-posters .user-details .rank-name,\n  .active-posters .user-details .user-title {\n    font-weight: normal;\n  }\n}\n.active-posters .user-status {\n  overflow: auto;\n  position: relative;\n  top: 1px;\n}\n.active-posters .user-status span {\n  display: block;\n  float: left;\n}\n@media screen and (min-width: 992px) {\n  .active-posters .user-status {\n    height: 14px;\n    overflow: hidden;\n  }\n}\n.active-posters .user-status .status-icon {\n  position: relative;\n}\n@media screen and (max-width: 991px) {\n  .active-posters .user-status .status-icon {\n    top: 0px;\n    width: 12px;\n    height: 12px;\n    font-size: 12px;\n    line-height: 12px;\n  }\n}\n@media screen and (min-width: 992px) {\n  .active-posters .user-status .status-icon {\n    top: 1px;\n    margin-right: 3px;\n    width: 13px;\n    height: 13px;\n    font-size: 13px;\n    line-height: 13px;\n  }\n}\n.active-posters .status-label.ui-preview-text,\n.active-posters .rank-name .ui-preview-text,\n.active-posters .user-title .ui-preview-text {\n  height: 11px;\n  position: relative;\n  top: 2px;\n  font-size: 11px;\n  line-height: 11px;\n}\n.active-posters .rank-name .ui-preview-text,\n.active-posters .user-title .ui-preview-text {\n  position: static;\n}\n.active-posters .rank-position strong,\n.active-posters .rank-posts-counted strong,\n.active-posters .rank-posts-total strong,\n.active-posters .rank-position small,\n.active-posters .rank-posts-counted small,\n.active-posters .rank-posts-total small {\n  display: block;\n}\n@media screen and (max-width: 991px) {\n  .active-posters .rank-position,\n  .active-posters .rank-posts-counted,\n  .active-posters .rank-posts-total {\n    overflow: auto;\n  }\n  .active-posters .rank-position strong,\n  .active-posters .rank-posts-counted strong,\n  .active-posters .rank-posts-total strong,\n  .active-posters .rank-position small,\n  .active-posters .rank-posts-counted small,\n  .active-posters .rank-posts-total small {\n    float: left;\n    font-size: 10.5px;\n  }\n  .active-posters .rank-position strong,\n  .active-posters .rank-posts-counted strong,\n  .active-posters .rank-posts-total strong {\n    min-width: 30px;\n    margin-right: 3px;\n    text-align: right;\n  }\n  .active-posters .rank-position .ui-preview-text,\n  .active-posters .rank-posts-counted .ui-preview-text,\n  .active-posters .rank-posts-total .ui-preview-text {\n    height: 8px;\n    position: relative;\n    top: -1px;\n    font-size: 8px;\n    line-height: 8px;\n  }\n}\n@media screen and (min-width: 992px) {\n  .active-posters .rank-position,\n  .active-posters .rank-posts-counted,\n  .active-posters .rank-posts-total {\n    float: left;\n    margin-top: 3px;\n    width: 23%;\n    font-size: 18px;\n    text-align: center;\n  }\n  .active-posters .rank-position small,\n  .active-posters .rank-posts-counted small,\n  .active-posters .rank-posts-total small {\n    font-size: 12px;\n    font-weight: normal;\n  }\n}\n.user-compact-stats .rank-position strong,\n.user-compact-stats .rank-posts-counted strong,\n.user-compact-stats .rank-position small,\n.user-compact-stats .rank-posts-counted small {\n  display: inline-block;\n  float: none;\n}\n.user-compact-stats .rank-position strong,\n.user-compact-stats .rank-posts-counted strong {\n  min-width: auto;\n}\n.user-compact-stats .rank-position small,\n.user-compact-stats .rank-posts-counted small {\n  margin-right: 20px;\n}\n@media screen and (min-width: 768px) and (max-width: 991px) {\n  .active-posters .rank-position {\n    margin-top: 6px;\n  }\n  .active-posters .rank-posts-total {\n    display: none;\n  }\n}\n@media screen and (min-width: 768px) and (max-width: 991px) {\n  .active-posters .rank-position {\n    margin-top: 6px;\n  }\n  .active-posters .rank-posts-total {\n    display: none;\n  }\n}\n.profile-page-header-avatar {\n  text-align: center;\n  margin: 20px 0;\n}\n.profile-page-header-avatar .user-avatar {\n  border-radius: 4px;\n}\n.profile-data-list {\n  display: block;\n  padding: 0;\n  margin: 0 -12px;\n  font-size: 12px;\n}\n.profile-data-list li {\n  display: inline-block;\n  list-style: none;\n  padding: 5px 12px;\n}\n.profile-data-list .status-icon {\n  margin-right: 3px;\n  position: relative;\n  bottom: 1px;\n}\n.profile-data-list .user-account-disabled {\n  color: #ff5630;\n  font-weight: bold;\n}\n@media screen and (min-width: 768px) {\n  .profile-page-header {\n    display: flex;\n    align-items: flex-end;\n  }\n  .profile-page-header-avatar {\n    margin: 0;\n    margin-right: 30px;\n  }\n}\n@media screen and (min-width: 992px) {\n  .profile-page-header-avatar {\n    position: relative;\n    top: 54px;\n    margin-top: -54px;\n  }\n  .profile-page-header-details {\n    padding-left: 158px;\n  }\n  .profile-data-list {\n    font-size: 14px;\n  }\n}\n@media screen and (min-width: 992px) {\n  .username-history li {\n    display: block;\n    overflow: auto;\n  }\n}\n.username-history .change-avatar {\n  float: left;\n}\n.username-history .change-avatar a,\n.username-history .change-avatar span {\n  margin-right: 10px;\n}\n.username-history .change-avatar a img,\n.username-history .change-avatar span img {\n  width: 42px;\n  height: 42px;\n}\n@media screen and (min-width: 992px) {\n  .username-history .change-avatar a img,\n  .username-history .change-avatar span img {\n    width: 18px;\n    height: 18px;\n    position: relative;\n    bottom: 1px;\n  }\n}\n@media screen and (min-width: 992px) {\n  .username-history .change-author {\n    float: left;\n    width: 30%;\n  }\n}\n.username-history .change {\n  min-height: 20px;\n  overflow: auto;\n}\n.username-history .change span {\n  display: block;\n  float: left;\n}\n.username-history .change .material-icon {\n  margin: 0px 7px;\n  position: relative;\n  top: 4px;\n}\n@media screen and (min-width: 992px) {\n  .username-history .change {\n    float: left;\n    width: 40%;\n  }\n}\n@media screen and (min-width: 992px) {\n  .username-history .change-date {\n    float: left;\n    width: 20%;\n  }\n}\n.search-footer p {\n  margin-top: 20px;\n  color: #5e6c84;\n  font-size: 12px;\n  text-align: center;\n}\n@media screen and (min-width: 768px) {\n  .page-search-form {\n    padding-top: 40px;\n  }\n}\n@media screen and (min-width: 992px) {\n  .page-search-form {\n    padding-bottom: 40px;\n  }\n  .page-search-form h1 {\n    position: relative;\n    top: 5px;\n  }\n  .page-search-form .form-group {\n    margin-bottom: 0px;\n  }\n}\n/*\nDescription: Foundation 4 docs style for highlight.js\nAuthor: Dan Allen <dan.j.allen@gmail.com>\nWebsite: http://foundation.zurb.com/docs/\nVersion: 1.0\nDate: 2013-04-02\n*/\n.hljs {\n  display: block;\n  overflow-x: auto;\n  padding: 0.5em;\n  background: #eee;\n  color: black;\n}\n.hljs-link,\n.hljs-emphasis,\n.hljs-attribute,\n.hljs-addition {\n  color: #070;\n}\n.hljs-emphasis {\n  font-style: italic;\n}\n.hljs-strong,\n.hljs-string,\n.hljs-deletion {\n  color: #d14;\n}\n.hljs-strong {\n  font-weight: bold;\n}\n.hljs-quote,\n.hljs-comment {\n  color: #998;\n  font-style: italic;\n}\n.hljs-section,\n.hljs-title {\n  color: #900;\n}\n.hljs-class .hljs-title,\n.hljs-type {\n  color: #458;\n}\n.hljs-variable,\n.hljs-template-variable {\n  color: #336699;\n}\n.hljs-bullet {\n  color: #997700;\n}\n.hljs-meta {\n  color: #3344bb;\n}\n.hljs-code,\n.hljs-number,\n.hljs-literal,\n.hljs-keyword,\n.hljs-selector-tag {\n  color: #099;\n}\n.hljs-regexp {\n  background-color: #fff0ff;\n  color: #880088;\n}\n.hljs-symbol {\n  color: #990073;\n}\n.hljs-tag,\n.hljs-name,\n.hljs-selector-id,\n.hljs-selector-class {\n  color: #007700;\n}\n.atwho-view {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: none;\n  margin-top: 18px;\n  background: white;\n  color: black;\n  border: 1px solid #DDD;\n  border-radius: 3px;\n  box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);\n  min-width: 120px;\n  z-index: 11110 !important;\n}\n.atwho-view .atwho-header {\n  padding: 5px;\n  margin: 5px;\n  cursor: pointer;\n  border-bottom: solid 1px #eaeff1;\n  color: #6f8092;\n  font-size: 11px;\n  font-weight: bold;\n}\n.atwho-view .atwho-header .small {\n  color: #6f8092;\n  float: right;\n  padding-top: 2px;\n  margin-right: -5px;\n  font-size: 12px;\n  font-weight: normal;\n}\n.atwho-view .atwho-header:hover {\n  cursor: default;\n}\n.atwho-view .cur {\n  background: #3366FF;\n  color: white;\n}\n.atwho-view .cur small {\n  color: white;\n}\n.atwho-view strong {\n  color: #3366FF;\n}\n.atwho-view .cur strong {\n  color: white;\n  font: bold;\n}\n.atwho-view ul {\n  /* width: 100px; */\n  list-style: none;\n  padding: 0;\n  margin: auto;\n  max-height: 200px;\n  overflow-y: auto;\n}\n.atwho-view ul li {\n  display: block;\n  padding: 5px 10px;\n  border-bottom: 1px solid #DDD;\n  cursor: pointer;\n  /* border-top: 1px solid #C8C8C8; */\n}\n.atwho-view small {\n  font-size: smaller;\n  color: #777;\n  font-weight: normal;\n}\nabbr {\n  outline: none;\n  text-decoration: none;\n}\n.shadow-2dp {\n  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.04), 0 3px 1px -2px rgba(0, 0, 0, 0.06), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n}\n.shadow-3dp {\n  box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.04), 0 3px 3px -2px rgba(0, 0, 0, 0.06), 0 1px 8px 0 rgba(0, 0, 0, 0.12);\n}\n.shadow-4dp {\n  box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.04), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n}\n.shadow-6dp {\n  box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.04), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1px rgba(0, 0, 0, 0.06);\n}\n.shadow-8dp {\n  box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.04), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.06);\n}\n.shadow-16dp {\n  box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.04), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.06);\n}\n.shadow-24dp {\n  box-shadow: 0 9px 46px 8px rgba(0, 0, 0, 0.04), 0 11px 15px -7px rgba(0, 0, 0, 0.12), 0 24px 38px 3px rgba(0, 0, 0, 0.06);\n}\n.btn-default,\n.btn-default:disabled,\n.btn-default:disabled:hover,\n.btn-default.disabled,\n.btn-default.disabled:hover,\n.btn-default.disabled:active {\n  background: #ebecf0;\n  border: 1px solid #ebecf0;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default:disabled,\n.btn-default:disabled:hover,\n.btn-default.disabled,\n.btn-default.disabled:hover,\n.btn-default.disabled:active {\n  filter: alpha(opacity=25);\n  opacity: 0.25;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background: #dfe1e6;\n  border: 1px solid #dfe1e6;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default:active:focus,\n.btn-default:active,\n.dropdown.open .dropdown-toggle .btn-default,\n.dropdown.open .dropdown-toggle .btn-default:focus,\n.dropdown.open .dropdown-toggle .btn-default:active:focus,\n.dropdown.open .dropdown-toggle .btn-default:hover {\n  background: #c1c7d0;\n  border: 1px solid #c1c7d0;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default.btn-loading,\n.btn-default.btn-loading:disabled,\n.btn-default.btn-loading:disabled:hover,\n.btn-default.btn-loading:hover,\n.btn-default.btn-loading:focus,\n.btn-default.btn-loading:active:focus,\n.btn-default.btn-loading:active {\n  color: transparent;\n}\n.btn-primary,\n.btn-primary:disabled,\n.btn-primary:disabled:hover,\n.btn-primary.disabled,\n.btn-primary.disabled:hover,\n.btn-primary.disabled:active {\n  background: #6554c0;\n  border: 1px solid #6554c0;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-primary:disabled,\n.btn-primary:disabled:hover,\n.btn-primary.disabled,\n.btn-primary.disabled:hover,\n.btn-primary.disabled:active {\n  filter: alpha(opacity=25);\n  opacity: 0.25;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background: #5243aa;\n  border: 1px solid #5243aa;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-primary:active:focus,\n.btn-primary:active,\n.dropdown.open .dropdown-toggle .btn-primary,\n.dropdown.open .dropdown-toggle .btn-primary:focus,\n.dropdown.open .dropdown-toggle .btn-primary:active:focus,\n.dropdown.open .dropdown-toggle .btn-primary:hover {\n  background: #403294;\n  border: 1px solid #403294;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-primary.btn-loading,\n.btn-primary.btn-loading:disabled,\n.btn-primary.btn-loading:disabled:hover,\n.btn-primary.btn-loading:hover,\n.btn-primary.btn-loading:focus,\n.btn-primary.btn-loading:active:focus,\n.btn-primary.btn-loading:active {\n  color: transparent;\n}\n.btn-success,\n.btn-success:disabled,\n.btn-success:disabled:hover,\n.btn-success.disabled,\n.btn-success.disabled:hover,\n.btn-success.disabled:active {\n  background: #00c853;\n  border: 1px solid #00c853;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-success:disabled,\n.btn-success:disabled:hover,\n.btn-success.disabled,\n.btn-success.disabled:hover,\n.btn-success.disabled:active {\n  filter: alpha(opacity=25);\n  opacity: 0.25;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background: #00af48;\n  border: 1px solid #00af48;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-success:active:focus,\n.btn-success:active,\n.dropdown.open .dropdown-toggle .btn-success,\n.dropdown.open .dropdown-toggle .btn-success:focus,\n.dropdown.open .dropdown-toggle .btn-success:active:focus,\n.dropdown.open .dropdown-toggle .btn-success:hover {\n  background: #007c33;\n  border: 1px solid #007c33;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-success.btn-loading,\n.btn-success.btn-loading:disabled,\n.btn-success.btn-loading:disabled:hover,\n.btn-success.btn-loading:hover,\n.btn-success.btn-loading:focus,\n.btn-success.btn-loading:active:focus,\n.btn-success.btn-loading:active {\n  color: transparent;\n}\n.btn-danger,\n.btn-danger:disabled,\n.btn-danger:disabled:hover,\n.btn-danger.disabled,\n.btn-danger.disabled:hover,\n.btn-danger.disabled:active {\n  background: #ef5350;\n  border: 1px solid #ef5350;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-danger:disabled,\n.btn-danger:disabled:hover,\n.btn-danger.disabled,\n.btn-danger.disabled:hover,\n.btn-danger.disabled:active {\n  filter: alpha(opacity=25);\n  opacity: 0.25;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background: #ff8a80;\n  border: 1px solid #ff8a80;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-danger:active:focus,\n.btn-danger:active,\n.dropdown.open .dropdown-toggle .btn-danger,\n.dropdown.open .dropdown-toggle .btn-danger:focus,\n.dropdown.open .dropdown-toggle .btn-danger:active:focus,\n.dropdown.open .dropdown-toggle .btn-danger:hover {\n  background: #d32f2f;\n  border: 1px solid #d32f2f;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-danger.btn-loading,\n.btn-danger.btn-loading:disabled,\n.btn-danger.btn-loading:disabled:hover,\n.btn-danger.btn-loading:hover,\n.btn-danger.btn-loading:focus,\n.btn-danger.btn-loading:active:focus,\n.btn-danger.btn-loading:active {\n  color: transparent;\n}\n.btn-default.btn-outline,\n.btn-default.btn-outline:disabled,\n.btn-default.btn-outline:disabled:hover,\n.btn-default.btn-outline.disabled,\n.btn-default.btn-outline.disabled:hover,\n.btn-default.btn-outline.disabled:active {\n  background: #ebecf0;\n  border: 1px solid #ebecf0;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default.btn-outline:disabled,\n.btn-default.btn-outline:disabled:hover,\n.btn-default.btn-outline.disabled,\n.btn-default.btn-outline.disabled:hover,\n.btn-default.btn-outline.disabled:active {\n  filter: alpha(opacity=25);\n  opacity: 0.25;\n}\n.btn-default.btn-outline:hover,\n.btn-default.btn-outline:focus {\n  background: #dfe1e6;\n  border: 1px solid #dfe1e6;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default.btn-outline:active:focus,\n.btn-default.btn-outline:active,\n.dropdown.open .btn-default.btn-outline,\n.dropdown.open .btn-default.btn-outline:focus,\n.dropdown.open .btn-default.btn-outline:active:focus,\n.dropdown.open .btn-default.btn-outline:hover {\n  background: #c1c7d0;\n  border: 1px solid #c1c7d0;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default.btn-outline.btn-loading,\n.btn-default.btn-outline.btn-loading:disabled,\n.btn-default.btn-outline.btn-loading:disabled:hover,\n.btn-default.btn-outline.btn-loading:hover,\n.btn-default.btn-outline.btn-loading:focus,\n.btn-default.btn-outline.btn-loading:active:focus,\n.btn-default.btn-outline.btn-loading:active {\n  background: #ebecf0;\n  border: 1px solid #ebecf0;\n  color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-primary.btn-outline,\n.btn-primary.btn-outline:disabled,\n.btn-primary.btn-outline:disabled:hover,\n.btn-primary.btn-outline.disabled,\n.btn-primary.btn-outline.disabled:hover,\n.btn-primary.btn-outline.disabled:active {\n  background: #6554c0;\n  border: 1px solid #6554c0;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-primary.btn-outline:disabled,\n.btn-primary.btn-outline:disabled:hover,\n.btn-primary.btn-outline.disabled,\n.btn-primary.btn-outline.disabled:hover,\n.btn-primary.btn-outline.disabled:active {\n  filter: alpha(opacity=25);\n  opacity: 0.25;\n}\n.btn-primary.btn-outline:hover,\n.btn-primary.btn-outline:focus {\n  background: #5243aa;\n  border: 1px solid #5243aa;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-primary.btn-outline:active:focus,\n.btn-primary.btn-outline:active,\n.dropdown.open .btn-primary.btn-outline,\n.dropdown.open .btn-primary.btn-outline:focus,\n.dropdown.open .btn-primary.btn-outline:active:focus,\n.dropdown.open .btn-primary.btn-outline:hover {\n  background: #403294;\n  border: 1px solid #403294;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-primary.btn-outline.btn-loading,\n.btn-primary.btn-outline.btn-loading:disabled,\n.btn-primary.btn-outline.btn-loading:disabled:hover,\n.btn-primary.btn-outline.btn-loading:hover,\n.btn-primary.btn-outline.btn-loading:focus,\n.btn-primary.btn-outline.btn-loading:active:focus,\n.btn-primary.btn-outline.btn-loading:active {\n  background: #6554c0;\n  border: 1px solid #6554c0;\n  color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.navbar-misago .btn-sign-in {\n  border-radius: 4px;\n}\n.navbar-misago .btn-sign-in,\n.navbar-misago .btn-sign-in:disabled,\n.navbar-misago .btn-sign-in:disabled:hover,\n.navbar-misago .btn-sign-in.disabled,\n.navbar-misago .btn-sign-in.disabled:hover,\n.navbar-misago .btn-sign-in.disabled:active {\n  background: transparent;\n  border: 1px solid #c1c7d0;\n  color: #8993a4;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.navbar-misago .btn-sign-in:disabled,\n.navbar-misago .btn-sign-in:disabled:hover,\n.navbar-misago .btn-sign-in.disabled,\n.navbar-misago .btn-sign-in.disabled:hover,\n.navbar-misago .btn-sign-in.disabled:active {\n  filter: alpha(opacity=25);\n  opacity: 0.25;\n}\n.navbar-misago .btn-sign-in:hover,\n.navbar-misago .btn-sign-in:focus {\n  background: #ebecf0;\n  border: 1px solid #ebecf0;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.navbar-misago .btn-sign-in:active:focus,\n.navbar-misago .btn-sign-in:active,\n.dropdown.open .navbar-misago .btn-sign-in,\n.dropdown.open .navbar-misago .btn-sign-in:focus,\n.dropdown.open .navbar-misago .btn-sign-in:active:focus,\n.dropdown.open .navbar-misago .btn-sign-in:hover {\n  background: #dfe1e6;\n  border: 1px solid #dfe1e6;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.navbar-misago .btn-sign-in.btn-loading,\n.navbar-misago .btn-sign-in.btn-loading:disabled,\n.navbar-misago .btn-sign-in.btn-loading:disabled:hover,\n.navbar-misago .btn-sign-in.btn-loading:hover,\n.navbar-misago .btn-sign-in.btn-loading:focus,\n.navbar-misago .btn-sign-in.btn-loading:active:focus,\n.navbar-misago .btn-sign-in.btn-loading:active {\n  background: transparent;\n  border: 1px solid #c1c7d0;\n  color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.navbar-misago .btn-register {\n  border-radius: 4px;\n}\n.navbar-misago .btn-register,\n.navbar-misago .btn-register:disabled,\n.navbar-misago .btn-register:disabled:hover,\n.navbar-misago .btn-register.disabled,\n.navbar-misago .btn-register.disabled:hover,\n.navbar-misago .btn-register.disabled:active {\n  background: #6554c0;\n  border: 1px solid #6554c0;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.navbar-misago .btn-register:disabled,\n.navbar-misago .btn-register:disabled:hover,\n.navbar-misago .btn-register.disabled,\n.navbar-misago .btn-register.disabled:hover,\n.navbar-misago .btn-register.disabled:active {\n  filter: alpha(opacity=25);\n  opacity: 0.25;\n}\n.navbar-misago .btn-register:hover,\n.navbar-misago .btn-register:focus {\n  background: #5243aa;\n  border: 1px solid #5243aa;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.navbar-misago .btn-register:active:focus,\n.navbar-misago .btn-register:active,\n.dropdown.open .navbar-misago .btn-register,\n.dropdown.open .navbar-misago .btn-register:focus,\n.dropdown.open .navbar-misago .btn-register:active:focus,\n.dropdown.open .navbar-misago .btn-register:hover {\n  background: #403294;\n  border: 1px solid #403294;\n  color: #fff;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.navbar-misago .btn-register.btn-loading,\n.navbar-misago .btn-register.btn-loading:disabled,\n.navbar-misago .btn-register.btn-loading:disabled:hover,\n.navbar-misago .btn-register.btn-loading:hover,\n.navbar-misago .btn-register.btn-loading:focus,\n.navbar-misago .btn-register.btn-loading:active:focus,\n.navbar-misago .btn-register.btn-loading:active {\n  background: #6554c0;\n  border: 1px solid #6554c0;\n  color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-social-battlenet,\n.btn-social-battlenet-oauth2,\n.btn-social-battlenet:disabled,\n.btn-social-battlenet-oauth2:disabled,\n.btn-social-battlenet:disabled:hover,\n.btn-social-battlenet-oauth2:disabled:hover {\n  color: #0e86ca;\n  font-weight: bold;\n}\n.btn-social-bungie,\n.btn-social-bungie:disabled,\n.btn-social-bungie:disabled:hover {\n  color: #0096db;\n  font-weight: bold;\n}\n.btn-social-facebook,\n.btn-social-facebook-app,\n.btn-social-facebook:disabled,\n.btn-social-facebook-app:disabled,\n.btn-social-facebook:disabled:hover,\n.btn-social-facebook-app:disabled:hover {\n  color: #3b5998;\n  font-weight: bold;\n}\n.btn-social-github,\n.btn-social-github-team,\n.btn-social-github-enterprise,\n.btn-social-github-enterprise-org,\n.btn-social-github-enterprise-team,\n.btn-social-github:disabled,\n.btn-social-github-team:disabled,\n.btn-social-github-enterprise:disabled,\n.btn-social-github-enterprise-org:disabled,\n.btn-social-github-enterprise-team:disabled,\n.btn-social-github:disabled:hover,\n.btn-social-github-team:disabled:hover,\n.btn-social-github-enterprise:disabled:hover,\n.btn-social-github-enterprise-org:disabled:hover,\n.btn-social-github-enterprise-team:disabled:hover {\n  color: #000000;\n  font-weight: bold;\n}\n.btn-social-gitlab,\n.btn-social-gitlab:disabled,\n.btn-social-gitlab:disabled:hover {\n  color: #fc6d26;\n  font-weight: bold;\n}\n.btn-social-google,\n.btn-social-google-oauth,\n.btn-social-google-oauth2,\n.btn-social-google-plus,\n.btn-social-google-openidconnect,\n.btn-social-google:disabled,\n.btn-social-google-oauth:disabled,\n.btn-social-google-oauth2:disabled,\n.btn-social-google-plus:disabled,\n.btn-social-google-openidconnect:disabled,\n.btn-social-google:disabled:hover,\n.btn-social-google-oauth:disabled:hover,\n.btn-social-google-oauth2:disabled:hover,\n.btn-social-google-plus:disabled:hover,\n.btn-social-google-openidconnect:disabled:hover {\n  color: #dd4b39;\n  font-weight: bold;\n}\n.btn-social-linkedin,\n.btn-social-linkedin:disabled,\n.btn-social-linkedin:disabled:hover {\n  color: #0077b5;\n  font-weight: bold;\n}\n.btn-social-steam,\n.btn-social-steam:disabled,\n.btn-social-steam:disabled:hover {\n  color: #5c7e10;\n  font-weight: bold;\n}\n.btn-social-twitter,\n.btn-social-twitter:disabled,\n.btn-social-twitter:disabled:hover {\n  color: #1da1f2;\n  font-weight: bold;\n}\n.form-social-auth .row {\n  margin-top: -6px;\n  margin-bottom: -6px;\n}\n.form-social-auth .btn {\n  margin: 6px 0px;\n}\ninput.form-control,\ntextarea.form-control {\n  border-color: #ced0da;\n  box-shadow: inset 0px 0px 0px 1px #ced0da;\n}\ninput.form-control:focus,\ntextarea.form-control:focus {\n  border-color: #66afe9;\n  box-shadow: inset 0px 0px 0px 1px #66afe9;\n}\n.has-error input.form-control {\n  border-color: #ff5630;\n  box-shadow: inset 0px 0px 0px 1px #ff5630;\n}\n.has-error input.form-control:focus {\n  border-color: #ffa996;\n  box-shadow: inset 0px 0px 0px 1px #ffa996;\n}\n.has-success input.form-control {\n  border-color: #36b37e;\n  box-shadow: inset 0px 0px 0px 1px #36b37e;\n}\n.has-success input.form-control:focus {\n  border-color: #79d6af;\n  box-shadow: inset 0px 0px 0px 1px #79d6af;\n}\n.password-strength {\n  margin-top: 10px;\n}\n.password-strength .text-small {\n  margin-top: 4px;\n  color: #3462af;\n  font-size: 12px;\n}\n.password-strength .progress {\n  margin: 0px;\n}\n.auth-message {\n  background: #091e42;\n  padding: 80px 0px;\n  box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.04), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.06);\n}\n.auth-message p {\n  color: #fff;\n}\n.auth-message .btn {\n  background: #f4f5f7;\n  border-color: #f4f5f7;\n  color: #172b4d;\n}\n.auth-message .btn:hover,\n.auth-message .btn:focus {\n  background: #dfe1e6;\n  border-color: #dfe1e6;\n  color: #172b4d;\n}\n.auth-message .btn:active {\n  background: #b3bac5;\n  border-color: #b3bac5;\n  color: #172b4d;\n}\n.dropdown-menu {\n  border: none;\n  box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.04), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n}\n.user-dropdown .dropdown-header strong {\n  display: block;\n  color: #172b4d;\n  font-weight: bold;\n}\n.user-dropdown .dropdown-header .user-stats {\n  margin-top: 10px;\n  font-size: 12px;\n}\n.user-dropdown .dropdown-header .user-stats .material-icon {\n  margin-right: 3px;\n  position: relative;\n  bottom: 1px;\n  width: 14px;\n  height: 14px;\n  font-size: 14px;\n}\n.user-dropdown .guest-preview {\n  padding-bottom: 10px;\n}\n.user-dropdown .badge {\n  background-color: #ff5630;\n}\n.user-dropdown a:hover .badge,\n.user-dropdown a:focus .badge,\n.user-dropdown a:active .badge,\n.user-dropdown .btn-link:hover .badge,\n.user-dropdown .btn-link:focus .badge,\n.user-dropdown .btn-link:active .badge {\n  background-color: #fff;\n  color: #ff5630;\n}\n.mobile-dropdown.open {\n  margin: 0px;\n}\n.navbar-misago {\n  border-bottom: none;\n  box-shadow: 0px 0px 3px #c1c7d0;\n}\n.navbar-misago .user-avatar {\n  background: #fff;\n  border-radius: 3px;\n}\n.navbar-misago .brand-link img {\n  border-radius: 3px;\n}\n.dropdown-search-results {\n  border-radius: 0px 0px 4px 4px;\n}\n.dropdown-search-message {\n  border-top: 1px solid #ebecf0;\n  padding: 10px 16px;\n  color: #7a869a;\n}\n.dropdown-search-loader {\n  border-top: 1px solid #ebecf0;\n  padding: 10px 16px;\n}\n.dropdown-search-header {\n  border-top: 1px solid #ebecf0;\n  padding: 8px 20px;\n  color: #7a869a;\n  font-weight: bold;\n}\n.dropdown-search-thread small,\n.dropdown-search-user small {\n  color: #7a869a;\n}\n.dropdown-search-thread .dropdown-search-post-content {\n  overflow: hidden;\n  white-space: normal;\n  max-height: 47px;\n}\n.dropdown-search-thread .dropdown-search-post-footer {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.dropdown-search-footer {\n  padding-bottom: 5px;\n}\n.dropdown-search-footer:last-child {\n  padding-bottom: 0px;\n}\n.dropdown-menu > li.dropdown-search-footer > a {\n  font-size: small;\n}\n.misago-footer {\n  margin-top: 40px;\n}\n.misago-footer .footer-content {\n  border-top: 1px solid #ebecf0;\n  padding-top: 20px;\n  color: #a5adba;\n}\n@media screen and (max-width: 767px) {\n  .misago-footer .footer-content {\n    text-align: center;\n  }\n  .misago-footer .footer-content .site-footnote {\n    clear: both;\n    margin-bottom: 15px;\n  }\n}\n.misago-footer .footer-content a,\n.misago-footer .footer-content a:link,\n.misago-footer .footer-content a:visited {\n  color: #a5adba;\n}\n.misago-footer .footer-content a:hover,\n.misago-footer .footer-content a:focus {\n  color: #7a8699;\n}\n.misago-footer .footer-content .misago-branding,\n.misago-footer .footer-content .misago-branding:link,\n.misago-footer .footer-content .misago-branding:visited {\n  color: #a5adba;\n}\n.misago-footer .footer-content .misago-branding:hover,\n.misago-footer .footer-content .misago-branding:focus {\n  color: #7a8699;\n}\n.list-group {\n  border-radius: 3px;\n}\n.list-group .list-group-item {\n  border-left-color: #ebecf0;\n  border-right-color: #ebecf0;\n}\n.list-group .list-group-item:first-child {\n  border-top-color: #ebecf0;\n}\n.list-group .list-group-item:last-child {\n  border-bottom-color: #ebecf0;\n}\n.list-group-item.empty-message {\n  padding-top: 20px;\n  padding-bottom: 20px;\n  text-align: center;\n}\n.list-group-item.empty-message p {\n  margin: 10px 0px;\n}\n.nav-side {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.nav-side > .list-group-item {\n  border-left: none;\n  border-right: none;\n  margin-bottom: 1px;\n}\n.nav-side > .list-group-item:first-child {\n  border-top: none;\n}\n.nav-side > .list-group-item:last-child {\n  border-bottom: none;\n}\n.nav-side > .list-group-item,\n.nav-side > .list-group-item:link,\n.nav-side > .list-group-item:visited {\n  background: #f4f5f7;\n  border: none;\n  color: #172b4d;\n}\n.nav-side > .list-group-item:hover,\n.nav-side > .list-group-item:focus,\n.nav-side > .list-group-item:active {\n  background: #ebecf0;\n  color: #172b4d;\n}\n.nav-side > .list-group-item.active,\n.nav-side > .list-group-item.active:link,\n.nav-side > .list-group-item.active:visited,\n.nav-side > .list-group-item.active:hover,\n.nav-side > .list-group-item.active:focus,\n.nav-side > .list-group-item.active:active {\n  background: #091e42;\n  color: #fff;\n  font-weight: bold;\n}\n.nav-side > .list-group-item.active .badge,\n.nav-side > .list-group-item.active:link .badge,\n.nav-side > .list-group-item.active:visited .badge,\n.nav-side > .list-group-item.active:hover .badge,\n.nav-side > .list-group-item.active:focus .badge,\n.nav-side > .list-group-item.active:active .badge {\n  background: #f4f5f7;\n  color: #172b4d;\n}\n.username-history .user-avatar {\n  border-radius: 4px;\n}\n.panel {\n  border: none;\n  border-radius: 4px;\n}\n.panel .panel-heading,\n.panel .panel-footer {\n  background: #fff;\n}\n.panel .panel-title {\n  color: #5e6c84;\n}\n.panel .form-group + .form-group {\n  margin-top: 20px;\n}\n.panel .panel-body > .form-group:first-child {\n  margin-top: 10px;\n}\n.panel fieldset {\n  margin-top: 20px;\n}\n.panel fieldset:first-child {\n  margin-top: 0px;\n}\n.panel fieldset legend {\n  border: none;\n  color: #5e6c84;\n  font-weight: 300;\n}\n.panel-message-body .message-icon {\n  color: #9575cd;\n}\n.panel-form {\n  border: 1px solid #ebecf0;\n  box-shadow: none;\n}\n.panel-form .panel-heading,\n.panel-form .panel-footer {\n  border-color: #ebecf0;\n}\n.poll-form .panel {\n  margin: 0px;\n}\n.help-block,\n.help-block .text-small {\n  color: #7a869a;\n}\n.category-main .media-left .read-status {\n  background: #ebecf0;\n  border-radius: 4px;\n  padding: 5px 8px;\n}\n.category-main .media-left .material-icon {\n  height: 14px;\n  width: 14px;\n  color: #5e6c84;\n  font-size: 14px;\n  line-height: 14px;\n}\n.category-main .media-left .read-status.item-new {\n  background-color: #0052cc;\n}\n.category-main .media-left .read-status.item-new .material-icon {\n  color: #fff;\n}\n@media screen and (min-width: 768px) {\n  .category-main .media-left {\n    padding: 5px 0px;\n  }\n}\n.category-main .media-body {\n  padding-left: 12px;\n}\n@media screen and (max-width: 767px) {\n  .category-main .media-body {\n    padding-left: 3.33333333px;\n  }\n}\n.list-group-category-no-description .category-main .media-heading {\n  margin-top: 10px;\n}\n@media screen and (max-width: 767px) {\n  .list-group-category-no-description .category-main .media-heading {\n    margin-top: 5px;\n  }\n}\n.category-main .media-heading a,\n.category-main .media-heading a:link,\n.category-main .media-heading a:visited {\n  color: #344563;\n}\n.category-main .media-heading a:focus,\n.category-main .media-heading a:hover,\n.category-main .media-heading a:active {\n  color: #172b4d;\n}\n.category-stats {\n  color: #5e6c84;\n}\n.category-main .category-description p {\n  font-size: 12px;\n}\n.category-main .category-description p:last-child {\n  margin-bottom: 0px;\n}\n.category-last-thread img {\n  background-color: #fff;\n  border-radius: 4px;\n}\n.category-last-thread .media-heading {\n  margin-bottom: 2px;\n}\n@media screen and (max-width: 767px) {\n  .category-last-thread .media-heading {\n    margin-top: 10px;\n  }\n}\n.category-last-thread .list-inline {\n  color: #7a869a;\n  font-size: 12px;\n}\n.category-last-thread .list-inline a,\n.category-last-thread .list-inline a:link,\n.category-last-thread .list-inline a:visited {\n  color: #7a869a;\n}\n.category-last-thread .list-inline a:hover,\n.category-last-thread .list-inline a:active,\n.category-last-thread .list-inline a:focus {\n  color: #344563;\n}\n.category-last-thread .list-inline .item-title,\n.category-last-thread .list-inline .item-title:link,\n.category-last-thread .list-inline .item-title:visited {\n  color: #344563;\n}\n.category-last-thread .list-inline .item-title:hover,\n.category-last-thread .list-inline .item-title:active,\n.category-last-thread .list-inline .item-title:focus {\n  color: #172b4d;\n}\n.category-thread-message {\n  color: #7a869a;\n}\n.category-thread-message .material-icon {\n  padding: 6px 0px;\n  margin-right: 3px;\n}\n@media screen and (max-width: 767px) {\n  .category-thread-message {\n    padding-top: 15px;\n    font-size: 12px;\n  }\n  .category-thread-message .material-icon {\n    padding: 3px 0px;\n  }\n}\n.panel-participants {\n  border: 1px solid #ebecf0;\n}\n.participant-card .btn-user {\n  border: 0px !important;\n}\n.participant-card .dropdown-header-owner {\n  color: #0052cc;\n}\n.participant-card .dropdown-header-owner .material-icon {\n  width: 14px;\n  height: 14px;\n  font-size: 14px;\n  line-height: 14px;\n}\n.participant-card .dropdown-header-owner .icon-text {\n  margin-left: 4px;\n  position: relative;\n  top: 2px;\n}\n.panel-participants p {\n  color: #7a869a;\n}\n@media screen and (max-width: 767px) {\n  .panel-participants p {\n    margin-top: 10px;\n    text-align: center;\n  }\n}\n.panel-poll {\n  border: 1px solid #ebecf0;\n}\n.panel-poll .poll-select-choices {\n  margin-top: -10px;\n}\n.panel-poll .poll-details {\n  margin-bottom: 20px;\n  color: #7a869a;\n  font-size: 12px;\n}\n.panel-poll .progress {\n  margin-top: 6.66666667px;\n  margin-bottom: 5px;\n}\n.panel-poll .poll-chart {\n  color: #7a869a;\n  font-size: 12px;\n}\n.panel-poll .poll-options {\n  margin-top: 20px;\n}\n#posting-placeholder {\n  background-color: #fafbfc;\n}\n.posting-message .material-icon {\n  color: #9575cd;\n}\n.posting-message .btn {\n  margin-top: 20px;\n}\n.panel-post {\n  background: #fff;\n  border: 1px solid #ddd;\n}\n.post-side {\n  color: #7a869a;\n}\n.post-side .poster-avatar {\n  border-radius: 4px;\n}\n.post-side .user-title {\n  color: #5e6c84;\n}\n.post-side .user-title a,\n.post-side .user-title a:link,\n.post-side .user-title a:visited,\n.post-side .user-title a:focus,\n.post-side .user-title a:hover,\n.post-side .user-title a:active {\n  color: #5e6c84;\n}\n.post-heading .label-unread {\n  background-color: #aa00ff;\n  margin-right: 16px;\n}\n.post-heading .label-protected {\n  background-color: transparent;\n  margin-left: 24px;\n  position: relative;\n  top: 1px;\n  color: #bdbdbd;\n}\n.post-heading .label-protected .material-icon {\n  margin-right: 2px;\n  position: relative;\n  top: -1px;\n  font-size: 16px;\n  line-height: 16px;\n}\n.post-heading > .btn-link {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n.post-heading > .btn-link,\n.post-heading > .btn-link:link,\n.post-heading > .btn-link:visited {\n  color: #7a869a;\n}\n.post-heading > .btn-link:hover,\n.post-heading > .btn-link:focus,\n.post-heading > .btn-link:focus:active,\n.post-heading > .btn-link:active {\n  color: #172b4d;\n  text-decoration: none;\n}\n.post-heading .btn-see-edits {\n  margin-left: 24px;\n}\n.post-status-message {\n  border-radius: 4px;\n  margin-top: 10px;\n  padding: 6px 12px;\n}\n@media screen and (max-width: 767px) {\n  .post-status-message {\n    font-size: 12px;\n  }\n  .post-status-message .material-icon {\n    margin-top: 3px;\n  }\n  .post-status-message p {\n    margin-top: 0px;\n  }\n}\n.post-body:last-child {\n  padding-bottom: 10px;\n}\n.post-attachments {\n  background-color: #ebecf0;\n  border: none;\n  border-radius: 4px;\n  margin-bottom: 30px;\n}\n.post-attachments:last-child {\n  margin-bottom: 10px;\n}\n@media screen and (max-width: 767px) {\n  .post-attachments {\n    border-radius: 0px;\n    margin: 0px -15px;\n    margin-bottom: 20px;\n  }\n}\n.post-footer > .btn-link {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n.post-footer > .btn-link,\n.post-footer > .btn-link:link,\n.post-footer > .btn-link:visited {\n  color: #7a869a;\n}\n.post-footer > .btn-link:hover,\n.post-footer > .btn-link:focus,\n.post-footer > .btn-link:focus:active,\n.post-footer > .btn-link:active {\n  color: #172b4d;\n  text-decoration: none;\n}\n.post-footer p {\n  color: #7a869a;\n  font-size: 12px;\n}\n.post-body-hidden,\n.post-body-invalid {\n  padding-top: 10px;\n  padding-bottom: 10px;\n}\n.post-body-hidden .lead,\n.post-body-invalid .lead {\n  margin-bottom: 10px;\n}\n.post-body-hidden .text-muted,\n.post-body-invalid .text-muted {\n  margin-bottom: 0px;\n  font-size: 12px;\n}\n.post-hidden {\n  filter: alpha(opacity=75);\n  opacity: 0.75;\n}\n.post-feed .panel-body {\n  padding-bottom: 0px;\n}\n.post-feed .post-body {\n  position: relative;\n  padding-top: 0px;\n  padding-bottom: 20px;\n  max-height: 300px;\n  overflow-y: hidden;\n}\n.post-feed .post-body:after {\n  box-shadow: 0px 0px 16px 16px #ffffff;\n  display: block;\n  position: absolute;\n  bottom: 0px;\n  height: 0px;\n  width: 100%;\n  content: \"-\";\n  color: transparent;\n}\n.posts-list .event .event-label {\n  margin-bottom: 5px;\n}\n.posts-list .event .label-unread {\n  background-color: #aa00ff;\n  color: #fff;\n}\n.posts-list .event-info a,\n.posts-list .event-info a:link,\n.posts-list .event-info a:visited,\n.posts-list .event-info .btn-link {\n  color: #5e6c84;\n}\n.posts-list .event-info a:focus,\n.posts-list .event-info a:active,\n.posts-list .event-info a:focus:active,\n.posts-list .event-info .btn-link:focus,\n.posts-list .event-info .btn-link:active,\n.posts-list .event-info .btn-link:focus:active {\n  color: #172b4d;\n}\n.posts-list .event-hidden {\n  filter: alpha(opacity=33);\n  opacity: 0.33;\n}\n.user-card {\n  background: #f4f5f7;\n}\n.user-card-small-avatar img,\n.user-card-avatar img {\n  border-radius: 4px;\n}\n.user-card-avatar {\n  margin: 20px 0px;\n}\n.user-card-avatar img {\n  width: 150px;\n  height: 150px;\n}\n.user-card-username a,\n.user-card-username a:link,\n.user-card-username a:visited,\n.user-card-username a:hover,\n.user-card-username a:focus,\n.user-card-username a:active {\n  color: #172b4d;\n  font-size: 18px;\n  font-weight: bold;\n}\n.user-card-title span,\n.user-card-title a,\n.user-card-title a:link,\n.user-card-title a:visited {\n  color: #5e6c84;\n}\n.user-card-title a:focus,\n.user-card-title a:hover,\n.user-card-title a:active {\n  color: #172b4d;\n}\n@media screen and (min-width: 768px) {\n  .user-card-stats {\n    margin-top: 20px;\n  }\n}\n.user-card-stats ul {\n  margin: 0px;\n}\n.user-card-stats li {\n  display: inline-block;\n  margin-right: 12px;\n  color: #7a869a;\n  font-size: 12px;\n}\n@media screen and (min-width: 768px) {\n  .user-card-stats li {\n    margin: 0px 6px;\n  }\n}\n.user-card-stats li.user-stat-empty {\n  display: none;\n}\n@media screen and (min-width: 768px) {\n  li.user-stat-divider {\n    display: block;\n    margin: 0px;\n  }\n}\n@media screen and (max-width: 767px) {\n  li.user-stat-divider {\n    display: none;\n  }\n}\n@media screen and (min-width: 768px) {\n  .user-card-stats {\n    min-height: 60px;\n  }\n}\n@media screen and (max-width: 767px) {\n  .user-card-left {\n    padding-right: 0px;\n  }\n}\n.progress,\n.progress .progress-bar {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  height: 8px;\n}\n.misago-markup img {\n  border-radius: 4px;\n}\n.misago-markup .quote-block,\n.misago-markup blockquote {\n  background-color: #ffecb3;\n  border-color: #b3e5fc;\n  overflow: hidden;\n  color: #3e2723;\n}\n.misago-markup .quote-block .quote-heading,\n.misago-markup blockquote .quote-heading {\n  background-color: #ffe082;\n  border: none;\n  color: #795548;\n}\n.misago-markup .quote-block .quote-heading a,\n.misago-markup blockquote .quote-heading a,\n.misago-markup .quote-block .quote-heading a:link,\n.misago-markup blockquote .quote-heading a:link,\n.misago-markup .quote-block .quote-heading a:visited,\n.misago-markup blockquote .quote-heading a:visited {\n  color: #5d4037;\n}\n.misago-markup .quote-block .quote-heading a:hover,\n.misago-markup blockquote .quote-heading a:hover,\n.misago-markup .quote-block .quote-heading a:focus,\n.misago-markup blockquote .quote-heading a:focus,\n.misago-markup .quote-block .quote-heading a:active,\n.misago-markup blockquote .quote-heading a:active {\n  color: #3e2723;\n}\n.misago-markup .quote-block hr,\n.misago-markup blockquote hr {\n  border-color: #ffca28;\n}\n.misago-markup > .quote-block,\n.misago-markup > blockquote {\n  background: #ffecb3;\n  border: none;\n  border-radius: 4px;\n}\n.misago-markup > .quote-block .quote-block,\n.misago-markup > blockquote .quote-block {\n  background: #ffecb3;\n}\n.misago-markup .quote-body {\n  background: #ffecb3;\n}\n.misago-markup .quote-body > .quote-block,\n.misago-markup .quote-body > blockquote {\n  border-color: #ffe082;\n  border-radius: 4px;\n}\n.misago-markup .spoiler-block {\n  background: repeating-linear-gradient(45deg, rgba(235, 236, 240, 0.5), rgba(235, 236, 240, 0.5) 10px, #fff 10px, #fff 20px);\n  border: none;\n}\n.misago-markup .spoiler-body {\n  background: transparent;\n  -webkit-filter: blur(5px);\n  -moz-filter: blur(5px);\n  -o-filter: blur(5px);\n  -ms-filter: blur(5px);\n  filter: blur(5px);\n  color: #172b4d;\n}\n.misago-markup .spoiler-block.revealed .spoiler-body {\n  -webkit-filter: none;\n  -moz-filter: none;\n  -o-filter: none;\n  -ms-filter: none;\n  filter: none;\n}\n.misago-markup .spoiler-overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: rgba(255, 255, 255, 0.1);\n}\n.misago-markup .spoiler-reveal {\n  color: #172b4d;\n  background-color: #ebecf0;\n  border-color: #ccc;\n}\n.misago-markup .spoiler-reveal:focus,\n.misago-markup .spoiler-reveal.focus {\n  color: #172b4d;\n  background-color: #ced0da;\n  border-color: #8c8c8c;\n}\n.misago-markup .spoiler-reveal:hover {\n  color: #172b4d;\n  background-color: #ced0da;\n  border-color: #adadad;\n}\n.misago-markup .spoiler-reveal:active,\n.misago-markup .spoiler-reveal.active,\n.open > .dropdown-toggle.misago-markup .spoiler-reveal {\n  color: #172b4d;\n  background-color: #ced0da;\n  background-image: none;\n  border-color: #adadad;\n}\n.misago-markup .spoiler-reveal:active:hover,\n.misago-markup .spoiler-reveal.active:hover,\n.open > .dropdown-toggle.misago-markup .spoiler-reveal:hover,\n.misago-markup .spoiler-reveal:active:focus,\n.misago-markup .spoiler-reveal.active:focus,\n.open > .dropdown-toggle.misago-markup .spoiler-reveal:focus,\n.misago-markup .spoiler-reveal:active.focus,\n.misago-markup .spoiler-reveal.active.focus,\n.open > .dropdown-toggle.misago-markup .spoiler-reveal.focus {\n  color: #172b4d;\n  background-color: #b9bdcb;\n  border-color: #8c8c8c;\n}\n.misago-markup .spoiler-reveal.disabled:hover,\n.misago-markup .spoiler-reveal[disabled]:hover,\nfieldset[disabled] .misago-markup .spoiler-reveal:hover,\n.misago-markup .spoiler-reveal.disabled:focus,\n.misago-markup .spoiler-reveal[disabled]:focus,\nfieldset[disabled] .misago-markup .spoiler-reveal:focus,\n.misago-markup .spoiler-reveal.disabled.focus,\n.misago-markup .spoiler-reveal[disabled].focus,\nfieldset[disabled] .misago-markup .spoiler-reveal.focus {\n  background-color: #ebecf0;\n  border-color: #ccc;\n}\n.misago-markup .spoiler-reveal .badge {\n  color: #ebecf0;\n  background-color: #172b4d;\n}\n.misago-markup .spoiler-reveal,\n.misago-markup .spoiler-reveal:disabled,\n.misago-markup .spoiler-reveal:disabled:hover,\n.misago-markup .spoiler-reveal.disabled,\n.misago-markup .spoiler-reveal.disabled:hover,\n.misago-markup .spoiler-reveal.disabled:active {\n  background: #ebecf0;\n  border: 1px solid #ebecf0;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.misago-markup .spoiler-reveal:disabled,\n.misago-markup .spoiler-reveal:disabled:hover,\n.misago-markup .spoiler-reveal.disabled,\n.misago-markup .spoiler-reveal.disabled:hover,\n.misago-markup .spoiler-reveal.disabled:active {\n  filter: alpha(opacity=25);\n  opacity: 0.25;\n}\n.misago-markup .spoiler-reveal:hover,\n.misago-markup .spoiler-reveal:focus {\n  background: #dfe1e6;\n  border: 1px solid #dfe1e6;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.misago-markup .spoiler-reveal:active:focus,\n.misago-markup .spoiler-reveal:active,\n.dropdown.open .dropdown-toggle .misago-markup .spoiler-reveal,\n.dropdown.open .dropdown-toggle .misago-markup .spoiler-reveal:focus,\n.dropdown.open .dropdown-toggle .misago-markup .spoiler-reveal:active:focus,\n.dropdown.open .dropdown-toggle .misago-markup .spoiler-reveal:hover {\n  background: #c1c7d0;\n  border: 1px solid #c1c7d0;\n  color: #172b4d;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.misago-markup .spoiler-reveal.btn-loading,\n.misago-markup .spoiler-reveal.btn-loading:disabled,\n.misago-markup .spoiler-reveal.btn-loading:disabled:hover,\n.misago-markup .spoiler-reveal.btn-loading:hover,\n.misago-markup .spoiler-reveal.btn-loading:focus,\n.misago-markup .spoiler-reveal.btn-loading:active:focus,\n.misago-markup .spoiler-reveal.btn-loading:active {\n  color: transparent;\n}\n.misago-markup .spoiler-reveal,\n.misago-markup .spoiler-reveal:active,\n.misago-markup .spoiler-reveal:hover {\n  border-radius: 4px;\n  box-shadow: 0px 0px 0px 4px #fff;\n  padding: 6px 12px;\n}\n.modal-header {\n  background: #fff;\n  border-bottom-color: #ced0da;\n  border-radius: 6px 6px 0px 0px;\n  color: #172b4d;\n}\n.modal-header .close {\n  padding: 0px 6px;\n  color: #172b4d;\n  font-size: 24px;\n  line-height: 24px;\n  text-shadow: none;\n}\n.modal-message .message-icon {\n  color: #9575cd;\n}\n.modal-body > .form-group {\n  margin: 20px 0px;\n}\n.modal-body > .form-group:first-child {\n  margin-top: 0px;\n}\n.modal-body > .form-group:last-child {\n  margin-bottom: 0px;\n}\n.modal-sign-in .modal-body {\n  padding-top: 0px;\n  padding-bottom: 0px;\n}\n.modal-sign-in .modal-body > .form-group {\n  margin: 20px 0px;\n}\n.legal-footnote label {\n  font-weight: bold;\n}\n.legal-footnote .help-block {\n  margin-left: 20px;\n  color: #ff5630;\n}\n.modal-avatar-index .avatar-preview {\n  background: #fff;\n  border-radius: 6px;\n}\n.modal-avatar-crop .cropit-preview {\n  background: #fff;\n  margin: 20px 0px;\n}\n.modal-avatar-crop .cropit-image-zoom-input {\n  margin-top: 40px;\n  margin-bottom: 20px;\n}\n.modal-post-likers .media {\n  border-bottom: 1px solid #ebecf0;\n  padding-bottom: 15px;\n}\n.modal-post-likers .media img {\n  border-radius: 4px;\n  width: 40px;\n  height: 40px;\n}\n.modal-post-likers .media:last-child {\n  border: none;\n  padding-bottom: 0px;\n}\n.well {\n  border: 1px solid #ddd;\n}\n.active-posters .rank-user-avatar img {\n  border-radius: 4px;\n}\n.active-posters .user-details {\n  color: #7a869a;\n}\n.active-posters .user-details a.rank-name,\n.active-posters .user-details a.rank-name:link,\n.active-posters .user-details a.rank-name:visited {\n  color: #5e6c84;\n  font-weight: normal;\n}\n.active-posters .user-details a.rank-name:focus,\n.active-posters .user-details a.rank-name:hover,\n.active-posters .user-details a.rank-name:active {\n  color: #172b4d;\n}\n.active-posters .user-details span.rank-name {\n  color: #5e6c84;\n  font-weight: normal;\n}\n.active-posters small {\n  color: #7a869a;\n}\n.page-error .message-icon {\n  color: #ef5350;\n}\n.page-message .message-icon {\n  color: #9575cd;\n}\n.page-message-info .message-icon {\n  color: #9575cd;\n}\n.page-message-success .message-icon {\n  color: #81c784;\n}\n.page-options .message-line {\n  color: #7a869a;\n}\n.page-options .message-line a,\n.page-options .message-line a:link,\n.page-options .message-line a:visited {\n  color: #7a869a;\n}\n.page-options .message-line a:hover,\n.page-options .message-line a:focus,\n.page-options .message-line a:focus:active,\n.page-options .message-line a:active {\n  color: #172b4d;\n}\n.panel-profile-details-group.panel {\n  border: 1px solid #ebecf0;\n}\n.panel-profile-details-group.panel .form-group {\n  margin: 0px;\n}\n.panel-profile-details-group .form-control-static p:last-child {\n  margin-bottom: 0px;\n}\n.post-primary .panel-post {\n  border-color: #b388ff;\n}\n.post-primary .user-title {\n  color: #6200ea;\n}\n.post-primary .user-title a,\n.post-primary .user-title a:link,\n.post-primary .user-title a:visited,\n.post-primary .user-title a:focus,\n.post-primary .user-title a:hover,\n.post-primary .user-title a:active {\n  color: #6200ea;\n}\n.post-success .panel-post {\n  border-color: #00c853;\n}\n.post-success .user-title {\n  color: #388e3c;\n}\n.post-success .user-title a,\n.post-success .user-title a:link,\n.post-success .user-title a:visited,\n.post-success .user-title a:focus,\n.post-success .user-title a:hover,\n.post-success .user-title a:active {\n  color: #388e3c;\n}\n.post-warning .panel-post {\n  border-color: #ffab40;\n}\n.post-warning .user-title {\n  color: #ff6d00;\n}\n.post-warning .user-title a,\n.post-warning .user-title a:link,\n.post-warning .user-title a:visited,\n.post-warning .user-title a:focus,\n.post-warning .user-title a:hover,\n.post-warning .user-title a:active {\n  color: #ff6d00;\n}\n.post-danger .panel-post {\n  border-color: #ff8a80;\n}\n.post-danger .user-title {\n  color: #d50000;\n}\n.post-danger .user-title a,\n.post-danger .user-title a:link,\n.post-danger .user-title a:visited,\n.post-danger .user-title a:focus,\n.post-danger .user-title a:hover,\n.post-danger .user-title a:active {\n  color: #d50000;\n}\n.user-card-primary .panel-body {\n  background: #fff;\n  border: 2px solid #b388ff;\n  border-radius: 4px;\n  padding: 13px;\n}\n.user-card-primary .user-card-title {\n  color: #6200ea;\n}\n.user-card-primary .user-card-title a.user-title,\n.user-card-primary .user-card-title a.user-title:link,\n.user-card-primary .user-card-title a.user-title:visited,\n.user-card-primary .user-card-title a.user-title:focus,\n.user-card-primary .user-card-title a.user-title:hover,\n.user-card-primary .user-card-title a.user-title:active {\n  color: #6200ea;\n}\n.user-card-primary .user-card-stats li {\n  color: #9575cd;\n}\n.user-card-success .panel-body {\n  background: #fff;\n  border: 2px solid #00c853;\n  border-radius: 4px;\n  padding: 13px;\n}\n.user-card-success .user-card-title {\n  color: #388e3c;\n}\n.user-card-success .user-card-title a.user-title,\n.user-card-success .user-card-title a.user-title:link,\n.user-card-success .user-card-title a.user-title:visited,\n.user-card-success .user-card-title a.user-title:focus,\n.user-card-success .user-card-title a.user-title:hover,\n.user-card-success .user-card-title a.user-title:active {\n  color: #388e3c;\n}\n.user-card-success .user-card-stats li {\n  color: #66bb6a;\n}\n.user-card-warning .panel-body {\n  background: #fff;\n  border: 2px solid #ffab40;\n  border-radius: 4px;\n  padding: 13px;\n}\n.user-card-warning .user-card-title {\n  color: #ff6d00;\n}\n.user-card-warning .user-card-title a.user-title,\n.user-card-warning .user-card-title a.user-title:link,\n.user-card-warning .user-card-title a.user-title:visited,\n.user-card-warning .user-card-title a.user-title:focus,\n.user-card-warning .user-card-title a.user-title:hover,\n.user-card-warning .user-card-title a.user-title:active {\n  color: #ff6d00;\n}\n.user-card-warning .user-card-stats li {\n  color: #ff6e40;\n}\n.user-card-danger .panel-body {\n  background: #fff;\n  border: 2px solid #ff8a80;\n  border-radius: 4px;\n  padding: 13px;\n}\n.user-card-danger .user-card-title {\n  color: #d50000;\n}\n.user-card-danger .user-card-title a.user-title,\n.user-card-danger .user-card-title a.user-title:link,\n.user-card-danger .user-card-title a.user-title:visited,\n.user-card-danger .user-card-title a.user-title:focus,\n.user-card-danger .user-card-title a.user-title:hover,\n.user-card-danger .user-card-title a.user-title:active {\n  color: #d50000;\n}\n.user-card-danger .user-card-stats li {\n  color: #e57373;\n}\n.list-group .list-group-rank-primary {\n  border-left: 4px solid #7e57c2;\n  padding-left: 11px;\n}\n.list-group .list-group-rank-primary span.rank-name {\n  color: #6200ea;\n}\n.list-group .list-group-rank-primary a.rank-name,\n.list-group .list-group-rank-primary a.rank-name:link,\n.list-group .list-group-rank-primary a.rank-name:visited,\n.list-group .list-group-rank-primary a.rank-name:focus,\n.list-group .list-group-rank-primary a.rank-name:hover,\n.list-group .list-group-rank-primary a.rank-name:active {\n  color: #6200ea;\n}\n.list-group .list-group-rank-success {\n  border-left: 4px solid #9ccc65;\n  padding-left: 11px;\n}\n.list-group .list-group-rank-success span.rank-name {\n  color: #388e3c;\n}\n.list-group .list-group-rank-success a.rank-name,\n.list-group .list-group-rank-success a.rank-name:link,\n.list-group .list-group-rank-success a.rank-name:visited,\n.list-group .list-group-rank-success a.rank-name:focus,\n.list-group .list-group-rank-success a.rank-name:hover,\n.list-group .list-group-rank-success a.rank-name:active {\n  color: #388e3c;\n}\n.list-group .list-group-rank-warning {\n  border-left: 4px solid #ff7043;\n  padding-left: 11px;\n}\n.list-group .list-group-rank-warning span.rank-name {\n  color: #ff6d00;\n}\n.list-group .list-group-rank-warning a.rank-name,\n.list-group .list-group-rank-warning a.rank-name:link,\n.list-group .list-group-rank-warning a.rank-name:visited,\n.list-group .list-group-rank-warning a.rank-name:focus,\n.list-group .list-group-rank-warning a.rank-name:hover,\n.list-group .list-group-rank-warning a.rank-name:active {\n  color: #ff6d00;\n}\n.list-group .list-group-rank-danger {\n  border-left: 4px solid #f44336;\n  padding-left: 11px;\n}\n.list-group .list-group-rank-danger span.rank-name {\n  color: #d50000;\n}\n.list-group .list-group-rank-danger a.rank-name,\n.list-group .list-group-rank-danger a.rank-name:link,\n.list-group .list-group-rank-danger a.rank-name:visited,\n.list-group .list-group-rank-danger a.rank-name:focus,\n.list-group .list-group-rank-danger a.rank-name:hover,\n.list-group .list-group-rank-danger a.rank-name:active {\n  color: #d50000;\n}\n.page-header-rank-primary .user-rank {\n  color: #6200ea;\n}\n.page-header-rank-primary .user-rank a,\n.page-header-rank-primary .user-rank a:link,\n.page-header-rank-primary .user-rank a:visited,\n.page-header-rank-primary .user-rank a:focus,\n.page-header-rank-primary .user-rank a:hover,\n.page-header-rank-primary .user-rank a:active {\n  color: #6200ea;\n}\n.page-header-rank-success .user-rank {\n  color: #388e3c;\n}\n.page-header-rank-success .user-rank a,\n.page-header-rank-success .user-rank a:link,\n.page-header-rank-success .user-rank a:visited,\n.page-header-rank-success .user-rank a:focus,\n.page-header-rank-success .user-rank a:hover,\n.page-header-rank-success .user-rank a:active {\n  color: #388e3c;\n}\n.page-header-rank-warning .user-rank {\n  color: #ff6d00;\n}\n.page-header-rank-warning .user-rank a,\n.page-header-rank-warning .user-rank a:link,\n.page-header-rank-warning .user-rank a:visited,\n.page-header-rank-warning .user-rank a:focus,\n.page-header-rank-warning .user-rank a:hover,\n.page-header-rank-warning .user-rank a:active {\n  color: #ff6d00;\n}\n.page-header-rank-danger .user-rank {\n  color: #d50000;\n}\n.page-header-rank-danger .user-rank a,\n.page-header-rank-danger .user-rank a:link,\n.page-header-rank-danger .user-rank a:visited,\n.page-header-rank-danger .user-rank a:focus,\n.page-header-rank-danger .user-rank a:hover,\n.page-header-rank-danger .user-rank a:active {\n  color: #d50000;\n}\n","// stylelint-disable\n\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n//    without disabling user zoom.\n//\n\nhtml {\n  font-family: sans-serif; // 1\n  -ms-text-size-adjust: 100%; // 2\n  -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n  margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block; // 1\n  vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n  background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n  outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// 1. Remove the bottom border in Chrome 57- and Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n//\n\nabbr[title] {\n  border-bottom: none; // 1\n  text-decoration: underline; // 2\n  text-decoration: underline dotted; // 2\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n  font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n  font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n  border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n  margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n  overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n//    Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit; // 1\n  font: inherit; // 2\n  margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n  overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n//    and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n//    `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button; // 2\n  cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n  line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box; // 1\n  padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield; // 1\n  box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n  border: 0; // 1\n  padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n  overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n  font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  padding: 0;\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type\n\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important; // Black prints faster: h5bp.com/s\n    text-shadow: none !important;\n    background: transparent !important;\n    box-shadow: none !important;\n  }\n\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n\n  // Don't show links that are fragment identifiers,\n  // or use the `javascript:` pseudo protocol\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n\n  thead {\n    display: table-header-group; // h5bp.com/t\n  }\n\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n\n  img {\n    max-width: 100% !important;\n  }\n\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n\n  // Bootstrap specific changes start\n\n  // Bootstrap components\n  .navbar {\n    display: none;\n  }\n  .btn,\n  .dropup > .btn {\n    > .caret {\n      border-top-color: #000 !important;\n    }\n  }\n  .label {\n    border: 1px solid #000;\n  }\n\n  .table {\n    border-collapse: collapse !important;\n\n    td,\n    th {\n      background-color: #fff !important;\n    }\n  }\n  .table-bordered {\n    th,\n    td {\n      border: 1px solid #ddd !important;\n    }\n  }\n}\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// https://getbootstrap.com/docs/3.4/getting-started/#third-box-sizing\n* {\n  .box-sizing(border-box);\n}\n*:before,\n*:after {\n  .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n  font-size: 10px;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nbody {\n  font-family: @font-family-base;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @text-color;\n  background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\n\n// Links\n\na {\n  color: @link-color;\n  text-decoration: none;\n\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: @link-hover-decoration;\n  }\n\n  &:focus {\n    .tab-focus();\n  }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n  margin: 0;\n}\n\n\n// Images\n\nimg {\n  vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n  .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n  border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n  padding: @thumbnail-padding;\n  line-height: @line-height-base;\n  background-color: @thumbnail-bg;\n  border: 1px solid @thumbnail-border;\n  border-radius: @thumbnail-border-radius;\n  .transition(all .2s ease-in-out);\n\n  // Keep them at most 100% wide\n  .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n  border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n  margin-top: @line-height-computed;\n  margin-bottom: @line-height-computed;\n  border: 0;\n  border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: https://a11yproject.com/posts/how-to-hide-content\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n  &:active,\n  &:focus {\n    position: static;\n    width: auto;\n    height: auto;\n    margin: 0;\n    overflow: visible;\n    clip: auto;\n  }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n","// stylelint-disable indentation, property-no-vendor-prefix, selector-no-vendor-prefix\n\n// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n  -webkit-animation: @animation;\n       -o-animation: @animation;\n          animation: @animation;\n}\n.animation-name(@name) {\n  -webkit-animation-name: @name;\n          animation-name: @name;\n}\n.animation-duration(@duration) {\n  -webkit-animation-duration: @duration;\n          animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n  -webkit-animation-timing-function: @timing-function;\n          animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n  -webkit-animation-delay: @delay;\n          animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n  -webkit-animation-iteration-count: @iteration-count;\n          animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n  -webkit-animation-direction: @direction;\n          animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n  -webkit-animation-fill-mode: @fill-mode;\n          animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n  -webkit-backface-visibility: @visibility;\n     -moz-backface-visibility: @visibility;\n          backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n  -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n          box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n  -webkit-box-sizing: @boxmodel;\n     -moz-box-sizing: @boxmodel;\n          box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n  -webkit-column-count: @column-count;\n     -moz-column-count: @column-count;\n          column-count: @column-count;\n  -webkit-column-gap: @column-gap;\n     -moz-column-gap: @column-gap;\n          column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n  -webkit-hyphens: @mode;\n     -moz-hyphens: @mode;\n      -ms-hyphens: @mode; // IE10+\n       -o-hyphens: @mode;\n          hyphens: @mode;\n  word-wrap: break-word;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n  // Firefox\n  &::-moz-placeholder {\n    color: @color;\n    opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n  }\n  &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n  &::-webkit-input-placeholder  { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n  -webkit-transform: scale(@ratio);\n      -ms-transform: scale(@ratio); // IE9 only\n       -o-transform: scale(@ratio);\n          transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n  -webkit-transform: scale(@ratioX, @ratioY);\n      -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n       -o-transform: scale(@ratioX, @ratioY);\n          transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n  -webkit-transform: scaleX(@ratio);\n      -ms-transform: scaleX(@ratio); // IE9 only\n       -o-transform: scaleX(@ratio);\n          transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n  -webkit-transform: scaleY(@ratio);\n      -ms-transform: scaleY(@ratio); // IE9 only\n       -o-transform: scaleY(@ratio);\n          transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n  -webkit-transform: skewX(@x) skewY(@y);\n      -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n       -o-transform: skewX(@x) skewY(@y);\n          transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n  -webkit-transform: translate(@x, @y);\n      -ms-transform: translate(@x, @y); // IE9 only\n       -o-transform: translate(@x, @y);\n          transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n  -webkit-transform: translate3d(@x, @y, @z);\n          transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n  -webkit-transform: rotate(@degrees);\n      -ms-transform: rotate(@degrees); // IE9 only\n       -o-transform: rotate(@degrees);\n          transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n  -webkit-transform: rotateX(@degrees);\n      -ms-transform: rotateX(@degrees); // IE9 only\n       -o-transform: rotateX(@degrees);\n          transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n  -webkit-transform: rotateY(@degrees);\n      -ms-transform: rotateY(@degrees); // IE9 only\n       -o-transform: rotateY(@degrees);\n          transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n  -webkit-perspective: @perspective;\n     -moz-perspective: @perspective;\n          perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n  -webkit-perspective-origin: @perspective;\n     -moz-perspective-origin: @perspective;\n          perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n  -webkit-transform-origin: @origin;\n     -moz-transform-origin: @origin;\n      -ms-transform-origin: @origin; // IE9 only\n          transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n  -webkit-transition: @transition;\n       -o-transition: @transition;\n          transition: @transition;\n}\n.transition-property(@transition-property) {\n  -webkit-transition-property: @transition-property;\n          transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n  -webkit-transition-delay: @transition-delay;\n          transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n  -webkit-transition-duration: @transition-duration;\n          transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n  -webkit-transition-timing-function: @timing-function;\n          transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n  -webkit-transition: -webkit-transform @transition;\n     -moz-transition: -moz-transform @transition;\n       -o-transition: -o-transform @transition;\n          transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n  -webkit-user-select: @select;\n     -moz-user-select: @select;\n      -ms-user-select: @select; // IE10+\n          user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n  // WebKit-specific. Other browsers will keep their default outline style.\n  // (Initially tried to also force default via `outline: initial`,\n  // but that seems to erroneously remove the outline in Firefox altogether.)\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n","// stylelint-disable media-feature-name-no-vendor-prefix, media-feature-parentheses-space-inside, media-feature-name-no-unknown, indentation, at-rule-name-space-after\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n  display: @display;\n  max-width: 100%; // Part 1: Set a maximum relative to the parent\n  height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n  background-image: url(\"@{file-1x}\");\n\n  @media\n  only screen and (-webkit-min-device-pixel-ratio: 2),\n  only screen and ( min--moz-device-pixel-ratio: 2),\n  only screen and ( -o-min-device-pixel-ratio: 2/1),\n  only screen and ( min-device-pixel-ratio: 2),\n  only screen and ( min-resolution: 192dpi),\n  only screen and ( min-resolution: 2dppx) {\n    background-image: url(\"@{file-2x}\");\n    background-size: @width-1x @height-1x;\n  }\n}\n","// stylelint-disable selector-list-comma-newline-after, selector-no-qualifying-type\n\n//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: @headings-font-family;\n  font-weight: @headings-font-weight;\n  line-height: @headings-line-height;\n  color: @headings-color;\n\n  small,\n  .small {\n    font-weight: 400;\n    line-height: 1;\n    color: @headings-small-color;\n  }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n  margin-top: @line-height-computed;\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 65%;\n  }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n  margin-top: (@line-height-computed / 2);\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 75%;\n  }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n  margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n  margin-bottom: @line-height-computed;\n  font-size: floor((@font-size-base * 1.15));\n  font-weight: 300;\n  line-height: 1.4;\n\n  @media (min-width: @screen-sm-min) {\n    font-size: (@font-size-base * 1.5);\n  }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n  font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n  padding: .2em;\n  background-color: @state-warning-bg;\n}\n\n// Alignment\n.text-left           { text-align: left; }\n.text-right          { text-align: right; }\n.text-center         { text-align: center; }\n.text-justify        { text-align: justify; }\n.text-nowrap         { white-space: nowrap; }\n\n// Transformation\n.text-lowercase      { text-transform: lowercase; }\n.text-uppercase      { text-transform: uppercase; }\n.text-capitalize     { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n  color: @text-muted;\n}\n.text-primary {\n  .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n  .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n  .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n  .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n  .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n  // Given the contrast here, this is the only class to have its color inverted\n  // automatically.\n  color: #fff;\n  .bg-variant(@brand-primary);\n}\n.bg-success {\n  .bg-variant(@state-success-bg);\n}\n.bg-info {\n  .bg-variant(@state-info-bg);\n}\n.bg-warning {\n  .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n  .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n  padding-bottom: ((@line-height-computed / 2) - 1);\n  margin: (@line-height-computed * 2) 0 @line-height-computed;\n  border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n  margin-top: 0;\n  margin-bottom: (@line-height-computed / 2);\n  ul,\n  ol {\n    margin-bottom: 0;\n  }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n  .list-unstyled();\n  margin-left: -5px;\n\n  > li {\n    display: inline-block;\n    padding-right: 5px;\n    padding-left: 5px;\n  }\n}\n\n// Description Lists\ndl {\n  margin-top: 0; // Remove browser default\n  margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n  line-height: @line-height-base;\n}\ndt {\n  font-weight: 700;\n}\ndd {\n  margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n  dd {\n    &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n  }\n\n  @media (min-width: @dl-horizontal-breakpoint) {\n    dt {\n      float: left;\n      width: (@dl-horizontal-offset - 20);\n      clear: left;\n      text-align: right;\n      .text-overflow();\n    }\n    dd {\n      margin-left: @dl-horizontal-offset;\n    }\n  }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n}\n\n.initialism {\n  font-size: 90%;\n  .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n  padding: (@line-height-computed / 2) @line-height-computed;\n  margin: 0 0 @line-height-computed;\n  font-size: @blockquote-font-size;\n  border-left: 5px solid @blockquote-border-color;\n\n  p,\n  ul,\n  ol {\n    &:last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  // Note: Deprecated small and .small as of v3.1.0\n  // Context: https://github.com/twbs/bootstrap/issues/11660\n  footer,\n  small,\n  .small {\n    display: block;\n    font-size: 80%; // back to default font-size\n    line-height: @line-height-base;\n    color: @blockquote-small-color;\n\n    &:before {\n      content: \"\\2014 \\00A0\"; // em dash, nbsp\n    }\n  }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid @blockquote-border-color;\n  border-left: 0;\n\n  // Account for citation\n  footer,\n  small,\n  .small {\n    &:before { content: \"\"; }\n    &:after {\n      content: \"\\00A0 \\2014\"; // nbsp, em dash\n    }\n  }\n}\n\n// Addresses\naddress {\n  margin-bottom: @line-height-computed;\n  font-style: normal;\n  line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n  color: @color;\n  a&:hover,\n  a&:focus {\n    color: darken(@color, 10%);\n  }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n  background-color: @color;\n  a&:hover,\n  a&:focus {\n    background-color: darken(@color, 10%);\n  }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n  font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @code-color;\n  background-color: @code-bg;\n  border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @kbd-color;\n  background-color: @kbd-bg;\n  border-radius: @border-radius-small;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n\n  kbd {\n    padding: 0;\n    font-size: 100%;\n    font-weight: 700;\n    box-shadow: none;\n  }\n}\n\n// Blocks of code\npre {\n  display: block;\n  padding: ((@line-height-computed - 1) / 2);\n  margin: 0 0 (@line-height-computed / 2);\n  font-size: (@font-size-base - 1); // 14px to 13px\n  line-height: @line-height-base;\n  color: @pre-color;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: @pre-bg;\n  border: 1px solid @pre-border-color;\n  border-radius: @border-radius-base;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border-radius: 0;\n  }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n  max-height: @pre-scrollable-max-height;\n  overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n  .container-fixed();\n\n  @media (min-width: @screen-sm-min) {\n    width: @container-sm;\n  }\n  @media (min-width: @screen-md-min) {\n    width: @container-md;\n  }\n  @media (min-width: @screen-lg-min) {\n    width: @container-lg;\n  }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n  .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n  .make-row();\n}\n\n.row-no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n\n  [class*=\"col-\"] {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n  .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n  .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n  .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n  padding-right: ceil((@gutter / 2));\n  padding-left: floor((@gutter / 2));\n  margin-right: auto;\n  margin-left: auto;\n  &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n  margin-right: floor((@gutter / -2));\n  margin-left: ceil((@gutter / -2));\n  &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  float: left;\n  width: percentage((@columns / @grid-columns));\n  min-height: 1px;\n  padding-right: (@gutter / 2);\n  padding-left: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n  margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n  left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n  right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-right: (@gutter / 2);\n  padding-left: (@gutter / 2);\n\n  @media (min-width: @screen-sm-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-offset(@columns) {\n  @media (min-width: @screen-sm-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-push(@columns) {\n  @media (min-width: @screen-sm-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-pull(@columns) {\n  @media (min-width: @screen-sm-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-right: (@gutter / 2);\n  padding-left: (@gutter / 2);\n\n  @media (min-width: @screen-md-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-offset(@columns) {\n  @media (min-width: @screen-md-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-push(@columns) {\n  @media (min-width: @screen-md-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-pull(@columns) {\n  @media (min-width: @screen-md-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-right: (@gutter / 2);\n  padding-left: (@gutter / 2);\n\n  @media (min-width: @screen-lg-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-offset(@columns) {\n  @media (min-width: @screen-lg-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-push(@columns) {\n  @media (min-width: @screen-lg-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-pull(@columns) {\n  @media (min-width: @screen-lg-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n","// stylelint-disable declaration-no-important, at-rule-no-vendor-prefix\n\n//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: https://getbootstrap.com/docs/3.4/getting-started/#support-ie10-width\n// Source: https://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: https://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n  width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n\n.visible-xs {\n  @media (max-width: @screen-xs-max) {\n    .responsive-visibility();\n  }\n}\n.visible-xs-block {\n  @media (max-width: @screen-xs-max) {\n    display: block !important;\n  }\n}\n.visible-xs-inline {\n  @media (max-width: @screen-xs-max) {\n    display: inline !important;\n  }\n}\n.visible-xs-inline-block {\n  @media (max-width: @screen-xs-max) {\n    display: inline-block !important;\n  }\n}\n\n.visible-sm {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    .responsive-visibility();\n  }\n}\n.visible-sm-block {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    display: block !important;\n  }\n}\n.visible-sm-inline {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    display: inline !important;\n  }\n}\n.visible-sm-inline-block {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    display: inline-block !important;\n  }\n}\n\n.visible-md {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    .responsive-visibility();\n  }\n}\n.visible-md-block {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    display: block !important;\n  }\n}\n.visible-md-inline {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    display: inline !important;\n  }\n}\n.visible-md-inline-block {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    display: inline-block !important;\n  }\n}\n\n.visible-lg {\n  @media (min-width: @screen-lg-min) {\n    .responsive-visibility();\n  }\n}\n.visible-lg-block {\n  @media (min-width: @screen-lg-min) {\n    display: block !important;\n  }\n}\n.visible-lg-inline {\n  @media (min-width: @screen-lg-min) {\n    display: inline !important;\n  }\n}\n.visible-lg-inline-block {\n  @media (min-width: @screen-lg-min) {\n    display: inline-block !important;\n  }\n}\n\n.hidden-xs {\n  @media (max-width: @screen-xs-max) {\n    .responsive-invisibility();\n  }\n}\n.hidden-sm {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    .responsive-invisibility();\n  }\n}\n.hidden-md {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    .responsive-invisibility();\n  }\n}\n.hidden-lg {\n  @media (min-width: @screen-lg-min) {\n    .responsive-invisibility();\n  }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n  .responsive-invisibility();\n\n  @media print {\n    .responsive-visibility();\n  }\n}\n.visible-print-block {\n  display: none !important;\n\n  @media print {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n\n  @media print {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n\n  @media print {\n    display: inline-block !important;\n  }\n}\n\n.hidden-print {\n  @media print {\n    .responsive-invisibility();\n  }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n  // Common styles for all sizes of grid columns, widths 1-12\n  .col(@index) { // initial\n    @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n    .col((@index + 1), @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n    @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n    .col((@index + 1), ~\"@{list}, @{item}\");\n  }\n  .col(@index, @list) when (@index > @grid-columns) { // terminal\n    @{list} {\n      position: relative;\n      // Prevent columns from collapsing when empty\n      min-height: 1px;\n      // Inner gutter via padding\n      padding-right: floor((@grid-gutter-width / 2));\n      padding-left: ceil((@grid-gutter-width / 2));\n    }\n  }\n  .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n  .col(@index) { // initial\n    @item: ~\".col-@{class}-@{index}\";\n    .col((@index + 1), @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) { // general\n    @item: ~\".col-@{class}-@{index}\";\n    .col((@index + 1), ~\"@{list}, @{item}\");\n  }\n  .col(@index, @list) when (@index > @grid-columns) { // terminal\n    @{list} {\n      float: left;\n    }\n  }\n  .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n  .col-@{class}-@{index} {\n    width: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n  .col-@{class}-push-@{index} {\n    left: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n  .col-@{class}-push-0 {\n    left: auto;\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n  .col-@{class}-pull-@{index} {\n    right: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n  .col-@{class}-pull-0 {\n    right: auto;\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n  .col-@{class}-offset-@{index} {\n    margin-left: percentage((@index / @grid-columns));\n  }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n  .calc-grid-column(@index, @class, @type);\n  // next iteration\n  .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n  .float-grid-columns(@class);\n  .loop-grid-columns(@grid-columns, @class, width);\n  .loop-grid-columns(@grid-columns, @class, pull);\n  .loop-grid-columns(@grid-columns, @class, push);\n  .loop-grid-columns(@grid-columns, @class, offset);\n}\n","// stylelint-disable selector-max-type, selector-max-compound-selectors, selector-no-qualifying-type\n\n//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n  background-color: @table-bg;\n\n  // Table cell sizing\n  //\n  // Reset default table behavior\n\n  col[class*=\"col-\"] {\n    position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n    display: table-column;\n    float: none;\n  }\n\n  td,\n  th {\n    &[class*=\"col-\"] {\n      position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n      display: table-cell;\n      float: none;\n    }\n  }\n}\n\ncaption {\n  padding-top: @table-cell-padding;\n  padding-bottom: @table-cell-padding;\n  color: @text-muted;\n  text-align: left;\n}\n\nth {\n  text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: @line-height-computed;\n  // Cells\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-cell-padding;\n        line-height: @line-height-base;\n        vertical-align: top;\n        border-top: 1px solid @table-border-color;\n      }\n    }\n  }\n  // Bottom align for column headings\n  > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid @table-border-color;\n  }\n  // Remove top border from thead by default\n  > caption + thead,\n  > colgroup + thead,\n  > thead:first-child {\n    > tr:first-child {\n      > th,\n      > td {\n        border-top: 0;\n      }\n    }\n  }\n  // Account for multiple tbody instances\n  > tbody + tbody {\n    border-top: 2px solid @table-border-color;\n  }\n\n  // Nesting\n  .table {\n    background-color: @body-bg;\n  }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-condensed-cell-padding;\n      }\n    }\n  }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n  border: 1px solid @table-border-color;\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        border: 1px solid @table-border-color;\n      }\n    }\n  }\n  > thead > tr {\n    > th,\n    > td {\n      border-bottom-width: 2px;\n    }\n  }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n  > tbody > tr:nth-of-type(odd) {\n    background-color: @table-bg-accent;\n  }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  > tbody > tr:hover {\n    background-color: @table-bg-hover;\n  }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n  min-height: .01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n  overflow-x: auto;\n\n  @media screen and (max-width: @screen-xs-max) {\n    width: 100%;\n    margin-bottom: (@line-height-computed * .75);\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid @table-border-color;\n\n    // Tighten up spacing\n    > .table {\n      margin-bottom: 0;\n\n      // Ensure the content doesn't wrap\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th,\n          > td {\n            white-space: nowrap;\n          }\n        }\n      }\n    }\n\n    // Special overrides for the bordered tables\n    > .table-bordered {\n      border: 0;\n\n      // Nuke the appropriate borders so that the parent can handle them\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th:first-child,\n          > td:first-child {\n            border-left: 0;\n          }\n          > th:last-child,\n          > td:last-child {\n            border-right: 0;\n          }\n        }\n      }\n\n      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n      // chances are there will be only one `tr` in a `thead` and that would\n      // remove the border altogether.\n      > tbody,\n      > tfoot {\n        > tr:last-child {\n          > th,\n          > td {\n            border-bottom: 0;\n          }\n        }\n      }\n\n    }\n  }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n  // Exact selectors below required to override `.table-striped` and prevent\n  // inheritance to nested tables.\n  .table > thead > tr,\n  .table > tbody > tr,\n  .table > tfoot > tr {\n    > td.@{state},\n    > th.@{state},\n    &.@{state} > td,\n    &.@{state} > th {\n      background-color: @background;\n    }\n  }\n\n  // Hover states for `.table-hover`\n  // Note: this is not available for cells or rows within `thead` or `tfoot`.\n  .table-hover > tbody > tr {\n    > td.@{state}:hover,\n    > th.@{state}:hover,\n    &.@{state}:hover > td,\n    &:hover > .@{state},\n    &.@{state}:hover > th {\n      background-color: darken(@background, 5%);\n    }\n  }\n}\n","// stylelint-disable selector-no-qualifying-type, property-no-vendor-prefix, media-feature-name-no-vendor-prefix\n\n//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n  // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n  // so we reset that to ensure it behaves more like a standard block element.\n  // See https://github.com/twbs/bootstrap/issues/12359.\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: @line-height-computed;\n  font-size: (@font-size-base * 1.5);\n  line-height: inherit;\n  color: @legend-color;\n  border: 0;\n  border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n  display: inline-block;\n  max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n  margin-bottom: 5px;\n  font-weight: 700;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\ninput[type=\"search\"] {\n  // Override content-box in Normalize (* isn't specific enough)\n  .box-sizing(border-box);\n\n  // Search inputs in iOS\n  //\n  // This overrides the extra rounded corners on search inputs in iOS so that our\n  // `.form-control` class can properly style them. Note that this cannot simply\n  // be added to `.form-control` as it's not specific enough. For details, see\n  // https://github.com/twbs/bootstrap/issues/11586.\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9; // IE8-9\n  line-height: normal;\n\n  // Apply same disabled cursor tweak as for inputs\n  // Some special care is needed because <label>s don't inherit their parent's `cursor`.\n  //\n  // Note: Neither radios nor checkboxes can be readonly.\n  &[disabled],\n  &.disabled,\n  fieldset[disabled] & {\n    cursor: @cursor-disabled;\n  }\n}\n\ninput[type=\"file\"] {\n  display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  .tab-focus();\n}\n\n// Adjust output element\noutput {\n  display: block;\n  padding-top: (@padding-base-vertical + 1);\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n  background-color: @input-bg;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid @input-border;\n  border-radius: @input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.\n  .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075));\n  .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  .form-control-focus();\n\n  // Placeholder\n  .placeholder();\n\n  // Unstyle the caret on `<select>`s in IE10+.\n  &::-ms-expand {\n    background-color: transparent;\n    border: 0;\n  }\n\n  // Disabled and read-only inputs\n  //\n  // HTML5 says that controls under a fieldset > legend:first-child won't be\n  // disabled if the fieldset is disabled. Due to implementation difficulty, we\n  // don't honor that edge case; we style them as disabled anyway.\n  &[disabled],\n  &[readonly],\n  fieldset[disabled] & {\n    background-color: @input-bg-disabled;\n    opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655\n  }\n\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: @cursor-disabled;\n  }\n\n  // Reset height for `textarea`s\n  textarea& {\n    height: auto;\n  }\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned. As a workaround, we\n// set a pixel line-height that matches the given height of the input, but only\n// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848\n//\n// Note that as of 9.3, iOS doesn't support `week`.\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"],\n  input[type=\"time\"],\n  input[type=\"datetime-local\"],\n  input[type=\"month\"] {\n    &.form-control {\n      line-height: @input-height-base;\n    }\n\n    &.input-sm,\n    .input-group-sm & {\n      line-height: @input-height-small;\n    }\n\n    &.input-lg,\n    .input-group-lg & {\n      line-height: @input-height-large;\n    }\n  }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n  margin-bottom: @form-group-margin-bottom;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n\n  // These are used on elements with <label> descendants\n  &.disabled,\n  fieldset[disabled] & {\n    label {\n      cursor: @cursor-disabled;\n    }\n  }\n\n  label {\n    min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text\n    padding-left: 20px;\n    margin-bottom: 0;\n    font-weight: 400;\n    cursor: pointer;\n  }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: 400;\n  vertical-align: middle;\n  cursor: pointer;\n\n  // These are used directly on <label>s\n  &.disabled,\n  fieldset[disabled] & {\n    cursor: @cursor-disabled;\n  }\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; // space out consecutive inline controls\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n  min-height: (@line-height-computed + @font-size-base);\n  // Size it appropriately next to real form controls\n  padding-top: (@padding-base-vertical + 1);\n  padding-bottom: (@padding-base-vertical + 1);\n  // Remove default margin from `p`\n  margin-bottom: 0;\n\n  &.input-lg,\n  &.input-sm {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// The `.form-group-* form-control` variations are sadly duplicated to avoid the\n// issue documented in https://github.com/twbs/bootstrap/issues/15074.\n\n.input-sm {\n  .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);\n}\n.form-group-sm {\n  .form-control {\n    height: @input-height-small;\n    padding: @padding-small-vertical @padding-small-horizontal;\n    font-size: @font-size-small;\n    line-height: @line-height-small;\n    border-radius: @input-border-radius-small;\n  }\n  select.form-control {\n    height: @input-height-small;\n    line-height: @input-height-small;\n  }\n  textarea.form-control,\n  select[multiple].form-control {\n    height: auto;\n  }\n  .form-control-static {\n    height: @input-height-small;\n    min-height: (@line-height-computed + @font-size-small);\n    padding: (@padding-small-vertical + 1) @padding-small-horizontal;\n    font-size: @font-size-small;\n    line-height: @line-height-small;\n  }\n}\n\n.input-lg {\n  .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);\n}\n.form-group-lg {\n  .form-control {\n    height: @input-height-large;\n    padding: @padding-large-vertical @padding-large-horizontal;\n    font-size: @font-size-large;\n    line-height: @line-height-large;\n    border-radius: @input-border-radius-large;\n  }\n  select.form-control {\n    height: @input-height-large;\n    line-height: @input-height-large;\n  }\n  textarea.form-control,\n  select[multiple].form-control {\n    height: auto;\n  }\n  .form-control-static {\n    height: @input-height-large;\n    min-height: (@line-height-computed + @font-size-large);\n    padding: (@padding-large-vertical + 1) @padding-large-horizontal;\n    font-size: @font-size-large;\n    line-height: @line-height-large;\n  }\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n  // Enable absolute positioning\n  position: relative;\n\n  // Ensure icons don't overlap text\n  .form-control {\n    padding-right: (@input-height-base * 1.25);\n  }\n}\n// Feedback icon (requires .glyphicon classes)\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2; // Ensure icon is above input groups\n  display: block;\n  width: @input-height-base;\n  height: @input-height-base;\n  line-height: @input-height-base;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: @input-height-large;\n  height: @input-height-large;\n  line-height: @input-height-large;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: @input-height-small;\n  height: @input-height-small;\n  line-height: @input-height-small;\n}\n\n// Feedback states\n.has-success {\n  .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n  .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n  .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n// Reposition feedback icon if input has visible label above\n.has-feedback label {\n\n  & ~ .form-control-feedback {\n    top: (@line-height-computed + 5); // Height of the `label` and its margin\n  }\n  &.sr-only ~ .form-control-feedback {\n    top: 0;\n  }\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n  display: block; // account for any element using help-block\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n  // Kick in the inline\n  @media (min-width: @screen-sm-min) {\n    // Inline-block all the things for \"inline\"\n    .form-group {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // In navbar-form, allow folks to *not* use `.form-group`\n    .form-control {\n      display: inline-block;\n      width: auto; // Prevent labels from stacking above inputs in `.form-group`\n      vertical-align: middle;\n    }\n\n    // Make static controls behave like regular ones\n    .form-control-static {\n      display: inline-block;\n    }\n\n    .input-group {\n      display: inline-table;\n      vertical-align: middle;\n\n      .input-group-addon,\n      .input-group-btn,\n      .form-control {\n        width: auto;\n      }\n    }\n\n    // Input groups need that 100% width though\n    .input-group > .form-control {\n      width: 100%;\n    }\n\n    .control-label {\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // Remove default margin on radios/checkboxes that were used for stacking, and\n    // then undo the floating of radios and checkboxes to match.\n    .radio,\n    .checkbox {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      vertical-align: middle;\n\n      label {\n        padding-left: 0;\n      }\n    }\n    .radio input[type=\"radio\"],\n    .checkbox input[type=\"checkbox\"] {\n      position: relative;\n      margin-left: 0;\n    }\n\n    // Re-override the feedback icon.\n    .has-feedback .form-control-feedback {\n      top: 0;\n    }\n  }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n  // Consistent vertical alignment of radios and checkboxes\n  //\n  // Labels also get some reset styles, but that is scoped to a media query below.\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline {\n    padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n  // Account for padding we're adding to ensure the alignment and of help text\n  // and other content below items\n  .radio,\n  .checkbox {\n    min-height: (@line-height-computed + (@padding-base-vertical + 1));\n  }\n\n  // Make form groups behave like rows\n  .form-group {\n    .make-row();\n  }\n\n  // Reset spacing and right align labels, but scope to media queries so that\n  // labels on narrow viewports stack the same as a default form example.\n  @media (min-width: @screen-sm-min) {\n    .control-label {\n      padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n      margin-bottom: 0;\n      text-align: right;\n    }\n  }\n\n  // Validation states\n  //\n  // Reposition the icon because it's now within a grid column and columns have\n  // `position: relative;` on them. Also accounts for the grid gutter padding.\n  .has-feedback .form-control-feedback {\n    right: floor((@grid-gutter-width / 2));\n  }\n\n  // Form group sizes\n  //\n  // Quick utility class for applying `.input-lg` and `.input-sm` styles to the\n  // inputs and labels within a `.form-group`.\n  .form-group-lg {\n    @media (min-width: @screen-sm-min) {\n      .control-label {\n        padding-top: (@padding-large-vertical + 1);\n        font-size: @font-size-large;\n      }\n    }\n  }\n  .form-group-sm {\n    @media (min-width: @screen-sm-min) {\n      .control-label {\n        padding-top: (@padding-small-vertical + 1);\n        font-size: @font-size-small;\n      }\n    }\n  }\n}\n","// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n  // Color the label and help text\n  .help-block,\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline,\n  &.radio label,\n  &.checkbox label,\n  &.radio-inline label,\n  &.checkbox-inline label  {\n    color: @text-color;\n  }\n  // Set the border and box shadow on specific inputs to match\n  .form-control {\n    border-color: @border-color;\n    .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075)); // Redeclare so transitions work\n    &:focus {\n      border-color: darken(@border-color, 10%);\n      @shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px lighten(@border-color, 20%);\n      .box-shadow(@shadow);\n    }\n  }\n  // Set validation states also for addons\n  .input-group-addon {\n    color: @text-color;\n    background-color: @background-color;\n    border-color: @border-color;\n  }\n  // Optional feedback icon\n  .form-control-feedback {\n    color: @text-color;\n  }\n}\n\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n.form-control-focus(@color: @input-border-focus) {\n  @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n  &:focus {\n    border-color: @color;\n    outline: 0;\n    .box-shadow(~\"inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px @{color-rgba}\");\n  }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  height: @input-height;\n  padding: @padding-vertical @padding-horizontal;\n  font-size: @font-size;\n  line-height: @line-height;\n  border-radius: @border-radius;\n\n  select& {\n    height: @input-height;\n    line-height: @input-height;\n  }\n\n  textarea&,\n  select[multiple]& {\n    height: auto;\n  }\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n  display: inline-block;\n  margin-bottom: 0; // For input.btn\n  font-weight: @btn-font-weight;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  touch-action: manipulation;\n  cursor: pointer;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);\n  .user-select(none);\n\n  &,\n  &:active,\n  &.active {\n    &:focus,\n    &.focus {\n      .tab-focus();\n    }\n  }\n\n  &:hover,\n  &:focus,\n  &.focus {\n    color: @btn-default-color;\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    background-image: none;\n    outline: 0;\n    .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: @cursor-disabled;\n    .opacity(.65);\n    .box-shadow(none);\n  }\n\n  a& {\n    &.disabled,\n    fieldset[disabled] & {\n      pointer-events: none; // Future-proof disabling of clicks on `<a>` elements\n    }\n  }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n  .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n  .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n  .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n  .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n  .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  font-weight: 400;\n  color: @link-color;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &.active,\n  &[disabled],\n  fieldset[disabled] & {\n    background-color: transparent;\n    .box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: @link-hover-decoration;\n    background-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus {\n      color: @btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);\n}\n.btn-sm {\n  // line-height: ensure proper height of button next to small input\n  .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n.btn-xs {\n  .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n  color: @color;\n  background-color: @background;\n  border-color: @border;\n\n  &:focus,\n  &.focus {\n    color: @color;\n    background-color: darken(@background, 10%);\n    border-color: darken(@border, 25%);\n  }\n  &:hover {\n    color: @color;\n    background-color: darken(@background, 10%);\n    border-color: darken(@border, 12%);\n  }\n  &:active,\n  &.active,\n  .open > .dropdown-toggle& {\n    color: @color;\n    background-color: darken(@background, 10%);\n    background-image: none;\n    border-color: darken(@border, 12%);\n\n    &:hover,\n    &:focus,\n    &.focus {\n      color: @color;\n      background-color: darken(@background, 17%);\n      border-color: darken(@border, 25%);\n    }\n  }\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus,\n    &.focus {\n      background-color: @background;\n      border-color: @border;\n    }\n  }\n\n  .badge {\n    color: @background;\n    background-color: @color;\n  }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  padding: @padding-vertical @padding-horizontal;\n  font-size: @font-size;\n  line-height: @line-height;\n  border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n  @opacity-ie: (@opacity * 100);  // IE8 filter\n  filter: ~\"alpha(opacity=@{opacity-ie})\";\n  opacity: @opacity;\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  .transition(opacity .15s linear);\n\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n\n  &.in      { display: block; }\n  tr&.in    { display: table-row; }\n  tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  .transition-property(~\"height, visibility\");\n  .transition-duration(.35s);\n  .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: @caret-width-base dashed;\n  border-top: @caret-width-base solid ~\"\\9\"; // IE8\n  border-right: @caret-width-base solid transparent;\n  border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: @zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  font-size: @font-size-base;\n  text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n  list-style: none;\n  background-color: @dropdown-bg;\n  background-clip: padding-box;\n  border: 1px solid @dropdown-fallback-border; // IE8 fallback\n  border: 1px solid @dropdown-border;\n  border-radius: @border-radius-base;\n  .box-shadow(0 6px 12px rgba(0, 0, 0, .175));\n\n  // Aligns the dropdown menu to right\n  //\n  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n  &.pull-right {\n    right: 0;\n    left: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n    .nav-divider(@dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: 400;\n    line-height: @line-height-base;\n    color: @dropdown-link-color;\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\n\n    &:hover,\n    &:focus {\n      color: @dropdown-link-hover-color;\n      text-decoration: none;\n      background-color: @dropdown-link-hover-bg;\n    }\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-active-color;\n    text-decoration: none;\n    background-color: @dropdown-link-active-bg;\n    outline: 0;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-disabled-color;\n  }\n\n  // Nuke hover/focus effects\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    cursor: @cursor-disabled;\n    background-color: transparent;\n    background-image: none; // Remove CSS gradient\n    .reset-filter();\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n  right: 0;\n  left: auto; // Reset the default from `.dropdown-menu`\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: @font-size-small;\n  line-height: @line-height-base;\n  color: @dropdown-header-color;\n  white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    content: \"\";\n    border-top: 0;\n    border-bottom: @caret-width-base dashed;\n    border-bottom: @caret-width-base solid ~\"\\9\"; // IE8\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 2px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      .dropdown-menu-right();\n    }\n    // Necessary for overrides of the default right aligned menu.\n    // Will remove come v4 in all likelihood.\n    .dropdown-menu-left {\n      .dropdown-menu-left();\n    }\n  }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n  height: 1px;\n  margin: ((@line-height-computed / 2) - 1) 0;\n  overflow: hidden;\n  background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n  filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","// stylelint-disable selector-no-qualifying-type, selector-max-type\n\n//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  padding-left: 0; // Override default ul/ol\n  margin-bottom: 0;\n  list-style: none;\n  &:extend(.clearfix all);\n\n  > li {\n    position: relative;\n    display: block;\n\n    > a {\n      position: relative;\n      display: block;\n      padding: @nav-link-padding;\n      &:hover,\n      &:focus {\n        text-decoration: none;\n        background-color: @nav-link-hover-bg;\n      }\n    }\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.disabled > a {\n      color: @nav-disabled-link-color;\n\n      &:hover,\n      &:focus {\n        color: @nav-disabled-link-hover-color;\n        text-decoration: none;\n        cursor: @cursor-disabled;\n        background-color: transparent;\n      }\n    }\n  }\n\n  // Open dropdowns\n  .open > a {\n    &,\n    &:hover,\n    &:focus {\n      background-color: @nav-link-hover-bg;\n      border-color: @link-color;\n    }\n  }\n\n  // Nav dividers (deprecated with v3.0.1)\n  //\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\n  // we missed it. We don't currently support this anywhere, but in the interest\n  // of maintaining backward compatibility in case you use it, it's deprecated.\n  .nav-divider {\n    .nav-divider();\n  }\n\n  // Prevent IE8 from misplacing imgs\n  //\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n    max-width: none;\n  }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid @nav-tabs-border-color;\n  > li {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -1px;\n\n    // Actual tabs (as links)\n    > a {\n      margin-right: 2px;\n      line-height: @line-height-base;\n      border: 1px solid transparent;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n      &:hover {\n        border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n      }\n    }\n\n    // Active state, and its :hover to override normal :hover\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-tabs-active-link-hover-color;\n        cursor: default;\n        background-color: @nav-tabs-active-link-hover-bg;\n        border: 1px solid @nav-tabs-active-link-hover-border-color;\n        border-bottom-color: transparent;\n      }\n    }\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n    .nav-justified();\n    .nav-tabs-justified();\n  }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n    float: left;\n\n    // Links rendered as pills\n    > a {\n      border-radius: @nav-pills-border-radius;\n    }\n    + li {\n      margin-left: 2px;\n    }\n\n    // Active state\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-pills-active-link-hover-color;\n        background-color: @nav-pills-active-link-hover-bg;\n      }\n    }\n  }\n}\n\n\n// Stacked pills\n.nav-stacked {\n  > li {\n    float: none;\n    + li {\n      margin-top: 2px;\n      margin-left: 0; // no need for this gap between nav items\n    }\n  }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n    float: none;\n    > a {\n      margin-bottom: 5px;\n      text-align: center;\n    }\n  }\n\n  > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li {\n      display: table-cell;\n      width: 1%;\n      > a {\n        margin-bottom: 0;\n      }\n    }\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n  border-bottom: 0;\n\n  > li > a {\n    // Override margin from .nav-tabs\n    margin-right: 0;\n    border-radius: @border-radius-base;\n  }\n\n  > .active > a,\n  > .active > a:hover,\n  > .active > a:focus {\n    border: 1px solid @nav-tabs-justified-link-border-color;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li > a {\n      border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n    }\n    > .active > a,\n    > .active > a:hover,\n    > .active > a:focus {\n      border-bottom-color: @nav-tabs-justified-active-link-border-color;\n    }\n  }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  .border-top-radius(0);\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n  border-top-left-radius: @radius;\n  border-top-right-radius: @radius;\n}\n.border-right-radius(@radius) {\n  border-top-right-radius: @radius;\n  border-bottom-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n  border-bottom-right-radius: @radius;\n  border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n  border-top-left-radius: @radius;\n  border-bottom-left-radius: @radius;\n}\n","// stylelint-disable selector-max-type, selector-max-compound-selectors, selector-max-combinators, selector-max-class, declaration-no-important, selector-no-qualifying-type\n\n//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: @navbar-margin-bottom;\n  border: 1px solid transparent;\n\n  // Prevent floats from breaking the navbar\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: @navbar-border-radius;\n  }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n  }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  padding-right: @navbar-padding-horizontal;\n  padding-left: @navbar-padding-horizontal;\n  overflow-x: visible;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n  &:extend(.clearfix all);\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n    overflow-y: auto;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n\n    &.collapse {\n      display: block !important;\n      height: auto !important;\n      padding-bottom: 0; // Override default setting\n      overflow: visible !important;\n    }\n\n    &.in {\n      overflow-y: visible;\n    }\n\n    // Undo the collapse side padding for navbars with containers to ensure\n    // alignment of right-aligned contents.\n    .navbar-fixed-top &,\n    .navbar-static-top &,\n    .navbar-fixed-bottom & {\n      padding-right: 0;\n      padding-left: 0;\n    }\n  }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  .navbar-collapse {\n    max-height: @navbar-collapse-max-height;\n\n    @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n      max-height: 200px;\n    }\n  }\n\n  // Fix the top/bottom navbars when screen real estate supports it\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: @zindex-navbar-fixed;\n\n  // Undo the rounded corners\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; // override .navbar defaults\n  border-width: 1px 0 0;\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n  > .navbar-header,\n  > .navbar-collapse {\n    margin-right: -@navbar-padding-horizontal;\n    margin-left: -@navbar-padding-horizontal;\n\n    @media (min-width: @grid-float-breakpoint) {\n      margin-right: 0;\n      margin-left: 0;\n    }\n  }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  z-index: @zindex-navbar;\n  border-width: 0 0 1px;\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  height: @navbar-height;\n  padding: @navbar-padding-vertical @navbar-padding-horizontal;\n  font-size: @font-size-large;\n  line-height: @line-height-computed;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  > img {\n    display: block;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    .navbar > .container &,\n    .navbar > .container-fluid & {\n      margin-left: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-right: @navbar-padding-horizontal;\n  .navbar-vertical-align(34px);\n  background-color: transparent;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  border-radius: @border-radius-base;\n\n  // We remove the `outline` here, but later compensate by attaching `:hover`\n  // styles to `:focus`.\n  &:focus {\n    outline: 0;\n  }\n\n  // Bars\n  .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n    margin-top: 4px;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    display: none;\n  }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n  > li > a {\n    padding-top: 10px;\n    padding-bottom: 10px;\n    line-height: @line-height-computed;\n  }\n\n  @media (max-width: @grid-float-breakpoint-max) {\n    // Dropdowns get custom display when collapsed\n    .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none;\n      > li > a,\n      .dropdown-header {\n        padding: 5px 15px 5px 25px;\n      }\n      > li > a {\n        line-height: @line-height-computed;\n        &:hover,\n        &:focus {\n          background-image: none;\n        }\n      }\n    }\n  }\n\n  // Uncollapse the nav\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin: 0;\n\n    > li {\n      float: left;\n      > a {\n        padding-top: @navbar-padding-vertical;\n        padding-bottom: @navbar-padding-vertical;\n      }\n    }\n  }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  padding: 10px @navbar-padding-horizontal;\n  margin-right: -@navbar-padding-horizontal;\n  margin-left: -@navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  @shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n  .box-shadow(@shadow);\n\n  // Mixin behavior for optimum display\n  .form-inline();\n\n  .form-group {\n    @media (max-width: @grid-float-breakpoint-max) {\n      margin-bottom: 5px;\n\n      &:last-child {\n        margin-bottom: 0;\n      }\n    }\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  .navbar-vertical-align(@input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    .box-shadow(none);\n  }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  .border-top-radius(@navbar-border-radius);\n  .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  .navbar-vertical-align(@input-height-base);\n\n  &.btn-sm {\n    .navbar-vertical-align(@input-height-small);\n  }\n  &.btn-xs {\n    .navbar-vertical-align(22);\n  }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  .navbar-vertical-align(@line-height-computed);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin-right: @navbar-padding-horizontal;\n    margin-left: @navbar-padding-horizontal;\n  }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-left  { .pull-left(); }\n  .navbar-right {\n    .pull-right();\n    margin-right: -@navbar-padding-horizontal;\n\n    ~ .navbar-right {\n      margin-right: 0;\n    }\n  }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  background-color: @navbar-default-bg;\n  border-color: @navbar-default-border;\n\n  .navbar-brand {\n    color: @navbar-default-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-brand-hover-color;\n      background-color: @navbar-default-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-default-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-default-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-hover-color;\n        background-color: @navbar-default-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-active-color;\n        background-color: @navbar-default-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n        background-color: @navbar-default-link-disabled-bg;\n      }\n    }\n\n    // Dropdown menu items\n    // Remove background color from open dropdown\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-active-color;\n        background-color: @navbar-default-link-active-bg;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display when collapsed\n      .open .dropdown-menu {\n        > li > a {\n          color: @navbar-default-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-hover-color;\n            background-color: @navbar-default-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-active-color;\n            background-color: @navbar-default-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-disabled-color;\n            background-color: @navbar-default-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  .navbar-toggle {\n    border-color: @navbar-default-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-default-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-default-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: @navbar-default-border;\n  }\n\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n    color: @navbar-default-link-color;\n    &:hover {\n      color: @navbar-default-link-hover-color;\n    }\n  }\n\n  .btn-link {\n    color: @navbar-default-link-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-link-hover-color;\n    }\n    &[disabled],\n    fieldset[disabled] & {\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n      }\n    }\n  }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: @navbar-inverse-bg;\n  border-color: @navbar-inverse-border;\n\n  .navbar-brand {\n    color: @navbar-inverse-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-brand-hover-color;\n      background-color: @navbar-inverse-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-inverse-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-inverse-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-hover-color;\n        background-color: @navbar-inverse-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-active-color;\n        background-color: @navbar-inverse-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n        background-color: @navbar-inverse-link-disabled-bg;\n      }\n    }\n\n    // Dropdowns\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-active-color;\n        background-color: @navbar-inverse-link-active-bg;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: @navbar-inverse-border;\n        }\n        .divider {\n          background-color: @navbar-inverse-border;\n        }\n        > li > a {\n          color: @navbar-inverse-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-hover-color;\n            background-color: @navbar-inverse-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-active-color;\n            background-color: @navbar-inverse-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-disabled-color;\n            background-color: @navbar-inverse-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n    border-color: @navbar-inverse-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-inverse-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-inverse-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken(@navbar-inverse-bg, 7%);\n  }\n\n  .navbar-link {\n    color: @navbar-inverse-link-color;\n    &:hover {\n      color: @navbar-inverse-link-hover-color;\n    }\n  }\n\n  .btn-link {\n    color: @navbar-inverse-link-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-link-hover-color;\n    }\n    &[disabled],\n    fieldset[disabled] & {\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n      }\n    }\n  }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n  margin-top: ((@navbar-height - @element-height) / 2);\n  margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n  .clearfix();\n}\n.center-block {\n  .center-block();\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n  display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n  position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n  margin-bottom: @line-height-computed;\n  list-style: none;\n  background-color: @breadcrumb-bg;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline-block;\n\n    + li:before {\n      padding: 0 5px;\n      color: @breadcrumb-color;\n      content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n    }\n  }\n\n  > .active {\n    color: @breadcrumb-active-color;\n  }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: @alert-padding;\n  margin-bottom: @line-height-computed;\n  border: 1px solid transparent;\n  border-radius: @alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n    margin-top: 0;\n    color: inherit; // Specified for the h4 to prevent conflicts of changing @headings-color\n  }\n\n  // Provide class for links that match alerts\n  .alert-link {\n    font-weight: @alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n    margin-bottom: 0;\n  }\n\n  > p + p {\n    margin-top: 5px;\n  }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n// The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: (@alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n  color: @text-color;\n  background-color: @background;\n  border-color: @border;\n\n  hr {\n    border-top-color: darken(@border, 5%);\n  }\n\n  .alert-link {\n    color: darken(@text-color, 10%);\n  }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: 700;\n  line-height: 1;\n  color: @label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // Add hover effects, but only for links\n  a& {\n    &:hover,\n    &:focus {\n      color: @label-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for labels in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  .label-variant(@label-default-bg);\n}\n\n.label-primary {\n  .label-variant(@label-primary-bg);\n}\n\n.label-success {\n  .label-variant(@label-success-bg);\n}\n\n.label-info {\n  .label-variant(@label-info-bg);\n}\n\n.label-warning {\n  .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n  .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n  background-color: @color;\n\n  &[href] {\n    &:hover,\n    &:focus {\n      background-color: darken(@color, 10%);\n    }\n  }\n}\n","// stylelint-disable at-rule-no-vendor-prefix\n\n//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  height: @line-height-computed;\n  margin-bottom: @line-height-computed;\n  overflow: hidden;\n  background-color: @progress-bg;\n  border-radius: @progress-border-radius;\n  .box-shadow(inset 0 1px 2px rgba(0, 0, 0, .1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: @font-size-small;\n  line-height: @line-height-computed;\n  color: @progress-bar-color;\n  text-align: center;\n  background-color: @progress-bar-bg;\n  .box-shadow(inset 0 -1px 0 rgba(0, 0, 0, .15));\n  .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  #gradient > .striped();\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n  .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// stylelint-disable value-no-vendor-prefix, selector-max-id\n\n#gradient {\n\n  // Horizontal gradient, from left to right\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n    background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\", argb(@start-color), argb(@end-color))); // IE9 and down\n    background-repeat: repeat-x;\n  }\n\n  // Vertical gradient, from top to bottom\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Opera 12\n    background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\", argb(@start-color), argb(@end-color))); // IE9 and down\n    background-repeat: repeat-x;\n  }\n\n  .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n    background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n    background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    background-repeat: repeat-x;\n  }\n  .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n    background-repeat: no-repeat;\n  }\n  .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n    background-repeat: no-repeat;\n  }\n  .radial(@inner-color: #555; @outer-color: #333) {\n    background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n    background-image: radial-gradient(circle, @inner-color, @outer-color);\n    background-repeat: no-repeat;\n  }\n  .striped(@color: rgba(255, 255, 255, .15); @angle: 45deg) {\n    background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n  }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n  background-color: @color;\n\n  // Deprecated parent class requirement as of v3.2.0\n  .progress-striped & {\n    #gradient > .striped();\n  }\n}\n","// stylelint-disable selector-no-qualifying-type */\n\n//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n    position: relative;\n    float: left;\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  margin-left: -5px; // Offset the first child's margin\n  &:extend(.clearfix all);\n\n  .btn,\n  .btn-group,\n  .input-group {\n    float: left;\n  }\n  > .btn,\n  > .btn-group,\n  > .input-group {\n    margin-left: 5px;\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n    .border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    .box-shadow(none);\n  }\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: @caret-width-large @caret-width-large 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group,\n  > .btn-group > .btn {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    &:extend(.clearfix all);\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -1px;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    .border-top-radius(@btn-border-radius-base);\n    .border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    .border-top-radius(0);\n    .border-bottom-radius(@btn-border-radius-base);\n  }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n  > .btn,\n  > .btn-group {\n    display: table-cell;\n    float: none;\n    width: 1%;\n  }\n  > .btn-group .btn {\n    width: 100%;\n  }\n\n  > .btn-group .dropdown-menu {\n    left: auto;\n  }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n  > .btn,\n  > .btn-group > .btn {\n    input[type=\"radio\"],\n    input[type=\"checkbox\"] {\n      position: absolute;\n      clip: rect(0, 0, 0, 0);\n      pointer-events: none;\n    }\n  }\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &[class*=\"col-\"] {\n    float: none;\n    padding-right: 0;\n    padding-left: 0;\n  }\n\n  .form-control {\n    // Ensure that the input is always above the *appended* addon button for\n    // proper border colors.\n    position: relative;\n    z-index: 2;\n\n    // IE9 fubars the placeholder attribute in text inputs and the arrows on\n    // select elements in input groups. To fix it, we float the input. Details:\n    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n    float: left;\n\n    width: 100%;\n    margin-bottom: 0;\n\n    &:focus {\n      z-index: 3;\n    }\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  font-weight: 400;\n  line-height: 1;\n  color: @input-color;\n  text-align: center;\n  background-color: @input-group-addon-bg;\n  border: 1px solid @input-group-addon-border-color;\n  border-radius: @input-border-radius;\n\n  // Sizing\n  &.input-sm {\n    padding: @padding-small-vertical @padding-small-horizontal;\n    font-size: @font-size-small;\n    border-radius: @input-border-radius-small;\n  }\n  &.input-lg {\n    padding: @padding-large-vertical @padding-large-horizontal;\n    font-size: @font-size-large;\n    border-radius: @input-border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n    margin-top: 0;\n  }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  .border-right-radius(0);\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  .border-left-radius(0);\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping with `white-space` and\n  // `font-size` in combination with `inline-block` on buttons.\n  font-size: 0;\n  white-space: nowrap;\n\n  // Negative margin for spacing, position for bringing hovered/focused/actived\n  // element above the siblings.\n  > .btn {\n    position: relative;\n    + .btn {\n      margin-left: -1px;\n    }\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active {\n      z-index: 2;\n    }\n  }\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child {\n    > .btn,\n    > .btn-group {\n      margin-right: -1px;\n    }\n  }\n  &:last-child {\n    > .btn,\n    > .btn-group {\n      z-index: 2;\n      margin-left: -1px;\n    }\n  }\n}\n",".media {\n  // Proper spacing between instances of .media\n  margin-top: 15px;\n\n  &:first-child {\n    margin-top: 0;\n  }\n}\n\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n.media-body {\n  width: 10000px;\n}\n\n.media-object {\n  display: block;\n\n  // Fix collapse in webkit from max-width: 100% and display: table-cell.\n  &.img-thumbnail {\n    max-width: none;\n  }\n}\n\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n\n.media-middle {\n  vertical-align: middle;\n}\n\n.media-bottom {\n  vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n  // No need to set list-style: none; since .list-group-item is block level\n  padding-left: 0; // reset padding because ul and ol\n  margin-bottom: 20px;\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  // Place the border on the list items and negative margin up for better styling\n  margin-bottom: -1px;\n  background-color: @list-group-bg;\n  border: 1px solid @list-group-border;\n\n  // Round the first and last items\n  &:first-child {\n    .border-top-radius(@list-group-border-radius);\n  }\n  &:last-child {\n    margin-bottom: 0;\n    .border-bottom-radius(@list-group-border-radius);\n  }\n\n  // Disabled state\n  &.disabled,\n  &.disabled:hover,\n  &.disabled:focus {\n    color: @list-group-disabled-color;\n    cursor: @cursor-disabled;\n    background-color: @list-group-disabled-bg;\n\n    // Force color to inherit for custom content\n    .list-group-item-heading {\n      color: inherit;\n    }\n    .list-group-item-text {\n      color: @list-group-disabled-text-color;\n    }\n  }\n\n  // Active class on item itself, not parent\n  &.active,\n  &.active:hover,\n  &.active:focus {\n    z-index: 2; // Place active items above their siblings for proper border styling\n    color: @list-group-active-color;\n    background-color: @list-group-active-bg;\n    border-color: @list-group-active-border;\n\n    // Force color to inherit for custom content\n    .list-group-item-heading,\n    .list-group-item-heading > small,\n    .list-group-item-heading > .small {\n      color: inherit;\n    }\n    .list-group-item-text {\n      color: @list-group-active-text-color;\n    }\n  }\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item,\nbutton.list-group-item {\n  color: @list-group-link-color;\n\n  .list-group-item-heading {\n    color: @list-group-link-heading-color;\n  }\n\n  // Hover state\n  &:hover,\n  &:focus {\n    color: @list-group-link-hover-color;\n    text-decoration: none;\n    background-color: @list-group-hover-bg;\n  }\n}\n\nbutton.list-group-item {\n  width: 100%;\n  text-align: left;\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n","// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n  .list-group-item-@{state} {\n    color: @color;\n    background-color: @background;\n\n    a&,\n    button& {\n      color: @color;\n\n      .list-group-item-heading {\n        color: inherit;\n      }\n\n      &:hover,\n      &:focus {\n        color: @color;\n        background-color: darken(@background, 5%);\n      }\n      &.active,\n      &.active:hover,\n      &.active:focus {\n        color: #fff;\n        background-color: @color;\n        border-color: @color;\n      }\n    }\n  }\n}\n","// stylelint-disable selector-max-type, selector-max-compound-selectors, selector-max-combinators, no-duplicate-selectors\n\n//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n  margin-bottom: @line-height-computed;\n  background-color: @panel-bg;\n  border: 1px solid transparent;\n  border-radius: @panel-border-radius;\n  .box-shadow(0 1px 1px rgba(0, 0, 0, .05));\n}\n\n// Panel contents\n.panel-body {\n  padding: @panel-body-padding;\n  &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n  padding: @panel-heading-padding;\n  border-bottom: 1px solid transparent;\n  .border-top-radius((@panel-border-radius - 1));\n\n  > .dropdown .dropdown-toggle {\n    color: inherit;\n  }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: ceil((@font-size-base * 1.125));\n  color: inherit;\n\n  > a,\n  > small,\n  > .small,\n  > small > a,\n  > .small > a {\n    color: inherit;\n  }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n  padding: @panel-footer-padding;\n  background-color: @panel-footer-bg;\n  border-top: 1px solid @panel-inner-border;\n  .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n  > .list-group,\n  > .panel-collapse > .list-group {\n    margin-bottom: 0;\n\n    .list-group-item {\n      border-width: 1px 0;\n      border-radius: 0;\n    }\n\n    // Add border top radius for first one\n    &:first-child {\n      .list-group-item:first-child {\n        border-top: 0;\n        .border-top-radius((@panel-border-radius - 1));\n      }\n    }\n\n    // Add border bottom radius for last one\n    &:last-child {\n      .list-group-item:last-child {\n        border-bottom: 0;\n        .border-bottom-radius((@panel-border-radius - 1));\n      }\n    }\n  }\n  > .panel-heading + .panel-collapse > .list-group {\n    .list-group-item:first-child {\n      .border-top-radius(0);\n    }\n  }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n  .list-group-item:first-child {\n    border-top-width: 0;\n  }\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n  > .table,\n  > .table-responsive > .table,\n  > .panel-collapse > .table {\n    margin-bottom: 0;\n\n    caption {\n      padding-right: @panel-body-padding;\n      padding-left: @panel-body-padding;\n    }\n  }\n  // Add border top radius for first one\n  > .table:first-child,\n  > .table-responsive:first-child > .table:first-child {\n    .border-top-radius((@panel-border-radius - 1));\n\n    > thead:first-child,\n    > tbody:first-child {\n      > tr:first-child {\n        border-top-left-radius: (@panel-border-radius - 1);\n        border-top-right-radius: (@panel-border-radius - 1);\n\n        td:first-child,\n        th:first-child {\n          border-top-left-radius: (@panel-border-radius - 1);\n        }\n        td:last-child,\n        th:last-child {\n          border-top-right-radius: (@panel-border-radius - 1);\n        }\n      }\n    }\n  }\n  // Add border bottom radius for last one\n  > .table:last-child,\n  > .table-responsive:last-child > .table:last-child {\n    .border-bottom-radius((@panel-border-radius - 1));\n\n    > tbody:last-child,\n    > tfoot:last-child {\n      > tr:last-child {\n        border-bottom-right-radius: (@panel-border-radius - 1);\n        border-bottom-left-radius: (@panel-border-radius - 1);\n\n        td:first-child,\n        th:first-child {\n          border-bottom-left-radius: (@panel-border-radius - 1);\n        }\n        td:last-child,\n        th:last-child {\n          border-bottom-right-radius: (@panel-border-radius - 1);\n        }\n      }\n    }\n  }\n  > .panel-body + .table,\n  > .panel-body + .table-responsive,\n  > .table + .panel-body,\n  > .table-responsive + .panel-body {\n    border-top: 1px solid @table-border-color;\n  }\n  > .table > tbody:first-child > tr:first-child th,\n  > .table > tbody:first-child > tr:first-child td {\n    border-top: 0;\n  }\n  > .table-bordered,\n  > .table-responsive > .table-bordered {\n    border: 0;\n    > thead,\n    > tbody,\n    > tfoot {\n      > tr {\n        > th:first-child,\n        > td:first-child {\n          border-left: 0;\n        }\n        > th:last-child,\n        > td:last-child {\n          border-right: 0;\n        }\n      }\n    }\n    > thead,\n    > tbody {\n      > tr:first-child {\n        > td,\n        > th {\n          border-bottom: 0;\n        }\n      }\n    }\n    > tbody,\n    > tfoot {\n      > tr:last-child {\n        > td,\n        > th {\n          border-bottom: 0;\n        }\n      }\n    }\n  }\n  > .table-responsive {\n    margin-bottom: 0;\n    border: 0;\n  }\n}\n\n\n// Collapsible panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n  margin-bottom: @line-height-computed;\n\n  // Tighten up margin so it's only between panels\n  .panel {\n    margin-bottom: 0;\n    border-radius: @panel-border-radius;\n\n    + .panel {\n      margin-top: 5px;\n    }\n  }\n\n  .panel-heading {\n    border-bottom: 0;\n\n    + .panel-collapse > .panel-body,\n    + .panel-collapse > .list-group {\n      border-top: 1px solid @panel-inner-border;\n    }\n  }\n\n  .panel-footer {\n    border-top: 0;\n    + .panel-collapse .panel-body {\n      border-bottom: 1px solid @panel-inner-border;\n    }\n  }\n}\n\n\n// Contextual variations\n.panel-default {\n  .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n  .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n  .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n  .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n  .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n  .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n  border-color: @border;\n\n  & > .panel-heading {\n    color: @heading-text-color;\n    background-color: @heading-bg-color;\n    border-color: @heading-border;\n\n    + .panel-collapse > .panel-body {\n      border-top-color: @border;\n    }\n    .badge {\n      color: @heading-bg-color;\n      background-color: @heading-text-color;\n    }\n  }\n  & > .panel-footer {\n    + .panel-collapse > .panel-body {\n      border-bottom-color: @border;\n    }\n  }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  text-align: center;\n  list-style: none;\n  &:extend(.clearfix all);\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: @pager-bg;\n      border: 1px solid @pager-border;\n      border-radius: @pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: @pager-hover-bg;\n    }\n  }\n\n  .next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .disabled {\n    > a,\n    > a:hover,\n    > a:focus,\n    > span {\n      color: @pager-disabled-color;\n      cursor: @cursor-disabled;\n      background-color: @pager-bg;\n    }\n  }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: @padding-base-vertical @padding-base-horizontal;\n      margin-left: -1px;\n      line-height: @line-height-base;\n      color: @pagination-color;\n      text-decoration: none;\n      background-color: @pagination-bg;\n      border: 1px solid @pagination-border;\n\n      &:hover,\n      &:focus {\n        z-index: 2;\n        color: @pagination-hover-color;\n        background-color: @pagination-hover-bg;\n        border-color: @pagination-hover-border;\n      }\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        .border-left-radius(@border-radius-base);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius-base);\n      }\n    }\n  }\n\n  > .active > a,\n  > .active > span {\n    &,\n    &:hover,\n    &:focus {\n      z-index: 3;\n      color: @pagination-active-color;\n      cursor: default;\n      background-color: @pagination-active-bg;\n      border-color: @pagination-active-border;\n    }\n  }\n\n  > .disabled {\n    > span,\n    > span:hover,\n    > span:focus,\n    > a,\n    > a:hover,\n    > a:focus {\n      color: @pagination-disabled-color;\n      cursor: @cursor-disabled;\n      background-color: @pagination-disabled-bg;\n      border-color: @pagination-disabled-border;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  > li {\n    > a,\n    > span {\n      padding: @padding-vertical @padding-horizontal;\n      font-size: @font-size;\n      line-height: @line-height;\n    }\n    &:first-child {\n      > a,\n      > span {\n        .border-left-radius(@border-radius);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius);\n      }\n    }\n  }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n\n  .embed-responsive-item,\n  iframe,\n  embed,\n  object,\n  video {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    border: 0;\n  }\n}\n\n// Modifier class for 16:9 aspect ratio\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n\n// Modifier class for 4:3 aspect ratio\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: @well-bg;\n  border: 1px solid @well-border;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .05));\n  blockquote {\n    border-color: #ddd;\n    border-color: rgba(0, 0, 0, .15);\n  }\n}\n\n// Sizes\n.well-lg {\n  padding: 24px;\n  border-radius: @border-radius-large;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: @border-radius-small;\n}\n","// stylelint-disable property-no-vendor-prefix\n\n//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n  float: right;\n  font-size: (@font-size-base * 1.5);\n  font-weight: @close-font-weight;\n  line-height: 1;\n  color: @close-color;\n  text-shadow: @close-text-shadow;\n  .opacity(.2);\n\n  &:hover,\n  &:focus {\n    color: @close-color;\n    text-decoration: none;\n    cursor: pointer;\n    .opacity(.5);\n  }\n\n  // Additional properties for button version\n  // iOS requires the button element instead of an anchor tag.\n  // If you want the anchor version, it requires `href=\"#\"`.\n  // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n  button& {\n    padding: 0;\n    cursor: pointer;\n    background: transparent;\n    border: 0;\n    -webkit-appearance: none;\n    appearance: none;\n  }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: @font-size-small;\n  font-weight: @badge-font-weight;\n  line-height: @badge-line-height;\n  color: @badge-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  background-color: @badge-bg;\n  border-radius: @badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for badges in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n\n  .btn-xs &,\n  .btn-group-xs > .btn & {\n    top: 0;\n    padding: 1px 5px;\n  }\n\n  // Hover state, but only for links\n  a& {\n    &:hover,\n    &:focus {\n      color: @badge-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Account for badges in navs\n  .list-group-item.active > &,\n  .nav-pills > .active > a > & {\n    color: @badge-active-color;\n    background-color: @badge-active-bg;\n  }\n\n  .list-group-item > & {\n    float: right;\n  }\n\n  .list-group-item > & + & {\n    margin-right: 5px;\n  }\n\n  .nav-pills > li > a > & {\n    margin-left: 3px;\n  }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open      - body class for killing the scroll\n// .modal           - container to scroll within\n// .modal-dialog    - positioning shell for the actual modal\n// .modal-content   - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n  overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: @zindex-modal;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n\n  // Prevent Chrome on Windows from adding a focus outline. For details, see\n  // https://github.com/twbs/bootstrap/pull/10951.\n  outline: 0;\n\n  // When fading in the modal, animate it to slide down\n  &.fade .modal-dialog {\n    .translate(0, -25%);\n    .transition-transform(~\"0.3s ease-out\");\n  }\n  &.in .modal-dialog { .translate(0, 0); }\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n  position: relative;\n  background-color: @modal-content-bg;\n  background-clip: padding-box;\n  border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n  border: 1px solid @modal-content-border-color;\n  border-radius: @border-radius-large;\n  .box-shadow(0 3px 9px rgba(0, 0, 0, .5));\n  // Remove focus outline from opened modal\n  outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: @zindex-modal-background;\n  background-color: @modal-backdrop-bg;\n  // Fade for backdrop\n  &.fade { .opacity(0); }\n  &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n  padding: @modal-title-padding;\n  border-bottom: 1px solid @modal-header-border-color;\n  &:extend(.clearfix all);\n}\n// Close icon\n.modal-header .close {\n  margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n  margin: 0;\n  line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n  position: relative;\n  padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n  padding: @modal-inner-padding;\n  text-align: right; // right align buttons\n  border-top: 1px solid @modal-footer-border-color;\n  &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n  // Properly space out buttons\n  .btn + .btn {\n    margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n    margin-left: 5px;\n  }\n  // but override that for button groups\n  .btn-group .btn + .btn {\n    margin-left: -1px;\n  }\n  // and override it for block buttons as well\n  .btn-block + .btn-block {\n    margin-left: 0;\n  }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n  // Automatically set modal's width for larger viewports\n  .modal-dialog {\n    width: @modal-md;\n    margin: 30px auto;\n  }\n  .modal-content {\n    .box-shadow(0 5px 15px rgba(0, 0, 0, .5));\n  }\n\n  // Modal sizes\n  .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n  .modal-lg { width: @modal-lg; }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n//    contenteditable attribute is included anywhere else in the document.\n//    Otherwise it causes space to appear at the top and bottom of elements\n//    that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n//    `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n  &:before,\n  &:after {\n    display: table; // 2\n    content: \" \"; // 1\n  }\n  &:after {\n    clear: both;\n  }\n}\n","// Center-align a block level element\n\n.center-block() {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n","// stylelint-disable font-family-name-quotes, font-family-no-missing-generic-family-keyword\n\n// CSS image replacement\n//\n// Heads up! v3 launched with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (has been removed in v4)\n.hide-text() {\n  font: ~\"0/0\" a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n  .hide-text();\n}\n","// stylelint-disable declaration-no-important\n\n.responsive-visibility() {\n  display: block !important;\n  table&  { display: table !important; }\n  tr&     { display: table-row !important; }\n  th&,\n  td&     { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n  display: none !important;\n}\n","//\n// Misago Global Scaffolding\n// --------------------------------------------------\n\n// Disable horizontal scroll on mobile displays top-most containers\n@media screen and (max-width: @screen-sm-max) {\n  html,\n  body {\n    overflow-x: hidden;\n  }\n}\n\n// top margin utils\n@media screen and (min-width: @screen-md-min) {\n  .md-margin-top-no {\n    margin-top: 0px !important;\n  }\n}\n\n@media screen and (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n  .sm-margin-top {\n    margin-top: @line-height-computed !important;\n  }\n\n  .sm-margin-top-no {\n    margin-top: 0px !important;\n  }\n\n  .sm-margin-top-half {\n    margin-top: @line-height-computed * 0.33 !important;\n  }\n\n  .sm-align-row-buttons {\n    margin-top: @line-height-computed * 0.25 !important;\n  }\n}\n\n@media screen and (max-width: @screen-xs-max) {\n  .xs-margin-top {\n    margin-top: @line-height-computed !important;\n  }\n\n  .xs-margin-top-half {\n    margin-top: @line-height-computed * 0.33 !important;\n  }\n}\n","//\n// Simple flex row util, inspired by toolbar\n// --------------------------------------------------\n\n.flex-row {\n  display: block;\n  margin: 0 floor(@grid-gutter-width * -0.5);\n}\n\n.flex-row-section {\n  align-items: center;\n  display: flex;\n  flex: 1;\n}\n\n.flex-row-section + .flex-row-section {\n  margin-top: @line-height-computed;\n}\n\n.flex-row-col {\n  flex: 1;\n  padding: 0 floor(@grid-gutter-width * 0.5);\n}\n\n@media screen and (min-width: @screen-sm-min) {\n  .flex-row {\n    display: flex;\n    align-items: center;\n  }\n\n  .flex-row-section + .flex-row-section {\n    margin: 0;\n  }\n\n  .flex-row-section,\n  .flex-row-col {\n    flex: 0;\n\n    align-items: center;\n  }\n\n  .flex-row-section.flex-row-section-auto,\n  .flex-row-section.flex-row-section-auto > .flex-row-col {\n    flex: 1;\n  }\n}\n\n.flex-row-col-shrink {\n  flex: 0 !important;\n}\n","//\n// Auth changed message\n// --------------------------------------------------\n\n.auth-message {\n  background-color: @auth-changed-bg;\n  padding: @line-height-computed 0px;\n  width: 100%;\n\n  position: fixed;\n  top: -100%;\n  left: 0px;\n\n  z-index: @zindex-auth-message;\n\n  transition: top 300ms ease;\n\n  &.show {\n    top: 0px;\n    bottom: auto;\n  }\n\n  p {\n    padding: @line-height-computed / 4 0px;\n\n    color: @auth-changed-color;\n  }\n\n  // Small displays\n  @media screen and (max-width: @screen-sm-max) {\n    text-align: center;\n\n    .btn {\n      padding: @padding-large-vertical @padding-large-horizontal;\n\n      font-size: @font-size-large;\n    }\n  }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n.alerts-snackbar {\n  position: fixed;\n  top: -100%;\n  width: 100%;\n  z-index: @zindex-modal + 10;\n\n  text-align: center;\n  font-size: @font-size-large;\n\n  transition: top 300ms ease;\n\n  pointer-events: none;\n\n  &.in {\n    top: 0px;\n    transition: top 200ms ease;\n  }\n\n  p {\n    display: inline-block;\n    border-radius: 0px 0px @border-radius-base @border-radius-base;\n    margin: 0px;\n\n    pointer-events: all;\n  }\n}\n","//\n// Agreement overlay\n// --------------------------------------------------\n\n.agreement-overlay {\n  position: fixed;\n  width: 100%;\n  height: 100%;\n  top: 0px;\n  left: 0px;\n  z-index: @zindex-modal + 10;\n\n  background-color: fadeOut(@modal-backdrop-bg, @modal-backdrop-opacity * 100);\n  overflow-x: scroll;\n\n  .container {\n    max-width: @modal-lg;\n    padding: @line-height-computed @grid-gutter-width;\n  }\n}\n\n.agreement-content {\n  background-color: @modal-content-bg;\n  border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n  border: 1px solid @modal-content-border-color;\n  border-radius: @border-radius-large;\n  .box-shadow(0 3px 9px rgba(0,0,0,0.5));\n  background-clip: padding-box;\n  outline: 0;\n\n  padding: @padding-large-vertical @padding-large-horizontal;\n}\n\n.agreement-header {\n  padding: @padding-large-vertical 0;\n\n  border-bottom: 1px solid @gray-lighter;\n\n  h2 {\n    margin-top: 0;\n  }\n\n  p {\n    margin: 0;\n    padding: 0;\n  }\n}\n\n.agreement-body {\n  padding: @line-height-computed 0;\n\n  p.lead {\n    margin: 0;\n    padding: 0;\n  }\n}\n\n.agreement-footer {\n  .modal-footer();\n\n  padding: @padding-large-vertical 0;\n}\n\n// utility class disabling scroll on body\nbody.agreement-overlay-visible {\n  overflow: hidden;\n}\n","//\n// Misago Loaders\n// --------------------------------------------------\n\n.loader {\n  width: 100%;\n  height: 49px;\n  text-align: center;\n\n  &.loader-spaced {\n    margin: @line-height-computed * 2 0px;\n  }\n}\n\n.loader-spinning-wheel {\n  width: 49px;\n  height: 49px;\n  margin: 0 auto;\n  border: 3px solid @loader-color;\n  border-radius: 50%;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  animation: cssload-spin 575ms infinite linear;\n  -o-animation: cssload-spin 575ms infinite linear;\n  -ms-animation: cssload-spin 575ms infinite linear;\n  -webkit-animation: cssload-spin 575ms infinite linear;\n  -moz-animation: cssload-spin 575ms infinite linear;\n}\n\n@keyframes cssload-spin {\n  100% {\n    transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@-o-keyframes cssload-spin {\n  100% {\n    -o-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@-ms-keyframes cssload-spin {\n  100% {\n    -ms-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@-webkit-keyframes cssload-spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@-moz-keyframes cssload-spin {\n  100% {\n    -moz-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n","//\n// Misago Navbar\n// --------------------------------------------------\n\n// Remove bottom margin from navbar\n.navbar {\n  margin-bottom: 0px;\n}\n\n// Desktop navbar\n.navbar .navbar-full {\n  // Brand\n  .navbar-brand {\n    padding-top: (@navbar-height - @navbar-icon-height) / 2;\n    padding-bottom: (@navbar-height - @navbar-icon-height) / 2;\n\n    font-size: @font-size-base * 1.5;\n\n    & > * {\n      display: inline-block;\n      vertical-align: middle;\n    }\n\n    img {\n      height: @navbar-icon-height;\n      margin-right: @padding-base-horizontal / 2;\n    }\n  }\n\n  .navbar-nav > li > a {\n    font-size: @font-size-base * 1.2;\n  }\n\n  .navbar-icon {\n    display: block;\n    height: @navbar-height;\n    padding: @nav-link-padding;\n    padding-top: (@navbar-height - 28px) / 2;\n    padding-bottom: (@navbar-height - 28px) / 2;\n    position: relative;\n\n    color: @navbar-default-link-color;\n\n    &:hover,\n    &:focus {\n      color: @navbar-default-link-hover-color;\n      background-color: @navbar-default-link-hover-bg;\n    }\n\n    .material-icon {\n      width: 28px;\n      height: 28px;\n\n      font-size: 28px;\n      line-height: 28px;\n    }\n\n    .badge {\n      background-color: @brand-danger;\n      position: absolute;\n\n      top: 6px;\n      right: 6px;\n\n      font-size: 9px;\n    }\n  }\n\n  .open .navbar-icon {\n    &,\n    &:hover,\n    &:focus {\n      background-color: @navbar-default-link-active-bg;\n\n      color: @navbar-default-link-active-color;\n    }\n  }\n\n  // Pull Guest and User menus to right\n  .nav-guest,\n  .nav-user {\n    float: right;\n\n    .navbar-btn {\n      margin-left: @navbar-padding-horizontal;\n    }\n  }\n\n  // User avatar size\n  .nav-user .dropdown-toggle {\n    padding: (@navbar-height - @navbar-avatar-size) / 2;\n\n    img {\n      width: @navbar-avatar-size;\n      height: @navbar-avatar-size;\n    }\n  }\n}\n\n// Compact (mobile) navbar\n.navbar ul.navbar-compact-nav {\n  border-collapse: collapse;\n  display: table;\n  margin: 0px;\n  table-layout: fixed;\n  width: 100%;\n\n  & > li {\n    display: table-cell;\n    width: 100%;\n  }\n\n  & > li > a,\n  & > li > button {\n    background: none;\n    border: none;\n    display: block;\n    padding-top: 13px;\n    padding-bottom: 13px;\n\n    width: 100%;\n\n    color: @navbar-compact-link-color;\n    text-align: center;\n\n    &.active,\n    &:hover,\n    &:focus {\n      color: @navbar-compact-link-hover-color;\n      background-color: @navbar-compact-link-hover-bg;\n    }\n\n    & > img {\n      width: @navbar-compact-item-size;\n      height: @navbar-compact-item-size;\n    }\n  }\n\n  & > li > button {\n    display: inline-block;\n  }\n\n  & > li > a > .material-icon {\n    font-size: @navbar-compact-item-size;\n    line-height: @navbar-compact-item-size;\n  }\n}\n\n// Make navbar's height match compact nav\n@media (max-width: @grid-float-breakpoint) {\n  .navbar.navbar-misago {\n    min-height: auto;\n  }\n}\n\n// Hide compact navbar above breakpoint\n.navbar-misago .navbar-desktop-nav {\n  display: none;\n}\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-misago ul.navbar-compact-nav {\n    display: none;\n  }\n\n  .navbar-misago .navbar-desktop-nav {\n    display: block;\n  }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n.nav-side > a {\n  & > .material-icon {\n    margin: -5px;\n    margin-right: @line-height-computed / 2;\n\n    position: relative;\n    bottom: 1px;\n\n    width: 24px;\n    height: 24px;\n\n    font-size: 24px;\n    line-height: 24px;\n  }\n\n  .badge {\n    position: relative;\n    top: 1px;\n  }\n}\n\n.nav-pills > li > a {\n  display: flex;\n  align-items: center;\n  padding: @nav-pills-padding-vertical @nav-pills-padding-horizontal;\n\n  .material-icon {\n    margin-right: 3px;\n  }\n\n  &,\n  &:link,\n  &:visited {\n    background-color: @nav-pills-bg;\n    color: @nav-pills-color;\n  }\n\n  &:focus,\n  &:hover,\n  &:active {\n    background-color: @nav-pills-hover-bg;\n    color: @nav-pills-hover-color;\n  }\n}\n\n.nav-pills > li.active > a {\n  &,\n  &:link,\n  &:visited,\n  &:focus,\n  &:hover,\n  &:active {\n    background-color: @nav-pills-active-bg;\n    color: @nav-pills-active-color;\n  }\n}\n\n.nav-container {\n  .btn-block {\n    margin-bottom: @line-height-computed;\n  }\n\n  .nav {\n    margin-right: floor(@line-height-computed / -2);\n    margin-bottom: floor(@line-height-computed * 1.5);\n  }\n\n  li {\n    margin-right: floor(@line-height-computed / 2);\n    margin-bottom: floor(@line-height-computed / 2);\n  }\n}\n","// Breadcrumbs component\n\n.breadcrumbs {\n  display: block;\n\n  padding: 0;\n  margin-bottom: @line-height-computed / 2;\n}\n\n.breadcrumbs-item {\n  display: inline-block;\n  margin-right: @breadcrumbs-gutter;\n  margin-bottom: @line-height-computed / 2;\n  padding: 0;\n  list-style: none;\n}\n\n.breadcrumbs-item a {\n  display: flex;\n  align-items: center;\n  text-decoration: none;\n\n  &,\n  &:visited {\n    color: @breadcrumbs-color;\n  }\n\n  &:hover,\n  &:focus {\n    color: @breadcrumbs-color-hover;\n\n    .breadcrumbs-item-name {\n      text-decoration: underline;\n    }\n  }\n\n  &:active {\n    color: @breadcrumbs-color-active;\n  }\n}\n\n.breadcrumbs-item .material-icon {\n  margin-right: 4px;\n}\n","//\n// Material Icons\n// --------------------------------------------------\n\n@font-face {\n  font-family: \"Material Icons\";\n  font-style: normal;\n  font-weight: 400;\n  src: url(../fonts/MaterialIcons-Regular.eot); /* For IE6-8 */\n  src: local(\"Material Icons\"), local(\"MaterialIcons-Regular\"),\n    url(../fonts/MaterialIcons-Regular.woff2) format(\"woff2\"),\n    url(../fonts/MaterialIcons-Regular.woff) format(\"woff\"),\n    url(../fonts/MaterialIcons-Regular.ttf) format(\"truetype\");\n}\n\n.material-icon {\n  font-family: \"Material Icons\";\n  font-weight: normal;\n  font-style: normal;\n  display: inline-block;\n  width: 1em;\n  height: 1em;\n  line-height: 1;\n  text-align: center;\n  text-transform: none;\n  letter-spacing: normal;\n  vertical-align: middle;\n  word-wrap: normal;\n  white-space: nowrap;\n  direction: ltr;\n\n  /* Support for all WebKit browsers. */\n  -webkit-font-smoothing: antialiased;\n  /* Support for Safari and Chrome. */\n  text-rendering: optimizeLegibility;\n\n  /* Support for Firefox. */\n  -moz-osx-font-smoothing: grayscale;\n\n  /* Support for IE. */\n  font-feature-settings: \"liga\";\n}\n","//\n// Misago Modals\n// --------------------------------------------------\n\n// Modal toolbar\n.modal-toolbar {\n  background: @gray-lighter;\n  border-bottom: 1px solid @modal-header-border-color;\n  overflow: auto;\n  padding: @padding-base-vertical @padding-base-horizontal;\n\n  .pull-left {\n    margin-right: 8px;\n  }\n\n  p {\n    padding: @padding-small-vertical 0px;\n    margin-bottom: 0px;\n  }\n}\n\n// Modals displaying messages\n\n// Small displays\n@media screen and (max-width: @screen-sm-max) {\n  .modal-message {\n    text-align: center;\n\n    .message-icon {\n      margin: @line-height-computed * 1.5;\n\n      .material-icon {\n        font-size: @message-page-icon-size * 2;\n      }\n    }\n  }\n}\n\n// Full displays\n@media screen and (min-width: @screen-md-min) {\n  .modal-message {\n    .modal-body {\n      padding-top: @line-height-computed;\n      padding-bottom: @line-height-computed * 1.5;\n    }\n\n    .message-icon {\n      float: left;\n      position: relative;\n      left: 7px;\n\n      .material-icon {\n        font-size: @line-height-computed * 2.5;\n      }\n    }\n\n    .message-body {\n      margin-left: @line-height-computed * 3.75;\n      margin-top: @line-height-computed * 0.6 - 2px;\n\n      p {\n        margin-top: @line-height-computed;\n      }\n\n      .lead {\n        margin-top: 0px;\n        margin-bottom: 0px;\n      }\n    }\n  }\n}\n\n// Modal loader\n.modal-loader {\n  padding: @line-height-computed * 2.5 0px;\n\n  .loader {\n    width: 100%;\n    height: @loader-size;\n    text-align: center;\n  }\n\n  .loader-spinning-wheel {\n    width: @loader-size;\n    height: @loader-size;\n  }\n}\n\n// Modal form\n.modal-body .form-group {\n  min-height: 34px;\n}\n\n// Errors modal\n.list-item-errors {\n  margin-bottom: @line-height-computed;\n}\n\n.list-errored-items li:last-child .list-item-errors {\n  margin-bottom: 0px;\n}\n\n// Post likes modal\n.modal-post-likers {\n  .media-list {\n    margin: 0px;\n  }\n\n  .item-title {\n    display: block;\n  }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n// Material feedback icon\n.has-feedback .material-icon.form-control-feedback {\n  top: @padding-base-vertical;\n  right: @padding-base-horizontal * 2;\n\n  font-size: @line-height-base;\n  line-height: @line-height-base;\n}\n\n// Well done\n.well.well-form.well-done {\n  font-size: @font-size-large;\n  text-align: center;\n\n  .message-icon {\n    margin-bottom: @line-height-computed / 2;\n\n    font-size: @font-size-large * 5;\n    line-height: @font-size-large * 5;\n  }\n\n  .message-body {\n    margin-bottom: @line-height-computed;\n  }\n}\n\n// Noscript well\n.well.well-form.well-noscript {\n  font-size: @font-size-large;\n  text-align: center;\n\n  .message-icon {\n    margin-bottom: @line-height-computed / 2;\n\n    font-size: @font-size-large * 5;\n    line-height: @font-size-large * 5;\n  }\n}\n","//\n// Inputs\n// --------------------------------------------------\n\n// Button-based inputs\n.btn.btn-yes-no,\n.btn.btn-select {\n  background: transparent;\n  border: 1px solid darken(@gray-lighter, 10%);\n\n  .material-icon {\n    margin: -4px 0px;\n    margin-right: 8px;\n\n    position: relative;\n    bottom: 1px;\n\n    width: 20px;\n    height: 20px;\n\n    font-size: 20px;\n    line-height: 20px;\n  }\n}\n\n@media screen and (max-width: @screen-xs-max) {\n  .btn.btn-yes-no {\n    width: 100%;\n    overflow: auto;\n\n    .material-icon {\n      float: left;\n      margin-top: 1px;\n    }\n\n    .btn-text {\n      display: block;\n\n      margin-left: 30px;\n\n      text-align: left;\n      white-space: normal;\n    }\n  }\n}\n\n// Hidden file input\ninput.hidden-file-upload {\n  position: absolute;\n  top: -9999px;\n  left: -9999px;\n}\n\n// Search field\n.form-search {\n  position: relative;\n\n  .form-control {\n    padding-right: 30px;\n  }\n\n  .material-icon {\n    position: absolute;\n    top: 5px;\n    right: 5px;\n\n    color: @gray-light;\n    font-size: 24px;\n    line-height: 24px;\n\n    pointer-events: none;\n  }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n// Button loading style\n.btn.btn-loading {\n  &,\n  &:link,\n  &:active,\n  &:visited,\n  &:hover,\n  &:focus {\n    // make text transparent, but still take place in button\n    color: transparent;\n\n    // position loader over the text\n    .loader {\n      height: 20px;\n      margin-top: -20px;\n\n      & > div {\n        width: 20px;\n        height: 20px;\n      }\n    }\n  }\n\n  &.btn-default .loader > div {\n    border-top-color: @btn-default-color;\n    border-bottom-color: @btn-default-color;\n  }\n\n  &.btn-primary .loader > div {\n    border-top-color: @btn-primary-color;\n    border-bottom-color: @btn-primary-color;\n  }\n\n  &.btn-success .loader > div {\n    border-top-color: @btn-success-color;\n    border-bottom-color: @btn-success-color;\n  }\n\n  &.btn-info .loader > div {\n    border-top-color: @btn-info-color;\n    border-bottom-color: @btn-info-color;\n  }\n\n  &.btn-warning .loader > div {\n    border-top-color: @btn-warning-color;\n    border-bottom-color: @btn-warning-color;\n  }\n\n  &.btn-danger .loader > div {\n    border-top-color: @btn-danger-color;\n    border-bottom-color: @btn-danger-color;\n  }\n}\n\n// Icons in buttons\n.btn .material-icon {\n  margin-right: 3px;\n  position: relative;\n  bottom: 1px;\n}\n\n// Btn with larger icon\n.btn-icon .material-icon {\n  margin: -1px -4px;\n\n  width: 20px;\n  height: 20px;\n\n  font-size: 20px;\n  line-height: 20px;\n}\n\n.btn-icon .btn-text {\n  margin-left: @padding-small-horizontal;\n}\n\n.btn-icon .btn-text-left {\n  margin-right: @padding-small-horizontal;\n}\n\n// Block btn icon\n.btn-block.btn-icon {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n","//\n// Dropdowns\n// --------------------------------------------------\n\n// Unify .btn-link appearance with anchors\n.dropdown-menu > li > a,\n.dropdown-menu > li > .btn-link,\n.modal-menu > li > a,\n.modal-menu > li > .btn-link {\n  display: block;\n  border: none;\n  clear: both;\n  float: none;\n  padding: 6px 20px;\n  width: 100%;\n\n  color: @dropdown-link-color;\n  font-weight: normal;\n  line-height: @line-height-base;\n  text-align: left;\n  white-space: nowrap;\n\n  &:hover,\n  &:focus {\n    background-color: @dropdown-link-hover-bg;\n\n    color: @dropdown-link-hover-color;\n    text-decoration: none;\n  }\n\n  &:active {\n    background-color: @dropdown-link-hover-bg;\n\n    color: @dropdown-link-hover-color;\n    text-decoration: none;\n  }\n\n  &:disabled {\n    color: fadeOut(@dropdown-link-color, 50);\n  }\n\n  // Set material icons in dropdown menus\n  .material-icon {\n    margin: -2px 0px;\n    margin-right: @line-height-computed * 0.35;\n\n    position: relative;\n    bottom: 1px;\n\n    font-size: 18px;\n  }\n\n  .badge {\n    float: right;\n\n    position: relative;\n    top: 1px;\n  }\n}\n\n// Extra overrides for modal nav\n.modal-menu {\n  margin: @line-height-computed 0px;\n  padding: 0px;\n}\n\n.modal-menu > li {\n  margin: @line-height-computed / 3 0px;\n  padding: 0px;\n\n  list-style: none;\n}\n\n// Bump min dropdown width to 210px\n.dropdown-menu {\n  min-width: 210px;\n}\n\n// Dropdown footer\n.dropdown-menu .dropdown-footer {\n  padding: 6px 20px;\n}\n\n// Dropdown buttons container\n.dropdown-menu .dropdown-buttons {\n  padding: 2px 20px;\n  padding-bottom: 7px;\n\n  .btn {\n    margin: 4px 0px;\n  }\n}\n\n// Navbar's dropdown\n.mobile-dropdown {\n  position: relative;\n}\n\n.mobile-dropdown.open > .dropdown-menu,\n.compact-nav.open > .dropdown-menu {\n  border: none;\n  border-radius: 0;\n\n  display: block;\n  margin: 0px;\n  width: 100%;\n}\n\n// Guest menu\n.user-dropdown .guest-preview {\n  text-align: center;\n\n  .row {\n    margin: 0px;\n  }\n}\n\n// User menu\n.navbar .user-dropdown {\n  width: 240px;\n}\n\n.user-dropdown .dropdown-header {\n  padding: 6px 20px;\n\n  font-size: @font-size-large;\n\n  strong {\n    font-weight: normal;\n  }\n}\n\n// Category picker\n.category-picker .dropdown-menu {\n  // Make category picker wider on desktops\n  @media screen and (min-width: @screen-md-min) {\n    width: 300px;\n  }\n}\n\n.category-picker .dropdown-menu > li > .btn-link {\n  white-space: normal;\n  word-wrap: break-word;\n}\n\n// Stick to bottom on mobile\n@media screen and (max-width: @screen-xs-max) {\n  .dropdown-menu.stick-to-bottom {\n    border-radius: 0px;\n    border: none;\n\n    max-height: 300px;\n    overflow-y: auto;\n\n    .box-shadow(0px 0px @line-height-computed * 1.5 @gray-light);\n\n    clear: both;\n    top: auto;\n    width: 100%;\n\n    position: fixed;\n    bottom: 0px;\n\n    margin: 0px;\n    padding: 0px;\n\n    padding-bottom: @line-height-computed;\n\n    li {\n      float: none;\n\n      margin: 0px;\n\n      clear: both;\n\n      & > a,\n      & > .btn {\n        padding-top: @line-height-computed * 0.75;\n        padding-bottom: @line-height-computed * 0.75;\n\n        border-bottom: 1px solid @dropdown-divider-bg;\n      }\n    }\n  }\n}\n","// Category label is category on threads list\n.category-label {\n  border-radius: 0.25em;\n  padding: 0.2em 0.6em 0.3em;\n}\n\n.category-label-color,\n.category-label-color:link,\n.category-label-color:focus,\n.category-label-color:active,\n.category-label-color:visited,\n.category-label-color:hover {\n  color: @category-label-color;\n}\n\n.category-label-no-color,\n.category-label-no-color:link,\n.category-label-no-color:focus,\n.category-label-no-color:active,\n.category-label-no-color:visited,\n.category-label-no-color:hover {\n  background-color: @category-label-default-bg;\n  color: @category-label-default-color;\n}\n",".thread-flags {\n  display: flex;\n  align-items: center;\n\n  opacity: @thread-flag-icon-opacity;\n\n  margin: 0;\n  padding: 0;\n\n  li {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    width: @thread-flag-block-size;\n    height: @thread-flag-block-size;\n\n    border-radius: @border-radius-small;\n    list-style-type: none;\n\n    cursor: default;\n  }\n\n  li + li {\n    margin-left: @grid-gutter-width / 4;\n  }\n\n  .material-icon {\n    font-size: @thread-flag-icon-size;\n    line-height: @thread-flag-icon-size;\n  }\n}\n\n.thread-flag-pinned-globally {\n  color: @thread-flag-pinned-globally-color;\n  background: @thread-flag-pinned-globally-bg;\n}\n\n.thread-flag-pinned-locally {\n  color: @thread-flag-pinned-locally-color;\n  background: @thread-flag-pinned-locally-bg;\n}\n\n.thread-flag-answered {\n  color: @thread-flag-answered-color;\n  background: @thread-flag-answered-bg;\n}\n\n.thread-flag-poll {\n  color: @thread-flag-poll-color;\n  background: @thread-flag-poll-bg;\n}\n\n.thread-flag-unapproved {\n  color: @thread-flag-unapproved-color;\n  background: @thread-flag-unapproved-bg;\n}\n\n.thread-flag-closed {\n  color: @thread-flag-closed-color;\n  background: @thread-flag-closed-bg;\n}\n\n.thread-flag-hidden {\n  color: @thread-flag-hidden-color;\n  background: @thread-flag-hidden-bg;\n}\n",".threads-replies {\n  display: flex;\n  align-items: center;\n\n  color: @thread-replies-color;\n  font-size: @thread-replies-size;\n  font-weight: bold;\n\n  .material-icon {\n    margin-right: @grid-gutter-width / 4;\n    transform: matrix(-1, 0, 0, 1, 0, 0);\n  }\n}\n",".thread-user-card {\n  display: flex;\n  align-items: center;\n}\n\n.thread-user-card-media {\n  flex: 0;\n  margin-right: floor(@grid-gutter-width * .5;);\n\n  img {\n    border-radius: @border-radius-small;\n  }\n}\n\n.thread-user-card-body {\n  flex: 1;\n\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n","//\n// Search Dropdown\n// --------------------------------------------------\n\n// Default size and position for search dropdown\n.navbar-misago .dropdown-menu.dropdown-search-results {\n  margin: 0px;\n  padding-top: 0px;\n  width: 400px;\n  left: auto;\n  right: 0px;\n}\n\n// Search input\n.dropdown-search-results .form-group {\n  margin: 0px;\n  padding: @padding-base-horizontal;\n}\n\n// Message\nli.dropdown-search-message {\n  text-align: center;\n}\n\n// Thread result\n.dropdown-search-thread {\n  width: 100%;\n\n  h5 {\n    margin: 0px;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n\n  small {\n    display: block;\n    margin: 0px;\n    margin-top: 4px;\n  }\n}\n","//\n// Page Header\n// --------------------------------------------------\n\n// Remove margins from header\n.page-header {\n  margin: 0;\n  margin-top: floor(@line-height-computed * 0.5);\n}\n\n// Add padding to header's banner and message\n.page-header-banner-bg-overlay {\n  padding: @line-height-computed 0;\n}\n\n// Don't rely on header's margins for spacing, force word break\n.page-header h1 {\n  margin: 0;\n\n  overflow-wrap: break-word;\n}\n","// Page container is .container element for page content (excluding header)\n\n.page-container {\n  padding-top: @line-height-computed;\n}\n","//\n// Panels\n// --------------------------------------------------\n\n// Messages\n@media screen and (max-width: @screen-sm-max) {\n  .panel-message-body {\n    text-align: center;\n\n    .message-icon {\n      margin: @line-height-computed * 1.5;\n\n      .material-icon {\n        font-size: @message-page-icon-size * 2;\n      }\n    }\n  }\n}\n\n// Full displays\n@media screen and (min-width: @screen-md-min) {\n  .panel-message-body {\n    padding: @line-height-computed;\n    padding-bottom: @line-height-computed * 1.5;\n\n    .message-icon {\n      float: left;\n\n      .material-icon {\n        font-size: @line-height-computed * 2.5;\n      }\n    }\n\n    .message-body {\n      margin-left: @line-height-computed * 3.25;\n      margin-top: @line-height-computed * 0.6 - 2px;\n\n      .lead {\n        margin-bottom: 0px;\n      }\n\n      .help-block {\n        margin-top: @line-height-computed * 0.66;\n      }\n    }\n  }\n}\n\n// Loading\n.panel-body-loading {\n  padding: 0px;\n\n  text-align: center;\n}\n","//\n// Forum Footer\n// --------------------------------------------------\n\n// Superbasic spacing and layout for easy overriding\n.misago-footer {\n  margin-top: @line-height-computed * 1.5;\n  margin-bottom: @line-height-computed * 2.5;\n\n  .footer-content {\n    border-top: 1px solid @page-header-border-color;\n    padding-top: @line-height-computed * 1.5;\n  }\n}\n\n// Position \"enable JS!\" message's icon\n.misago-footer .noscript-message .material-icon {\n  position: relative;\n  bottom: 1px;\n\n  font-size: @font-size-large;\n}\n","//\n// UI Preview\n// --------------------------------------------------\n\n// Animation\n.ui-preview {\n  color: @ui-preview;\n\n  .animation(ui-preview-animation @ui-preview-frequency linear infinite);\n}\n\n@keyframes ui-preview-animation {\n  0% {\n    .opacity(@ui-preview-in);\n  }\n  50% {\n    .opacity(@ui-preview-out);\n  }\n  100% {\n    .opacity(@ui-preview-in);\n  }\n}\n\n// Text\n.ui-preview-text {\n  background: @ui-preview;\n  border-radius: 100px;\n  display: inline-block;\n  height: @font-size-base;\n\n  position: relative;\n  top: (@line-height-computed - @font-size-base) / 2;\n}\n\n.ui-preview-paragraph {\n  .ui-preview-text {\n    margin-right: 6px;\n\n    &:last-child {\n      margin-right: 0px;\n    }\n  }\n}\n\n// Image\n.ui-preview-img {\n  background: @ui-preview;\n  border-radius: @border-radius-base + 1px;\n}\n","//\n// Misago pager\n// --------------------------------------------------\n\n.pager-undercontent {\n  margin-top: @line-height-computed * -1;\n}\n\n// \"Load more\" button\n.pager-more {\n  text-align: center;\n}\n\n// Large displays\n@media screen and (min-width: @screen-md-min) {\n  .pager-more .btn {\n    padding-left: @line-height-computed;\n    padding-right: @line-height-computed;\n  }\n}\n","//\n// Misago pagination\n// --------------------------------------------------\n\n.misago-pagination {\n  display: flex;\n\n  .btn {\n    display: block;\n    width: 100%;\n  }\n\n  .btn + .btn {\n    margin-left: @grid-gutter-width;\n  }\n}\n\n// Make it full width on small screens (in toolbars)\n@media screen and (max-width: @screen-xs-max) {\n  .toolbar-item .misago-pagination {\n    flex: 1;\n  }\n}\n","//\n// Poll\n// --------------------------------------------------\n\n.panel-poll h2 {\n  margin-top: 0px;\n}\n\n.poll-select-choice .btn {\n  &,\n  &:active,\n  &:focus,\n  &:hover {\n    background: transparent;\n    border: transparent;\n    .box-shadow(none);\n\n    margin: @padding-base-vertical 0px;\n    padding: 0px;\n    padding-left: @padding-base-vertical;\n\n    outline: none;\n\n    text-align: left;\n  }\n\n  .material-icon {\n    margin-right: @padding-base-vertical;\n\n    height: 28px;\n    width: 28px;\n\n    font-size: 28px;\n    line-heigh: 28px;\n\n    color: darken(@gray-lighter, 10%);\n  }\n\n  &.btn-selected .material-icon {\n    color: @brand-primary;\n  }\n}\n\n.poll-help {\n  font-size: @font-size-small;\n}\n\n.poll-chart-selected .material-icon {\n  margin-right: 4px;\n\n  position: relative;\n  bottom: 1px;\n\n  height: 14px;\n  width: 14px;\n\n  color: @brand-success;\n  font-size: 14px;\n  line-heigh: 14px;\n}\n\n.poll-options {\n  margin-bottom: 0px;\n\n  @media screen and (max-width: @screen-xs-max) {\n    margin-top: @padding-base-vertical * -1;\n\n    .btn {\n      margin: @padding-base-vertical 0px;\n    }\n  }\n}\n","//\n// Misago User Status\n// --------------------------------------------------\n\n// Colors\n.user-status {\n  &.user-banned .status-icon {\n    color: @user-status-banned;\n  }\n\n  &.user-online .status-icon {\n    color: @user-status-online;\n  }\n\n  &.user-offline .status-icon {\n    color: @user-status-offline;\n  }\n}\n","//\n// User Card\n// --------------------------------------------------\n\n// Center card's content on larger displays\n.user-card {\n  @media screen and (min-width: @screen-sm-min) {\n    text-align: center;\n  }\n}\n\n// Max out small avatar's width\n.user-card-small-avatar img {\n  width: 100%;\n  height: auto;\n}\n\n// Toggle avatar visibility\n@media screen and (min-width: @screen-sm-min) {\n  .user-card-small-avatar {\n    display: none;\n  }\n}\n\n@media screen and (max-width: @screen-xs-max) {\n  .user-card-avatar {\n    display: none;\n  }\n}\n","//\n// Misago Toolbar\n// --------------------------------------------------\n\n.toolbar {\n  display: block;\n  margin: 0 floor(@grid-gutter-width * -0.5);\n}\n\n.toolbar-section {\n  justify-items: center;\n  display: flex;\n  flex: 1;\n  margin-bottom: @line-height-computed;\n}\n\n.toolbar-item {\n  flex: 1;\n  padding: 0 floor(@grid-gutter-width * 0.5);\n\n  h3,\n  p {\n    margin: 0;\n  }\n}\n\n.toolbar-item-shrink {\n  flex: 0;\n}\n\n.toolbar-spacer {\n  display: none;\n}\n\n@media screen and (min-width: @screen-sm-min) {\n  .toolbar {\n    display: flex;\n  }\n\n  .toolbar-section,\n  .toolbar-item {\n    flex: 0;\n\n    align-items: center;\n  }\n\n  .toolbar-section.toolbar-section-auto,\n  .toolbar-section.toolbar-section-auto .toolbar-item {\n    flex: 1;\n  }\n\n  .toolbar-spacer {\n    display: block;\n    flex: 1;\n  }\n\n  .toolbar-item .form-search {\n    width: 250px;\n  }\n}\n\n// Center paragraph of text on portrait phones\n// Used for pagination messages\n@media screen and (max-width: @screen-xs-max) {\n  .toolbar-item p {\n    text-align: center;\n  }\n}\n","//\n// Typography\n// --------------------------------------------------\n\nabbr {\n  border: none !important;\n}\n\n.item-title {\n  color: @text-color;\n  font-weight: bold;\n  text-decoration: none;\n}\n\na.item-title {\n  &:link,\n  &:active,\n  &:visited,\n  &:hover {\n    color: @text-color;\n    font-weight: bold;\n  }\n\n  &:hover {\n    text-decoration: underline;\n  }\n}\n\n.message-line {\n  text-align: center;\n\n  .material-icon {\n    margin-right: @line-height-computed / 3;\n\n    font-size: 20px;\n    line-height: 20px;\n\n    height: 20px;\n    width: 20px;\n  }\n}\n\n.text-ellipsis {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n","//\n// Markup styles\n// --------------------------------------------------\n\n// Force word wrap for user text\n.misago-markup {\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6,\n  p {\n    word-wrap: break-word;\n  }\n}\n\n// Add upper margins for headers\n.misago-markup {\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    margin-top: @line-height-computed * 2;\n  }\n}\n\n// Even out blocks\n.misago-markup > *,\n.misago-markup blockquote > * {\n  margin: @line-height-computed 0px;\n\n  &:first-child {\n    margin-top: 0px;\n  }\n\n  &:last-child {\n    margin-bottom: 0px;\n  }\n}\n\n// Downscale images so they don't expand area\n.misago-markup img {\n  max-width: 100%;\n  max-height: 500px;\n}\n\n// Make quotes stand out a little\n.misago-markup .quote-block,\n.misago-markup blockquote {\n  background: @gray-lighter;\n  border: none;\n\n  font-size: @font-size-base;\n\n  .quote-heading {\n    border-bottom: 1px solid darken(@gray-lighter, 8%);\n    padding: (@line-height-computed / 2) @line-height-computed;\n\n    font-size: @font-size-small;\n    font-weight: bold;\n  }\n}\n\n.misago-markup > .quote-block,\n.misago-markup > blockquote {\n  border: 1px solid darken(@gray-lighter, 8%);\n}\n\n.misago-markup .quote-body {\n  background: @body-bg;\n  margin: 0px;\n  padding: @line-height-computed;\n\n  & > .quote-block,\n  & > blockquote {\n    border: 1px solid darken(@gray-lighter, 8%);\n  }\n}\n\n// Style spoilers\n.misago-markup .spoiler-block {\n  background: @gray-lighter;\n  border: none;\n\n  font-size: @font-size-base;\n}\n\n.misago-markup > .spoiler-block {\n  border: 1px solid darken(@gray-lighter, 8%);\n  position: relative;\n}\n\n.misago-markup .spoiler-body {\n  background: @body-bg;\n  margin: 0px;\n  padding: @line-height-computed;\n}\n\n.misago-markup .spoiler-overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: @body-bg;\n}\n\n.misago-markup .spoiler-block.revealed .spoiler-overlay {\n  display: none;\n}\n\n// Add bullets to lists\n.misago-markup ul {\n  list-style-type: square;\n\n  li {\n    list-style-type: square;\n  }\n}\n\n.misago-markup ol {\n  list-style-type: decimal;\n\n  li {\n    list-style-type: decimal;\n  }\n}\n\n// Expand code blocks a little\n.misago-markup pre {\n  background: #eee;\n  border: none;\n  padding: @padding-large-vertical;\n  overflow: hidden;\n\n  color: #000;\n\n  code.hljs {\n    margin: @padding-large-vertical * -1;\n    padding: ((@line-height-computed - 1) / 2);\n  }\n}\n","//\n// Change Avatar Modal\n// --------------------------------------------------\n\n// Index\n.modal-change-avatar .modal-avatar-index {\n  .avatar-preview {\n    border-radius: @border-radius-large;\n    margin: 0px auto;\n    overflow: hidden;\n    position: relative;\n\n    width: 200px;\n    height: 200px;\n\n    .loader {\n      display: none;\n\n      position: absolute;\n      top: 50px;\n      height: 100px;\n\n      .loader-spinning-wheel {\n        border-width: 10px;\n        border-color: #fff;\n        border-left-color: transparent;\n        border-right-color: transparent;\n\n        width: 100px;\n        height: 100px;\n      }\n    }\n\n    &.preview-loading {\n      img {\n        .opacity(0.33);\n      }\n\n      .loader {\n        display: block;\n      }\n    }\n\n    @media (max-width: (@grid-float-breakpoint - 1)) {\n      margin-bottom: @line-height-computed;\n\n      width: 150px;\n      height: 150px;\n\n      img {\n        width: 150px;\n        height: 150px;\n      }\n\n      .loader {\n        top: 25px;\n        height: 100px;\n\n        .loader-spinning-wheel {\n          width: 100px;\n          height: 100px;\n        }\n      }\n    }\n  }\n\n  .btn {\n    text-align: left;\n  }\n}\n\n// Upload\n.modal-change-avatar .modal-avatar-upload {\n  text-align: center;\n\n  .btn-pick-file {\n    background: transparent;\n    border: 2px solid @gray-lighter;\n    border-radius: @border-radius-large;\n    padding: @padding-large-vertical @padding-large-horizontal * 1.5;\n    .box-shadow(none);\n\n    color: @gray-light;\n    font-size: @font-size-large;\n    text-align: center;\n\n    & > .material-icon {\n      display: block;\n      margin: 0px auto;\n      margin-bottom: @line-height-computed * 0.66;\n\n      font-size: @line-height-computed * 2.5;\n      width: @line-height-computed * 2.5;\n      height: @line-height-computed * 2.5;\n    }\n\n    &:hover,\n    &:active {\n      border-color: @brand-primary;\n      color: @brand-primary;\n    }\n  }\n\n  .text-muted {\n    margin-top: @line-height-computed * 0.66;\n  }\n\n  .upload-progress {\n    img {\n      border-radius: @border-radius-base;\n      margin-bottom: @line-height-computed;\n\n      max-height: 80px;\n      width: auto;\n    }\n\n    .progress {\n      width: 70%;\n      margin: 0px auto;\n    }\n  }\n}\n\n// Crop\n.modal-avatar-crop .crop-form {\n  margin: 0px auto;\n\n  .cropit-image-zoom-input {\n    margin-top: @line-height-computed / 2;\n\n    // removes default webkit styles\n    -webkit-appearance: none;\n\n    // fix for FF unable to apply focus style bug\n    border: 1px solid white;\n\n    // required for proper track sizing in FF\n    width: 100%;\n\n    &::-webkit-slider-runnable-track {\n      width: 100%;\n      height: 8px;\n      background: @gray-lighter;\n      border: none;\n      border-radius: 3px;\n    }\n\n    &::-webkit-slider-thumb {\n      -webkit-appearance: none;\n      border: none;\n      height: 20px;\n      width: 20px;\n      border-radius: 50%;\n      background: @gray-light;\n      margin-top: -6px;\n    }\n\n    &:focus {\n      outline: none;\n    }\n\n    &:focus::-webkit-slider-runnable-track {\n      background: @gray-lighter;\n    }\n\n    &::-moz-range-track {\n      width: 100%;\n      height: 8px;\n      background: @gray-lighter;\n      border: none;\n      border-radius: 4px;\n    }\n\n    &::-moz-range-thumb {\n      border: none;\n      height: 20px;\n      width: 20px;\n      border-radius: 50%;\n      background: @gray-light;\n    }\n\n    /*hide the outline behind the border*/\n    &:-moz-focusring {\n      outline: 1px solid white;\n      outline-offset: -1px;\n    }\n\n    &::-ms-track {\n      width: 100%;\n      height: 8px;\n\n      /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */\n      background: transparent;\n\n      /*leave room for the larger thumb to overflow with a transparent border */\n      border-color: transparent;\n      border-width: 8px 0;\n\n      /*remove default tick marks*/\n      color: transparent;\n    }\n\n    &::-ms-fill-lower {\n      background: @gray-lighter;\n      border-radius: 16px;\n    }\n\n    &::-ms-fill-upper {\n      background: @gray-lighter;\n      border-radius: 16px;\n    }\n\n    &::-ms-thumb {\n      border: none;\n      height: 20px;\n      width: 20px;\n      border-radius: 50%;\n      background: @gray-light;\n    }\n\n    &:focus::-ms-fill-lower {\n      background: @gray-lighter;\n    }\n\n    &:focus::-ms-fill-upper {\n      background: @gray-lighter;\n    }\n  }\n}\n\n// Gallery\n.modal-change-avatar .modal-avatar-gallery {\n  padding-bottom: 0px;\n\n  .avatars-gallery {\n    margin-bottom: @line-height-computed;\n\n    h3 {\n      margin-top: 0px;\n    }\n  }\n\n  .avatars-gallery-images {\n    .row {\n      margin-bottom: @line-height-computed / 2;\n    }\n\n    .btn {\n      border-radius: @border-radius-base + 2px;\n      border: 2px solid @gray-lighter;\n      background: none;\n      padding: 2px;\n      position: relative;\n\n      &:hover,\n      &:focus {\n        border-color: @gray-light;\n      }\n\n      &.avatar-selected,\n      &:active {\n        border-color: @link-color;\n      }\n\n      img {\n        border-radius: @border-radius-base;\n        width: 100%;\n        height: auto;\n      }\n    }\n  }\n}\n","//\n// Categories Lists\n// --------------------------------------------------\n\n// Category Block\n// --------------------------------------------------\n\n// Thread unread state icon\n.category-main .read-status .material-icon {\n  color: @category-read-color;\n}\n\n.category-main .read-status.item-new .material-icon {\n  color: @category-new-color;\n}\n\n// Last thread\n.category-last-thread .media-heading {\n  a {\n    display: inline-block;\n    overflow: hidden;\n\n    white-space: nowrap;\n    width: 290px; // md-3 - avatar column\n\n    text-overflow: ellipsis;\n    vertical-align: top;\n\n    @media screen and (max-width: @screen-sm-max) {\n      width: 275px; // md-3 - avatar column\n    }\n\n    @media screen and (max-width: @screen-xs-max) {\n      width: 260px; // md-3 - avatar column\n    }\n  }\n}\n\n// Last thread message\n.category-thread-message {\n  .material-icon {\n    width: 28px;\n    height: 28px;\n\n    font-size: 28px;\n    line-height: 28px;\n  }\n\n  p {\n    margin: 0px;\n  }\n}\n\n// Subcategories list\n// --------------------------------------------------\n.list-inline.subcategories-list {\n  overflow: auto;\n  margin-top: @line-height-computed / -2;\n\n  li {\n    display: block;\n    float: left;\n\n    a,\n    a:link,\n    a:visited,\n    a:active,\n    a:hover,\n    a:focus {\n      background-color: @gray-lighter;\n      border: 1px solid darken(@gray-lighter, 5%);\n      border-radius: @border-radius-base;\n      display: inline-block;\n      margin-top: @line-height-computed / 2;\n      padding: @padding-base-vertical @padding-base-horizontal;\n\n      color: @gray;\n    }\n\n    &:focus,\n    a:hover,\n    a:active {\n      background-color: darken(@gray-lighter, 5%);\n\n      color: @text-color;\n      text-decoration: none;\n    }\n  }\n}\n\n.row.subcategories-list {\n  .btn {\n    margin-top: @line-height-computed;\n\n    text-align: left;\n  }\n}\n","//\n// Posting\n// --------------------------------------------------\n\n// Affix and style placeholder\n#posting-placeholder {\n  background-color: @gray-lighter;\n  display: none;\n  margin-top: @line-height-computed * 1.5;\n  margin-bottom: @line-height-computed * -1.5;\n  padding: @line-height-computed 0px;\n\n  transition: height 300ms;\n\n  &.slide-in {\n    display: block;\n  }\n}\n\n// First row\n#posting-placeholder .first-row {\n  margin-bottom: @line-height-computed;\n\n  .form-control {\n    border: 1px solid darken(@gray-lighter, 15%);\n  }\n\n  .posting-options {\n    .btn {\n      padding-top: 4px;\n      padding-bottom: 4px;\n\n      .btn-text {\n        margin-left: @line-height-computed / 4;\n\n        position: relative;\n        top: 1px;\n      }\n    }\n\n    .material-icon {\n      width: 14px;\n      height: 24px;\n\n      margin-right: 0px;\n\n      position: relative;\n      top: 5px;\n\n      font-size: 14px;\n      line-height: 14px;\n      text-align: center;\n    }\n  }\n}\n\n// Posting ui preview\n.posting-ui-preview {\n  padding: @line-height-computed 0px;\n  position: relative;\n\n  .form-control {\n    box-shadow: none;\n    resize: none;\n  }\n}\n\n// Posting Loader\n.posting-loader {\n  text-align: center;\n}\n\n.posting-loader .loader {\n  height: 100px;\n\n  .loader-spinning-wheel {\n    width: 100px;\n    height: 100px;\n  }\n}\n\n// Posting message\n@posting-icon-width: 28px;\n\n.posting-message {\n  text-align: center;\n\n  .material-icon {\n    margin-right: @line-height-computed / 3;\n    position: relative;\n    top: -1px;\n\n    width: @posting-icon-width;\n    height: @posting-icon-width;\n\n    font-size: @posting-icon-width;\n    line-height: @posting-icon-width;\n  }\n\n  .message-body {\n    p {\n      font-size: @font-size-large;\n    }\n  }\n}\n","//\n// Editor\n// --------------------------------------------------\n\n@editor-border: darken(@gray-lighter, 15%);\n\n.editor-border {\n  background-color: #fff;\n  border: 1px solid @editor-border;\n  border-radius: @border-radius-base;\n}\n\n.editor-border .form-control {\n  // remove border and resizing\n  border: none;\n  resize: none;\n\n  // remove shadow from control\n  &,\n  &:focus,\n  &:active {\n    .box-shadow(none);\n  }\n}\n\n// Footer styles\n.editor-footer {\n  border-top: 1px solid @editor-border;\n  padding: @padding-base-vertical @padding-base-horizontal;\n  overflow: auto;\n\n  .pull-left {\n    margin-right: @padding-base-horizontal;\n  }\n\n  .pull-right {\n    margin-left: @padding-base-horizontal;\n  }\n\n  .btn-icon .material-icon {\n    margin-bottom: -2px;\n  }\n\n  // center buttons on small devices\n  @media screen and (max-width: @screen-sm-max) {\n    .buttons-list {\n      float: none !important;\n\n      margin: 0px;\n      margin-bottom: @line-height-computed / 2;\n\n      .btn {\n        display: inline-block;\n        float: none !important;\n\n        margin: @line-height-computed / 3;\n      }\n    }\n\n    .btn-protect {\n      .btn-text {\n        margin-left: @padding-small-horizontal;\n      }\n\n      .material-icon {\n        position: relative;\n        bottom: 2px;\n\n        width: 14px;\n        height: 14px;\n\n        font-size: 14px;\n        line-height: 14px;\n      }\n    }\n  }\n}\n\n@media screen and (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n  .buttons-list .btn {\n    &:first-child {\n      margin-left: 0px;\n    }\n  }\n}\n\n// make lock button full width\n@media screen and (max-width: @screen-xs-max) {\n  .buttons-list {\n    text-align: center;\n\n    .btn-protect {\n      display: block;\n      float: none !important;\n\n      width: 100%;\n\n      margin: 0px;\n      margin-top: @line-height-computed / 2;\n    }\n  }\n}\n\n// Attachments list\n.editor-attachments-list {\n  margin: 0px;\n  padding: 0px;\n\n  li {\n    margin: 0px;\n  }\n}\n\n.editor-attachment-complete {\n  border-top: 1px solid @editor-border;\n  padding: @padding-base-vertical 0px;\n  padding-right: @padding-base-horizontal;\n\n  .editor-attachment-image {\n    float: left;\n    width: 50px;\n\n    a {\n      background-size: cover;\n      background-position: center;\n      border-radius: @border-radius-small;\n      display: block;\n\n      margin: 0px auto;\n      width: 36px;\n      height: 36px;\n    }\n  }\n\n  .editor-attachment-icon {\n    float: left;\n    width: 50px;\n\n    text-align: center;\n\n    .material-icon {\n      position: relative;\n      top: 2px;\n\n      height: 28px;\n      width: 28px;\n\n      font-size: 28px;\n      line-height: 28px;\n    }\n  }\n\n  .editor-attachment-details {\n    margin-left: 50px;\n\n    h4,\n    p {\n      margin: 0px;\n      padding: 0px;\n\n      font-size: @font-size-base;\n    }\n\n    p {\n      margin-top: @padding-base-vertical / 2;\n\n      color: @gray-light;\n      font-size: @font-size-small;\n    }\n\n    abbr {\n      white-space: nowrap;\n    }\n  }\n}\n\n.editor-attachment-actions {\n  @media screen and (min-width: @screen-sm-min) {\n    padding-top: 3px;\n  }\n\n  @media screen and (max-width: @screen-xs-max) {\n    padding-left: @padding-base-horizontal;\n    padding-right: @padding-base-horizontal;\n  }\n}\n\n.editor-attachment-error {\n  border-top: 1px solid @editor-border;\n  padding: @padding-base-vertical 0px;\n  padding-right: @padding-base-horizontal;\n}\n\n.editor-attachment-error-icon {\n  float: left;\n  width: 50px;\n\n  text-align: center;\n\n  .material-icon {\n    position: relative;\n    top: 2px;\n\n    height: 28px;\n    width: 28px;\n\n    font-size: 28px;\n    line-height: 28px;\n  }\n}\n\n.editor-attachment-error-message {\n  margin-left: 50px;\n  padding: @padding-base-vertical 0px;\n  position: relative;\n\n  h4,\n  p {\n    margin: 0px;\n    padding: 0px;\n\n    font-size: @font-size-base;\n  }\n\n  p {\n    margin-top: @padding-base-vertical / 2;\n    font-size: @font-size-small;\n  }\n\n  .btn {\n    position: absolute;\n    top: @padding-base-vertical + 3px;\n    right: @padding-base-horizontal;\n\n    @media screen and (max-width: @screen-xs-max) {\n      display: block;\n\n      margin-top: @line-height-computed / 2;\n\n      position: static;\n    }\n  }\n}\n\n.editor-attachment-progress-bar {\n  background: @editor-border;\n  overflow: auto;\n}\n\n.editor-attachment-progress {\n  background: @brand-primary;\n  float: left;\n  height: 1px;\n}\n\n.editor-attachment-upload-message {\n  margin: 0px;\n  padding: @padding-base-vertical @padding-base-horizontal;\n}\n\n// Hide file input outside of viewport\n#editor-upload-field {\n  position: absolute;\n  left: -1000px;\n  top: -1000px;\n}\n\n// Scale avatar in at.js suggestion\n.atwho-view ul li img {\n  border-radius: @border-radius-small;\n  margin-right: @font-size-base / 3;\n\n  width: @line-height-computed;\n  height: @line-height-computed;\n}\n","//\n// Thread Participants\n// --------------------------------------------------\n\n.participant-card .btn-user,\n.participant-card .dropdown.open .btn-user {\n  margin-bottom: @line-height-computed;\n\n  &,\n  &:hover,\n  &:focus,\n  &:focus:active {\n    padding: 0px;\n\n    overflow: hidden;\n\n    text-align: left;\n  }\n\n  img {\n    background-color: #fff;\n    width: 34px;\n    height: 34px;\n\n    margin-right: 8px;\n  }\n}\n\n// Panel copy\n.panel-participants p {\n  margin: 0px;\n  margin-top: @padding-base-vertical + 1px;\n}\n","//\n// Poll Editor\n// --------------------------------------------------\n\n.poll-choices-control {\n  .list-group-item {\n    padding: 0px;\n  }\n\n  .list-group-item .btn {\n    background: transparent;\n    border: transparent;\n    float: left;\n    margin: 0px 2px;\n    margin-bottom: -29px;\n    padding: 0px;\n    width: 28px;\n    height: 28px;\n\n    position: relative;\n    top: 3px;\n\n    .material-icon {\n      width: 28px;\n      height: 28px;\n\n      font-size: 28px;\n      line-height: 28px;\n    }\n  }\n\n  input {\n    &,\n    &:focus,\n    &:active {\n      background: transparent;\n      border: none;\n      .box-shadow(none);\n      outline: none;\n      margin-left: 30px;\n      padding: @padding-base-vertical @padding-base-horizontal;\n      width: 100%;\n    }\n  }\n}\n","//\n// Posts List\n// --------------------------------------------------\n\n// Remove paddings and margins from items list\n.posts-list {\n  margin: 0px;\n  padding: 0px;\n  clear: both;\n\n  li {\n    list-style: none;\n    margin: 0px;\n    padding: 0px;\n  }\n}\n","//\n// Posts List Post\n// --------------------------------------------------\n\n@media screen and (min-width: @screen-md-min) {\n  .panel-post .panel-body {\n    display: flex;\n  }\n\n  .post-side {\n    flex-shrink: 0;\n    width: @post-side-width;\n    padding-right: @post-side-padding;\n  }\n\n  .panel-content {\n    flex: 1 0;\n  }\n}\n\n// Post side\n.post-side {\n  font-size: @font-size-small;\n\n  .media {\n    margin: 0px;\n  }\n\n  .poster-avatar {\n    height: 36px;\n    width: 36px;\n\n    @media screen and (min-width: @screen-md-min) {\n      margin-top: 4px;\n\n      height: 82px;\n      width: 82px;\n    }\n  }\n\n  .user-status {\n    margin-right: 4px;\n  }\n\n  .media-heading {\n    display: block;\n  }\n\n  .media-heading {\n    margin: 0px;\n    margin-top: -1px;\n\n    font-size: @font-size-base;\n\n    .user-status {\n      margin-right: 0;\n      margin-left: 2px;\n    }\n  }\n\n  .pull-right {\n    margin-left: @padding-large-horizontal;\n  }\n\n  // Lay user details vertically\n  @media screen and (min-width: @screen-md-min) {\n    .media-heading {\n      margin-top: 3px;\n\n      font-size: @font-size-large;\n\n      .user-status {\n        display: none;\n      }\n    }\n\n    .user-title {\n      margin-top: 4px;\n      margin-bottom: 5px;\n    }\n\n    .user-postcount {\n      display: block;\n    }\n\n    .user-status {\n      display: block;\n    }\n  }\n}\n\n// Heading\n.post-heading {\n  height: 36px;\n\n  @media screen and (max-width: @screen-sm-max) {\n    margin-top: @line-height-computed / 2;\n  }\n\n  .pull-right {\n    margin-left: @padding-large-horizontal;\n  }\n\n  & > .btn-link {\n    padding-left: 0px;\n    padding-right: 0px;\n  }\n\n  .label {\n    margin-top: 6px;\n\n    font-size: @font-size-base;\n    font-weight: normal;\n  }\n\n  .label-unread {\n    background-color: @brand-success;\n\n    color: #fff;\n  }\n}\n\n// Move controls up\n@media screen and (min-width: @screen-md-min) {\n  .post-side .pull-right {\n    display: none;\n  }\n}\n\n@media screen and (max-width: @screen-sm-max) {\n  .post-heading .pull-right {\n    display: none;\n  }\n}\n\n// Body\n.post-body {\n  padding-top: @line-height-computed;\n  padding-bottom: @line-height-computed * 1.5;\n}\n\n// Status\n.post-status-message {\n  overflow: auto;\n\n  .material-icon {\n    float: left;\n\n    font-size: 28px;\n    line-height: 28px;\n  }\n\n  p {\n    margin: 0px;\n    margin-top: (28px - @line-height-computed) / 2;\n    margin-left: 36px;\n  }\n}\n\n.post-status-best-answer {\n  background-color: @brand-success;\n\n  color: #fff;\n}\n\n.post-status-hidden {\n  background-color: @brand-danger;\n\n  color: #fff;\n}\n\n.post-status-unapproved {\n  background-color: @brand-primary;\n\n  color: #fff;\n}\n\n.post-status-protected {\n  background-color: @gray;\n\n  color: #fff;\n}\n\n// Footer\n.post-footer {\n  .pull-left {\n    margin-right: @padding-large-horizontal;\n  }\n\n  .pull-right {\n    margin-left: @padding-large-horizontal;\n  }\n\n  p {\n    padding-top: 7px;\n    padding-bottom: 6px;\n    margin-bottom: 0px;\n  }\n}\n\n// Attachments\n.post-attachments {\n  @post-preview-width: 40px;\n\n  border-top: 1px solid @gray-lighter;\n  padding: @padding-base-vertical @padding-large-horizontal;\n\n  abbr {\n    white-space: nowrap;\n  }\n\n  .attachment-name {\n    word-wrap: break-word;\n  }\n\n  .row > div {\n    margin: @padding-large-vertical 0px;\n  }\n\n  .post-attachment-preview {\n    float: left;\n    height: @post-preview-width;\n    width: @post-preview-width;\n\n    text-align: center;\n  }\n\n  .post-attachment {\n    margin-left: @post-preview-width + 12px;\n  }\n\n  .post-thumbnail {\n    display: block;\n    background-size: cover;\n    background-position: center;\n    border-radius: @border-radius-small;\n    width: @post-preview-width;\n    height: @post-preview-width;\n  }\n\n  .material-icon {\n    width: 28px;\n    height: 28px;\n\n    position: relative;\n    top: 5px;\n\n    font-size: 28px;\n    line-height: 28px;\n\n    &:link,\n    &:active,\n    &:visited,\n    &:hover,\n    &:focus {\n      color: @gray-darker;\n      text-decoration: none;\n    }\n  }\n\n  .post-attachment-description {\n    margin: 0px;\n    padding: 0px;\n\n    color: @text-muted;\n    font-size: @font-size-small;\n  }\n}\n","//\n// Post Feed\n// --------------------------------------------------\n\n.post-feed .post-side {\n  width: 100%;\n  padding-right: 0;\n\n  .media-heading {\n    margin: 0px;\n\n    font-size: @font-size-base;\n  }\n\n  .user-title {\n    margin: 0px;\n\n    font-size: @font-size-small;\n  }\n}\n\n.post-feed .post-side .btn {\n  display: inline-block;\n}\n\n.post-feed .post-side img {\n  margin-top: 0px;\n\n  width: 36px;\n  height: 36px;\n}\n\n.post-feed .post-heading {\n  height: auto;\n  margin: @line-height-computed / 2 0px;\n}\n\n.post-feed .post-heading .btn {\n  margin-right: @padding-large-horizontal;\n  max-width: 100%;\n\n  text-align: left;\n  white-space: normal;\n  word-wrap: break-word;\n}\n","//\n// Posts List Event\n// --------------------------------------------------\n\n// Event style\n.posts-list .event {\n  margin-bottom: @line-height-computed;\n\n  color: @text-muted;\n}\n\n.posts-list .event .event-body {\n  display: flex;\n  align-items: flex-start;\n}\n\n// Event label\n.posts-list .event-label {\n  margin-left: @event-icon-size + 8px + @post-side-padding;\n\n  .label-unread {\n    background-color: @brand-success;\n\n    color: #fff;\n  }\n}\n\n// Event icon\n.posts-list .event .event-icon {\n  padding-right: @post-side-padding;\n\n  .event-icon-bg {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    height: @event-icon-size + 8px;\n    width: @event-icon-size + 8px;\n\n    background: @event-icon-bg;\n    border-radius: @border-radius-base;\n    color: @event-icon-color;\n  }\n\n  .material-icon {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    font-size: @event-icon-size;\n  }\n}\n\n// Event content\n.posts-list .event .event-content {\n  flex: 1 0;\n}\n\n// Event first and second rows\n.posts-list .event .event-message {\n  margin-bottom: @line-height-computed / 4;\n\n  font-size: @font-size-large;\n}\n\n.posts-list .event .event-info {\n  margin: 0px;\n\n  font-size: @font-size-small;\n\n  li {\n    margin-right: @padding-base-horizontal;\n\n    &:last-child {\n      margin-right: 0px;\n    }\n  }\n}\n\n// Event controls\n.posts-list .event .event-controls {\n  .btn-link {\n    border: 0px;\n    margin: 0px;\n    margin-right: @padding-base-horizontal;\n    padding: 0px;\n\n    font-size: @font-size-small;\n\n    &:last-child {\n      margin-right: 0px;\n    }\n  }\n}\n\n// Mobile tweaks\n@media screen and (max-width: @screen-xs-max) {\n  .posts-list .event .event-info {\n    margin-top: @line-height-computed / 4;\n  }\n\n  .posts-list .event .event-controls {\n    clear: both;\n    margin-top: @line-height-computed / 4;\n\n    .btn-link {\n      margin-right: @line-height-computed;\n\n      font-size: @font-size-base;\n\n      &:last-child {\n        margin-right: 0px;\n      }\n    }\n  }\n}\n\n@media screen and (min-width: @screen-md-min) {\n  .posts-list .event .event-icon {\n    display: flex;\n    justify-content: flex-end;\n    flex-shrink: 0;\n    display: flex;\n    width: @post-side-width + @panel-body-padding;\n  }\n\n  .event-content {\n    flex: 1 0;\n  }\n\n  .posts-list .event-label {\n    margin-left: @post-side-width + @panel-body-padding;\n  }\n}\n","//\n// Post Changelog Modal\n// --------------------------------------------------\n\n.post-changelog-diff {\n  padding: 0px;\n  margin: 0px;\n\n  .list-unstyled {\n    padding: 0px;\n    margin: @padding-small-vertical 0px;\n  }\n\n  .diff-item {\n    padding: @padding-small-vertical @padding-small-horizontal;\n  }\n\n  .diff-item-sub {\n    color: @brand-danger;\n  }\n\n  .diff-item-add {\n    color: @brand-success;\n  }\n}\n\n.post-changelog-toolbar .row {\n  margin-left: -12px;\n  margin-right: -12px;\n}\n\n.post-changelog-toolbar .post-change-label {\n  @media screen and (max-width: @screen-xs-max) {\n    text-align: center;\n  }\n}\n","//\n// Message Pages\n// --------------------------------------------------\n\n// Small displays\n@media screen and (max-width: @screen-xs-max) {\n  .page-message,\n  .page-error {\n    .message-panel {\n      text-align: center;\n    }\n\n    .message-icon {\n      margin: @line-height-computed * 1.5;\n      font-size: @message-page-icon-size;\n    }\n  }\n}\n\n// Full displays\n@media screen and (min-width: @screen-sm-min) {\n  .page-message,\n  .page-error {\n    .message-panel {\n      margin: @line-height-computed * 3 auto;\n      max-width: @screen-md-max * 0.65;\n      overflow: auto;\n    }\n\n    .message-icon {\n      float: left;\n\n      .material-icon {\n        font-size: @message-page-icon-size;\n      }\n    }\n\n    .message-body {\n      margin-top: @message-page-icon-size / 5;\n      margin-left: @message-page-icon-size + @line-height-computed;\n\n      font-size: @font-size-large;\n\n      p.lead {\n        font-size: @font-size-large * 2;\n      }\n    }\n  }\n}\n","//\n// Threads Lists\n// --------------------------------------------------\n\n.threads-list {\n  margin-bottom: @line-height-computed;\n}\n\n// Make list row flexbox row\n.threads-list-item {\n  display: flex;\n  align-items: center;\n\n  img {\n    width: @thread-read-block-size;\n    height: @thread-read-block-size;\n  }\n}\n\n.threads-list-item-top-row {\n  display: flex;\n  flex: 1;\n  align-items: center;\n  justify-content: center;\n}\n\n.threads-list-item-bottom-row {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n// Thread icon\n.threads-list-item-col-icon {\n  padding-right: @grid-gutter-width / 2;\n}\n\n.threads-list-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: @thread-read-block-size;\n  height: @thread-read-block-size;\n\n  border-radius: @border-radius-small;\n  font-size: @thread-read-icon-size;\n  line-height: @thread-read-icon-size;\n\n  &:link,\n  &:active,\n  &:focus,\n  &:hover,\n  &:visited {\n    background-color: @thread-read-icon-bg;\n    color: @thread-read-icon-color;\n    text-decoration: none;\n  }\n}\n\n.threads-list-icon-new {\n  &:link,\n  &:active,\n  &:focus,\n  &:hover,\n  &:visited {\n    background-color: @thread-new-icon-bg;\n    color: @thread-new-icon-color;\n  }\n}\n\n// Thread title\n.threads-list-item-col-title {\n  flex: 1;\n}\n\na.threads-list-item-title {\n  &:link,\n  &:active,\n  &:focus,\n  &:hover,\n  &:visited {\n    font-size: @threads-list-title-size;\n\n    color: @thread-color;\n    overflow-wrap: break-word;\n  }\n}\n\na.threads-list-item-title-sm {\n  font-size: @threads-list-title-size-sm;\n\n  &:link,\n  &:active,\n  &:focus,\n  &:hover,\n  &:visited {\n    color: @thread-read-color;\n    overflow-wrap: break-word;\n  }\n}\n\na.threads-list-item-title-new {\n  &:link,\n  &:active,\n  &:focus,\n  &:hover,\n  &:visited {\n    color: @thread-new-color;\n  }\n}\n\n// Thread status flags\n.threads-list-item-col-flags {\n  padding-left: @grid-gutter-width / 2;\n}\n\n.threads-list-item .thread-flags {\n  opacity: @thread-flag-icon-opacity;\n}\n\n.threads-list-item:hover,\n.threads-list-item:focus {\n  .thread-flags {\n    opacity: @thread-flag-icon-opacity-hover;\n  }\n}\n\n// Thread category\n.threads-list-item-col-category {\n  padding-left: @grid-gutter-width / 2;\n\n  white-space: nowrap;\n}\n\n.threads-list-category-label {\n  padding: 3px 6px;\n\n  border-radius: @border-radius-small;\n\n  font-size: @font-size-small;\n  font-weight: bold;\n\n  &,\n  &:link,\n  &:active,\n  &:hover,\n  &:focus,\n  &:visited {\n    color: @category-label-default-color;\n    background: @category-label-default-bg;\n    text-decoration: none;\n  }\n\n  &.threads-list-category-label-color {\n    &,\n    &:link,\n    &:active,\n    &:hover,\n    &:focus,\n    &:visited {\n      color: #fff;\n      background: var(--label-color);\n    }\n  }\n}\n\n.threads-list-item-parent-category {\n  border-radius: @border-radius-small 0 0 @border-radius-small;\n  margin-right: 2px;\n}\n\n.threads-list-item-parent-category + .threads-list-category-label {\n  border-radius: 0 @border-radius-small @border-radius-small 0;\n}\n\n// Replies\n.threads-list-item-col-replies {\n  width: 80px;\n  padding-left: @grid-gutter-width / 2;\n}\n\n// Last poster\n.threads-list-item-col-last-poster {\n  padding-left: @grid-gutter-width / 2;\n\n  img {\n    border-radius: @border-radius-small;\n  }\n}\n\n// Last activity\n.threads-list-item-col-last-activity {\n  width: 120px;\n  padding-left: @grid-gutter-width / 2;\n\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n\n  a:link,\n  a:hover,\n  a:active,\n  a:visited,\n  a:focus {\n    color: @thread-last-activity-color;\n    font-size: @thread-last-activity-size;\n  }\n}\n\n// Subscription and checkbox\n.threads-list-item-col-checkbox,\n.threads-list-item-col-subscription {\n  padding-left: @grid-gutter-width / 2;\n}\n\n// Make list responsive\n.threads-list-item-title-sm,\n.threads-list-item-col-checkbox-sm {\n  display: none;\n}\n\n@media screen and (max-width: @screen-xs-max) {\n  // Make card full-width\n  .threads-list {\n    margin-left: @grid-gutter-width * -0.5;\n    margin-right: @grid-gutter-width * -0.5;\n\n    .list-group,\n    .list-group-item {\n      border-radius: 0;\n      border-left: 0;\n      border-right: 0;\n    }\n  }\n\n  // Swap title with sm one\n  .threads-list-item-title {\n    display: none;\n  }\n\n  .threads-list-item-title-sm {\n    display: inline-block;\n  }\n\n  // Make thread read icon disappear\n  .threads-list-item-col-icon {\n    display: none;\n  }\n}\n\n@media screen and (max-width: @screen-sm-max) {\n  // Use two rows per item\n  .threads-list-item {\n    display: block;\n\n    // Make avatar same size as flag icons\n    img {\n      width: @thread-flag-block-size;\n      height: @thread-flag-block-size;\n    }\n  }\n\n  // Insert bottom marin to top row, align itss contents to top\n  .threads-list-item-top-row {\n    align-items: start;\n    margin-bottom: @grid-gutter-width / 4;\n  }\n\n  // Make all cols in second row auto, align them to right\n  .threads-list-item-bottom-row {\n    justify-content: end;\n    flex: 0;\n\n    & > div {\n      width: auto;\n      padding: 0 0 0 @grid-gutter-width / 2;\n    }\n  }\n\n  // Make thread subscription and checkbox icons disappear\n  .threads-list-item-col-subscription,\n  .threads-list-item-col-checkbox {\n    display: none;\n  }\n\n  // Reveal checkbox in top row, make it smol\n  .threads-list-item-col-checkbox-sm {\n    display: block;\n    padding-left: @grid-gutter-width / 2;\n\n    .btn-icon {\n      padding: 4px;\n\n      .material-icon {\n        font-size: 16px;\n      }\n    }\n  }\n}\n\n// Make thread buttons flash when thread is busy\n.threads-list-item-is-busy .btn-icon {\n  opacity: 0.8;\n  animation: busy 0.75s linear infinite;\n}\n\n@keyframes busy {\n  50% {\n    opacity: 0.5;\n  }\n}\n\n// Threads list update prompt\n.threads-list-update-prompt {\n  padding: 0;\n}\n\n.threads-list-update-prompt-btn {\n  padding: @padding-large-vertical @padding-large-horizontal;\n\n  background: @update-threads-prompt-bg;\n  color: @update-threads-prompt-color;\n  border: none;\n  border-radius: @list-group-border-radius @list-group-border-radius 0 0;\n}\n\n.threads-list-update-prompt-btn:hover,\n.threads-list-update-prompt-btn:focus {\n  background: @update-threads-prompt-hover-bg;\n  color: @update-threads-prompt-hover-color;\n}\n\n.threads-list-update-prompt-btn:active {\n  background: @update-threads-prompt-active-bg;\n  color: @update-threads-prompt-active-color;\n}\n","//\n// Active posters list\n// --------------------------------------------------\n\n// List layout\n.active-posters {\n  li {\n    display: block;\n    overflow: auto;\n  }\n}\n\n// User avatar\n.active-posters .rank-user-avatar {\n  float: left;\n\n  @media screen and (max-width: @screen-sm-max) {\n    height: 42px; // even list item vertically\n\n    img {\n      width: 36px;\n      height: 36px;\n\n      position: relative;\n      top: 3px;\n    }\n  }\n}\n\n// User\n.active-posters .rank-user {\n  float: left;\n  margin-top: 3px;\n\n  @media screen and (max-width: @screen-sm-max) {\n    margin-left: @line-height-computed * 0.66;\n    width: 40%;\n  }\n\n  @media screen and (max-width: @screen-xs-max) {\n    float: none;\n    margin-left: 50px;\n    width: auto;\n  }\n\n  @media screen and (min-width: @screen-md-min) {\n    margin-left: @line-height-computed * 0.8;\n    width: 25%;\n\n    .user-name {\n      font-size: @font-size-large;\n    }\n  }\n}\n\n// User details\n.active-posters .user-details {\n  overflow: auto;\n\n  font-family: Sans-Serif;\n\n  .user-status,\n  .rank-name,\n  .user-title {\n    display: block;\n    float: left;\n    margin-right: 3px;\n\n    font-size: @font-size-small;\n\n    @media screen and (min-width: @screen-md-min) {\n      margin-right: 8px;\n    }\n  }\n\n  .user-title {\n    margin-right: 0px;\n  }\n\n  @media screen and (min-width: @screen-md-min) {\n    overflow: visible;\n\n    .rank-name,\n    .user-title {\n      height: 14px;\n      overflow: hidden;\n\n      position: relative;\n      top: 1px;\n\n      vertical-align: baseline;\n    }\n  }\n\n  @media screen and (max-width: @screen-xs-max) {\n    margin-top: @padding-base-vertical / 2;\n\n    .rank-name,\n    .user-title {\n      font-weight: normal;\n    }\n  }\n}\n\n// User status\n.active-posters .user-status {\n  overflow: auto;\n\n  position: relative;\n  top: 1px;\n\n  span {\n    display: block;\n    float: left;\n  }\n\n  @media screen and (min-width: @screen-md-min) {\n    height: 14px;\n    overflow: hidden;\n  }\n\n  .status-icon {\n    position: relative;\n\n    @media screen and (max-width: @screen-sm-max) {\n      top: 0px;\n\n      width: 12px;\n      height: 12px;\n\n      font-size: 12px;\n      line-height: 12px;\n    }\n\n    @media screen and (min-width: @screen-md-min) {\n      top: 1px;\n\n      margin-right: 3px;\n\n      width: 13px;\n      height: 13px;\n\n      font-size: 13px;\n      line-height: 13px;\n    }\n  }\n}\n\n// User status UI preview\n.active-posters {\n  .status-label.ui-preview-text,\n  .rank-name .ui-preview-text,\n  .user-title .ui-preview-text {\n    height: 11px;\n\n    position: relative;\n    top: 2px;\n\n    font-size: 11px;\n    line-height: 11px;\n  }\n\n  // even rank/title preview with status\n  .rank-name,\n  .user-title {\n    .ui-preview-text {\n      position: static;\n    }\n  }\n}\n\n// Rank stats\n.active-posters {\n  .rank-position,\n  .rank-posts-counted,\n  .rank-posts-total {\n    strong,\n    small {\n      display: block;\n    }\n\n    @media screen and (max-width: @screen-sm-max) {\n      overflow: auto;\n\n      strong,\n      small {\n        float: left;\n\n        font-size: @font-size-base * 0.75;\n      }\n\n      strong {\n        min-width: 30px;\n        margin-right: 3px;\n\n        text-align: right;\n      }\n\n      .ui-preview-text {\n        height: 8px;\n\n        position: relative;\n        top: -1px;\n\n        font-size: 8px;\n        line-height: 8px;\n      }\n    }\n\n    @media screen and (min-width: @screen-md-min) {\n      float: left;\n      margin-top: 3px;\n      width: 23%;\n\n      font-size: @font-size-large;\n      text-align: center;\n\n      small {\n        font-size: @font-size-small;\n        font-weight: normal;\n      }\n    }\n  }\n}\n\n.user-compact-stats {\n  .rank-position,\n  .rank-posts-counted {\n    strong,\n    small {\n      display: inline-block;\n      float: none;\n    }\n\n    strong {\n      min-width: auto;\n    }\n\n    small {\n      margin-right: @line-height-computed;\n    }\n  }\n}\n\n// Tablet displays\n@media screen and (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n  // Margin top first state so its even with username\n  .active-posters .rank-position {\n    margin-top: 6px;\n  }\n\n  // Hide rank-posts-total on small displays (cos it overflows for crazy posters)\n  .active-posters .rank-posts-total {\n    display: none;\n  }\n}\n\n// Mobile displays\n@media screen and (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n  // Margin top first state so its even with username\n  .active-posters .rank-position {\n    margin-top: 6px;\n  }\n\n  // Hide rank-posts-total on small displays (cos it overflows for crazy posters)\n  .active-posters .rank-posts-total {\n    display: none;\n  }\n}\n","//\n// User Profile\n// --------------------------------------------------\n\n.profile-page-header-avatar {\n  text-align: center;\n  margin: @line-height-computed 0;\n\n  .user-avatar {\n    border-radius: @border-radius-base;\n  }\n}\n\n// Make profile data horizontal and insert space between elements\n.profile-data-list {\n  display: block;\n  padding: 0;\n  margin: 0 (@padding-base-horizontal * -1);\n\n  font-size: @font-size-small;\n\n  li {\n    display: inline-block;\n    list-style: none;\n    padding: floor(@line-height-computed / 4) @padding-base-horizontal;\n  }\n\n  .status-icon {\n    margin-right: 3px;\n    position: relative;\n    bottom: 1px;\n  }\n\n  .user-account-disabled {\n    color: @brand-danger;\n    font-weight: bold;\n  }\n}\n\n// On tablets and up make layout horizontal\n@media screen and (min-width: @screen-sm-min) {\n  .profile-page-header {\n    display: flex;\n    align-items: flex-end;\n  }\n\n  .profile-page-header-avatar {\n    margin: 0;\n    margin-right: @grid-gutter-width;\n  }\n}\n\n// On desktops make avatar overlap on details, make details larger\n@media screen and (min-width: @screen-md-min) {\n  .profile-page-header-avatar {\n    position: relative;\n    top: @profile-header-avatar-offset;\n    margin-top: @profile-header-avatar-offset * -1;\n  }\n\n  .profile-page-header-details {\n    padding-left: 128px + @grid-gutter-width;\n  }\n\n  .profile-data-list {\n    font-size: @font-size-base;\n  }\n}\n","//\n// Username History\n// --------------------------------------------------\n\n// Change tabular on larger displays\n.username-history li {\n  @media screen and (min-width: @screen-md-min) {\n    display: block;\n    overflow: auto;\n  }\n}\n\n// Change avatar\n.username-history .change-avatar {\n  float: left;\n\n  a,\n  span {\n    margin-right: @line-height-computed / 2;\n\n    img {\n      width: 42px;\n      height: 42px;\n    }\n  }\n\n  @media screen and (min-width: @screen-md-min) {\n    a,\n    span {\n      img {\n        width: 18px;\n        height: 18px;\n\n        position: relative;\n        bottom: 1px;\n      }\n    }\n  }\n}\n\n// Change author\n.username-history .change-author {\n  @media screen and (min-width: @screen-md-min) {\n    float: left;\n    width: 30%;\n  }\n}\n\n// Old to new name change\n.username-history .change {\n  min-height: @line-height-computed; // we need that for ui-preview-text\n  overflow: auto;\n\n  span {\n    display: block;\n    float: left;\n  }\n\n  .material-icon {\n    margin: 0px @font-size-base / 2;\n\n    position: relative;\n    top: 4px;\n  }\n\n  @media screen and (min-width: @screen-md-min) {\n    float: left;\n    width: 40%;\n  }\n}\n\n// Date\n.username-history .change-date {\n  @media screen and (min-width: @screen-md-min) {\n    float: left;\n    width: 20%;\n  }\n}\n","//\n// Search Page\n// --------------------------------------------------\n\n.search-footer p {\n  margin-top: @line-height-computed;\n\n  color: @gray;\n  font-size: @font-size-small;\n  text-align: center;\n}\n\n.page-search-form {\n  @media screen and (min-width: @screen-sm-min) {\n    padding-top: @line-height-computed * 2;\n  }\n\n  @media screen and (min-width: @screen-md-min) {\n    padding-bottom: @line-height-computed * 2;\n\n    h1 {\n      position: relative;\n      top: @padding-small-vertical;\n    }\n\n    .form-group {\n      margin-bottom: 0px;\n    }\n  }\n}\n","/*\nDescription: Foundation 4 docs style for highlight.js\nAuthor: Dan Allen <dan.j.allen@gmail.com>\nWebsite: http://foundation.zurb.com/docs/\nVersion: 1.0\nDate: 2013-04-02\n*/\n\n.hljs {\n  display: block;\n  overflow-x: auto;\n  padding: 0.5em;\n  background: #eee; color: black;\n}\n\n.hljs-link,\n.hljs-emphasis,\n.hljs-attribute,\n.hljs-addition {\n  color: #070;\n}\n\n.hljs-emphasis {\n  font-style: italic;\n}\n\n.hljs-strong,\n.hljs-string,\n.hljs-deletion {\n  color: #d14;\n}\n\n.hljs-strong {\n  font-weight: bold;\n}\n\n.hljs-quote,\n.hljs-comment {\n  color: #998;\n  font-style: italic;\n}\n\n.hljs-section,\n.hljs-title {\n  color: #900;\n}\n\n.hljs-class .hljs-title,\n.hljs-type {\n  color: #458;\n}\n\n.hljs-variable,\n.hljs-template-variable {\n  color: #336699;\n}\n\n.hljs-bullet {\n  color: #997700;\n}\n\n.hljs-meta {\n  color: #3344bb;\n}\n\n.hljs-code,\n.hljs-number,\n.hljs-literal,\n.hljs-keyword,\n.hljs-selector-tag {\n  color: #099;\n}\n\n.hljs-regexp {\n  background-color: #fff0ff;\n  color: #880088;\n}\n\n.hljs-symbol {\n  color: #990073;\n}\n\n.hljs-tag,\n.hljs-name,\n.hljs-selector-id,\n.hljs-selector-class {\n  color: #007700;\n}\n",".atwho-view {\n    position:absolute;\n    top: 0;\n    left: 0;\n    display: none;\n    margin-top: 18px;\n    background: white;\n    color: black;\n    border: 1px solid #DDD;\n    border-radius: 3px;\n    box-shadow: 0 0 5px rgba(0,0,0,0.1);\n    min-width: 120px;\n    z-index: 11110 !important;\n}\n\n.atwho-view .atwho-header {\n    padding: 5px;\n    margin: 5px;\n    cursor: pointer;\n    border-bottom: solid 1px #eaeff1;\n    color: #6f8092;\n    font-size: 11px;\n    font-weight: bold;\n}\n\n.atwho-view .atwho-header .small {\n    color: #6f8092;\n    float: right;\n    padding-top: 2px;\n    margin-right: -5px;\n    font-size: 12px;\n    font-weight: normal;\n}\n\n.atwho-view .atwho-header:hover {\n    cursor: default;\n}\n\n.atwho-view .cur {\n    background: #3366FF;\n    color: white;\n}\n.atwho-view .cur small {\n    color: white;\n}\n.atwho-view strong {\n    color: #3366FF;\n}\n.atwho-view .cur strong {\n    color: white;\n    font:bold;\n}\n.atwho-view ul {\n    /* width: 100px; */\n    list-style:none;\n    padding:0;\n    margin:auto;\n    max-height: 200px;\n    overflow-y: auto;\n}\n.atwho-view ul li {\n    display: block;\n    padding: 5px 10px;\n    border-bottom: 1px solid #DDD;\n    cursor: pointer;\n    /* border-top: 1px solid #C8C8C8; */\n}\n.atwho-view small {\n    font-size: smaller;\n    color: #777;\n    font-weight: normal;\n}\n","//\n// Typography Flavor\n// --------------------------------------------------\n\nabbr {\n  outline: none;\n  text-decoration: none;\n}\n","//\n// Flavor Shadows\n// --------------------------------------------------\n\n.shadow-2dp {\n  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, @shadow-key-penumbra-opacity),\n    0 3px 1px -2px rgba(0, 0, 0, @shadow-key-umbra-opacity),\n    0 1px 5px 0 rgba(0, 0, 0, @shadow-ambient-shadow-opacity);\n}\n\n.shadow-3dp {\n  box-shadow: 0 3px 4px 0 rgba(0, 0, 0, @shadow-key-penumbra-opacity),\n    0 3px 3px -2px rgba(0, 0, 0, @shadow-key-umbra-opacity),\n    0 1px 8px 0 rgba(0, 0, 0, @shadow-ambient-shadow-opacity);\n}\n\n.shadow-4dp {\n  box-shadow: 0 4px 5px 0 rgba(0, 0, 0, @shadow-key-penumbra-opacity),\n    0 1px 10px 0 rgba(0, 0, 0, @shadow-ambient-shadow-opacity),\n    0 2px 4px -1px rgba(0, 0, 0, @shadow-key-umbra-opacity);\n}\n\n.shadow-6dp {\n  box-shadow: 0 6px 10px 0 rgba(0, 0, 0, @shadow-key-penumbra-opacity),\n    0 1px 18px 0 rgba(0, 0, 0, @shadow-ambient-shadow-opacity),\n    0 3px 5px -1px rgba(0, 0, 0, @shadow-key-umbra-opacity);\n}\n\n.shadow-8dp {\n  box-shadow: 0 8px 10px 1px rgba(0, 0, 0, @shadow-key-penumbra-opacity),\n    0 3px 14px 2px rgba(0, 0, 0, @shadow-ambient-shadow-opacity),\n    0 5px 5px -3px rgba(0, 0, 0, @shadow-key-umbra-opacity);\n}\n\n.shadow-16dp {\n  box-shadow: 0 16px 24px 2px rgba(0, 0, 0, @shadow-key-penumbra-opacity),\n    0 6px 30px 5px rgba(0, 0, 0, @shadow-ambient-shadow-opacity),\n    0 8px 10px -5px rgba(0, 0, 0, @shadow-key-umbra-opacity);\n}\n\n.shadow-24dp {\n  box-shadow: 0 9px 46px 8px rgba(0, 0, 0, @shadow-key-penumbra-opacity),\n    0 11px 15px -7px rgba(0, 0, 0, @shadow-ambient-shadow-opacity),\n    0 24px 38px 3px rgba(0, 0, 0, @shadow-key-umbra-opacity);\n}\n","//\n// Buttons Flavor\n// --------------------------------------------------\n\n// mixins\n.misago-btn(@color, @bg, @color-hover, @bg-hover, @color-active, @bg-active) {\n  &,\n  &:disabled,\n  &:disabled:hover,\n  &.disabled,\n  &.disabled:hover,\n  &.disabled:active {\n    background: @bg;\n    border: 1px solid @bg;\n\n    color: @color;\n\n    .box-shadow(none);\n  }\n\n  &:disabled,\n  &:disabled:hover,\n  &.disabled,\n  &.disabled:hover,\n  &.disabled:active {\n    .opacity(0.25);\n  }\n\n  &:hover,\n  &:focus {\n    background: @bg-hover;\n    border: 1px solid @bg-hover;\n\n    color: @color-hover;\n\n    .box-shadow(none);\n  }\n\n  &:active:focus,\n  &:active,\n  .dropdown.open .dropdown-toggle &,\n  .dropdown.open .dropdown-toggle &:focus,\n  .dropdown.open .dropdown-toggle &:active:focus,\n  .dropdown.open .dropdown-toggle &:hover {\n    background: @bg-active;\n    border: 1px solid @bg-active;\n\n    color: @color-active;\n\n    .box-shadow(none);\n  }\n\n  &.btn-loading {\n    &,\n    &:disabled,\n    &:disabled:hover,\n    &:hover,\n    &:focus,\n    &:active:focus,\n    &:active {\n      color: transparent;\n    }\n  }\n}\n\n.misago-btn-outline(@color, @bg, @border,\n                    @color-hover, @bg-hover, @border-hover,\n                    @color-active, @bg-active, @border-active) {\n  &,\n  &:disabled,\n  &:disabled:hover,\n  &.disabled,\n  &.disabled:hover,\n  &.disabled:active {\n    background: @bg;\n    border: 1px solid @border;\n\n    color: @color;\n\n    .box-shadow(none);\n  }\n\n  &:disabled,\n  &:disabled:hover,\n  &.disabled,\n  &.disabled:hover,\n  &.disabled:active {\n    .opacity(0.25);\n  }\n\n  &:hover,\n  &:focus {\n    background: @bg-hover;\n    border: 1px solid @border-hover;\n\n    color: @color-hover;\n\n    .box-shadow(none);\n  }\n\n  &:active:focus,\n  &:active,\n  .dropdown.open &,\n  .dropdown.open &:focus,\n  .dropdown.open &:active:focus,\n  .dropdown.open &:hover {\n    background: @bg-active;\n    border: 1px solid @border-active;\n\n    color: @color-active;\n\n    .box-shadow(none);\n  }\n\n  &.btn-loading {\n    &,\n    &:disabled,\n    &:disabled:hover,\n    &:hover,\n    &:focus,\n    &:active:focus,\n    &:active {\n      background: @bg;\n      border: 1px solid @border;\n\n      color: transparent;\n\n      .box-shadow(none);\n    }\n  }\n}\n\n// button styles\n.btn-default {\n  .misago-btn(\n    @btn-default-color,\n    @btn-default-bg,\n\n    @btn-default-hover-color,\n    @btn-default-hover-bg,\n\n    @btn-default-active-color,\n    @btn-default-active-bg\n  );\n}\n\n.btn-primary {\n  .misago-btn(\n    @btn-primary-color,\n    @btn-primary-bg,\n\n    @btn-primary-hover-color,\n    @btn-primary-hover-bg,\n\n    @btn-primary-active-color,\n    @btn-primary-active-bg\n  );\n}\n\n.btn-success {\n  .misago-btn(\n    @btn-success-color,\n    @btn-success-bg,\n\n    @btn-success-hover-color,\n    @btn-success-hover-bg,\n\n    @btn-success-active-color,\n    @btn-success-active-bg\n  );\n}\n\n.btn-danger {\n  .misago-btn(\n    @btn-danger-color,\n    @btn-danger-bg,\n\n    @btn-danger-hover-color,\n    @btn-danger-hover-bg,\n\n    @btn-danger-active-color,\n    @btn-danger-active-bg\n  );\n}\n\n// outlined button styles\n.btn-default.btn-outline {\n  .misago-btn-outline(\n    @btn-default-outline-color,\n    @btn-default-outline-bg,\n    @btn-default-outline-border,\n\n    @btn-default-outline-hover-color,\n    @btn-default-outline-hover-bg,\n    @btn-default-outline-hover-border,\n\n    @btn-default-outline-active-color,\n    @btn-default-outline-active-bg,\n    @btn-default-outline-active-border\n  );\n}\n\n.btn-primary.btn-outline {\n  .misago-btn-outline(\n    @btn-primary-outline-color,\n    @btn-primary-outline-bg,\n    @btn-primary-outline-border,\n\n    @btn-primary-outline-hover-color,\n    @btn-primary-outline-hover-bg,\n    @btn-primary-outline-hover-border,\n\n    @btn-primary-outline-active-color,\n    @btn-primary-outline-active-bg,\n    @btn-primary-outline-active-border\n  );\n}\n\n// sign in and register buttons in navbar\n.navbar-misago {\n  .btn-sign-in {\n    border-radius: @navbar-btn-sign-in-radius;\n\n    .misago-btn-outline(\n      @navbar-btn-sign-in-color,\n      @navbar-btn-sign-in-bg,\n      @navbar-btn-sign-in-border,\n\n      @navbar-btn-sign-in-hover-color,\n      @navbar-btn-sign-in-hover-bg,\n      @navbar-btn-sign-in-hover-border,\n\n      @navbar-btn-sign-in-active-color,\n      @navbar-btn-sign-in-active-bg,\n      @navbar-btn-sign-in-active-border\n    );\n  }\n\n  .btn-register {\n    border-radius: @navbar-btn-register-radius;\n\n    .misago-btn-outline(\n      @navbar-btn-register-color,\n      @navbar-btn-register-bg,\n      @navbar-btn-register-border,\n\n      @navbar-btn-register-hover-color,\n      @navbar-btn-register-hover-bg,\n      @navbar-btn-register-hover-border,\n\n      @navbar-btn-register-active-color,\n      @navbar-btn-register-active-bg,\n      @navbar-btn-register-active-border\n    );\n  }\n}\n","//\n// Social Buttons Flavor\n// --------------------------------------------------\n\n// Those buttons simply add brand color over the .btn-default\n.misago-social-btn(@color) {\n  &,\n  &:disabled,\n  &:disabled:hover {\n    color: @color;\n    font-weight: bold;\n  }\n}\n\n.btn-social-battlenet,\n.btn-social-battlenet-oauth2 {\n  .misago-social-btn(#0e86ca);\n}\n\n.btn-social-bungie {\n  .misago-social-btn(#0096db);\n}\n\n.btn-social-facebook,\n.btn-social-facebook-app {\n  .misago-social-btn(#3b5998);\n}\n\n.btn-social-github,\n.btn-social-github-team,\n.btn-social-github-enterprise,\n.btn-social-github-enterprise-org,\n.btn-social-github-enterprise-team {\n  .misago-social-btn(#000000);\n}\n\n.btn-social-gitlab {\n  .misago-social-btn(#fc6d26);\n}\n\n.btn-social-google,\n.btn-social-google-oauth,\n.btn-social-google-oauth2,\n.btn-social-google-plus,\n.btn-social-google-openidconnect {\n  .misago-social-btn(#dd4b39);\n}\n\n.btn-social-linkedin {\n  .misago-social-btn(#0077b5);\n}\n\n.btn-social-steam {\n  .misago-social-btn(#5c7e10);\n}\n\n.btn-social-twitter {\n  .misago-social-btn(#1da1f2);\n}\n\n.form-social-auth {\n  .row {\n    margin-top: @padding-base-vertical * -1;\n    margin-bottom: @padding-base-vertical * -1;\n  }\n\n  .btn {\n    margin: @padding-base-vertical 0px;\n  }\n}\n","//\n// Inputs Flavor\n// --------------------------------------------------\n\n// default input\ninput.form-control,\ntextarea.form-control {\n  border-color: @input-border;\n  box-shadow: inset 0px 0px 0px 1px @input-border;\n\n  &:focus {\n    border-color: @input-border-focus;\n    box-shadow: inset 0px 0px 0px 1px @input-border-focus;\n  }\n}\n\n.has-error input.form-control {\n  border-color: @state-danger-border;\n  box-shadow: inset 0px 0px 0px 1px @state-danger-border;\n\n  &:focus {\n    border-color: lighten(@state-danger-border, 20%);\n    box-shadow: inset 0px 0px 0px 1px lighten(@state-danger-border, 20%);\n  }\n}\n\n.has-success input.form-control {\n  border-color: @state-success-border;\n  box-shadow: inset 0px 0px 0px 1px @state-success-border;\n\n  &:focus {\n    border-color: lighten(@state-success-border, 20%);\n    box-shadow: inset 0px 0px 0px 1px lighten(@state-success-border, 20%);\n  }\n}\n\n// password strenght marker\n.password-strength {\n  margin-top: @line-height-computed / 2;\n\n  .text-small {\n    margin-top: @line-height-computed / 5;\n\n    color: lighten(@text-color, 25%);\n    font-size: @font-size-small;\n  }\n\n  .progress {\n    margin: 0px;\n  }\n}\n","//\n// Flavor Auth Message\n// --------------------------------------------------\n\n.auth-message {\n  background: @auth-message-bg;\n  padding: @line-height-computed * 4 0px;\n\n  .shadow-8dp();\n\n  p {\n    color: @auth-message-text-color;\n  }\n\n  .btn {\n    & {\n      background: @auth-message-btn-default-bg;\n      border-color: @auth-message-btn-default-border;\n\n      color: @auth-message-btn-default-color;\n    }\n\n    &:hover,\n    &:focus {\n      background: @auth-message-btn-default-hover-bg;\n      border-color: @auth-message-btn-default-hover-border;\n\n      color: @auth-message-btn-default-hover-color;\n    }\n\n    &:active {\n      background: @auth-message-btn-default-active-bg;\n      border-color: @auth-message-btn-default-active-border;\n\n      color: @auth-message-btn-default-active-color;\n    }\n  }\n}\n","//\n// Dropdown Flavor\n// --------------------------------------------------\n\n.dropdown-menu {\n  border: none;\n\n  .shadow-4dp();\n}\n\n// Navbar dropdown\n.user-dropdown .dropdown-header {\n  strong {\n    display: block;\n\n    color: @text-color;\n    font-weight: bold;\n  }\n\n  .user-stats {\n    margin-top: @line-height-computed / 2;\n\n    font-size: @font-size-small;\n\n    .material-icon {\n      margin-right: 3px;\n\n      position: relative;\n      bottom: 1px;\n\n      width: 14px;\n      height: 14px;\n\n      font-size: 14px;\n    }\n  }\n}\n\n.user-dropdown .guest-preview {\n  padding-bottom: @padding-large-vertical;\n}\n\n.user-dropdown .badge {\n  background-color: @brand-danger;\n}\n\n.user-dropdown {\n  a:hover,\n  a:focus,\n  a:active,\n  .btn-link:hover,\n  .btn-link:focus,\n  .btn-link:active {\n    .badge {\n      background-color: #fff;\n\n      color: @brand-danger;\n    }\n  }\n}\n\n// Mobile dropdown\n.mobile-dropdown.open {\n  margin: 0px;\n}\n","//\n// Flavor Navbar\n// --------------------------------------------------\n\n.navbar-misago {\n  border-bottom: none;\n  box-shadow: 0px 0px 3px @navbar-default-border;\n}\n\n// Round up user's avatar\n.navbar-misago .user-avatar {\n  background: #fff;\n  border-radius: @border-radius-small;\n}\n\n// Round up brand's icon\n.navbar-misago .brand-link img {\n  border-radius: @border-radius-small;\n}\n","//\n// Search Dropdown\n// --------------------------------------------------\n\n.dropdown-search-results {\n  border-radius: 0px 0px @border-radius-base @border-radius-base;\n}\n\n.dropdown-search-message {\n  border-top: 1px solid @gray-lighter;\n  padding: @padding-large-vertical @padding-large-horizontal;\n\n  color: @text-muted;\n}\n\n.dropdown-search-loader {\n  border-top: 1px solid @gray-lighter;\n  padding: @padding-large-vertical @padding-large-horizontal;\n}\n\n.dropdown-search-header {\n  border-top: 1px solid @gray-lighter;\n  padding: 8px 20px;\n\n  color: @text-muted;\n  font-weight: bold;\n}\n\n// result\n.dropdown-search-thread,\n.dropdown-search-user {\n  small {\n    color: @text-muted;\n  }\n}\n\n.dropdown-search-thread {\n  .dropdown-search-post-content {\n    overflow: hidden;\n    white-space: normal;\n    max-height: 47px;\n  }\n\n  .dropdown-search-post-footer {\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n}\n\n// footer\n.dropdown-search-footer {\n  padding-bottom: @padding-small-vertical;\n\n  &:last-child {\n    padding-bottom: 0px;\n  }\n}\n\n.dropdown-menu > li.dropdown-search-footer > a {\n  font-size: small;\n}\n","//\n// Flavor Footer\n// --------------------------------------------------\n\n// Make footer full width\n.misago-footer {\n  margin-top: @line-height-computed * 2;\n\n  .footer-content {\n    border-top: 1px solid @gray-lighter;\n    padding-top: @line-height-computed * 1;\n\n    color: @page-footer-text-color;\n\n    @media screen and (max-width: @screen-xs-max) {\n      text-align: center;\n\n      .site-footnote {\n        clear: both;\n        margin-bottom: @line-height-computed * 0.75;\n      }\n    }\n\n    a,\n    a:link,\n    a:visited {\n      color: @page-footer-link-color;\n    }\n\n    a:hover,\n    a:focus {\n      color: @page-footer-link-hover-color;\n    }\n\n    .misago-branding {\n      &,\n      &:link,\n      &:visited {\n        color: @page-footer-brand-color;\n      }\n\n      &:hover,\n      &:focus {\n        color: @page-footer-brand-hover-color;\n      }\n    }\n  }\n}\n","//\n// List Groups Flavor\n// --------------------------------------------------\n\n.list-group {\n  border-radius: @list-group-border-radius;\n\n  .list-group-item {\n    border-left-color: @list-group-outer-border;\n    border-right-color: @list-group-outer-border;\n  }\n\n  .list-group-item:first-child {\n    border-top-color: @list-group-outer-border;\n  }\n\n  .list-group-item:last-child {\n    border-bottom-color: @list-group-outer-border;\n  }\n}\n\n.list-group-item.empty-message {\n  padding-top: @line-height-computed;\n  padding-bottom: @line-height-computed;\n\n  text-align: center;\n\n  p {\n    margin: @line-height-computed / 2 0px;\n  }\n}\n","//\n// Navs Flavor\n// --------------------------------------------------\n\n.nav-side {\n  .box-shadow(none);\n}\n\n.nav-side > .list-group-item {\n  border-left: none;\n  border-right: none;\n  margin-bottom: 1px;\n\n  &:first-child {\n    border-top: none;\n  }\n\n  &:last-child {\n    border-bottom: none;\n  }\n\n  &,\n  &:link,\n  &:visited {\n    background: @side-nav-bg;\n    border: none;\n\n    color: @side-nav-color;\n  }\n\n  &:hover,\n  &:focus,\n  &:active {\n    background: @side-nav-hover-bg;\n\n    color: @side-nav-hover-color;\n  }\n\n  &.active {\n    &,\n    &:link,\n    &:visited,\n    &:hover,\n    &:focus,\n    &:active {\n      background: @side-nav-active-bg;\n\n      color: @side-nav-active-color;\n      font-weight: bold;\n\n      .badge {\n        background: @side-nav-bg;\n\n        color: @side-nav-color;\n      }\n    }\n  }\n}\n","//\n// Username History Flavor\n// --------------------------------------------------\n\n.username-history .user-avatar {\n  border-radius: @border-radius-base;\n}\n","//\n// Panels Flavor\n// --------------------------------------------------\n\n.panel {\n  border: none;\n  border-radius: @border-radius-base;\n\n  .panel-heading,\n  .panel-footer {\n    background: @panel-bg;\n  }\n\n  .panel-title {\n    color: @panel-title-color;\n  }\n\n  .form-group + .form-group {\n    margin-top: @line-height-computed;\n  }\n\n  .panel-body > .form-group:first-child {\n    margin-top: @line-height-computed / 2;\n  }\n\n  fieldset {\n    margin-top: @line-height-computed;\n\n    &:first-child {\n      margin-top: 0px;\n    }\n\n    legend {\n      border: none;\n\n      color: @panel-fieldset-color;\n      font-weight: 300;\n    }\n  }\n}\n\n// use default message icon color for panel messages\n.panel-message-body .message-icon {\n  color: @message-icon-color;\n}\n","//\n// Forms Flavor\n// --------------------------------------------------\n\n.panel-form {\n  border: 1px solid @panel-form-border;\n  box-shadow: none;\n}\n\n.panel-form .panel-heading,\n.panel-form .panel-footer {\n  border-color: @panel-form-border;\n}\n\n// remove bottom margin from poll panel\n.poll-form .panel {\n  margin: 0px;\n}\n\n// Override help text color\n.help-block,\n.help-block .text-small {\n  color: @gray-light;\n}\n","//\n// Categories Lists Flavor\n// --------------------------------------------------\n\n// Make category read status icon visually larger\n.category-main .media-left {\n  .read-status {\n    background: @category-read-color;\n    border-radius: @border-radius-base;\n    padding: @padding-small-vertical (@padding-large-vertical - 2px);\n  }\n\n  .material-icon {\n    height: 14px;\n    width: 14px;\n\n    color: @gray;\n    font-size: 14px;\n    line-height: 14px;\n  }\n\n  .read-status.item-new {\n    background-color: @category-new-color;\n\n    .material-icon {\n      color: #fff;\n    }\n  }\n\n  @media screen and (min-width: @screen-sm-min) {\n    padding: @padding-small-vertical 0px;\n  }\n}\n\n// Fix category main alignment\n.category-main .media-body {\n  padding-left: @padding-base-horizontal;\n\n  @media screen and (max-width: @screen-xs-max) {\n    padding-left: @padding-small-horizontal / 3;\n  }\n}\n\n.list-group-category-no-description {\n  .category-main .media-heading {\n    margin-top: @padding-large-vertical;\n\n    @media screen and (max-width: @screen-xs-max) {\n      margin-top: @padding-large-vertical / 2;\n    }\n  }\n}\n\n// Make category name larger\n.category-main .media-heading {\n  a,\n  a:link,\n  a:visited {\n    color: @gray-dark;\n  }\n\n  a:focus,\n  a:hover,\n  a:active {\n    color: @text-color;\n  }\n}\n\n// Fade out stats\n.category-stats {\n  color: @gray;\n}\n\n// Fade out category description\n.category-main .category-description p {\n  font-size: @font-size-small;\n\n  &:last-child {\n    margin-bottom: 0px;\n  }\n}\n\n// Round last poster's up avatar\n.category-last-thread img {\n  background-color: #fff;\n  border-radius: @border-radius-base;\n}\n\n// Last thread\n.category-last-thread .media-heading {\n  margin-bottom: 2px;\n\n  @media screen and (max-width: @screen-xs-max) {\n    margin-top: @line-height-computed / 2;\n  }\n}\n\n.category-last-thread .list-inline {\n  color: @gray-light;\n  font-size: @font-size-small;\n\n  a,\n  a:link,\n  a:visited {\n    color: @gray-light;\n  }\n\n  a:hover,\n  a:active,\n  a:focus {\n    color: @gray-dark;\n  }\n\n  .item-title {\n    &,\n    &:link,\n    &:visited {\n      color: @gray-dark;\n    }\n\n    &:hover,\n    &:active,\n    &:focus {\n      color: @text-color;\n    }\n  }\n}\n\n// Last thread message\n.category-thread-message {\n  color: @gray-light;\n\n  .material-icon {\n    padding: @padding-base-vertical 0px;\n    margin-right: @padding-base-vertical / 2;\n  }\n\n  @media screen and (max-width: @screen-xs-max) {\n    padding-top: @line-height-computed * 0.75;\n\n    font-size: @font-size-small;\n\n    .material-icon {\n      padding: 3px 0px;\n    }\n  }\n}\n","//\n// Thread Participants Flavor\n// --------------------------------------------------\n\n.panel-participants {\n  border: 1px solid @panel-form-border;\n}\n\n.participant-card .btn-user {\n  border: 0px !important;\n}\n\n.participant-card .dropdown-header-owner {\n  color: @brand-primary;\n\n  .material-icon {\n    width: 14px;\n    height: 14px;\n\n    font-size: 14px;\n    line-height: 14px;\n  }\n\n  .icon-text {\n    margin-left: 4px;\n\n    position: relative;\n    top: 2px;\n  }\n}\n\n.panel-participants p {\n  color: @gray-light;\n\n  @media screen and (max-width: @screen-xs-max) {\n    margin-top: @line-height-computed / 2;\n\n    text-align: center;\n  }\n}\n","//\n// Polls Flavor\n// --------------------------------------------------\n\n.panel-poll {\n  border: 1px solid @panel-form-border;\n}\n\n// Poll vote form\n.panel-poll .poll-select-choices {\n  margin-top: @line-height-computed / -2;\n}\n\n// Poll results styles\n.panel-poll .poll-details {\n  margin-bottom: @line-height-computed;\n\n  color: @gray-light;\n  font-size: @font-size-small;\n}\n\n.panel-poll .progress {\n  margin-top: @line-height-computed / 3;\n  margin-bottom: @line-height-computed / 4;\n}\n\n.panel-poll .poll-chart {\n  color: @gray-light;\n  font-size: @font-size-small;\n}\n\n.panel-poll .poll-options {\n  margin-top: @line-height-computed;\n}\n","//\n// Posting Form Flavor\n// --------------------------------------------------\n\n#posting-placeholder {\n  background-color: #fafbfc;\n}\n\n.posting-message {\n  .material-icon {\n    color: @message-info-icon-color;\n  }\n\n  .btn {\n    margin-top: @line-height-computed;\n  }\n}\n","//\n// Posts Flavor\n// --------------------------------------------------\n\n// Post body\n.panel-post {\n  background: @post-bg;\n  border: 1px solid @post-border;\n}\n\n// Post side\n.post-side {\n  color: @gray-light;\n\n  .poster-avatar {\n    border-radius: @border-radius-base;\n  }\n\n  .user-title {\n    color: @gray;\n\n    a,\n    a:link,\n    a:visited,\n    a:focus,\n    a:hover,\n    a:active {\n      color: @gray;\n    }\n  }\n}\n\n// Header\n.post-heading {\n  .label-unread {\n    background-color: @post-unread-label;\n    margin-right: @padding-large-horizontal;\n  }\n\n  .label-protected {\n    background-color: transparent;\n    margin-left: @padding-base-horizontal * 2;\n\n    position: relative;\n    top: 1px;\n\n    color: @post-protected-icon;\n\n    .material-icon {\n      margin-right: 2px;\n\n      position: relative;\n      top: -1px;\n\n      font-size: 16px;\n      line-height: 16px;\n    }\n  }\n\n  & > .btn-link {\n    padding-left: 0px;\n    padding-right: 0px;\n\n    &,\n    &:link,\n    &:visited {\n      color: @gray-light;\n    }\n\n    &:hover,\n    &:focus,\n    &:focus:active,\n    &:active {\n      color: @text-color;\n      text-decoration: none;\n    }\n  }\n\n  .btn-see-edits {\n    margin-left: @padding-base-horizontal * 2;\n  }\n}\n\n// Status\n.post-status-message {\n  border-radius: @border-radius-base;\n  margin-top: @line-height-computed / 2;\n  padding: @padding-base-vertical @padding-base-horizontal;\n\n  @media screen and (max-width: @screen-xs-max) {\n    font-size: @font-size-small;\n\n    .material-icon {\n      margin-top: 3px;\n    }\n\n    p {\n      margin-top: 0px;\n    }\n  }\n}\n\n// Post body\n.post-body:last-child {\n  padding-bottom: @line-height-computed / 2;\n}\n\n// Attachments\n.post-attachments {\n  background-color: @gray-lighter;\n  border: none;\n  border-radius: @border-radius-base;\n  margin-bottom: @line-height-computed * 1.5;\n\n  &:last-child {\n    margin-bottom: @line-height-computed / 2;\n  }\n\n  @media screen and (max-width: @screen-xs-max) {\n    border-radius: 0px;\n    margin: 0px -15px;\n    margin-bottom: @line-height-computed;\n  }\n}\n\n// Footer\n.post-footer {\n  & > .btn-link {\n    padding-left: 0px;\n    padding-right: 0px;\n\n    &,\n    &:link,\n    &:visited {\n      color: @gray-light;\n    }\n\n    &:hover,\n    &:focus,\n    &:focus:active,\n    &:active {\n      color: @text-color;\n      text-decoration: none;\n    }\n  }\n\n  p {\n    color: @gray-light;\n    font-size: @font-size-small;\n  }\n}\n\n// Hidden and invalid messages\n.post-body-hidden,\n.post-body-invalid {\n  padding-top: @line-height-computed / 2;\n  padding-bottom: @line-height-computed / 2;\n\n  .lead {\n    margin-bottom: @line-height-computed / 2;\n  }\n\n  .text-muted {\n    margin-bottom: 0px;\n\n    font-size: @font-size-small;\n  }\n}\n\n// Fade out hidden posts a little\n.post-hidden {\n  .opacity(0.75);\n}\n","//\n// Post Feed Flavor\n// --------------------------------------------------\n\n.post-feed .panel-body {\n  padding-bottom: 0px;\n}\n\n.post-feed .post-body {\n  position: relative;\n  padding-top: 0px;\n  padding-bottom: @line-height-computed;\n  max-height: 300px;\n  overflow-y: hidden;\n\n  &:after {\n    box-shadow: 0px 0px 16px 16px #ffffff;\n    display: block;\n\n    position: absolute;\n    bottom: 0px;\n\n    height: 0px;\n    width: 100%;\n\n    content: \"-\";\n    color: transparent;\n  }\n}\n","//\n// Events Flavor\n// --------------------------------------------------\n\n// Style label\n.posts-list .event .event-label {\n  margin-bottom: @line-height-computed / 4;\n}\n\n.posts-list .event .label-unread {\n  background-color: @post-unread-label;\n\n  color: #fff;\n}\n\n// Style info text\n.posts-list .event-info {\n  a,\n  a:link,\n  a:visited,\n  .btn-link {\n    color: @gray;\n  }\n\n  a:focus,\n  a:active,\n  a:focus:active,\n  .btn-link:focus,\n  .btn-link:active,\n  .btn-link:focus:active {\n    color: @text-color;\n  }\n}\n\n// Fade out hidden event\n.posts-list .event-hidden {\n  .opacity(0.33);\n}\n","//\n// User Card Flavor\n// --------------------------------------------------\n\n// Background color\n.user-card {\n  background: @user-card-bg;\n}\n\n// Round avatar corners\n.user-card-small-avatar,\n.user-card-avatar {\n  img {\n    border-radius: @border-radius-base;\n  }\n}\n\n// Sizing and spacing on large avatar\n.user-card-avatar {\n  margin: @line-height-computed 0px;\n\n  img {\n    width: 150px;\n    height: 150px;\n  }\n}\n\n// Upsize the user name\n.user-card-username {\n  a,\n  a:link,\n  a:visited,\n  a:hover,\n  a:focus,\n  a:active {\n    color: @text-color;\n    font-size: @font-size-large;\n    font-weight: bold;\n  }\n}\n\n// User title\n.user-card-title {\n  span,\n  a,\n  a:link,\n  a:visited {\n    color: @gray;\n  }\n\n  a:focus,\n  a:hover,\n  a:active {\n    color: @text-color;\n  }\n}\n\n// User stats\n.user-card-stats {\n  @media screen and (min-width: @screen-sm-min) {\n    margin-top: @line-height-computed;\n  }\n\n  ul {\n    margin: 0px;\n  }\n\n  li {\n    display: inline-block;\n    margin-right: @padding-base-horizontal;\n\n    color: @gray-light;\n    font-size: @font-size-small;\n\n    @media screen and (min-width: @screen-sm-min) {\n      margin: 0px @padding-base-horizontal / 2;\n    }\n  }\n\n  li.user-stat-empty {\n    display: none;\n  }\n}\n\n// Divide stats in two on larger screen\n@media screen and (min-width: @screen-sm-min) {\n  li.user-stat-divider {\n    display: block;\n    margin: 0px;\n  }\n}\n\n@media screen and (max-width: @screen-xs-max) {\n  li.user-stat-divider {\n    display: none;\n  }\n}\n\n// Make stats 60px min height on tablets and up\n@media screen and (min-width: @screen-sm-min) {\n  .user-card-stats {\n    min-height: 60px;\n  }\n}\n\n// Reduce gutter on small grid\n@media screen and (max-width: @screen-xs-max) {\n  .user-card-left {\n    padding-right: 0px;\n  }\n}\n","//\n// Progress Bars Flavor\n// --------------------------------------------------\n\n// Make progress bars flat\n.progress,\n.progress .progress-bar {\n  .box-shadow(none);\n\n  height: 8px;\n}\n","//\n// Markup Flavor\n// --------------------------------------------------\n\n// Round images\n.misago-markup img {\n  border-radius: @border-radius-base;\n}\n\n// Quote block\n.misago-markup .quote-block,\n.misago-markup blockquote {\n  background-color: #ffecb3;\n  border-color: #b3e5fc;\n  overflow: hidden;\n\n  color: #3e2723;\n\n  .quote-heading {\n    background-color: #ffe082;\n    border: none;\n\n    color: #795548;\n\n    a,\n    a:link,\n    a:visited {\n      color: #5d4037;\n    }\n\n    a:hover,\n    a:focus,\n    a:active {\n      color: #3e2723;\n    }\n  }\n\n  hr {\n    border-color: #ffca28;\n  }\n}\n\n.misago-markup > .quote-block,\n.misago-markup > blockquote {\n  background: #ffecb3;\n  border: none;\n  border-radius: @border-radius-base;\n\n  .quote-block {\n    background: #ffecb3;\n  }\n}\n\n.misago-markup .quote-body {\n  background: #ffecb3;\n\n  & > .quote-block,\n  & > blockquote {\n    border-color: #ffe082;\n    border-radius: @border-radius-base;\n  }\n}\n\n// Spoiler block\n.misago-markup .spoiler-block {\n  background: repeating-linear-gradient(\n    45deg,\n    fadeout(@gray-lighter, 50%),\n    fadeout(@gray-lighter, 50%) 10px,\n    @post-bg 10px,\n    @post-bg 20px\n  );\n  border: none;\n}\n\n.misago-markup .spoiler-body {\n  background: transparent;\n  -webkit-filter: blur(5px);\n  -moz-filter: blur(5px);\n  -o-filter: blur(5px);\n  -ms-filter: blur(5px);\n  filter: blur(5px);\n  color: @text-color;\n}\n\n.misago-markup .spoiler-block.revealed .spoiler-body {\n  -webkit-filter: none;\n  -moz-filter: none;\n  -o-filter: none;\n  -ms-filter: none;\n  filter: none;\n}\n\n.misago-markup .spoiler-overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: fadeout(@post-bg, 90%);\n}\n\n.misago-markup .spoiler-reveal {\n  .btn-default();\n}\n\n.misago-markup .spoiler-reveal,\n.misago-markup .spoiler-reveal:active,\n.misago-markup .spoiler-reveal:hover {\n  border-radius: 4px;\n  box-shadow: 0px 0px 0px 4px @post-bg;\n  padding: @padding-base-vertical @padding-base-horizontal;\n}\n","//\n// Modal Flavor\n// --------------------------------------------------\n\n// Custom header styles\n.modal-header {\n  background: @modal-header-bg;\n  border-bottom-color: @modal-header-border-color;\n  border-radius: @border-radius-large @border-radius-large 0px 0px;\n\n  color: @modal-header-color;\n\n  .close {\n    padding: 0px 6px;\n\n    color: @modal-header-color;\n    font-size: 24px;\n    line-height: 24px;\n    text-shadow: none;\n  }\n}\n\n// Color message icon\n.modal-message .message-icon {\n  color: @message-icon-color;\n}\n\n// Even out space between form fields\n.modal-body > .form-group {\n  margin: @line-height-computed 0px;\n\n  &:first-child {\n    margin-top: 0px;\n  }\n\n  &:last-child {\n    margin-bottom: 0px;\n  }\n}\n\n// Sign in modal\n.modal-sign-in {\n  .modal-body {\n    padding-top: 0px;\n    padding-bottom: 0px;\n\n    & > .form-group {\n      margin: @line-height-computed 0px;\n    }\n  }\n}\n\n// Register modal\n.legal-footnote {\n  label {\n    font-weight: bold;\n  }\n\n  .help-block {\n    margin-left: 20px;\n\n    color: @brand-danger;\n  }\n}\n\n// Avatar crop\n.modal-avatar-index {\n  .avatar-preview {\n    background: #fff;\n    border-radius: @border-radius-large;\n  }\n}\n\n.modal-avatar-crop {\n  .cropit-preview {\n    background: #fff;\n    margin: @line-height-computed 0px;\n  }\n\n  .cropit-image-zoom-input {\n    margin-top: @line-height-computed * 2;\n    margin-bottom: @line-height-computed;\n  }\n}\n\n// Post likes\n.modal-post-likers {\n  .media {\n    border-bottom: 1px solid @gray-lighter;\n    padding-bottom: 15px; // hardcoded in BS less\n\n    img {\n      border-radius: @border-radius-base;\n\n      width: 40px;\n      height: 40px;\n    }\n\n    &:last-child {\n      border: none;\n      padding-bottom: 0px;\n    }\n  }\n}\n","//\n// Well Flavor\n// --------------------------------------------------\n\n.well {\n  border: 1px solid @well-border;\n}\n","//\n// Active Posters Flavor\n// --------------------------------------------------\n\n.active-posters .rank-user-avatar img {\n  border-radius: @border-radius-base;\n}\n\n.active-posters .user-details {\n  color: @gray-light;\n\n  a.rank-name {\n    &,\n    &:link,\n    &:visited {\n      color: @gray;\n      font-weight: normal;\n    }\n\n    &:focus,\n    &:hover,\n    &:active {\n      color: @text-color;\n    }\n  }\n\n  span.rank-name {\n    color: @gray;\n    font-weight: normal;\n  }\n}\n\n.active-posters small {\n  color: @gray-light;\n}\n","//\n// Message Pages Flavor\n// --------------------------------------------------\n\n.page-error .message-icon {\n  color: @error-icon-color;\n}\n\n.page-message .message-icon {\n  color: @message-icon-color;\n}\n\n.page-message-info .message-icon {\n  color: @message-info-icon-color;\n}\n\n.page-message-success .message-icon {\n  color: @message-success-icon-color;\n}\n","//\n// User Options Flavor\n// --------------------------------------------------\n\n.page-options .message-line {\n  color: @gray-light;\n\n  a,\n  a:link,\n  a:visited {\n    color: @gray-light;\n  }\n\n  a:hover,\n  a:focus,\n  a:focus:active,\n  a:active {\n    color: @text-color;\n  }\n}\n","//\n// Profile Details\n// --------------------------------------------------\n\n.panel-profile-details-group.panel {\n  border: 1px solid @panel-form-border;\n}\n\n.panel-profile-details-group.panel .form-group {\n  margin: 0px;\n}\n\n.panel-profile-details-group .form-control-static {\n  p:last-child {\n    margin-bottom: 0px;\n  }\n}\n","//\n// Default flavors for user ranks\n// --------------------------------------------------\n\n.post-rank-flavor(@border, @title) {\n  .panel-post {\n    border-color: @border;\n  }\n\n  .user-title {\n    color: @title;\n\n    a,\n    a:link,\n    a:visited,\n    a:focus,\n    a:hover,\n    a:active {\n      color: @title;\n    }\n  }\n}\n\n.card-rank-flavor(@border, @title, @color) {\n  .panel-body {\n    background: @body-bg;\n    border: 2px solid @border;\n    border-radius: @panel-border-radius;\n    padding: @panel-body-padding - 2px;\n  }\n\n  .user-card-title {\n    color: @title;\n\n    a.user-title {\n      &,\n      &:link,\n      &:visited,\n      &:focus,\n      &:hover,\n      &:active {\n        color: @title;\n      }\n    }\n  }\n\n  .user-card-stats li {\n    color: @color;\n  }\n}\n\n.list-group-rank-flavor(@border, @title) {\n  border-left: 4px solid @border;\n  padding-left: 11px;\n\n  span.rank-name {\n    color: @title;\n  }\n\n  a.rank-name {\n    &,\n    &:link,\n    &:visited,\n    &:focus,\n    &:hover,\n    &:active {\n      color: @title;\n    }\n  }\n}\n\n.user-profile-rank-flavor(@color) {\n  .user-rank {\n    color: @color;\n\n    a,\n    a:link,\n    a:visited,\n    a:focus,\n    a:hover,\n    a:active {\n      color: @color;\n    }\n  }\n}\n\n// Posts\n.post-primary {\n  .post-rank-flavor(#b388ff, #6200ea);\n}\n\n.post-success {\n  .post-rank-flavor(#00c853, #388e3c);\n}\n\n.post-warning {\n  .post-rank-flavor(#ffab40, #ff6d00);\n}\n\n.post-danger {\n  .post-rank-flavor(#ff8a80, #d50000);\n}\n\n// Cards\n.user-card-primary {\n  .card-rank-flavor(#b388ff, #6200ea, #9575cd);\n}\n\n.user-card-success {\n  .card-rank-flavor(#00c853, #388e3c, #66bb6a);\n}\n\n.user-card-warning {\n  .card-rank-flavor(#ffab40, #ff6d00, #ff6e40);\n}\n\n.user-card-danger {\n  .card-rank-flavor(#ff8a80, #d50000, #e57373);\n}\n\n// Posters ranking\n.list-group {\n  .list-group-rank-primary {\n    .list-group-rank-flavor(#7e57c2, #6200ea);\n  }\n\n  .list-group-rank-success {\n    .list-group-rank-flavor(#9ccc65, #388e3c);\n  }\n\n  .list-group-rank-warning {\n    .list-group-rank-flavor(#ff7043, #ff6d00);\n  }\n\n  .list-group-rank-danger {\n    .list-group-rank-flavor(#f44336, #d50000);\n  }\n}\n\n// User profiles\n.page-header-rank-primary {\n  .user-profile-rank-flavor(#6200ea);\n}\n\n.page-header-rank-success {\n  .user-profile-rank-flavor(#388e3c);\n}\n\n.page-header-rank-warning {\n  .user-profile-rank-flavor(#ff6d00);\n}\n\n.page-header-rank-danger {\n  .user-profile-rank-flavor(#d50000);\n}\n"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/misago/static/misago/js/misago.js b/misago/static/misago/js/misago.js
index 538dddd3cd..adb66732f9 100644
--- a/misago/static/misago/js/misago.js
+++ b/misago/static/misago/js/misago.js
@@ -1,3 +1,3 @@
 /*! For license information please see misago.js.LICENSE.txt */
-!function(){var e,t={54116:function(e,t){var n,a;(a="object"==typeof window&&window||"object"==typeof self&&self)&&(a.hljs=function(e){function t(e){return e.replace(/[&<>]/gm,(function(e){return x[e]}))}function n(e){return e.nodeName.toLowerCase()}function a(e,t){var n=e&&e.exec(t);return n&&0===n.index}function s(e){return b.test(e)}function i(e,t){var n,a={};for(n in e)a[n]=e[n];if(t)for(n in t)a[n]=t[n];return a}function o(e){var t=[];return function e(a,s){for(var i=a.firstChild;i;i=i.nextSibling)3===i.nodeType?s+=i.nodeValue.length:1===i.nodeType&&(t.push({event:"start",offset:s,node:i}),s=e(i,s),n(i).match(/br|hr|img|input/)||t.push({event:"stop",offset:s,node:i}));return s}(e,0),t}function r(e,a,s){function i(){return e.length&&a.length?e[0].offset!==a[0].offset?e[0].offset<a[0].offset?e:a:"start"===a[0].event?e:a:e.length?e:a}function o(e){u+="<"+n(e)+v.map.call(e.attributes,(function(e){return" "+e.nodeName+'="'+t(e.value)+'"'})).join("")+">"}function r(e){u+="</"+n(e)+">"}function l(e){("start"===e.event?o:r)(e.node)}for(var c=0,u="",d=[];e.length||a.length;){var p=i();if(u+=t(s.substring(c,p[0].offset)),c=p[0].offset,p===e){d.reverse().forEach(r);do{l(p.splice(0,1)[0]),p=i()}while(p===e&&p.length&&p[0].offset===c);d.reverse().forEach(o)}else"start"===p[0].event?d.push(p[0].node):d.pop(),l(p.splice(0,1)[0])}return u+t(s.substr(c))}function l(e){function t(e){return e&&e.source||e}function n(n,a){return new RegExp(t(n),"m"+(e.cI?"i":"")+(a?"g":""))}!function a(s,o){if(!s.compiled){if(s.compiled=!0,s.k=s.k||s.bK,s.k){var r={},l=function(t,n){e.cI&&(n=n.toLowerCase()),n.split(" ").forEach((function(e){var n=e.split("|");r[n[0]]=[t,n[1]?Number(n[1]):1]}))};"string"==typeof s.k?l("keyword",s.k):m(s.k).forEach((function(e){l(e,s.k[e])})),s.k=r}s.lR=n(s.l||/\w+/,!0),o&&(s.bK&&(s.b="\\b("+s.bK.split(" ").join("|")+")\\b"),s.b||(s.b=/\B|\b/),s.bR=n(s.b),s.e||s.eW||(s.e=/\B|\b/),s.e&&(s.eR=n(s.e)),s.tE=t(s.e)||"",s.eW&&o.tE&&(s.tE+=(s.e?"|":"")+o.tE)),s.i&&(s.iR=n(s.i)),null==s.r&&(s.r=1),s.c||(s.c=[]);var c=[];s.c.forEach((function(e){e.v?e.v.forEach((function(t){c.push(i(e,t))})):c.push("self"===e?s:e)})),s.c=c,s.c.forEach((function(e){a(e,s)})),s.starts&&a(s.starts,o);var u=s.c.map((function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b})).concat([s.tE,s.i]).map(t).filter(Boolean);s.t=u.length?n(u.join("|"),!0):{exec:function(){return null}}}}(e)}function c(e,n,s,i){function o(e,t){var n,s;for(n=0,s=t.c.length;s>n;n++)if(a(t.c[n].bR,e))return t.c[n]}function r(e,t){if(a(e.eR,t)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?r(e.parent,t):void 0}function d(e,t){return!s&&a(t.iR,e)}function p(e,t){var n=b.cI?t[0].toLowerCase():t[0];return e.k.hasOwnProperty(n)&&e.k[n]}function h(e,t,n,a){var s='<span class="'+(a?"":k.classPrefix);return(s+=e+'">')+t+(n?"":N)}function v(){w+=null!=_.sL?function(){var e="string"==typeof _.sL;if(e&&!Z[_.sL])return t(R);var n=e?c(_.sL,R,!0,x[_.sL]):u(R,_.sL.length?_.sL:void 0);return _.r>0&&(C+=n.r),e&&(x[_.sL]=n.top),h(n.language,n.value,!1,!0)}():function(){var e,n,a,s;if(!_.k)return t(R);for(s="",n=0,_.lR.lastIndex=0,a=_.lR.exec(R);a;)s+=t(R.substring(n,a.index)),(e=p(_,a))?(C+=e[1],s+=h(e[0],t(a[0]))):s+=t(a[0]),n=_.lR.lastIndex,a=_.lR.exec(R);return s+t(R.substr(n))}(),R=""}function m(e){w+=e.cN?h(e.cN,"",!0):"",_=Object.create(e,{parent:{value:_}})}function g(e,t){if(R+=e,null==t)return v(),0;var n=o(t,_);if(n)return n.skip?R+=t:(n.eB&&(R+=t),v(),n.rB||n.eB||(R=t)),m(n),n.rB?0:t.length;var a=r(_,t);if(a){var s=_;s.skip?R+=t:(s.rE||s.eE||(R+=t),v(),s.eE&&(R=t));do{_.cN&&(w+=N),_.skip||(C+=_.r),_=_.parent}while(_!==a.parent);return a.starts&&m(a.starts),s.rE?0:t.length}if(d(t,_))throw new Error('Illegal lexeme "'+t+'" for mode "'+(_.cN||"<unnamed>")+'"');return R+=t,t.length||1}var b=f(e);if(!b)throw new Error('Unknown language: "'+e+'"');l(b);var y,_=i||b,x={},w="";for(y=_;y!==b;y=y.parent)y.cN&&(w=h(y.cN,"",!0)+w);var R="",C=0;try{for(var S,E,L=0;_.t.lastIndex=L,S=_.t.exec(n);)E=g(n.substring(L,S.index),S[0]),L=S.index+E;for(g(n.substr(L)),y=_;y.parent;y=y.parent)y.cN&&(w+=N);return{r:C,value:w,language:e,top:_}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{r:0,value:t(n)};throw e}}function u(e,n){n=n||k.languages||m(Z);var a={r:0,value:t(e)},s=a;return n.filter(f).forEach((function(t){var n=c(t,e,!1);n.language=t,n.r>s.r&&(s=n),n.r>a.r&&(s=a,a=n)})),s.language&&(a.second_best=s),a}function d(e){return k.tabReplace||k.useBR?e.replace(_,(function(e,t){return k.useBR&&"\n"===e?"<br>":k.tabReplace?t.replace(/\t/g,k.tabReplace):void 0})):e}function p(e){var t,n,a,i,l,p=function(e){var t,n,a,i,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",n=y.exec(o))return f(n[1])?n[1]:"no-highlight";for(t=0,a=(o=o.split(/\s+/)).length;a>t;t++)if(s(i=o[t])||f(i))return i}(e);s(p)||(k.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n"):t=e,l=t.textContent,a=p?c(p,l,!0):u(l),(n=o(t)).length&&((i=document.createElementNS("http://www.w3.org/1999/xhtml","div")).innerHTML=a.value,a.value=r(n,o(i),l)),a.value=d(a.value),e.innerHTML=a.value,e.className=function(e,t,n){var a=t?g[t]:n,s=[e.trim()];return e.match(/\bhljs\b/)||s.push("hljs"),-1===e.indexOf(a)&&s.push(a),s.join(" ").trim()}(e.className,p,a.language),e.result={language:a.language,re:a.r},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.r}))}function h(){if(!h.called){h.called=!0;var e=document.querySelectorAll("pre code");v.forEach.call(e,p)}}function f(e){return e=(e||"").toLowerCase(),Z[e]||Z[g[e]]}var v=[],m=Object.keys,Z={},g={},b=/^(no-?highlight|plain|text)$/i,y=/\blang(?:uage)?-([\w-]+)\b/i,_=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,N="</span>",k={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},x={"&":"&amp;","<":"&lt;",">":"&gt;"};return e.highlight=c,e.highlightAuto=u,e.fixMarkup=d,e.highlightBlock=p,e.configure=function(e){k=i(k,e)},e.initHighlighting=h,e.initHighlightingOnLoad=function(){addEventListener("DOMContentLoaded",h,!1),addEventListener("load",h,!1)},e.registerLanguage=function(t,n){var a=Z[t]=n(e);a.aliases&&a.aliases.forEach((function(e){g[e]=t}))},e.listLanguages=function(){return m(Z)},e.getLanguage=f,e.inherit=i,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\b/},e.C=function(t,n,a){var s=e.inherit({cN:"comment",b:t,e:n,c:[]},a||{});return s.c.push(e.PWM),s.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),s},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e}({}),void 0===(n=function(){return a.hljs}.apply(t,[]))||(e.exports=n)),hljs.registerLanguage("xml",(function(e){var t={eW:!0,i:/</,r:0,c:[{cN:"attr",b:"[A-Za-z0-9\\._:-]+",r:0},{b:/=\s*/,r:0,c:[{cN:"string",endsParent:!0,v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},e.C("\x3c!--","--\x3e",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0}]},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{name:"style"},c:[t],starts:{e:"</style>",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{name:"script"},c:[t],starts:{e:"<\/script>",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}})),hljs.registerLanguage("markdown",(function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}|\t)",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}})),hljs.registerLanguage("ini",(function(e){var t={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"section",b:/^\s*\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_-]+\s*=\s*/,e:"$",rB:!0,c:[{cN:"attr",b:/[a-z0-9\[\]_-]+/},{b:/=/,eW:!0,r:0,c:[{cN:"literal",b:/\bon|off|true|false|yes|no\b/},{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},t,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM]}]}]}})),hljs.registerLanguage("python",(function(e){var t={cN:"meta",b:/^(>>>|\.\.\.) /},n={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[t],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[t],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},e.ASM,e.QSM]},a={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},s={cN:"params",b:/\(/,e:/\)/,c:["self",t,a,n]};return{aliases:["py","gyp"],k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},i:/(<\/|->|\?)|=>/,c:[t,a,n,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,s,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}})),hljs.registerLanguage("css",(function(e){var t={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:"[a-zA-Z-][a-zA-Z0-9_-]*",r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,t]}]}})),hljs.registerLanguage("less",(function(e){var t="[\\w-]+",n="("+t+"|@{"+t+"})",a=[],s=[],i=function(e){return{cN:"string",b:"~?"+e+".*?"+e}},o=function(e,t,n){return{cN:e,b:t,r:n}},r={b:"\\(",e:"\\)",c:s,r:0};s.push(e.CLCM,e.CBCM,i("'"),i('"'),e.CSSNM,{b:"(url|data-uri)\\(",starts:{cN:"string",e:"[\\)\\n]",eE:!0}},o("number","#[0-9A-Fa-f]+\\b"),r,o("variable","@@?"+t,10),o("variable","@{"+t+"}"),o("built_in","~?`[^`]*?`"),{cN:"attribute",b:t+"\\s*:",e:":",rB:!0,eE:!0},{cN:"meta",b:"!important"});var l=s.concat({b:"{",e:"}",c:a}),c={bK:"when",eW:!0,c:[{bK:"and not"}].concat(s)},u={b:n+"\\s*:",rB:!0,e:"[;}]",r:0,c:[{cN:"attribute",b:n,e:":",eE:!0,starts:{eW:!0,i:"[<=$]",r:0,c:s}}]},d={cN:"keyword",b:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{e:"[;{}]",rE:!0,c:s,r:0}},p={cN:"variable",v:[{b:"@"+t+"\\s*:",r:15},{b:"@"+t}],starts:{e:"[;}]",rE:!0,c:l}},h={v:[{b:"[\\.#:&\\[>]",e:"[;{}]"},{b:n,e:"{"}],rB:!0,rE:!0,i:"[<='$\"]",r:0,c:[e.CLCM,e.CBCM,c,o("keyword","all\\b"),o("variable","@{"+t+"}"),o("selector-tag",n+"%?",0),o("selector-id","#"+n),o("selector-class","\\."+n,0),o("selector-tag","&",0),{cN:"selector-attr",b:"\\[",e:"\\]"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"\\(",e:"\\)",c:l},{b:"!important"}]};return a.push(e.CLCM,e.CBCM,d,p,u,h),{cI:!0,i:"[=>'/<($\"]",c:a}})),hljs.registerLanguage("scss",(function(e){var t={cN:"variable",b:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},n={cN:"number",b:"#[0-9A-Fa-f]+"};return e.CSSNM,e.QSM,e.ASM,e.CBCM,{cI:!0,i:"[=/|']",c:[e.CLCM,e.CBCM,{cN:"selector-id",b:"\\#[A-Za-z0-9_-]+",r:0},{cN:"selector-class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"selector-attr",b:"\\[",e:"\\]",i:"$"},{cN:"selector-tag",b:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",r:0},{b:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{b:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},t,{cN:"attribute",b:"\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",i:"[^\\s]"},{b:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{b:":",e:";",c:[t,n,e.CSSNM,e.QSM,e.ASM,{cN:"meta",b:"!important"}]},{b:"@",e:"[{;]",k:"mixin include extend for if else each while charset import debug media page content font-face namespace warn",c:[t,e.QSM,e.ASM,n,e.CSSNM,{b:"\\s[A-Za-z0-9_.-]+",r:0}]}]}})),hljs.registerLanguage("json",(function(e){var t={literal:"true false null"},n=[e.QSM,e.CNM],a={e:",",eW:!0,eE:!0,c:n,k:t},s={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(a,{b:/:/})],i:"\\S"},i={b:"\\[",e:"\\]",c:[e.inherit(a)],i:"\\S"};return n.splice(n.length,0,s,i),{c:n,k:t,i:"\\S"}})),hljs.registerLanguage("javascript",(function(e){var t="[A-Za-z$_][0-9A-Za-z$_]*",n={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},s={cN:"subst",b:"\\$\\{",e:"\\}",k:n,c:[]},i={cN:"string",b:"`",e:"`",c:[e.BE,s]};s.c=[e.ASM,e.QSM,i,a,e.RM];var o=s.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:n,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,i,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:t+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:t,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+t+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:t},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:n,c:o}]}]},{b:/</,e:/(\/\w+|\w+\/)>/,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:t}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:o}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}})),hljs.registerLanguage("bash",(function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},n={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]};return{aliases:["sh","zsh"],l:/-?[a-z\._]+/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,n,{cN:"string",b:/'/,e:/'/},t]}}))},98936:function(e,t,n){"use strict";n.d(t,{gq:function(){return o},Z6:function(){return r},kw:function(){return l}});var a=n(22928),s=n(94184),i=n.n(s),o=(n(57588),function(e){var t=e.children,n=e.className;return(0,a.Z)("div",{className:i()("flex-row",n)},void 0,t)}),r=function(e){var t=e.children,n=e.className,s=e.shrink;return(0,a.Z)("div",{className:i()("flex-row-col",n,{"flex-row-col-shrink":s})},void 0,t)},l=function(e){var t=e.auto,n=e.children,s=e.className;return(0,a.Z)("div",{className:i()("flex-row-section",{"flex-row-section-auto":t},s)},void 0,n)}},59131:function(e,t,n){"use strict";var a=n(22928);n(57588),t.Z=function(e){var t=e.children;return(0,a.Z)("div",{className:"container page-container"},void 0,t)}},99755:function(e,t,n){"use strict";n.d(t,{mr:function(){return r},gC:function(){return l},sP:function(){return c},eA:function(){return u},Ql:function(){return d},bM:function(){return p},Iv:function(){return h}});var a,s=n(22928),i=n(94184),o=n.n(i),r=(n(57588),function(e){var t=e.children,n=e.className,i=e.styleName;return(0,s.Z)("div",{className:o()("page-header",n,i&&"page-header-"+i)},void 0,(0,s.Z)("div",{className:"page-header-bg-image"},void 0,(0,s.Z)("div",{className:"page-header-bg-overlay"},void 0,a||(a=(0,s.Z)("div",{className:"page-header-image"})),t)))}),l=function(e){var t=e.children,n=e.className,a=e.styleName;return(0,s.Z)("div",{className:o()("page-header-banner",n,a&&"page-header-banner-"+a)},void 0,(0,s.Z)("div",{className:"page-header-banner-bg-image"},void 0,(0,s.Z)("div",{className:"page-header-banner-bg-overlay"},void 0,t)))},c=function(e){var t=e.children;return(0,s.Z)("div",{className:"container page-header-container"},void 0,t)},u=function(e){var t=e.children,n=e.className;return(0,s.Z)("div",{className:o()("page-header-details",n)},void 0,t)},d=function(e){var t=e.className,n=e.message;return(0,s.Z)("div",{className:o()("page-header-message",t),dangerouslySetInnerHTML:{__html:n}})},p=function(e){var t=e.children,n=e.className;return(0,s.Z)("div",{className:o()("page-header-message",n)},void 0,t)},h=function(e){var t=e.styleName,n=e.header,a=e.message;return(0,s.Z)(c,{},void 0,(0,s.Z)(r,{styleName:t},void 0,(0,s.Z)(l,{styleName:t},void 0,(0,s.Z)("h1",{},void 0,n)),a&&(0,s.Z)(u,{styleName:t},void 0,a)))}},26106:function(e,t,n){"use strict";var a=n(22928),s=(n(57588),n(32233)),i=n(89627),o=function(e){var t=e.agreement,n=e.checked,s=e.errors,o=e.url,r=e.value,l=e.onChange;if(!o)return null;var c=interpolate('<a href="%(url)s" target="_blank">%(agreement)s</a>',{agreement:(0,i.Z)(t),url:(0,i.Z)(o)},!0),u=interpolate(gettext("I have read and accept %(agreement)s."),{agreement:c},!0);return(0,a.Z)("div",{className:"checkbox legal-footnote"},void 0,(0,a.Z)("label",{},void 0,(0,a.Z)("input",{checked:n,type:"checkbox",value:r,onChange:l}),(0,a.Z)("span",{dangerouslySetInnerHTML:{__html:u}})),s&&s.map((function(e,t){return(0,a.Z)("div",{className:"help-block errors"},t,e)})))};t.Z=function(e){var t=e.errors,n=e.privacyPolicy,i=e.termsOfService,r=e.onPrivacyPolicyChange,l=e.onTermsOfServiceChange,c=s.Z.get("TERMS_OF_SERVICE_ID"),u=s.Z.get("TERMS_OF_SERVICE_URL"),d=s.Z.get("PRIVACY_POLICY_ID"),p=s.Z.get("PRIVACY_POLICY_URL");return c||d?(0,a.Z)("div",{},void 0,(0,a.Z)(o,{agreement:gettext("the terms of service"),checked:null!==i,errors:t.termsOfService,url:u,value:c,onChange:l}),(0,a.Z)(o,{agreement:gettext("the privacy policy"),checked:null!==n,errors:t.privacyPolicy,url:p,value:d,onChange:r})):null}},47235:function(e,t,n){"use strict";var a,s=n(22928),i=(n(57588),n(32233)),o=function(e){var t=e.className,n=e.text;return n?(0,s.Z)("h5",{className:t||""},void 0,n):null};t.Z=function(e){var t=e.buttonClassName,n=e.buttonLabel,r=e.formLabel,l=e.header,c=e.labelClassName,u=i.Z.get("SOCIAL_AUTH");return 0===u.length?null:(0,s.Z)("div",{className:"form-group form-social-auth"},void 0,(0,s.Z)(o,{className:c,text:l}),(0,s.Z)("div",{className:"row"},void 0,u.map((function(e){var a=e.id,i=e.name,o=e.button_text,r=e.button_color,l=e.url,c="btn btn-block btn-default btn-social-"+a,u=r?{color:r}:null,d=o||interpolate(n,{site:i},!0);return(0,s.Z)("div",{className:t||"col-xs-12"},a,(0,s.Z)("a",{className:c,style:u,href:l},void 0,d))}))),a||(a=(0,s.Z)("hr",{})),(0,s.Z)(o,{className:c,text:r}))}},50366:function(e,t,n){"use strict";var a,s,i,o,r,l,c,u=n(22928);n(57588),t.Z=function(e){var t=e.thread;return(0,u.Z)("ul",{className:"thread-flags"},void 0,2==t.weight&&(0,u.Z)("li",{className:"thread-flag-pinned-globally",title:gettext("Pinned globally")},void 0,a||(a=(0,u.Z)("span",{className:"material-icon"},void 0,"bookmark"))),1==t.weight&&(0,u.Z)("li",{className:"thread-flag-pinned-locally",title:gettext("Pinned in category")},void 0,s||(s=(0,u.Z)("span",{className:"material-icon"},void 0,"bookmark_outline"))),t.best_answer&&(0,u.Z)("li",{className:"thread-flag-answered",title:gettext("Answered")},void 0,i||(i=(0,u.Z)("span",{className:"material-icon"},void 0,"check_circle"))),t.has_poll&&(0,u.Z)("li",{className:"thread-flag-poll",title:gettext("Poll")},void 0,o||(o=(0,u.Z)("span",{className:"material-icon"},void 0,"poll"))),(t.is_unapproved||t.has_unapproved_posts)&&(0,u.Z)("li",{className:"thread-flag-unapproved",title:t.is_unapproved?gettext("Awaiting approval"):gettext("Has unapproved posts")},void 0,r||(r=(0,u.Z)("span",{className:"material-icon"},void 0,"visibility"))),t.is_closed&&(0,u.Z)("li",{className:"thread-flag-closed",title:gettext("Closed")},void 0,l||(l=(0,u.Z)("span",{className:"material-icon"},void 0,"lock"))),t.is_hidden&&(0,u.Z)("li",{className:"thread-flag-hidden",title:gettext("Hidden")},void 0,c||(c=(0,u.Z)("span",{className:"material-icon"},void 0,"visibility_off"))))}},16768:function(e,t,n){"use strict";var a,s=n(22928);n(57588),t.Z=function(e){var t=e.thread;return(0,s.Z)("span",{className:"threads-replies",title:interpolate(ngettext("%(replies)s reply","%(replies)s replies",t.replies),{replies:t.replies},!0)},void 0,a||(a=(0,s.Z)("span",{className:"material-icon"},void 0,"chat_bubble_outline")),t.replies>980?Math.round(t.replies/1e3)+"K":t.replies)}},92490:function(e,t,n){"use strict";n.d(t,{o8:function(){return s},Eg:function(){return r},Z2:function(){return l},tw:function(){return c}});var a=n(22928),s=(n(57588),function(e){var t=e.children;return(0,a.Z)("nav",{className:"toolbar"},void 0,t)}),i=n(94184),o=n.n(i),r=function(e){var t=e.children,n=e.className,s=e.shrink;return(0,a.Z)("div",{className:o()("toolbar-item",n,{"toolbar-item-shrink":s})},void 0,t)},l=function(e){var t=e.auto,n=e.children,s=e.className;return(0,a.Z)("div",{className:o()("toolbar-section",{"toolbar-section-auto":t},s)},void 0,n)},c=function(e){var t=e.className;return(0,a.Z)("div",{className:o()("toolbar-spacer",t)})}},19605:function(e,t,n){"use strict";n.d(t,{ZP:function(){return i}});var a=n(22928),s=(n(57588),n(32233));function i(e){var t=e.size||100,n=e.size2x||t;return(0,a.Z)("img",{alt:"",className:e.className||"user-avatar",src:o(e.user,t),srcSet:o(e.user,n),width:t,height:t})}function o(e,t){return e&&e.id?function(e,t){var n=e[0];return e.forEach((function(e){e.size>=t&&(n=e)})),n}(e.avatars,t).url:s.Z.get("BLANK_AVATAR_URL")}},82211:function(e,t,n){"use strict";n.d(t,{Z:function(){return h}});var a,s=n(22928),i=n(15671),o=n(43144),r=n(79340),l=n(6215),c=n(61120),u=n(57588),d=n.n(u),p=n(37848);var h=function(e){(0,r.Z)(d,e);var t,n,u=(t=d,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function d(){return(0,i.Z)(this,d),u.apply(this,arguments)}return(0,o.Z)(d,[{key:"render",value:function(){var e="btn "+this.props.className,t=this.props.disabled;return this.props.loading&&(e+=" btn-loading",t=!0),(0,s.Z)("button",{className:e,disabled:t,onClick:this.props.onClick,type:this.props.onClick?"button":"submit"},void 0,this.props.children,this.props.loading?a||(a=(0,s.Z)(p.Z,{})):null)}}]),d}(d().Component);h.defaultProps={className:"btn-default",type:"submit",loading:!1,disabled:!1,onClick:null}},57026:function(e,t,n){"use strict";n.d(t,{Z:function(){return s}});var a=n(22928);function s(e){return(0,a.Z)("select",{className:e.className||"form-control",disabled:e.disabled||!1,id:e.id||null,onChange:e.onChange,value:e.value},void 0,e.choices.map((function(e){return(0,a.Z)("option",{disabled:e.disabled||!1,value:e.value},e.value,"- - ".repeat(e.level)+e.label)})))}n(57588)},21688:function(e,t,n){"use strict";n.d(t,{Z:function(){return S}});var a=n(22928),s=n(15671),i=n(43144),o=n(79340),r=n(6215),l=n(61120),c=n(57588),u=n.n(c),d=n(33556);function p(e){return e.display?(0,a.Z)(d.Z,{helpText:gettext("No profile details are editable at this time."),message:gettext("This option is currently unavailable.")}):null}var h,f=n(37848);function v(e){return e.display?h||(h=(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)(f.Z,{}))):null}var m=n(97326),Z=n(4942),g=n(60471);var b=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){var e;(0,s.Z)(this,u);for(var t=arguments.length,n=new Array(t),a=0;a<t;a++)n[a]=arguments[a];return e=c.call.apply(c,[this].concat(n)),(0,Z.Z)((0,m.Z)(e),"onChange",(function(t){var n=e.props,a=n.field;(0,n.onChange)(a.fieldname,t.target.value)})),e}return(0,i.Z)(u,[{key:"render",value:function(){var e=this.props,t=e.disabled,n=e.field,s=e.value,i=n.input;return"select"===i.type?(0,a.Z)(g.Z,{choices:i.choices,disabled:t,id:"id_"+n.fieldname,onChange:this.onChange,value:s}):"textarea"===i.type?(0,a.Z)("textarea",{className:"form-control",disabled:t,id:"id_"+n.fieldname,onChange:this.onChange,rows:"4",type:"text",value:s}):"text"===i.type?(0,a.Z)("input",{className:"form-control",disabled:t,id:"id_"+n.fieldname,onChange:this.onChange,type:"text",value:s}):null}}]),u}(u().Component),y=n(96359);function _(e){var t=e.disabled,n=e.errors,s=e.fields,i=e.name,o=e.onChange,r=e.value;return(0,a.Z)("fieldset",{},void 0,(0,a.Z)("legend",{},void 0,i),s.map((function(e){return(0,a.Z)(y.Z,{for:"id_"+e.fieldname,helpText:e.help_text,label:e.label,validation:n[e.fieldname]},e.fieldname,(0,a.Z)(b,{disabled:t,field:e,onChange:o,value:r[e.fieldname]}))})))}var N=n(82211),k=n(43345),x=n(78657),w=n(53904);var R=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(e){var t;(0,s.Z)(this,u),t=c.call(this,e),(0,Z.Z)((0,m.Z)(t),"onChange",(function(e,n){t.setState((0,Z.Z)({},e,n))})),t.state={isLoading:!1,errors:{}};for(var n=e.groups.length,a=0;a<n;a++)for(var i=e.groups[a],o=i.fields.length,r=0;r<o;r++){var l=i.fields[r].fieldname,d=i.fields[r].initial;t.state[l]=d}return t}return(0,i.Z)(u,[{key:"send",value:function(){var e=Object.assign({},this.state,{errors:null,isLoading:null});return x.Z.post(this.props.api,e)}},{key:"handleSuccess",value:function(e){this.props.onSuccess(e)}},{key:"handleError",value:function(e){400===e.status?(w.Z.error(gettext("Form contains errors.")),this.setState({errors:e})):w.Z.apiError(e)}},{key:"render",value:function(){var e=this;return(0,a.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,a.Z)("div",{className:"panel-body"},void 0,this.props.groups.map((function(t,n){return(0,a.Z)(_,{disabled:e.state.isLoading,errors:e.state.errors,fields:t.fields,name:t.name,onChange:e.onChange,value:e.state},n)}))),(0,a.Z)("div",{className:"panel-footer text-right"},void 0,(0,a.Z)(C,{disabled:this.state.isLoading,onCancel:this.props.onCancel})," ",(0,a.Z)(N.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Save changes"))))}}]),u}(k.Z);function C(e){var t=e.onCancel,n=e.disabled;return t?(0,a.Z)("button",{className:"btn btn-default",disabled:n,onClick:t,type:"button"},void 0,gettext("Cancel")):null}var S=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(e){var t;return(0,s.Z)(this,u),(t=c.call(this,e)).state={loading:!0,groups:null},t}return(0,i.Z)(u,[{key:"componentDidMount",value:function(){var e=this;x.Z.get(this.props.api).then((function(t){e.setState({loading:!1,groups:t})}),(function(t){w.Z.apiError(t),e.props.cancel&&e.props.cancel()}))}},{key:"render",value:function(){var e=this.state,t=e.groups,n=e.loading;return(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Edit details"))),(0,a.Z)(v,{display:n}),(0,a.Z)(p,{display:!n&&!t.length}),(0,a.Z)(E,{api:this.props.api,display:!n&&t.length,groups:t,onCancel:this.props.onCancel,onSuccess:this.props.onSuccess}))}}]),u}(u().Component);function E(e){var t=e.api,n=e.display,s=e.groups,i=e.onCancel,o=e.onSuccess;return n?(0,a.Z)(R,{api:t,groups:s,onCancel:i,onSuccess:o}):null}},96359:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var a=n(22928),s=n(15671),i=n(43144),o=n(79340),r=n(6215),l=n(61120),c=n(57588);var u=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"isValidated",value:function(){return void 0!==this.props.validation}},{key:"getClassName",value:function(){var e="form-group";return this.isValidated()&&(e+=" has-feedback",null===this.props.validation?e+=" has-success":e+=" has-error"),e}},{key:"getFeedback",value:function(){var e=this;return this.props.validation?(0,a.Z)("div",{className:"help-block errors"},void 0,this.props.validation.map((function(t,n){return(0,a.Z)("p",{},e.props.for+"FeedbackItem"+n,t)}))):null}},{key:"getFeedbackDescription",value:function(){return this.isValidated()?(0,a.Z)("span",{id:this.props.for+"_status",className:"sr-only"},void 0,this.props.validation?gettext("(error)"):gettext("(success)")):null}},{key:"getHelpText",value:function(){return this.props.helpText?(0,a.Z)("p",{className:"help-block"},void 0,this.props.helpText):null}},{key:"render",value:function(){return(0,a.Z)("div",{className:this.getClassName()},void 0,(0,a.Z)("label",{className:"control-label "+(this.props.labelClass||""),htmlFor:this.props.for||""},void 0,this.props.label+":"),(0,a.Z)("div",{className:this.props.controlClass||""},void 0,this.props.children,this.getFeedbackDescription(),this.getFeedback(),this.getHelpText(),this.props.extra||null))}}]),u}(n.n(c)().Component)},43345:function(e,t,n){"use strict";n.d(t,{Z:function(){return v}});var a=n(15671),s=n(43144),i=n(97326),o=n(79340),r=n(6215),l=n(61120),c=n(4942),u=n(57588),d=n.n(u),p=n(55210),h=n(53904);var f=(0,p.C1)(),v=function(e){(0,o.Z)(d,e);var t,n,u=(t=d,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function d(){var e;(0,a.Z)(this,d);for(var t=arguments.length,n=new Array(t),s=0;s<t;s++)n[s]=arguments[s];return e=u.call.apply(u,[this].concat(n)),(0,c.Z)((0,i.Z)(e),"bindInput",(function(t){return function(n){e.changeValue(t,n.target.value)}})),(0,c.Z)((0,i.Z)(e),"changeValue",(function(t,n){var a=(0,c.Z)({},t,n),s=e.state.errors||{};s[t]=e.validateField(t,a[t]),a.errors=s,e.setState(a)})),(0,c.Z)((0,i.Z)(e),"handleSubmit",(function(t){if(t&&t.preventDefault(),!e.state.isLoading&&e.clean()){e.setState({isLoading:!0});var n=e.send();n?n.then((function(t){e.setState({isLoading:!1}),e.handleSuccess(t)}),(function(t){e.setState({isLoading:!1}),e.handleError(t)})):e.setState({isLoading:!1})}})),e}return(0,s.Z)(d,[{key:"validate",value:function(){var e={};if(!this.state.validators)return e;var t={required:this.state.validators.required||this.state.validators,optional:this.state.validators.optional||{}},n=[];for(var a in t.required)t.required.hasOwnProperty(a)&&t.required[a]&&n.push(a);for(var s in t.optional)t.optional.hasOwnProperty(s)&&t.optional[s]&&n.push(s);for(var i in n){var o=n[i],r=this.validateField(o,this.state[o]);null===r?e[o]=null:r&&(e[o]=r)}return e}},{key:"isValid",value:function(){var e=this.validate();for(var t in e)if(e.hasOwnProperty(t)&&null!==e[t])return!1;return!0}},{key:"validateField",value:function(e,t){var n=[];if(!this.state.validators)return n;var a={required:(this.state.validators.required||this.state.validators)[e],optional:(this.state.validators.optional||{})[e]},s=f(t)||!1;if(a.required){if(s)n=[s];else for(var i in a.required){var o=a.required[i](t);o&&n.push(o)}return n.length?n:null}if(!1===s&&a.optional){for(var r in a.optional){var l=a.optional[r](t);l&&n.push(l)}return n.length?n:null}return!1}},{key:"clean",value:function(){return!0}},{key:"send",value:function(){return null}},{key:"handleSuccess",value:function(e){}},{key:"handleError",value:function(e){h.Z.apiError(e)}}]),d}(d().Component)},94417:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var a=n(22928),s=n(15671),i=n(43144),o=n(79340),r=n(6215),l=n(61120),c=n(57588);var u=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"isActive",value:function(){return this.props.isControlled?this.props.isActive:!!this.props.path&&0===document.location.pathname.indexOf(this.props.path)}},{key:"getClassName",value:function(){return this.isActive()?(this.props.className||"")+" "+(this.props.activeClassName||"active"):this.props.className||""}},{key:"render",value:function(){return(0,a.Z)("li",{className:this.getClassName()},void 0,this.props.children)}}]),u}(n.n(c)().Component)},37848:function(e,t,n){"use strict";n.d(t,{Z:function(){return i}});var a,s=n(22928);function i(e){return(0,s.Z)("div",{className:e.className||"loader"},void 0,a||(a=(0,s.Z)("div",{className:"loader-spinning-wheel"})))}n(57588)},52753:function(e,t,n){"use strict";n.d(t,{ZP:function(){return Z}});var a,s=n(22928),i=n(15671),o=n(43144),r=n(97326),l=n(79340),c=n(6215),u=n(61120),d=n(4942),p=(n(57588),n(82211)),h=n(43345),f=n(96359),v=n(78657),m=n(59801);var Z=function(e){(0,l.Z)(f,e);var t,n,h=(t=f,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function f(e){var t;return(0,i.Z)(this,f),t=h.call(this,e),(0,d.Z)((0,r.Z)(t),"handleSuccess",(function(e){t.props.onSuccess(e),m.Z.hide()})),(0,d.Z)((0,r.Z)(t),"handleError",(function(e){t.props.onError(e)})),(0,d.Z)((0,r.Z)(t),"onBestAnswerChange",(function(e){t.changeValue("bestAnswer",e.target.value)})),(0,d.Z)((0,r.Z)(t),"onPollChange",(function(e){t.changeValue("poll",e.target.value)})),t.state={isLoading:!1,bestAnswer:"0",poll:"0"},t}return(0,o.Z)(f,[{key:"clean",value:function(){return!this.props.polls||"0"!==this.state.poll||window.confirm(gettext("Are you sure you want to delete all polls?"))}},{key:"send",value:function(){var e=Object.assign({},this.props.data,{best_answer:this.state.bestAnswer,poll:this.state.poll});return v.Z.post(this.props.api,e)}},{key:"render",value:function(){return(0,s.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,s.Z)("div",{className:"modal-content"},void 0,(0,s.Z)("div",{className:"modal-header"},void 0,(0,s.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,a||(a=(0,s.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,s.Z)("h4",{className:"modal-title"},void 0,gettext("Merge threads"))),(0,s.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,s.Z)("div",{className:"modal-body"},void 0,(0,s.Z)(g,{choices:this.props.bestAnswers,onChange:this.onBestAnswerChange,value:this.state.bestAnswer}),(0,s.Z)(b,{choices:this.props.polls,onChange:this.onPollChange,value:this.state.poll})),(0,s.Z)("div",{className:"modal-footer"},void 0,(0,s.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,s.Z)(p.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Merge threads"))))))}}]),f}(h.Z);function g(e){var t=e.choices,n=e.onChange,a=e.value;return t?(0,s.Z)(f.Z,{label:gettext("Best answer"),helpText:gettext("Please select the best answer for your newly merged thread. No posts will be deleted during the merge."),for:"id_best_answer"},void 0,(0,s.Z)("select",{className:"form-control",id:"id_best_answer",onChange:n,value:a},void 0,t.map((function(e){return(0,s.Z)("option",{value:e[0]},e[0],e[1])})))):null}function b(e){var t=e.choices,n=e.onChange,a=e.value;return t?(0,s.Z)(f.Z,{label:gettext("Poll"),helpText:gettext("Please select the poll for your newly merged thread. Rejected polls will be permanently deleted and cannot be recovered."),for:"id_poll"},void 0,(0,s.Z)("select",{className:"form-control",id:"id_poll",onChange:n,value:a},void 0,t.map((function(e){return(0,s.Z)("option",{value:e[0]},e[0],e[1])})))):null}},69092:function(e,t,n){"use strict";n.d(t,{Z:function(){return m}});var a=n(15671),s=n(43144),i=n(79340),o=n(6215),r=n(61120),l=n(57588),c=n.n(l),u=n(4942),d=n(19755),p=new RegExp("^.*(?:(?:youtu.be/|v/|vi/|u/w/|embed/)|(?:(?:watch)??v(?:i)?=|&v(?:i)?=))([^#&?]*).*"),h=new(function(){function e(){var t=this;(0,a.Z)(this,e),(0,u.Z)(this,"render",(function(e){e&&(t.highlightCode(e),t.embedYoutubePlayers(e))})),this._youtube={}}return(0,s.Z)(e,[{key:"highlightCode",value:function(e){for(var t=e.querySelectorAll("pre>code"),n=0;n<t.length;n++){var a=t[n];hljs.highlightBlock(a)}}},{key:"embedYoutubePlayers",value:function(e){for(var t=e.querySelectorAll("p>a"),n=0;n<t.length;n++){var a=t[n],s=1===a.parentNode.childNodes.length;this._youtube[a.href]||(this._youtube[a.href]=f(a.href));var i=this._youtube[a.href];s&&i&&!1!==i.data&&this.swapYoutubePlayer(a,i)}}},{key:"swapYoutubePlayer",value:function(e,t){var n="https://www.youtube.com/embed/";n+=t.video,n+="?rel=0",t.start&&(n+="&start="+t.start);var a=d('<iframe class="embed-responsive-item" src="'+n+'" allowfullscreen></iframe>');d(e).replaceWith(a),a.wrap('<div class="embed-responsive embed-responsive-16by9"></div>')}}]),e}());function f(e){var t=function(e){var t=e;return"https://"===e.substr(0,8)?t=t.substr(8):"http://"===e.substr(0,7)&&(t=t.substr(7)),"www."===t.substr(0,4)&&(t=t.substr(4)),t}(e),n=function(e){if(-1===e.indexOf("youtu"))return null;var t=e.match(p);return t?t[1]:null}(t);if(!n)return null;var a=0;if(t.indexOf("?")>0){var s=t.substr(t.indexOf("?")+1).split("&").filter((function(e){return"t="===e.substr(0,2)}))[0];if(s){var i=s.substr(2).split("m");"s"===i[0].substr(-1)?a+=parseInt(i[0].substr(0,i[0].length-1)):(a+=60*parseInt(i[0]),i[1]&&"s"===i[1].substr(-1)&&(a+=parseInt(i[1].substr(0,i[1].length-1))))}}return{start:a,video:n}}var v=n(19755);var m=function(e){(0,i.Z)(u,e);var t,n,l=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,r.Z)(t);if(n){var s=(0,r.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,o.Z)(this,e)});function u(){return(0,a.Z)(this,u),l.apply(this,arguments)}return(0,s.Z)(u,[{key:"componentDidMount",value:function(){h.render(this.documentNode),v(this.documentNode).find(".spoiler-reveal").click(Z)}},{key:"componentDidUpdate",value:function(e,t){h.render(this.documentNode),v(this.documentNode).find(".spoiler-reveal").click(Z)}},{key:"shouldComponentUpdate",value:function(e,t){return e.markup!==this.props.markup}},{key:"render",value:function(){var e=this;return c().createElement("article",{className:"misago-markup",dangerouslySetInnerHTML:{__html:this.props.markup},ref:function(t){e.documentNode=t}})}}]),u}(c().Component);function Z(e){var t=e.target;v(t).parent().parent().addClass("revealed")}},3784:function(e,t,n){"use strict";n.d(t,{Z:function(){return h}});var a,s=n(22928),i=n(15671),o=n(43144),r=n(79340),l=n(6215),c=n(61120),u=n(57588),d=n.n(u),p=n(37848);var h=function(e){(0,r.Z)(d,e);var t,n,u=(t=d,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function d(){return(0,i.Z)(this,d),u.apply(this,arguments)}return(0,o.Z)(d,[{key:"render",value:function(){return a||(a=(0,s.Z)("div",{className:"modal-body modal-loader"},void 0,(0,s.Z)(p.Z,{})))}}]),d}(d().Component)},30337:function(e,t,n){"use strict";n.d(t,{Z:function(){return c}});var a=n(22928),s=n(15671),i=n(43144),o=n(79340),r=n(6215),l=n(61120);n(57588);var c=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"getHelpText",value:function(){return this.props.helpText?(0,a.Z)("p",{className:"help-block"},void 0,this.props.helpText):null}},{key:"render",value:function(){return(0,a.Z)("div",{className:"modal-body"},void 0,(0,a.Z)("div",{className:"message-icon"},void 0,(0,a.Z)("span",{className:"material-icon"},void 0,this.props.icon||"info_outline")),(0,a.Z)("div",{className:"message-body"},void 0,(0,a.Z)("p",{className:"lead"},void 0,this.props.message),this.getHelpText(),(0,a.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,gettext("Ok"))))}}]),u}(n(33556).Z)},95187:function(e,t,n){"use strict";n.d(t,{Z:function(){return h}});var a,s=n(22928),i=n(15671),o=n(43144),r=n(79340),l=n(6215),c=n(61120),u=n(57588),d=n.n(u),p=n(37848);var h=function(e){(0,r.Z)(d,e);var t,n,u=(t=d,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function d(){return(0,i.Z)(this,d),u.apply(this,arguments)}return(0,o.Z)(d,[{key:"render",value:function(){return a||(a=(0,s.Z)("div",{className:"panel-body panel-body-loading"},void 0,(0,s.Z)(p.Z,{className:"loader loader-spaced"})))}}]),d}(d().Component)},33556:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var a=n(22928),s=n(15671),i=n(43144),o=n(79340),r=n(6215),l=n(61120),c=n(57588);var u=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"getHelpText",value:function(){return this.props.helpText?(0,a.Z)("p",{className:"help-block"},void 0,this.props.helpText):null}},{key:"render",value:function(){return(0,a.Z)("div",{className:"panel-body panel-message-body"},void 0,(0,a.Z)("div",{className:"message-icon"},void 0,(0,a.Z)("span",{className:"material-icon"},void 0,this.props.icon||"info_outline")),(0,a.Z)("div",{className:"message-body"},void 0,(0,a.Z)("p",{className:"lead"},void 0,this.props.message),this.getHelpText()))}}]),u}(n.n(c)().Component)},91876:function(e,t,n){"use strict";n.d(t,{n:function(){return me},y:function(){return ke}});var a,s=n(87462),i=n(15671),o=n(43144),r=n(97326),l=n(79340),c=n(6215),u=n(61120),d=n(4942),p=n(57588),h=n.n(p),f=n(30381),v=n.n(f),m=n(22928);function Z(e){return(0,m.Z)("div",{className:"poll-choices-bars"},void 0,e.poll.choices.map((function(t){return(0,m.Z)(g,{choice:t,poll:e.poll},t.hash)})))}function g(e){var t=0;return e.choice.votes&&e.poll.votes&&(t=Math.ceil(100*e.choice.votes/e.poll.votes)),(0,m.Z)("dl",{className:"dl-horizontal"},void 0,(0,m.Z)("dt",{},void 0,e.choice.label),(0,m.Z)("dd",{},void 0,(0,m.Z)("div",{className:"progress"},void 0,(0,m.Z)("div",{className:"progress-bar",role:"progressbar","aria-valuenow":t,"aria-valuemin":"0","aria-valuemax":"100",style:{width:t+"%"}},void 0,(0,m.Z)("span",{className:"sr-only"},void 0,y(e.votes,e.proc)))),(0,m.Z)("ul",{className:"list-unstyled list-inline poll-chart"},void 0,(0,m.Z)(b,{proc:t,votes:e.choice.votes}),(0,m.Z)(_,{selected:e.choice.selected}))))}function b(e){return(0,m.Z)("li",{className:"poll-chart-votes"},void 0,y(e.votes,e.proc))}function y(e,t){var n=ngettext("%(votes)s vote, %(proc)s% of total.","%(votes)s votes, %(proc)s% of total.",e);return interpolate(n,{votes:e,proc:t},!0)}function _(e){return e.selected?(0,m.Z)("li",{className:"poll-chart-selected"},void 0,a||(a=(0,m.Z)("span",{className:"material-icon"},void 0,"check_box")),gettext("Your choice.")):null}var N,k,x,w=n(30337),R=n(3784),C=n(78657);var S=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(e){var t;return(0,i.Z)(this,s),(t=a.call(this,e)).state={isLoading:!0,error:null,data:[]},t}return(0,o.Z)(s,[{key:"componentDidMount",value:function(){var e=this;C.Z.get(this.props.poll.api.votes).then((function(t){var n=t.map((function(e){return Object.assign({},e,{voters:e.voters.map((function(e){return Object.assign({},e,{voted_on:v()(e.voted_on)})}))})}));e.setState({isLoading:!1,data:n})}),(function(t){e.setState({isLoading:!1,error:t.detail})}))}},{key:"render",value:function(){return(0,m.Z)("div",{className:"modal-dialog"+(this.state.error?" modal-message":" modal-sm"),role:"document"},void 0,(0,m.Z)("div",{className:"modal-content"},void 0,(0,m.Z)("div",{className:"modal-header"},void 0,(0,m.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},void 0,N||(N=(0,m.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,m.Z)("h4",{className:"modal-title"},void 0,gettext("Poll votes"))),(0,m.Z)(E,{data:this.state.data,error:this.state.error,isLoading:this.state.isLoading})))}}]),s}(h().Component);function E(e){return e.isLoading?k||(k=(0,m.Z)(R.Z,{})):e.error?(0,m.Z)(w.Z,{icon:"error_outline",message:e.error}):(0,m.Z)(L,{data:e.data})}function L(e){return(0,m.Z)("div",{className:"modal-body modal-poll-votes"},void 0,(0,m.Z)("ul",{className:"list-unstyled votes-details"},void 0,e.data.map((function(e){return h().createElement(P,(0,s.Z)({key:e.hash},e))}))))}function P(e){return(0,m.Z)("li",{},void 0,(0,m.Z)("h4",{},void 0,e.label),(0,m.Z)(O,{votes:e.votes}),(0,m.Z)(T,{voters:e.voters}),x||(x=(0,m.Z)("hr",{})))}function O(e){var t=ngettext("%(votes)s user has voted for this choice.","%(votes)s users have voted for this choice.",e.votes),n=interpolate(t,{votes:e.votes},!0);return(0,m.Z)("p",{},void 0,n)}function T(e){return e.voters.length?(0,m.Z)("ul",{className:"list-unstyled"},void 0,e.voters.map((function(e){return h().createElement(A,(0,s.Z)({key:e.username},e))}))):null}function A(e){return e.url?(0,m.Z)("li",{},void 0,(0,m.Z)("a",{className:"item-title",href:e.url},void 0,e.username)," ",(0,m.Z)(B,{voted_on:e.voted_on})):(0,m.Z)("li",{},void 0,(0,m.Z)("strong",{},void 0,e.username)," ",(0,m.Z)(B,{voted_on:e.voted_on}))}function B(e){return(0,m.Z)("abbr",{className:"text-muted",title:e.voted_on.format("LLL")},void 0,e.voted_on.fromNow())}var I=n(59752),j=n(7738),D=n(59801),U=n(27950),M=n(53904),z=n(90287);function H(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,u.Z)(e);if(t){var s=(0,u.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,c.Z)(this,n)}}function F(e){var t=e.isPollOver,n=e.poll,a=e.showVoting,s=e.thread;if(!function(e,t,n){return n.is_public||t.can_delete||t.can_edit||t.can_see_votes||t.can_vote&&!e&&(!n.hasSelectedChoices||n.allow_revotes)}(t,n.acl,n))return null;var i=[],o=n.acl.can_vote,r=!n.hasSelectedChoices||n.allow_revotes;return o&&r&&i.push(0),(n.is_public||n.acl.can_see_votes)&&i.push(1),n.acl.can_edit&&i.push(2),n.acl.can_delete&&i.push(3),(0,m.Z)("div",{className:"row poll-options"},void 0,(0,m.Z)(Y,{controls:i,isPollOver:t,poll:n,showVoting:a}),(0,m.Z)(V,{controls:i,poll:n}),(0,m.Z)($,{controls:i,poll:n,thread:s}),(0,m.Z)(G,{controls:i,poll:n}))}function q(e,t){var n="col-xs-6";return 1===e.length&&(n="col-xs-12"),3===e.length&&e[0]===t&&(n="col-xs-12"),n+" col-sm-3 col-md-2"}function Y(e){var t=e.poll.acl.can_vote,n=!e.poll.hasSelectedChoices||e.poll.allow_revotes;return t&&n?(0,m.Z)("div",{className:q(e.controls,0)},void 0,(0,m.Z)("button",{className:"btn btn-default btn-block btn-sm",disabled:e.poll.isBusy,onClick:e.showVoting,type:"button"},void 0,gettext("Vote"))):null}var V=function(e){(0,l.Z)(n,e);var t=H(n);function n(){var e;(0,i.Z)(this,n);for(var a=arguments.length,s=new Array(a),o=0;o<a;o++)s[o]=arguments[o];return e=t.call.apply(t,[this].concat(s)),(0,d.Z)((0,r.Z)(e),"onClick",(function(){D.Z.show((0,m.Z)(S,{poll:e.props.poll}))})),e}return(0,o.Z)(n,[{key:"render",value:function(){return this.props.poll.is_public||this.props.poll.acl.can_see_votes?(0,m.Z)("div",{className:q(this.props.controls,1)},void 0,(0,m.Z)("button",{className:"btn btn-default btn-block btn-sm",disabled:this.props.poll.isBusy,onClick:this.onClick,type:"button"},void 0,gettext("See votes"))):null}}]),n}(h().Component),$=function(e){(0,l.Z)(n,e);var t=H(n);function n(){var e;(0,i.Z)(this,n);for(var a=arguments.length,s=new Array(a),o=0;o<a;o++)s[o]=arguments[o];return e=t.call.apply(t,[this].concat(s)),(0,d.Z)((0,r.Z)(e),"onClick",(function(){U.Z.open({submit:e.props.poll.api.index,thread:e.props.thread,poll:e.props.poll,mode:"POLL"})})),e}return(0,o.Z)(n,[{key:"render",value:function(){return this.props.poll.acl.can_edit?(0,m.Z)("div",{className:q(this.props.controls,2)},void 0,(0,m.Z)("button",{className:"btn btn-default btn-block btn-sm",disabled:this.props.poll.isBusy,onClick:this.onClick,type:"button"},void 0,gettext("Edit"))):null}}]),n}(h().Component),G=function(e){(0,l.Z)(n,e);var t=H(n);function n(){var e;(0,i.Z)(this,n);for(var a=arguments.length,s=new Array(a),o=0;o<a;o++)s[o]=arguments[o];return e=t.call.apply(t,[this].concat(s)),(0,d.Z)((0,r.Z)(e),"onClick",(function(){if(!window.confirm(gettext("Are you sure you want to delete this poll? This action is not reversible.")))return!1;z.Z.dispatch(I.n6()),C.Z.delete(e.props.poll.api.index).then(e.handleSuccess,e.handleError)})),(0,d.Z)((0,r.Z)(e),"handleSuccess",(function(e){M.Z.success("Poll has been deleted"),z.Z.dispatch(I.Od()),z.Z.dispatch(j.y8(e))})),(0,d.Z)((0,r.Z)(e),"handleError",(function(e){M.Z.apiError(e),z.Z.dispatch(I.Ar())})),e}return(0,o.Z)(n,[{key:"render",value:function(){return this.props.poll.acl.can_delete?(0,m.Z)("div",{className:q(this.props.controls,3)},void 0,(0,m.Z)("button",{className:"btn btn-default btn-block btn-sm",disabled:this.props.poll.isBusy,onClick:this.onClick,type:"button"},void 0,gettext("Delete"))):null}}]),n}(h().Component),W=n(89627),K='<abbr title="%(absolute)s">%(relative)s</abbr>';function J(e){return(0,m.Z)("ul",{className:"list-unstyled list-inline poll-details"},void 0,(0,m.Z)(ae,{votes:e.poll.votes}),(0,m.Z)(te,{poll:e.poll}),(0,m.Z)(se,{poll:e.poll}),(0,m.Z)(Q,{poll:e.poll}))}function Q(e){var t=interpolate((0,W.Z)(gettext("Posted by %(poster)s %(posted_on)s.")),{poster:X(e.poll),posted_on:ee(e.poll)},!0);return(0,m.Z)("li",{className:"poll-info-creation",dangerouslySetInnerHTML:{__html:t}})}function X(e){return e.url.poster?interpolate('<a href="%(url)s" class="item-title">%(user)s</a>',{url:(0,W.Z)(e.url.poster),user:(0,W.Z)(e.poster_name)},!0):interpolate('<span class="item-title">%(user)s</span>',{user:(0,W.Z)(e.poster_name)},!0)}function ee(e){return interpolate(K,{absolute:(0,W.Z)(e.posted_on.format("LLL")),relative:(0,W.Z)(e.posted_on.fromNow())},!0)}function te(e){if(!e.poll.length)return null;var t=interpolate((0,W.Z)(gettext("Voting ends %(ends_on)s.")),{ends_on:ne(e.poll)},!0);return(0,m.Z)("li",{className:"poll-info-ends-on",dangerouslySetInnerHTML:{__html:t}})}function ne(e){return interpolate(K,{absolute:(0,W.Z)(e.endsOn.format("LLL")),relative:(0,W.Z)(e.endsOn.fromNow())},!0)}function ae(e){var t=ngettext("%(votes)s vote.","%(votes)s votes.",e.votes),n=interpolate(t,{votes:e.votes},!0);return(0,m.Z)("li",{className:"poll-info-votes"},void 0,n)}function se(e){return e.poll.is_public?(0,m.Z)("li",{className:"poll-info-public"},void 0,gettext("Votes are public.")):null}function ie(e){return(0,m.Z)("div",{className:"panel panel-default panel-poll"},void 0,(0,m.Z)("div",{className:"panel-body"},void 0,(0,m.Z)("h2",{},void 0,e.poll.question),(0,m.Z)(J,{poll:e.poll}),(0,m.Z)(Z,{poll:e.poll}),(0,m.Z)(F,{isPollOver:e.isPollOver,poll:e.poll,showVoting:e.showVoting,thread:e.thread})))}function oe(e){return(0,m.Z)("ul",{className:"list-unstyled list-inline poll-help"},void 0,(0,m.Z)(re,{choicesLeft:e.choicesLeft}),(0,m.Z)(le,{poll:e.poll}))}function re(e){var t=e.choicesLeft;if(0===t)return(0,m.Z)("li",{className:"poll-help-choices-left"},void 0,gettext("You can't select any more choices."));var n=ngettext("You can select %(choices)s more choice.","You can select %(choices)s more choices.",t),a=interpolate(n,{choices:t},!0);return(0,m.Z)("li",{className:"poll-help-choices-left"},void 0,a)}function le(e){return e.poll.allow_revotes?(0,m.Z)("li",{className:"poll-help-allow-revotes"},void 0,gettext("You can change your vote later.")):(0,m.Z)("li",{className:"poll-help-no-revotes"},void 0,gettext("Votes are final."))}function ce(e){return(0,m.Z)("ul",{className:"list-unstyled poll-select-choices"},void 0,e.choices.map((function(t){return(0,m.Z)(ue,{choice:t,toggleChoice:e.toggleChoice},t.hash)})))}var ue=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(){var e;(0,i.Z)(this,s);for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return e=a.call.apply(a,[this].concat(n)),(0,d.Z)((0,r.Z)(e),"onClick",(function(){e.props.toggleChoice(e.props.choice.hash)})),e}return(0,o.Z)(s,[{key:"render",value:function(){return(0,m.Z)("li",{className:"poll-select-choice"},void 0,(0,m.Z)("button",{className:this.props.choice.selected?"btn btn-selected":"btn",onClick:this.onClick,type:"button"},void 0,(0,m.Z)("span",{className:"material-icon"},void 0,this.props.choice.selected?"check_box":"check_box_outline_blank"),(0,m.Z)("strong",{},void 0,this.props.choice.label)))}}]),s}(h().Component);function de(e,t){var n=[];for(var a in t){var s=t[a];s.selected&&n.push(s)}return e.allowed_choices-n.length}var pe=n(82211),he=n(43345);var fe=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(e){var t;return(0,i.Z)(this,s),t=a.call(this,e),(0,d.Z)((0,r.Z)(t),"toggleChoice",(function(e){var n,a=function(e,t){for(var n in e){var a=e[n];if(a.hash===t)return a}return null}(t.state.choices,e);n=a.selected?t.deselectChoice(a,e):t.selectChoice(a,e),t.setState({choices:n,choicesLeft:de(t.props.poll,n)})})),(0,d.Z)((0,r.Z)(t),"selectChoice",(function(e,n){if(!de(t.props.poll,t.state.choices))for(var a in t.state.choices.slice()){var s=t.state.choices[a];if(s.selected&&s.hash!=n){s.selected=!1;break}}return t.state.choices.map((function(e){return Object.assign({},e,{selected:e.hash==n||e.selected})}))})),(0,d.Z)((0,r.Z)(t),"deselectChoice",(function(e,n){return t.state.choices.map((function(e){return Object.assign({},e,{selected:e.hash!=n&&e.selected})}))})),t.state={isLoading:!1,choices:e.poll.choices,choicesLeft:de(e.poll,e.poll.choices)},t}return(0,o.Z)(s,[{key:"clean",value:function(){return this.state.choicesLeft!==this.props.poll.allowed_choices||(M.Z.error(gettext("You need to select at least one choice")),!1)}},{key:"send",value:function(){var e=[];for(var t in this.state.choices.slice()){var n=this.state.choices[t];n.selected&&e.push(n.hash)}return C.Z.post(this.props.poll.api.votes,e)}},{key:"handleSuccess",value:function(e){z.Z.dispatch(I.gx(e)),M.Z.success(gettext("Your vote has been saved.")),this.props.showResults()}},{key:"handleError",value:function(e){400===e.status?M.Z.error(e.detail):M.Z.apiError(e)}},{key:"render",value:function(){var e=[];return this.props.poll.acl.can_vote&&e.push(0),(this.props.poll.is_public||this.props.poll.acl.can_see_votes)&&e.push(1),this.props.poll.acl.can_edit&&e.push(2),this.props.poll.acl.can_delete&&e.push(3),(0,m.Z)("div",{className:"panel panel-default panel-poll"},void 0,(0,m.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,m.Z)("div",{className:"panel-body"},void 0,(0,m.Z)("h2",{},void 0,this.props.poll.question),(0,m.Z)(J,{poll:this.props.poll}),(0,m.Z)(ce,{choices:this.state.choices,toggleChoice:this.toggleChoice}),(0,m.Z)(oe,{choicesLeft:this.state.choicesLeft,poll:this.props.poll})),(0,m.Z)("div",{className:"panel-footer"},void 0,(0,m.Z)("div",{className:"row"},void 0,(0,m.Z)("div",{className:q(e,0)},void 0,(0,m.Z)(pe.Z,{className:"btn-primary btn-block btn-sm",loading:this.state.isLoading},void 0,gettext("Save your vote"))),(0,m.Z)("div",{className:q(e,1)},void 0,(0,m.Z)("button",{className:"btn btn-default btn-block btn-sm",disabled:this.state.isLoading,onClick:this.props.showResults,type:"button"},void 0,gettext("See results"))),(0,m.Z)($,{controls:e,poll:this.props.poll,thread:this.props.thread}),(0,m.Z)(G,{controls:e,poll:this.props.poll})))))}}]),s}(he.Z);var ve,me=function(e){(0,l.Z)(p,e);var t,n,a=(t=p,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function p(e){var t;(0,i.Z)(this,p),t=a.call(this,e),(0,d.Z)((0,r.Z)(t),"showResults",(function(){t.setState({showResults:!0})})),(0,d.Z)((0,r.Z)(t),"showVoting",(function(){t.setState({showResults:!1})}));var n=!0;return e.user.id&&!e.poll.hasSelectedChoices&&(n=!1),t.state={showResults:n},t}return(0,o.Z)(p,[{key:"render",value:function(){if(!this.props.thread.poll)return null;var e=function(e){return!!e.length&&v()().isAfter(e.endsOn)}(this.props.poll);return e||!this.props.poll.acl.can_vote||this.state.showResults?h().createElement(ie,(0,s.Z)({isPollOver:e,showVoting:this.showVoting},this.props)):h().createElement(fe,(0,s.Z)({showResults:this.showResults},this.props))}}]),p}(h().Component);function Ze(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,u.Z)(e);if(t){var s=(0,u.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,c.Z)(this,n)}}var ge=function(e){(0,l.Z)(n,e);var t=Ze(n);function n(){var e;(0,i.Z)(this,n);for(var a=arguments.length,s=new Array(a),o=0;o<a;o++)s[o]=arguments[o];return e=t.call.apply(t,[this].concat(s)),(0,d.Z)((0,r.Z)(e),"onAdd",(function(){var t=e.props.choices.slice();t.push({hash:ye(),label:""}),e.props.setChoices(t)})),(0,d.Z)((0,r.Z)(e),"onChange",(function(t,n){var a=e.props.choices.map((function(e){return e.hash===t&&(e.label=n),e}));e.props.setChoices(a)})),(0,d.Z)((0,r.Z)(e),"onDelete",(function(t){var n=e.props.choices.filter((function(e){return e.hash!==t}));e.props.setChoices(n)})),e}return(0,o.Z)(n,[{key:"render",value:function(){var e=this;return(0,m.Z)("div",{className:"poll-choices-control"},void 0,(0,m.Z)("ul",{className:"list-group"},void 0,this.props.choices.map((function(t){return(0,m.Z)(be,{canDelete:e.props.choices.length>2,choice:t,disabled:e.props.disabled,onChange:e.onChange,onDelete:e.onDelete},t.hash)}))),(0,m.Z)("button",{className:"btn btn-default btn-sm",disabled:this.props.disabled,onClick:this.onAdd,type:"button"},void 0,gettext("Add choice")))}}]),n}(h().Component),be=function(e){(0,l.Z)(n,e);var t=Ze(n);function n(){var e;(0,i.Z)(this,n);for(var a=arguments.length,s=new Array(a),o=0;o<a;o++)s[o]=arguments[o];return e=t.call.apply(t,[this].concat(s)),(0,d.Z)((0,r.Z)(e),"onChange",(function(t){e.props.onChange(e.props.choice.hash,t.target.value)})),(0,d.Z)((0,r.Z)(e),"onDelete",(function(){window.confirm(gettext("Are you sure you want to delete this choice?"))&&e.props.onDelete(e.props.choice.hash)})),e}return(0,o.Z)(n,[{key:"render",value:function(){return(0,m.Z)("li",{className:"list-group-item"},void 0,(0,m.Z)("button",{className:"btn",disabled:!this.props.canDelete||this.props.disabled,onClick:this.onDelete,title:gettext("Delete this choice"),type:"button"},void 0,ve||(ve=(0,m.Z)("span",{className:"material-icon"},void 0,"close"))),(0,m.Z)("input",{disabled:this.props.disabled,maxLength:"255",placeholder:gettext("choice label"),type:"text",onChange:this.onChange,value:this.props.choice.label}))}}]),n}(h().Component);function ye(){for(var e="";12!=e.length;)e=Math.random().toString(36).replace(/[^a-zA-Z0-9]+/g,"").substr(1,12);return e}var _e=n(96359),Ne=n(7227);var ke=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(e){var t;(0,i.Z)(this,s),t=a.call(this,e),(0,d.Z)((0,r.Z)(t),"setChoices",(function(e){var n=Object.assign({},n,{choices:null});t.setState({choices:e,errors:n})})),(0,d.Z)((0,r.Z)(t),"onCancel",(function(){window.confirm(gettext("Are you sure you want to discard poll?"))&&U.Z.close()}));var n=e.poll||{question:"",choices:[{hash:"choice-10000",label:""},{hash:"choice-20000",label:""}],length:0,allowed_choices:1,allow_revotes:0,is_public:0};return t.state={isLoading:!1,isEdit:!!n.question,question:n.question,choices:n.choices,length:n.length,allowed_choices:n.allowed_choices,allow_revotes:n.allow_revotes,is_public:n.is_public,validators:{question:[],choices:[],length:[],allowed_choices:[]},errors:{}},t}return(0,o.Z)(s,[{key:"send",value:function(){var e={question:this.state.question,choices:this.state.choices,length:this.state.length,allowed_choices:this.state.allowed_choices,allow_revotes:this.state.allow_revotes,is_public:this.state.is_public};return this.state.isEdit?C.Z.put(this.props.poll.api.index,e):C.Z.post(this.props.thread.api.poll,e)}},{key:"handleSuccess",value:function(e){z.Z.dispatch(I.gx(e)),this.state.isEdit?M.Z.success(gettext("Poll has been edited.")):M.Z.success(gettext("Poll has been posted.")),U.Z.close()}},{key:"handleError",value:function(e){400===e.status?(e.non_field_errors&&(e.allowed_choices=e.non_field_errors),this.setState({errors:Object.assign({},e)}),M.Z.error(gettext("Form contains errors."))):M.Z.apiError(e)}},{key:"render",value:function(){return(0,m.Z)("div",{className:"poll-form"},void 0,(0,m.Z)("div",{className:"container"},void 0,(0,m.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,m.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,m.Z)("div",{className:"panel-body"},void 0,(0,m.Z)("fieldset",{},void 0,(0,m.Z)("legend",{},void 0,gettext("Question and choices")),(0,m.Z)(_e.Z,{label:gettext("Poll question"),for:"id_questions",validation:this.state.errors.question},void 0,(0,m.Z)("input",{className:"form-control",disabled:this.state.isLoading,id:"id_questions",onChange:this.bindInput("question"),type:"text",maxLength:"255",value:this.state.question})),(0,m.Z)(_e.Z,{label:gettext("Available choices"),validation:this.state.errors.choices},void 0,(0,m.Z)(ge,{choices:this.state.choices,disabled:this.state.isLoading,setChoices:this.setChoices}))),(0,m.Z)("fieldset",{},void 0,(0,m.Z)("legend",{},void 0,gettext("Voting")),(0,m.Z)("div",{className:"row"},void 0,(0,m.Z)("div",{className:"col-xs-12 col-sm-6"},void 0,(0,m.Z)(_e.Z,{label:gettext("Poll length"),helpText:gettext("Enter number of days for which voting in this poll should be possible or zero to run this poll indefinitely."),for:"id_length",validation:this.state.errors.length},void 0,(0,m.Z)("input",{className:"form-control",disabled:this.state.isLoading,id:"id_length",onChange:this.bindInput("length"),type:"text",value:this.state.length}))),(0,m.Z)("div",{className:"col-xs-12 col-sm-6"},void 0,(0,m.Z)(_e.Z,{label:gettext("Allowed choices"),for:"id_allowed_choices",validation:this.state.errors.allowed_choices},void 0,(0,m.Z)("input",{className:"form-control",disabled:this.state.isLoading,id:"id_allowed_choices",onChange:this.bindInput("allowed_choices"),type:"text",maxLength:"255",value:this.state.allowed_choices})))),(0,m.Z)("div",{className:"row"},void 0,(0,m.Z)(xe,{bindInput:this.bindInput,disabled:this.state.isLoading,isEdit:this.state.isEdit,value:this.state.is_public}),(0,m.Z)("div",{className:"col-xs-12 col-sm-6"},void 0,(0,m.Z)(_e.Z,{label:gettext("Allow vote changes"),for:"id_allow_revotes"},void 0,(0,m.Z)(Ne.Z,{id:"id_allow_revotes",disabled:this.state.isLoading,iconOn:"check",iconOff:"close",labelOn:gettext("Allow participants to change their vote"),labelOff:gettext("Don't allow participants to change their vote"),onChange:this.bindInput("allow_revotes"),value:this.state.allow_revotes})))))),(0,m.Z)("div",{className:"panel-footer text-right"},void 0,(0,m.Z)("button",{className:"btn btn-default",disabled:this.state.isLoading,onClick:this.onCancel,type:"button"},void 0,gettext("Cancel"))," ",(0,m.Z)(pe.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,this.state.isEdit?gettext("Save changes"):gettext("Post poll")))))))}}]),s}(he.Z);function xe(e){return e.isEdit?null:(0,m.Z)("div",{className:"col-xs-12 col-sm-6"},void 0,(0,m.Z)(_e.Z,{label:gettext("Make voting public"),helpText:gettext("Making voting public will allow everyone to access detailed list of votes, showing which users voted for which choices and at which times. This option can't be changed after poll's creation. Moderators may see voting details for all polls."),for:"id_is_public"},void 0,(0,m.Z)(Ne.Z,{id:"id_is_public",disabled:e.disabled,iconOn:"visibility",iconOff:"visibility_off",labelOn:gettext("Votes are public"),labelOff:gettext("Votes are hidden"),onChange:e.bindInput("is_public"),value:e.value})))}},11005:function(e,t,n){"use strict";n.d(t,{Z:function(){return x}});var a=n(22928),s=n(57588),i=n.n(s),o=n(69092);function r(e){return e.post.content?i().createElement(l,e):i().createElement(c,e)}function l(e){return(0,a.Z)("div",{className:"post-body"},void 0,(0,a.Z)(o.Z,{markup:e.post.content}))}function c(e){return(0,a.Z)("div",{className:"post-body post-body-invalid"},void 0,(0,a.Z)("p",{className:"lead"},void 0,gettext("This post's contents cannot be displayed.")),(0,a.Z)("p",{className:"text-muted"},void 0,gettext("This error is caused by invalid post content manipulation.")))}function u(e){var t=e.post,n=t.category,s=t.thread,i=interpolate(gettext("posted %(posted_on)s"),{posted_on:t.posted_on.format("LL, LT")},!0);return(0,a.Z)("div",{className:"post-heading"},void 0,(0,a.Z)("a",{className:"btn btn-link item-title",href:s.url},void 0,s.title),(0,a.Z)("a",{className:"btn btn-link post-category",href:n.url.index},void 0,n.name),(0,a.Z)("a",{href:t.url.index,className:"btn btn-link posted-on",title:i},void 0,t.posted_on.fromNow()))}n(89627);var d,p,h=n(19605);function f(e){var t=e.post;return(0,a.Z)("a",{className:"btn btn-default btn-icon pull-right",href:t.url.index},void 0,(0,a.Z)("span",{className:"btn-text-left hidden-xs"},void 0,gettext("See post")),d||(d=(0,a.Z)("span",{className:"material-icon"},void 0,"chevron_right")))}function v(e){var t=e.post;return(0,a.Z)("div",{className:"post-side post-side-anonymous"},void 0,(0,a.Z)(f,{post:t}),(0,a.Z)("div",{className:"media"},void 0,p||(p=(0,a.Z)("div",{className:"media-left"},void 0,(0,a.Z)("span",{},void 0,(0,a.Z)(h.ZP,{className:"poster-avatar",size:50})))),(0,a.Z)("div",{className:"media-body"},void 0,(0,a.Z)("div",{className:"media-heading"},void 0,(0,a.Z)("span",{className:"item-title"},void 0,t.poster_name)),(0,a.Z)("span",{className:"user-title user-title-anonymous"},void 0,gettext("Removed user")))))}function m(e){var t=e.rank,n=e.title||t.title||t.name,s="user-title";return t.css_class&&(s+=" user-title-"+t.css_class),t.is_tab?(0,a.Z)("a",{className:s,href:t.url},void 0,n):(0,a.Z)("span",{className:s},void 0,n)}function Z(e){var t=e.post,n=e.poster;return(0,a.Z)("div",{className:"post-side post-side-registered"},void 0,(0,a.Z)(f,{post:t}),(0,a.Z)("div",{className:"media"},void 0,(0,a.Z)("div",{className:"media-left"},void 0,(0,a.Z)("a",{href:n.url},void 0,(0,a.Z)(h.ZP,{className:"poster-avatar",size:50,user:n}))),(0,a.Z)("div",{className:"media-body"},void 0,(0,a.Z)("div",{className:"media-heading"},void 0,(0,a.Z)("a",{className:"item-title",href:n.url},void 0,n.username)),(0,a.Z)(m,{title:n.title,rank:n.rank}))))}function g(e){var t=e.post,n=e.poster;return n&&n.id?(0,a.Z)(Z,{post:t,poster:n}):(0,a.Z)(v,{post:t})}function b(e){var t=e.post,n=e.poster||t.poster,s="post";return n&&n.rank.css_class&&(s+=" post-"+n.rank.css_class),(0,a.Z)("li",{className:s,id:"post-"+t.id},void 0,(0,a.Z)("div",{className:"panel panel-default panel-post"},void 0,(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)(g,{post:t,poster:n}),(0,a.Z)(u,{post:t}),(0,a.Z)(r,{post:t}))))}var y,_,N=n(44039);function k(){return(0,a.Z)("ul",{className:"posts-list post-feed ui-preview"},void 0,(0,a.Z)("li",{className:"post"},void 0,(0,a.Z)("div",{className:"panel panel-default panel-post"},void 0,(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)("div",{className:"post-side post-side-anonymous"},void 0,(0,a.Z)("div",{className:"media"},void 0,y||(y=(0,a.Z)("div",{className:"media-left"},void 0,(0,a.Z)("span",{},void 0,(0,a.Z)(h.ZP,{className:"poster-avatar",size:50})))),(0,a.Z)("div",{className:"media-body"},void 0,(0,a.Z)("div",{className:"media-heading"},void 0,(0,a.Z)("span",{className:"item-title"},void 0,(0,a.Z)("span",{className:"ui-preview-text",style:{width:N.e(30,200)+"px"}},void 0," "))),(0,a.Z)("span",{className:"user-title user-title-anonymous"},void 0,(0,a.Z)("span",{className:"ui-preview-text",style:{width:N.e(30,200)+"px"}},void 0," "))))),(0,a.Z)("div",{className:"post-heading"},void 0,(0,a.Z)("span",{className:"ui-preview-text",style:{width:N.e(30,200)+"px"}},void 0," ")),(0,a.Z)("div",{className:"post-body"},void 0,(0,a.Z)("article",{className:"misago-markup"},void 0,(0,a.Z)("p",{},void 0,(0,a.Z)("span",{className:"ui-preview-text",style:{width:N.e(30,200)+"px"}},void 0," ")," ",(0,a.Z)("span",{className:"ui-preview-text",style:{width:N.e(30,200)+"px"}},void 0," ")," ",(0,a.Z)("span",{className:"ui-preview-text",style:{width:N.e(30,200)+"px"}},void 0," "))))))))}function x(e){var t=e.isReady,n=e.posts,s=e.poster;return t?(0,a.Z)("ul",{className:"posts-list post-feed ui-ready"},void 0,n.map((function(e){return(0,a.Z)(b,{post:e,poster:s},e.id)}))):_||(_=(0,a.Z)(k,{}))}},12891:function(e,t,n){"use strict";n.d(t,{Jh:function(){return o},jn:function(){return i}});var a=n(55210),s=n(32233);function i(){return[(0,a.Ei)(s.Z.get("SETTINGS").thread_title_length_min,(function(e,t){var n=ngettext("Thread title should be at least %(limit_value)s character long (it has %(show_value)s).","Thread title should be at least %(limit_value)s characters long (it has %(show_value)s).",e);return interpolate(n,{limit_value:e,show_value:t},!0)})),(0,a.BS)(s.Z.get("SETTINGS").thread_title_length_max,(function(e,t){var n=ngettext("Thread title cannot be longer than %(limit_value)s character (it has %(show_value)s).","Thread title cannot be longer than %(limit_value)s characters (it has %(show_value)s).",e);return interpolate(n,{limit_value:e,show_value:t},!0)}))]}function o(){return s.Z.get("SETTINGS").post_length_max?[r(),(0,a.BS)(s.Z.get("SETTINGS").post_length_max||1e6,(function(e,t){var n=ngettext("Posted message cannot be longer than %(limit_value)s character (it has %(show_value)s).","Posted message cannot be longer than %(limit_value)s characters (it has %(show_value)s).",e);return interpolate(n,{limit_value:e,show_value:t},!0)}))]:[r()]}function r(){return(0,a.Ei)(s.Z.get("SETTINGS").post_length_min,(function(e,t){var n=ngettext("Posted message should be at least %(limit_value)s character long (it has %(show_value)s).","Posted message should be at least %(limit_value)s characters long (it has %(show_value)s).",e);return interpolate(n,{limit_value:e,show_value:t},!0)}))}},60471:function(e,t,n){"use strict";n.d(t,{Z:function(){return p}});var a=n(22928),s=n(15671),i=n(43144),o=n(97326),r=n(79340),l=n(6215),c=n(61120),u=n(4942),d=n(57588);var p=function(e){(0,r.Z)(p,e);var t,n,d=(t=p,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function p(){var e;(0,s.Z)(this,p);for(var t=arguments.length,n=new Array(t),a=0;a<t;a++)n[a]=arguments[a];return e=d.call.apply(d,[this].concat(n)),(0,u.Z)((0,o.Z)(e),"change",(function(t){return function(){e.props.onChange({target:{value:t}})}})),e}return(0,i.Z)(p,[{key:"getChoice",value:function(){var e=this,t=null;return this.props.choices.map((function(n){n.value===e.props.value&&(t=n)})),t}},{key:"getIcon",value:function(){return this.getChoice().icon}},{key:"getLabel",value:function(){return this.getChoice().label}},{key:"render",value:function(){var e=this;return(0,a.Z)("div",{className:"btn-group btn-select-group"},void 0,(0,a.Z)("button",{type:"button",className:"btn btn-select dropdown-toggle",id:this.props.id||null,"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-describedby":this.props["aria-describedby"]||null,disabled:this.props.disabled||!1},void 0,(0,a.Z)(h,{icon:this.getIcon()}),this.getLabel()),(0,a.Z)("ul",{className:"dropdown-menu"},void 0,this.props.choices.map((function(t,n){return(0,a.Z)("li",{},n,(0,a.Z)("button",{type:"button",className:"btn-link",onClick:e.change(t.value)},void 0,(0,a.Z)(h,{icon:t.icon}),t.label))}))))}}]),p}(n.n(d)().Component);function h(e){var t=e.icon;return t?(0,a.Z)("span",{className:"material-icon"},void 0,t):null}},14467:function(e,t,n){"use strict";n.d(t,{Z:function(){return b}});var a,s=n(22928),i=n(15671),o=n(43144),r=n(79340),l=n(6215),c=n(61120),u=(n(57588),n(32233)),d=n(82211),p=n(43345),h=n(47235),f=n(78657),v=n(59801),m=n(53904),Z=n(93051),g=n(19755);var b=function(e){(0,r.Z)(b,e);var t,n,p=(t=b,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function b(e){var t;return(0,i.Z)(this,b),(t=p.call(this,e)).state={isLoading:!1,showActivation:!1,username:"",password:"",validators:{username:[],password:[]}},t}return(0,o.Z)(b,[{key:"clean",value:function(){return!!this.isValid()||(m.Z.error(gettext("Fill out both fields.")),!1)}},{key:"send",value:function(){return f.Z.post(u.Z.get("AUTH_API"),{username:this.state.username,password:this.state.password})}},{key:"handleSuccess",value:function(){var e=g("#hidden-login-form");e.append('<input type="text" name="username" />'),e.append('<input type="password" name="password" />'),e.find('input[type="hidden"]').val(f.Z.getCsrfToken()),e.find('input[name="redirect_to"]').val(window.location.pathname),e.find('input[name="username"]').val(this.state.username),e.find('input[name="password"]').val(this.state.password),e.submit(),this.setState({isLoading:!0})}},{key:"handleError",value:function(e){400===e.status?"inactive_admin"===e.code?m.Z.info(e.detail):"inactive_user"===e.code?(m.Z.info(e.detail),this.setState({showActivation:!0})):"banned"===e.code?((0,Z.Z)(e.detail),v.Z.hide()):m.Z.error(e.detail):403===e.status&&e.ban?((0,Z.Z)(e.ban),v.Z.hide()):m.Z.apiError(e)}},{key:"getActivationButton",value:function(){return this.state.showActivation?(0,s.Z)("a",{className:"btn btn-success btn-block",href:u.Z.get("REQUEST_ACTIVATION_URL")},void 0,gettext("Activate account")):null}},{key:"render",value:function(){return(0,s.Z)("div",{className:"modal-dialog modal-sm modal-sign-in",role:"document"},void 0,(0,s.Z)("div",{className:"modal-content"},void 0,(0,s.Z)("div",{className:"modal-header"},void 0,(0,s.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,a||(a=(0,s.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,s.Z)("h4",{className:"modal-title"},void 0,gettext("Sign in"))),(0,s.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,s.Z)("div",{className:"modal-body"},void 0,(0,s.Z)(h.Z,{buttonLabel:gettext("Sign in with %(site)s"),formLabel:gettext("Or use your forum account:"),labelClassName:"text-center"}),(0,s.Z)("div",{className:"form-group"},void 0,(0,s.Z)("div",{className:"control-input"},void 0,(0,s.Z)("input",{className:"form-control input-lg",disabled:this.state.isLoading,id:"id_username",onChange:this.bindInput("username"),placeholder:gettext("Username or e-mail"),type:"text",value:this.state.username}))),(0,s.Z)("div",{className:"form-group"},void 0,(0,s.Z)("div",{className:"control-input"},void 0,(0,s.Z)("input",{className:"form-control input-lg",disabled:this.state.isLoading,id:"id_password",onChange:this.bindInput("password"),placeholder:gettext("Password"),type:"password",value:this.state.password})))),(0,s.Z)("div",{className:"modal-footer"},void 0,this.getActivationButton(),(0,s.Z)(d.Z,{className:"btn-primary btn-block",loading:this.state.isLoading},void 0,gettext("Sign in")),(0,s.Z)("a",{className:"btn btn-default btn-block",href:u.Z.get("FORGOTTEN_PASSWORD_URL")},void 0,gettext("Forgot password?"))))))}}]),b}(p.Z)},24678:function(e,t,n){"use strict";n.d(t,{Jj:function(){return h},ZP:function(){return p},pg:function(){return f}});var a=n(22928),s=n(15671),i=n(43144),o=n(79340),r=n(6215),l=n(61120),c=n(57588),u=n.n(c);function d(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,l.Z)(e);if(t){var s=(0,l.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,r.Z)(this,n)}}var p=function(e){(0,o.Z)(n,e);var t=d(n);function n(){return(0,s.Z)(this,n),t.apply(this,arguments)}return(0,i.Z)(n,[{key:"getClass",value:function(){return e=this.props.status,t="",e.is_banned?t="banned":e.is_hidden?t="offline":e.is_online_hidden?t="online":e.is_offline_hidden?t="offline":e.is_online?t="online":e.is_offline&&(t="offline"),"user-status user-"+t;var e,t}},{key:"render",value:function(){return(0,a.Z)("span",{className:this.getClass()},void 0,this.props.children)}}]),n}(u().Component),h=function(e){(0,o.Z)(n,e);var t=d(n);function n(){return(0,s.Z)(this,n),t.apply(this,arguments)}return(0,i.Z)(n,[{key:"getIcon",value:function(){return this.props.status.is_banned?"remove_circle_outline":this.props.status.is_hidden?"help_outline":this.props.status.is_online_hidden?"label":this.props.status.is_offline_hidden?"label_outline":this.props.status.is_online?"lens":this.props.status.is_offline?"panorama_fish_eye":void 0}},{key:"render",value:function(){return(0,a.Z)("span",{className:"material-icon status-icon"},void 0,this.getIcon())}}]),n}(u().Component),f=function(e){(0,o.Z)(n,e);var t=d(n);function n(){return(0,s.Z)(this,n),t.apply(this,arguments)}return(0,i.Z)(n,[{key:"getHelp",value:function(){return e=this.props.user,(t=this.props.status).is_banned?t.banned_until?interpolate(gettext("%(username)s is banned until %(ban_expires)s"),{username:e.username,ban_expires:t.banned_until.format("LL, LT")},!0):interpolate(gettext("%(username)s is banned"),{username:e.username},!0):t.is_hidden?interpolate(gettext("%(username)s is hiding presence"),{username:e.username},!0):t.is_online_hidden?interpolate(gettext("%(username)s is online (hidden)"),{username:e.username},!0):t.is_offline_hidden?interpolate(gettext("%(username)s was last seen %(last_click)s (hidden)"),{username:e.username,last_click:t.last_click.fromNow()},!0):t.is_online?interpolate(gettext("%(username)s is online"),{username:e.username},!0):t.is_offline?interpolate(gettext("%(username)s was last seen %(last_click)s"),{username:e.username,last_click:t.last_click.fromNow()},!0):void 0;var e,t}},{key:"getLabel",value:function(){return this.props.status.is_banned?gettext("Banned"):this.props.status.is_hidden?gettext("Hidden"):this.props.status.is_online_hidden?gettext("Online (hidden)"):this.props.status.is_offline_hidden?gettext("Offline (hidden)"):this.props.status.is_online?gettext("Online"):this.props.status.is_offline?gettext("Offline"):void 0}},{key:"render",value:function(){return(0,a.Z)("span",{className:this.props.className||"status-label",title:this.getHelp()},void 0,this.getLabel())}}]),n}(u().Component)},7850:function(e,t,n){"use strict";n.d(t,{Z:function(){return k}});var a=n(22928),s=n(15671),i=n(43144),o=n(79340),r=n(6215),l=n(61120),c=n(57588),u=n.n(c);var d,p,h=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"getEmptyMessage",value:function(){return this.props.emptyMessage?this.props.emptyMessage:gettext("No name changes have been recorded for your account.")}},{key:"render",value:function(){return(0,a.Z)("div",{className:"username-history ui-ready"},void 0,(0,a.Z)("ul",{className:"list-group"},void 0,(0,a.Z)("li",{className:"list-group-item empty-message"},void 0,this.getEmptyMessage())))}}]),u}(u().Component),f=n(19605);var v=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"renderUserAvatar",value:function(){return this.props.change.changed_by?(0,a.Z)("a",{href:this.props.change.changed_by.url,className:"user-avatar-wrapper"},void 0,(0,a.Z)(f.ZP,{user:this.props.change.changed_by,size:"100"})):d||(d=(0,a.Z)("span",{className:"user-avatar-wrapper"},void 0,(0,a.Z)(f.ZP,{size:"100"})))}},{key:"renderUsername",value:function(){return this.props.change.changed_by?(0,a.Z)("a",{href:this.props.change.changed_by.url,className:"item-title"},void 0,this.props.change.changed_by.username):(0,a.Z)("span",{className:"item-title"},void 0,this.props.change.changed_by_username)}},{key:"render",value:function(){return(0,a.Z)("li",{className:"list-group-item"},this.props.change.id,(0,a.Z)("div",{className:"change-avatar"},void 0,this.renderUserAvatar()),(0,a.Z)("div",{className:"change-author"},void 0,this.renderUsername()),(0,a.Z)("div",{className:"change"},void 0,(0,a.Z)("span",{className:"old-username"},void 0,this.props.change.old_username),p||(p=(0,a.Z)("span",{className:"material-icon"},void 0,"arrow_forward")),(0,a.Z)("span",{className:"new-username"},void 0,this.props.change.new_username)),(0,a.Z)("div",{className:"change-date"},void 0,(0,a.Z)("abbr",{title:this.props.change.changed_on.format("LLL")},void 0,this.props.change.changed_on.fromNow())))}}]),u}(u().Component);var m,Z,g=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"render",value:function(){return(0,a.Z)("div",{className:"username-history ui-ready"},void 0,(0,a.Z)("ul",{className:"list-group"},void 0,this.props.changes.map((function(e){return(0,a.Z)(v,{change:e},e.id)}))))}}]),u}(u().Component),b=n(44039);var y=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"shouldComponentUpdate",value:function(){return!1}},{key:"getClassName",value:function(){return this.props.hiddenOnMobile?"list-group-item hidden-xs hidden-sm":"list-group-item"}},{key:"render",value:function(){return(0,a.Z)("li",{className:this.getClassName()},void 0,m||(m=(0,a.Z)("div",{className:"change-avatar"},void 0,(0,a.Z)("span",{className:"user-avatar"},void 0,(0,a.Z)(f.ZP,{size:"100"})))),(0,a.Z)("div",{className:"change-author"},void 0,(0,a.Z)("span",{className:"ui-preview-text",style:{width:b.e(30,100)+"px"}},void 0," ")),(0,a.Z)("div",{className:"change"},void 0,(0,a.Z)("span",{className:"ui-preview-text",style:{width:b.e(30,70)+"px"}},void 0," "),Z||(Z=(0,a.Z)("span",{className:"material-icon"},void 0,"arrow_forward")),(0,a.Z)("span",{className:"ui-preview-text",style:{width:b.e(30,70)+"px"}},void 0," ")),(0,a.Z)("div",{className:"change-date"},void 0,(0,a.Z)("span",{className:"ui-preview-text",style:{width:b.e(80,140)+"px"}},void 0," ")))}}]),u}(u().Component);var _,N=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"shouldComponentUpdate",value:function(){return!1}},{key:"render",value:function(){return(0,a.Z)("div",{className:"username-history ui-preview"},void 0,(0,a.Z)("ul",{className:"list-group"},void 0,[0,1,2].map((function(e){return(0,a.Z)(y,{hiddenOnMobile:e>0},e)}))))}}]),u}(u().Component);var k=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"render",value:function(){return this.props.isLoaded?this.props.changes.length?(0,a.Z)(g,{changes:this.props.changes}):(0,a.Z)(h,{emptyMessage:this.props.emptyMessage}):_||(_=(0,a.Z)(N,{}))}}]),u}(u().Component)},40429:function(e,t,n){"use strict";n.d(t,{Z:function(){return L}});var a,s=n(22928),i=n(57588),o=n.n(i),r=n(19605),l=n(24678);function c(e){var t=e.showStatus,n=e.user;return(0,s.Z)("ul",{className:"list-unstyled"},void 0,(0,s.Z)(u,{showStatus:t,user:n}),(0,s.Z)(d,{user:n}),a||(a=(0,s.Z)("li",{className:"user-stat-divider"})),(0,s.Z)(p,{user:n}),(0,s.Z)(h,{user:n}),(0,s.Z)(f,{user:n}))}function u(e){var t=e.showStatus,n=e.user;return t?(0,s.Z)("li",{className:"user-stat-status"},void 0,(0,s.Z)(l.ZP,{status:n.status},void 0,(0,s.Z)(l.pg,{status:n.status,user:n}))):null}function d(e){var t=e.user.joined_on,n=interpolate(gettext("Joined on %(joined_on)s"),{joined_on:t.format("LL, LT")},!0),a=interpolate(gettext("Joined %(joined_on)s"),{joined_on:t.fromNow()},!0);return(0,s.Z)("li",{className:"user-stat-join-date"},void 0,(0,s.Z)("abbr",{title:n},void 0,a))}function p(e){var t=e.user,n=v("user-stat-posts",t.posts),a=ngettext("%(posts)s post","%(posts)s posts",t.posts);return(0,s.Z)("li",{className:n},void 0,interpolate(a,{posts:t.posts},!0))}function h(e){var t=e.user,n=v("user-stat-threads",t.threads),a=ngettext("%(threads)s thread","%(threads)s threads",t.threads);return(0,s.Z)("li",{className:n},void 0,interpolate(a,{threads:t.threads},!0))}function f(e){var t=e.user,n=v("user-stat-followers",t.followers),a=ngettext("%(followers)s follower","%(followers)s followers",t.followers);return(0,s.Z)("li",{className:n},void 0,interpolate(a,{followers:t.followers},!0))}function v(e,t){return 0===t?e+" user-stat-empty":e}function m(e){var t=e.rank,n=e.title||t.title||t.name,a="user-title";return t.css_class&&(a+=" user-title-"+t.css_class),t.is_tab?(0,s.Z)("a",{className:a,href:t.url},void 0,n):(0,s.Z)("span",{className:a},void 0,n)}function Z(e){var t=e.showStatus,n=e.user,a=n.rank,i="panel user-card";return a.css_class&&(i+=" user-card-"+a.css_class),(0,s.Z)("div",{className:i},void 0,(0,s.Z)("div",{className:"panel-body"},void 0,(0,s.Z)("div",{className:"row"},void 0,(0,s.Z)("div",{className:"col-xs-3 user-card-left"},void 0,(0,s.Z)("div",{className:"user-card-small-avatar"},void 0,(0,s.Z)("a",{href:n.url},void 0,(0,s.Z)(r.ZP,{size:"50",size2x:"80",user:n})))),(0,s.Z)("div",{className:"col-xs-9 col-sm-12 user-card-body"},void 0,(0,s.Z)("div",{className:"user-card-avatar"},void 0,(0,s.Z)("a",{href:n.url},void 0,(0,s.Z)(r.ZP,{size:"150",size2x:"200",user:n}))),(0,s.Z)("div",{className:"user-card-username"},void 0,(0,s.Z)("a",{href:n.url},void 0,n.username)),(0,s.Z)("div",{className:"user-card-title"},void 0,(0,s.Z)(m,{rank:a,title:n.title})),(0,s.Z)("div",{className:"user-card-stats"},void 0,(0,s.Z)(c,{showStatus:t,user:n}))))))}var g,b,y,_=n(15671),N=n(43144),k=n(79340),x=n(6215),w=n(61120),R=n(44039);var C,S=function(e){(0,k.Z)(i,e);var t,n,a=(t=i,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,w.Z)(t);if(n){var s=(0,w.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,x.Z)(this,e)});function i(){return(0,_.Z)(this,i),a.apply(this,arguments)}return(0,N.Z)(i,[{key:"shouldComponentUpdate",value:function(){return!1}},{key:"render",value:function(){return(0,s.Z)("div",{className:"panel user-card user-card-preview"},void 0,(0,s.Z)("div",{className:"panel-body"},void 0,(0,s.Z)("div",{className:"row"},void 0,g||(g=(0,s.Z)("div",{className:"col-xs-3 user-card-left"},void 0,(0,s.Z)("div",{className:"user-card-small-avatar"},void 0,(0,s.Z)("span",{},void 0,(0,s.Z)(r.ZP,{size:"50",size2x:"80"}))))),(0,s.Z)("div",{className:"col-xs-9 col-sm-12 user-card-body"},void 0,b||(b=(0,s.Z)("div",{className:"user-card-avatar"},void 0,(0,s.Z)("span",{},void 0,(0,s.Z)(r.ZP,{size:"150",size2x:"200"})))),(0,s.Z)("div",{className:"user-card-username"},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:R.e(60,150)+"px"}},void 0," ")),(0,s.Z)("div",{className:"user-card-title"},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:R.e(60,150)+"px"}},void 0," ")),(0,s.Z)("div",{className:"user-card-stats"},void 0,(0,s.Z)("ul",{className:"list-unstyled"},void 0,(0,s.Z)("li",{},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:R.e(30,70)+"px"}},void 0," ")),(0,s.Z)("li",{},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:R.e(30,70)+"px"}},void 0," ")),y||(y=(0,s.Z)("li",{className:"user-stat-divider"})),(0,s.Z)("li",{},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:R.e(30,70)+"px"}},void 0," ")),(0,s.Z)("li",{},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:R.e(30,70)+"px"}},void 0," "))))))))}}]),i}(o().Component);function E(e){var t=e.colClassName,n=e.cols,a=Array.apply(null,{length:n}).map(Number.call,Number);return(0,s.Z)("div",{className:"users-cards-list ui-preview"},void 0,(0,s.Z)("div",{className:"row"},void 0,a.map((function(e){var n=t;return 0!==e&&(n+=" hidden-xs"),3===e&&(n+=" hidden-sm"),(0,s.Z)("div",{className:n},e,C||(C=(0,s.Z)(S,{})))}))))}function L(e){var t=e.cols,n=e.isReady,a=e.showStatus,i=e.users,o="col-xs-12 col-sm-4";return 4===t&&(o+=" col-md-3"),n?(0,s.Z)("div",{className:"users-cards-list ui-ready"},void 0,(0,s.Z)("div",{className:"row"},void 0,i.map((function(e){return(0,s.Z)("div",{className:o},e.id,(0,s.Z)(Z,{showStatus:a,user:e}))})))):(0,s.Z)(E,{colClassName:o,cols:t})}},82125:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var a=n(15671),s=n(43144),i=n(97326),o=n(79340),r=n(6215),l=n(61120),c=n(4942),u=n(57588);var d=function(e){(0,o.Z)(d,e);var t,n,u=(t=d,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function d(e){var t;return(0,a.Z)(this,d),t=u.call(this,e),(0,c.Z)((0,i.Z)(t),"toggleNav",(function(){t.setState({dropdown:!t.state.dropdown})})),(0,c.Z)((0,i.Z)(t),"hideNav",(function(){t.setState({dropdown:!1})})),t.state={dropdown:!1},t}return(0,s.Z)(d,[{key:"getCompactNavClassName",value:function(){return this.state.dropdown?"compact-nav open":"compact-nav"}}]),d}(n.n(u)().Component)},7227:function(e,t,n){"use strict";n.d(t,{Z:function(){return p}});var a=n(22928),s=n(15671),i=n(43144),o=n(97326),r=n(79340),l=n(6215),c=n(61120),u=n(4942),d=n(57588);var p=function(e){(0,r.Z)(p,e);var t,n,d=(t=p,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function p(){var e;(0,s.Z)(this,p);for(var t=arguments.length,n=new Array(t),a=0;a<t;a++)n[a]=arguments[a];return e=d.call.apply(d,[this].concat(n)),(0,u.Z)((0,o.Z)(e),"toggle",(function(){e.props.onChange({target:{value:!e.props.value}})})),e}return(0,i.Z)(p,[{key:"getClassName",value:function(){return this.props.value?"btn btn-yes-no btn-yes-no-on":"btn btn-yes-no btn-yes-no-off"}},{key:"getIcon",value:function(){return this.props.value?this.props.iconOn||"check_box":this.props.iconOff||"check_box_outline_blank"}},{key:"getLabel",value:function(){return this.props.value?this.props.labelOn||gettext("yes"):this.props.labelOff||gettext("no")}},{key:"render",value:function(){return(0,a.Z)("button",{type:"button",onClick:this.toggle,className:this.getClassName(),id:this.props.id||null,"aria-describedby":this.props["aria-describedby"]||null,disabled:this.props.disabled||!1},void 0,(0,a.Z)("span",{className:"material-icon"},void 0,this.getIcon()),(0,a.Z)("span",{className:"btn-text"},void 0,this.getLabel()))}}]),p}(n.n(d)().Component)},32233:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});var a=n(15671),s=n(43144),i=(n(58294),n(95377),n(68852),n(39737),n(14316),n(43204),n(43511),n(7023),n(54116),function(){function e(t){(0,a.Z)(this,e),this.isOrdered=!1,this._items=t||[]}return(0,s.Z)(e,[{key:"add",value:function(e,t,n){this._items.push({key:e,item:t,after:n&&n.after||null,before:n&&n.before||null})}},{key:"get",value:function(e,t){for(var n=0;n<this._items.length;n++)if(this._items[n].key===e)return this._items[n].item;return t}},{key:"has",value:function(e){return void 0!==this.get(e)}},{key:"values",value:function(){for(var e=[],t=0;t<this._items.length;t++)e.push(this._items[t].item);return e}},{key:"order",value:function(e){return this.isOrdered||(this._items=this._order(this._items),this.isOrdered=!0),e||void 0===e?this.values():this._items}},{key:"orderedValues",value:function(){return this.order(!0)}},{key:"_order",value:function(e){var t=[];e.forEach((function(e){t.push(e.key)}));var n=[],a=[];function s(e){var t=-1;-1===a.indexOf(e.key)&&(e.after?-1!==(t=a.indexOf(e.after))&&(t+=1):e.before&&(t=a.indexOf(e.before)),-1!==t&&(n.splice(t,0,e),a.splice(t,0,e.key)))}e.forEach((function(e){e.after||e.before||(n.push(e),a.push(e.key))})),e.forEach((function(e){"_end"===e.before&&(n.push(e),a.push(e.key))}));for(var i=200;i>0&&t.length!==a.length;)i-=1,e.forEach(s);return n}}]),e}()),o=new(function(){function e(){(0,a.Z)(this,e),this._initializers=[],this._context={}}return(0,s.Z)(e,[{key:"addInitializer",value:function(e){this._initializers.push({key:e.name,item:e.initializer,after:e.after,before:e.before})}},{key:"init",value:function(e){var t=this;this._context=e,new i(this._initializers).orderedValues().forEach((function(e){e(t)}))}},{key:"has",value:function(e){return!!this._context[e]}},{key:"get",value:function(e,t){return this.has(e)?this._context[e]:t||void 0}},{key:"pop",value:function(e){if(this.has(e)){var t=this._context[e];return this._context[e]=null,t}}}]),e}());window.misago=o;var r=o},58339:function(e,t,n){"use strict";var a=n(32233),s=n(78657);a.Z.addInitializer({name:"ajax",initializer:function(){s.Z.init(a.Z.get("CSRF_COOKIE_NAME"))}})},64109:function(e,t,n){"use strict";var a=n(32233),s=n(35486),i=n(78657),o=n(53904),r=n(90287);a.Z.addInitializer({name:"auth-sync",initializer:function(e){e.get("isAuthenticated")&&window.setInterval((function(){i.Z.get(e.get("AUTH_API")).then((function(e){r.Z.dispatch((0,s.r$)(e))}),(function(e){o.Z.apiError(e)}))}),45e3)},after:"auth"})},46226:function(e,t,n){"use strict";var a=n(32233),s=n(98274),i=n(59801),o=n(90287),r=n(62833);a.Z.addInitializer({name:"auth",initializer:function(){s.Z.init(o.Z,r.Z,i.Z)},after:"store"})},93240:function(e,t,n){"use strict";var a=n(32233),s=n(78657),i=n(93825),o=n(96142),r=n(53904);a.Z.addInitializer({name:"captcha",initializer:function(e){i.ZP.init(e,s.Z,o.Z,r.Z)}})},75147:function(e,t,n){"use strict";var a=n(22928),s=n(57588),i=n.n(s),o=n(32233),r=n(15671),l=n(43144),c=n(97326),u=n(79340),d=n(6215),p=n(61120),h=n(4942),f=n(78657);var v=function(e){(0,u.Z)(i,e);var t,n,s=(t=i,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function i(e){var t;return(0,r.Z)(this,i),t=s.call(this,e),(0,h.Z)((0,c.Z)(t),"handleDecline",(function(){t.state.submiting||window.confirm(gettext("Declining will result in immediate deactivation and deletion of your account. This action is not reversible."))&&(t.setState({submiting:!0}),f.Z.post(t.props.api,{accept:!1}).then((function(){window.location.reload(!0)})))})),(0,h.Z)((0,c.Z)(t),"handleAccept",(function(){t.state.submiting||(t.setState({submiting:!0}),f.Z.post(t.props.api,{accept:!0}).then((function(){window.location.reload(!0)})))})),t.state={submiting:!1},t}return(0,l.Z)(i,[{key:"render",value:function(){return(0,a.Z)("div",{},void 0,(0,a.Z)("button",{className:"btn btn-default",disabled:this.state.submiting,type:"buton",onClick:this.handleDecline},void 0,gettext("Decline")),(0,a.Z)("button",{className:"btn btn-primary",disabled:this.state.submiting,type:"buton",onClick:this.handleAccept},void 0,gettext("Accept and continue")))}}]),i}(i().Component),m=n(4869);o.Z.addInitializer({name:"component:accept-agreement",initializer:function(e){document.getElementById("required-agreement-mount")&&(0,m.Z)((0,a.Z)(v,{api:e.get("REQUIRED_AGREEMENT_API")}),"required-agreement-mount",!1)},after:"store"})},4894:function(e,t,n){"use strict";var a=n(37424),s=n(32233),i=n(22928),o=n(15671),r=n(43144),l=n(79340),c=n(6215),u=n(61120),d=n(57588);var p=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(){return(0,o.Z)(this,s),a.apply(this,arguments)}return(0,r.Z)(s,[{key:"refresh",value:function(){window.location.reload()}},{key:"getMessage",value:function(){return this.props.signedIn?interpolate(gettext("You have signed in as %(username)s. Please refresh the page before continuing."),{username:this.props.signedIn.username},!0):this.props.signedOut?interpolate(gettext("%(username)s, you have been signed out. Please refresh the page before continuing."),{username:this.props.user.username},!0):void 0}},{key:"render",value:function(){var e="auth-message";return(this.props.signedIn||this.props.signedOut)&&(e+=" show"),(0,i.Z)("div",{className:e},void 0,(0,i.Z)("div",{className:"container"},void 0,(0,i.Z)("p",{className:"lead"},void 0,this.getMessage()),(0,i.Z)("p",{},void 0,(0,i.Z)("button",{className:"btn btn-default",type:"button",onClick:this.refresh},void 0,gettext("Reload page")),(0,i.Z)("span",{className:"hidden-xs hidden-sm"},void 0," "+gettext("or press F5 key.")))))}}]),s}(n.n(d)().Component);function h(e){return{user:e.auth.user,signedIn:e.auth.signedIn,signedOut:e.auth.signedOut}}var f=n(4869);s.Z.addInitializer({name:"component:auth-message",initializer:function(){(0,f.Z)((0,a.$j)(h)(p),"auth-message-mount")},after:"store"})},29223:function(e,t,n){"use strict";var a=n(32233),s=n(93051);a.Z.addInitializer({name:"component:banmed-page",initializer:function(e){e.has("BAN_MESSAGE")&&(0,s.Z)(e.get("BAN_MESSAGE"),!1)},after:"store"})},3026:function(e,t,n){"use strict";var a=n(37424),s=n(22928),i=n(15671),o=n(43144),r=n(97326),l=n(79340),c=n(6215),u=n(61120),d=n(4942),p=n(30381),h=n.n(p),f=n(57588),v=n.n(f);function m(e){return(0,s.Z)("div",{className:"categories-list"},void 0,(0,s.Z)("ul",{className:"list-group"},void 0,(0,s.Z)("li",{className:"list-group-item empty-message"},void 0,(0,s.Z)("p",{className:"lead"},void 0,gettext("No categories exist or you don't have permission to see them.")))))}function Z(e){var t=e.category;return t.description?(0,s.Z)("div",{className:"category-description",dangerouslySetInnerHTML:{__html:t.description.html}}):null}function g(e){var t=e.category;return(0,s.Z)("div",{className:b(t),title:y(t)},void 0,(0,s.Z)("span",{className:"material-icon"},void 0,function(e){return e.is_closed?e.is_read?"lock_outline":"lock":e.is_read?"chat_bubble_outline":"chat_bubble"}(t)))}function b(e){return e.is_read?"read-status item-read":"read-status item-new"}function y(e){return e.is_closed?e.is_read?gettext("This category has no new posts. (closed)"):gettext("This category has new posts. (closed)"):e.is_read?gettext("This category has no new posts."):gettext("This category has new posts.")}function _(e){var t=e.category;return(0,s.Z)("div",{className:"col-xs-12 col-sm-6 col-md-6 category-main"},void 0,(0,s.Z)("div",{className:"media"},void 0,(0,s.Z)("div",{className:"media-left"},void 0,(0,s.Z)(g,{category:t})),(0,s.Z)("div",{className:"media-body"},void 0,(0,s.Z)("h4",{className:"media-heading"},void 0,(0,s.Z)("a",{href:t.url.index},void 0,t.name)),(0,s.Z)(Z,{category:t}))))}var N,k,x,w=n(19605);function R(e){var t=e.category;return(0,s.Z)("div",{className:"col-xs-12 col-sm-6 col-md-4 category-last-thread"},void 0,(0,s.Z)(C,{category:t}),(0,s.Z)(L,{category:t}),(0,s.Z)(P,{category:t}),(0,s.Z)(O,{category:t}))}function C(e){var t=e.category;return t.acl.can_browse&&t.acl.can_see_all_threads&&t.last_thread_title?(0,s.Z)("div",{className:"media"},void 0,(0,s.Z)("div",{className:"media-left hidden-xs"},void 0,(0,s.Z)(S,{category:t})),(0,s.Z)("div",{className:"media-body"},void 0,(0,s.Z)("div",{className:"media-heading"},void 0,(0,s.Z)("a",{className:"item-title thread-title",href:t.url.last_thread_new,title:t.last_thread_title},void 0,t.last_thread_title)),(0,s.Z)("ul",{className:"list-inline"},void 0,(0,s.Z)("li",{className:"category-last-thread-poster"},void 0,(0,s.Z)(E,{category:t})),N||(N=(0,s.Z)("li",{className:"divider"},void 0,"—")),(0,s.Z)("li",{className:"category-last-thread-date"},void 0,(0,s.Z)("a",{href:t.url.last_post},void 0,t.last_post_on.fromNow()))))):null}function S(e){var t=e.category;return t.last_poster?(0,s.Z)("a",{className:"last-poster-avatar",href:t.last_poster.url,title:t.last_poster_name},void 0,(0,s.Z)(w.ZP,{className:"media-object",size:40,user:t.last_poster})):(0,s.Z)("span",{className:"last-poster-avatar",title:t.last_poster_name},void 0,k||(k=(0,s.Z)(w.ZP,{className:"media-object",size:40})))}function E(e){var t=e.category;return t.last_poster?(0,s.Z)("a",{className:"item-title",href:t.last_poster.url},void 0,t.last_poster_name):(0,s.Z)("span",{className:"item-title"},void 0,t.last_poster_name)}function L(e){var t=e.category;return t.acl.can_browse&&t.acl.can_see_all_threads?t.last_thread_title?null:(0,s.Z)(T,{message:gettext("This category is empty. No threads were posted within it so far.")}):null}function P(e){var t=e.category;return t.acl.can_browse?t.acl.can_see_all_threads?null:(0,s.Z)(T,{message:gettext("This category is private. You can see only your own threads within it.")}):null}function O(e){return e.category.acl.can_browse?null:(0,s.Z)(T,{message:gettext("This category is protected. You can't browse its contents.")})}function T(e){var t=e.message;return(0,s.Z)("div",{className:"media category-thread-message"},void 0,x||(x=(0,s.Z)("div",{className:"media-left"},void 0,(0,s.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,s.Z)("div",{className:"media-body"},void 0,(0,s.Z)("p",{},void 0,t)))}function A(e){var t=e.category;return(0,s.Z)("div",{className:"col-md-2 hidden-xs hidden-sm"},void 0,(0,s.Z)("ul",{className:"list-unstyled category-stats"},void 0,(0,s.Z)(B,{threads:t.threads}),(0,s.Z)(I,{posts:t.posts})))}function B(e){var t=e.threads,n=ngettext("%(threads)s thread","%(threads)s threads",t);return(0,s.Z)("li",{className:"category-stat-threads"},void 0,interpolate(n,{threads:t},!0))}function I(e){var t=e.posts,n=ngettext("%(posts)s post","%(posts)s posts",t);return(0,s.Z)("li",{className:"category-stat-posts"},void 0,interpolate(n,{posts:t},!0))}function j(e){var t=e.category,n="btn btn-default btn-block btn-sm btn-subcategory";return t.is_read||(n+=" btn-subcategory-new"),(0,s.Z)("div",{className:"col-xs-12 col-sm-4 col-md-3"},void 0,(0,s.Z)("a",{className:n,href:t.url.index},void 0,(0,s.Z)("span",{className:"material-icon"},void 0,function(e){return e.is_closed?e.is_read?"lock_outline":"lock":e.is_read?"chat_bubble_outline":"chat_bubble"}(t)),(0,s.Z)("span",{className:"icon-text"},void 0,t.name)))}function D(e){var t=e.category;return e.isFirst||0===t.subcategories.length?null:(0,s.Z)("div",{className:"row subcategories-list"},void 0,t.subcategories.map((function(e){return(0,s.Z)(j,{category:e},e.id)})))}function U(e){var t=e.category,n=e.isFirst,a="list-group-item";return t.description?a+=" list-group-category-has-description":a+=" list-group-category-no-description",n&&(a+=" list-group-item-first"),t.css_class&&(a+=" list-group-category-has-flavor",a+=" list-group-item-category-"+t.css_class),(0,s.Z)("li",{className:a},void 0,(0,s.Z)("div",{className:"row"},void 0,(0,s.Z)(_,{category:t}),(0,s.Z)(A,{category:t}),(0,s.Z)(R,{category:t})),(0,s.Z)(D,{category:t,isFirst:n}))}function M(e){var t=e.category,n="list-group list-group-category";return t.css_class&&(n+=" list-group-category-has-flavor",n+=" list-group-category-"+t.css_class),(0,s.Z)("ul",{className:n},void 0,(0,s.Z)(U,{category:t,isFirst:!0}),t.subcategories.map((function(e){return(0,s.Z)(U,{category:e,isFirst:!1},e.id)})))}function z(e){var t=e.categories;return(0,s.Z)("div",{className:"categories-list"},void 0,t.map((function(e){return(0,s.Z)(M,{category:e},e.id)})))}var H,F=n(32233),q=n(55547);var Y=function e(t){return Object.assign({},t,{last_post_on:t.last_post_on?h()(t.last_post_on):null,subcategories:t.subcategories.map(e)})},V=function(e){(0,l.Z)(p,e);var t,n,a=(t=p,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function p(e){var t;return(0,i.Z)(this,p),t=a.call(this,e),(0,d.Z)((0,r.Z)(t),"update",(function(e){t.setState({categories:e.map(Y)})})),t.state={categories:F.Z.get("CATEGORIES").map(Y)},t.startPolling(F.Z.get("CATEGORIES_API")),t}return(0,o.Z)(p,[{key:"startPolling",value:function(e){q.Z.start({poll:"categories",url:e,frequency:18e4,update:this.update})}},{key:"render",value:function(){var e=this.state.categories;return 0===e.length?H||(H=(0,s.Z)(m,{})):(0,s.Z)(z,{categories:e})}}]),p}(v().Component);function $(e){return{tick:e.tick.tick}}var G=n(4869);F.Z.addInitializer({name:"component:categories",initializer:function(){document.getElementById("categories-mount")&&(0,G.Z)((0,a.$j)($)(V),"categories-mount")},after:"store"})},94795:function(e,t,n){"use strict";var a=n(22928),s=n(15671),i=n(43144),o=n(79340),r=n(6215),l=n(61120),c=n(57588),u=n.n(c),d=n(37424),p=n(69987),h=n(94417);function f(e){return(0,a.Z)("div",{className:"list-group nav-side"},void 0,e.options.map((function(t){return(0,a.Z)(p.rU,{to:e.baseUrl+t.component+"/",className:"list-group-item",activeClassName:"active"},t.component,(0,a.Z)("span",{className:"material-icon"},void 0,t.icon),t.name)})))}function v(e){return(0,a.Z)("ul",{className:e.className||"dropdown-menu",role:"menu"},void 0,e.options.map((function(t){return(0,a.Z)(h.Z,{path:e.baseUrl+t.component+"/"},t.component,(0,a.Z)(p.rU,{to:e.baseUrl+t.component+"/",onClick:e.hideNav},void 0,(0,a.Z)("span",{className:"material-icon hidden-sm"},void 0,t.icon),t.name))})))}var m,Z=n(97326),g=n(4942),b=n(82211),y=n(78657),_=n(53328),N=n(53904),k=n(90287),x=n(32233);var w=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(e){var t;return(0,s.Z)(this,u),t=c.call(this,e),(0,g.Z)((0,Z.Z)(t),"onPasswordChange",(function(e){t.setState({password:e.target.value})})),(0,g.Z)((0,Z.Z)(t),"handleSubmit",(function(e){e.preventDefault();var n=t.state,a=n.isLoading,s=n.password,i=t.props.user;return 0==s.length?(N.Z.error(gettext("Enter your password to confirm account deletion.")),!1):!a&&(t.setState({isLoading:!0}),void y.Z.post(i.api.delete,{password:s}).then((function(e){window.location.href=x.Z.get("MISAGO_PATH")}),(function(e){t.setState({isLoading:!1}),e.password?N.Z.error(e.password[0]):N.Z.apiError(e)})))})),t.state={isLoading:!1,password:""},t}return(0,i.Z)(u,[{key:"componentDidMount",value:function(){_.Z.set({title:gettext("Delete account"),parent:gettext("Change your options")})}},{key:"render",value:function(){return(0,a.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,a.Z)("div",{className:"panel panel-danger panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Delete account"))),(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)("p",{className:"lead"},void 0,gettext("You are going to delete your account. This action is nonreversible, and will result in following data being deleted:")),(0,a.Z)("p",{},void 0,"-"," ",gettext("Stored IP addresses associated with content that you have posted will be deleted.")),(0,a.Z)("p",{},void 0,"-"," ",gettext("Your username will become available for other user to rename to or for new user to register their account with.")),(0,a.Z)("p",{},void 0,"-"," ",gettext("Your e-mail will become available for use in new account registration.")),m||(m=(0,a.Z)("hr",{})),(0,a.Z)("p",{},void 0,gettext("All your posted content will NOT be deleted, but username associated with it will be changed to one shared by all deleted accounts."))),(0,a.Z)("div",{className:"panel-footer"},void 0,(0,a.Z)("div",{className:"input-group"},void 0,(0,a.Z)("input",{className:"form-control",disabled:this.state.isLoading,name:"password-confirmation",type:"password",placeholder:gettext("Enter your password to confirm account deletion."),value:this.state.password,onChange:this.onPasswordChange}),(0,a.Z)("span",{className:"input-group-btn"},void 0,(0,a.Z)(b.Z,{className:"btn-danger",loading:this.state.isLoading},void 0,gettext("Delete my account")))))))}}]),u}(u().Component),R=n(21688);var C=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){var e;(0,s.Z)(this,u);for(var t=arguments.length,n=new Array(t),a=0;a<t;a++)n[a]=arguments[a];return e=c.call.apply(c,[this].concat(n)),(0,g.Z)((0,Z.Z)(e),"onSuccess",(function(){N.Z.info(gettext("Your details have been updated."))})),e}return(0,i.Z)(u,[{key:"componentDidMount",value:function(){_.Z.set({title:gettext("Edit details"),parent:gettext("Change your options")})}},{key:"render",value:function(){return(0,a.Z)(R.Z,{api:this.props.user.api.edit_details,onSuccess:this.onSuccess})}}]),u}(u().Component),S=n(30381),E=n.n(S);var L=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(e){var t;return(0,s.Z)(this,u),t=c.call(this,e),(0,g.Z)((0,Z.Z)(t),"handleLoadDownloads",(function(){y.Z.get(t.props.user.api.data_downloads).then((function(e){t.setState({isLoading:!1,downloads:e})}),(function(e){N.Z.apiError(e)}))})),(0,g.Z)((0,Z.Z)(t),"handleRequestDataDownload",(function(){t.setState({isSubmiting:!0}),y.Z.post(t.props.user.api.request_data_download).then((function(){t.handleLoadDownloads(),N.Z.success(gettext("Your request for data download has been registered.")),t.setState({isSubmiting:!1})}),(function(e){N.Z.apiError(e),t.setState({isSubmiting:!1})}))})),t.state={isLoading:!1,isSubmiting:!1,downloads:[]},t}return(0,i.Z)(u,[{key:"componentDidMount",value:function(){_.Z.set({title:gettext("Download your data"),parent:gettext("Change your options")}),this.handleLoadDownloads()}},{key:"render",value:function(){return(0,a.Z)("div",{},void 0,(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Download your data"))),(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)("p",{},void 0,gettext('To download your data from the site, click the "Request data download" button. Depending on amount of data to be archived and number of users wanting to download their data at same time it may take up to few days for your download to be prepared. An e-mail with notification will be sent to you when your data is ready to be downloaded.')),(0,a.Z)("p",{},void 0,gettext("The download will only be available for limited amount of time, after which it will be deleted from the site and marked as expired."))),(0,a.Z)("table",{className:"table"},void 0,(0,a.Z)("thead",{},void 0,(0,a.Z)("tr",{},void 0,(0,a.Z)("th",{},void 0,gettext("Requested on")),(0,a.Z)("th",{className:"col-md-4"},void 0,gettext("Download")))),(0,a.Z)("tbody",{},void 0,this.state.downloads.map((function(e){return(0,a.Z)("tr",{},e.id,(0,a.Z)("td",{style:P},void 0,E()(e.requested_on).fromNow()),(0,a.Z)("td",{},void 0,(0,a.Z)(O,{exportFile:e.file,status:e.status})))})),0==this.state.downloads.length?(0,a.Z)("tr",{},void 0,(0,a.Z)("td",{colSpan:"2"},void 0,gettext("You have no data downloads."))):null)),(0,a.Z)("div",{className:"panel-footer text-right"},void 0,(0,a.Z)(b.Z,{className:"btn-primary",loading:this.state.isSubmiting,type:"button",onClick:this.handleRequestDataDownload},void 0,gettext("Request data download")))))}}]),u}(u().Component),P={verticalAlign:"middle"},O=function(e){var t=e.exportFile,n=e.status;return 0===n||1===n?(0,a.Z)(b.Z,{className:"btn-info btn-sm btn-block",disabled:!0,type:"button"},void 0,gettext("Download is being prepared")):t?(0,a.Z)("a",{className:"btn btn-success btn-sm btn-block",href:t},void 0,gettext("Download your data")):(0,a.Z)(b.Z,{className:"btn-default btn-sm btn-block",disabled:!0,type:"button"},void 0,gettext("Download is expired"))},T=n(43345),A=n(96359),B=n(60471),I=n(7227),j=n(35486);var D,U=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(e){var t;return(0,s.Z)(this,u),(t=c.call(this,e)).state={isLoading:!1,is_hiding_presence:e.user.is_hiding_presence,limits_private_thread_invites_to:e.user.limits_private_thread_invites_to,subscribe_to_started_threads:e.user.subscribe_to_started_threads,subscribe_to_replied_threads:e.user.subscribe_to_replied_threads,errors:{}},t.privateThreadInvitesChoices=[{value:0,icon:"help_outline",label:gettext("Everybody")},{value:1,icon:"done_all",label:gettext("Users I follow")},{value:2,icon:"highlight_off",label:gettext("Nobody")}],t.subscribeToChoices=[{value:0,icon:"star_border",label:gettext("No")},{value:1,icon:"star_half",label:gettext("Notify")},{value:2,icon:"star",label:gettext("Notify with e-mail")}],t}return(0,i.Z)(u,[{key:"send",value:function(){return y.Z.post(this.props.user.api.options,{is_hiding_presence:this.state.is_hiding_presence,limits_private_thread_invites_to:this.state.limits_private_thread_invites_to,subscribe_to_started_threads:this.state.subscribe_to_started_threads,subscribe_to_replied_threads:this.state.subscribe_to_replied_threads})}},{key:"handleSuccess",value:function(){k.Z.dispatch((0,j.r$)({is_hiding_presence:this.state.is_hiding_presence,limits_private_thread_invites_to:this.state.limits_private_thread_invites_to,subscribe_to_started_threads:this.state.subscribe_to_started_threads,subscribe_to_replied_threads:this.state.subscribe_to_replied_threads})),N.Z.success(gettext("Your forum options have been changed."))}},{key:"handleError",value:function(e){400===e.status?N.Z.error(gettext("Please reload page and try again.")):N.Z.apiError(e)}},{key:"componentDidMount",value:function(){_.Z.set({title:gettext("Forum options"),parent:gettext("Change your options")})}},{key:"render",value:function(){return(0,a.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Change forum options"))),(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)("fieldset",{},void 0,(0,a.Z)("legend",{},void 0,gettext("Privacy settings")),(0,a.Z)(A.Z,{label:gettext("Hide my presence"),helpText:gettext("If you hide your presence, only members with permission to see hidden users will see when you are online."),for:"id_is_hiding_presence"},void 0,(0,a.Z)(I.Z,{id:"id_is_hiding_presence",disabled:this.state.isLoading,iconOn:"visibility_off",iconOff:"visibility",labelOn:gettext("Hide my presence from other users"),labelOff:gettext("Show my presence to other users"),onChange:this.bindInput("is_hiding_presence"),value:this.state.is_hiding_presence})),(0,a.Z)(A.Z,{label:gettext("Private thread invitations"),for:"id_limits_private_thread_invites_to"},void 0,(0,a.Z)(B.Z,{id:"id_limits_private_thread_invites_to",disabled:this.state.isLoading,onChange:this.bindInput("limits_private_thread_invites_to"),value:this.state.limits_private_thread_invites_to,choices:this.privateThreadInvitesChoices}))),(0,a.Z)("fieldset",{},void 0,(0,a.Z)("legend",{},void 0,gettext("Automatic subscriptions")),(0,a.Z)(A.Z,{label:gettext("Threads I start"),for:"id_subscribe_to_started_threads"},void 0,(0,a.Z)(B.Z,{id:"id_subscribe_to_started_threads",disabled:this.state.isLoading,onChange:this.bindInput("subscribe_to_started_threads"),value:this.state.subscribe_to_started_threads,choices:this.subscribeToChoices})),(0,a.Z)(A.Z,{label:gettext("Threads I reply to"),for:"id_subscribe_to_replied_threads"},void 0,(0,a.Z)(B.Z,{id:"id_subscribe_to_replied_threads",disabled:this.state.isLoading,onChange:this.bindInput("subscribe_to_replied_threads"),value:this.state.subscribe_to_replied_threads,choices:this.subscribeToChoices})))),(0,a.Z)("div",{className:"panel-footer"},void 0,(0,a.Z)(b.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Save changes")))))}}]),u}(T.Z),M=n(95187);function z(){return(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Change username"))),D||(D=(0,a.Z)(M.Z,{})))}var H=n(33556);var F=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"getHelpText",value:function(){return this.props.options.next_on?interpolate(gettext("You will be able to change your username %(next_change)s."),{next_change:this.props.options.next_on.fromNow()},!0):gettext("You have used up available name changes.")}},{key:"render",value:function(){return(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Change username"))),(0,a.Z)(H.Z,{helpText:this.getHelpText(),message:gettext("You can't change your username at the moment.")}))}}]),u}(u().Component),q=n(55210);var Y,V=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(e){var t;return(0,s.Z)(this,u),(t=c.call(this,e)).state={username:"",validators:{username:[q.lG(),q.HR(e.options.length_min),q.gS(e.options.length_max)]},isLoading:!1},t}return(0,i.Z)(u,[{key:"getHelpText",value:function(){var e=[];if(this.props.options.changes_left>0){var t=ngettext("You can change your username %(changes_left)s more time.","You can change your username %(changes_left)s more times.",this.props.options.changes_left);e.push(interpolate(t,{changes_left:this.props.options.changes_left},!0))}if(this.props.user.acl.name_changes_expire>0){var n=ngettext("Used changes become available again after %(name_changes_expire)s day.","Used changes become available again after %(name_changes_expire)s days.",this.props.user.acl.name_changes_expire);e.push(interpolate(n,{name_changes_expire:this.props.user.acl.name_changes_expire},!0))}return e.length?e.join(" "):null}},{key:"clean",value:function(){var e=this.validate();return e.username?(N.Z.error(e.username[0]),!1):this.state.username.trim()!==this.props.user.username||(N.Z.info(gettext("Your new username is same as current one.")),!1)}},{key:"send",value:function(){return y.Z.post(this.props.user.api.username,{username:this.state.username})}},{key:"handleSuccess",value:function(e){this.setState({username:""}),this.props.complete(e.username,e.slug,e.options)}},{key:"handleError",value:function(e){N.Z.apiError(e)}},{key:"render",value:function(){return(0,a.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Change username"))),(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)(A.Z,{label:gettext("New username"),for:"id_username",helpText:this.getHelpText()},void 0,(0,a.Z)("input",{type:"text",id:"id_username",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("username"),value:this.state.username}))),(0,a.Z)("div",{className:"panel-footer"},void 0,(0,a.Z)(b.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Change username")))))}}]),u}(T.Z),$=n(7850),G=n(48927),W=n(6935);var K,J=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(e){var t;return(0,s.Z)(this,u),t=c.call(this,e),(0,g.Z)((0,Z.Z)(t),"onComplete",(function(e,n,a){t.setState({options:a}),k.Z.dispatch((0,G.KP)({username:e,slug:n},t.props.user,t.props.user)),k.Z.dispatch((0,W._S)(t.props.user,e,n)),N.Z.success(gettext("Your username has been changed successfully."))})),t.state={isLoaded:!1,options:null},t}return(0,i.Z)(u,[{key:"componentDidMount",value:function(){var e=this;_.Z.set({title:gettext("Change username"),parent:gettext("Change your options")}),Promise.all([y.Z.get(this.props.user.api.username),y.Z.get(x.Z.get("USERNAME_CHANGES_API"),{user:this.props.user.id})]).then((function(t){k.Z.dispatch((0,G.ZB)(t[1].results)),e.setState({isLoaded:!0,options:{changes_left:t[0].changes_left,length_min:t[0].length_min,length_max:t[0].length_max,next_on:t[0].next_on?E()(t[0].next_on):null}})}))}},{key:"getChangeForm",value:function(){return this.state.isLoaded?0===this.state.options.changes_left?(0,a.Z)(F,{options:this.state.options}):(0,a.Z)(V,{complete:this.onComplete,options:this.state.options,user:this.props.user}):Y||(Y=(0,a.Z)(z,{}))}},{key:"render",value:function(){return(0,a.Z)("div",{},void 0,this.getChangeForm(),(0,a.Z)($.Z,{changes:this.props["username-history"],isLoaded:this.state.isLoaded}))}}]),u}(u().Component);var Q,X=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(e){var t;return(0,s.Z)(this,u),(t=c.call(this,e)).state={new_email:"",password:"",validators:{new_email:[q.Do()],password:[]},isLoading:!1},t}return(0,i.Z)(u,[{key:"clean",value:function(){var e=this.validate();return-1!==[this.state.new_email.trim().length,this.state.password.trim().length].indexOf(0)?(N.Z.error(gettext("Fill out all fields.")),!1):!e.new_email||(N.Z.error(e.new_email[0]),!1)}},{key:"send",value:function(){return y.Z.post(this.props.user.api.change_email,{new_email:this.state.new_email,password:this.state.password})}},{key:"handleSuccess",value:function(e){this.setState({new_email:"",password:""}),N.Z.success(e.detail)}},{key:"handleError",value:function(e){400===e.status?e.new_email?N.Z.error(e.new_email):N.Z.error(e.password):N.Z.apiError(e)}},{key:"render",value:function(){return(0,a.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,a.Z)("input",{type:"type",style:{display:"none"}}),(0,a.Z)("input",{type:"password",style:{display:"none"}}),(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Change e-mail address"))),(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)(A.Z,{label:gettext("New e-mail"),for:"id_new_email"},void 0,(0,a.Z)("input",{type:"text",id:"id_new_email",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("new_email"),value:this.state.new_email})),K||(K=(0,a.Z)("hr",{})),(0,a.Z)(A.Z,{label:gettext("Your current password"),for:"id_confirm_email"},void 0,(0,a.Z)("input",{type:"password",id:"id_confirm_email",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),(0,a.Z)("div",{className:"panel-footer"},void 0,(0,a.Z)(b.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Change e-mail")))))}}]),u}(T.Z);var ee,te,ne,ae=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(e){var t;return(0,s.Z)(this,u),(t=c.call(this,e)).state={new_password:"",repeat_password:"",password:"",validators:{new_password:[],repeat_password:[],password:[]},isLoading:!1},t}return(0,i.Z)(u,[{key:"clean",value:function(){var e=this.validate();return-1!==[this.state.new_password.trim().length,this.state.repeat_password.trim().length,this.state.password.trim().length].indexOf(0)?(N.Z.error(gettext("Fill out all fields.")),!1):e.new_password?(N.Z.error(e.new_password[0]),!1):this.state.new_password===this.state.repeat_password||(N.Z.error(gettext("New passwords are different.")),!1)}},{key:"send",value:function(){return y.Z.post(this.props.user.api.change_password,{new_password:this.state.new_password,password:this.state.password})}},{key:"handleSuccess",value:function(e){this.setState({new_password:"",repeat_password:"",password:""}),N.Z.success(e.detail)}},{key:"handleError",value:function(e){400===e.status?e.new_password?N.Z.error(e.new_password):N.Z.error(e.password):N.Z.apiError(e)}},{key:"render",value:function(){return(0,a.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,a.Z)("input",{type:"type",style:{display:"none"}}),(0,a.Z)("input",{type:"password",style:{display:"none"}}),(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Change password"))),(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)(A.Z,{label:gettext("New password"),for:"id_new_password"},void 0,(0,a.Z)("input",{type:"password",id:"id_new_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("new_password"),value:this.state.new_password})),(0,a.Z)(A.Z,{label:gettext("Repeat password"),for:"id_repeat_password"},void 0,(0,a.Z)("input",{type:"password",id:"id_repeat_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("repeat_password"),value:this.state.repeat_password})),Q||(Q=(0,a.Z)("hr",{})),(0,a.Z)(A.Z,{label:gettext("Your current password"),for:"id_confirm_password"},void 0,(0,a.Z)("input",{type:"password",id:"id_confirm_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),(0,a.Z)("div",{className:"panel-footer"},void 0,(0,a.Z)(b.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Change password")))))}}]),u}(T.Z),se=function(){return(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Change email or password"))),(0,a.Z)("div",{className:"panel-body panel-message-body"},void 0,ee||(ee=(0,a.Z)("div",{className:"message-icon"},void 0,(0,a.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,a.Z)("div",{className:"message-body"},void 0,(0,a.Z)("p",{className:"lead"},void 0,gettext("You need to set a password for your account to be able to change your username or email.")),(0,a.Z)("p",{className:"help-block"},void 0,(0,a.Z)("a",{className:"btn btn-primary",href:x.Z.get("FORGOTTEN_PASSWORD_URL")},void 0,gettext("Set password"))))))};var ie,oe=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"componentDidMount",value:function(){_.Z.set({title:gettext("Change email or password"),parent:gettext("Change your options")})}},{key:"render",value:function(){return this.props.user.has_usable_password?(0,a.Z)("div",{},void 0,(0,a.Z)(X,{user:this.props.user}),(0,a.Z)(ae,{user:this.props.user}),(0,a.Z)("p",{className:"message-line"},void 0,ne||(ne=(0,a.Z)("span",{className:"material-icon"},void 0,"warning")),(0,a.Z)("a",{href:x.Z.get("FORGOTTEN_PASSWORD_URL")},void 0,gettext("Change forgotten password")))):te||(te=(0,a.Z)(se,{}))}}]),u}(u().Component),re=n(82125),le=n(98936),ce=n(59131),ue=n(99755);var de=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"render",value:function(){var e=this,t=x.Z.get("USER_OPTIONS").filter((function(t){var n=x.Z.get("USERCP_URL")+t.component+"/";return e.props.location.pathname.substr(0,n.length)===n}))[0];return(0,a.Z)("div",{className:"page page-options"},void 0,(0,a.Z)(ue.sP,{},void 0,(0,a.Z)(ue.mr,{styleName:"options"},void 0,(0,a.Z)(ue.gC,{styleName:"options"},void 0,(0,a.Z)(le.gq,{},void 0,(0,a.Z)(le.kw,{auto:!0},void 0,(0,a.Z)(le.Z6,{auto:!0},void 0,(0,a.Z)("h1",{},void 0,gettext("Change your options"))),(0,a.Z)(le.Z6,{className:"hidden-xs hidden-md hidden-lg",shrink:!0},void 0,(0,a.Z)("div",{className:"dropdown"},void 0,(0,a.Z)("button",{type:"button",className:"btn btn-default btn-outline btn-icon dropdown-toggle",title:gettext("Menu"),"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,ie||(ie=(0,a.Z)("span",{className:"material-icon"},void 0,"menu"))),(0,a.Z)(v,{className:"dropdown-menu dropdown-menu-right",baseUrl:x.Z.get("USERCP_URL"),options:x.Z.get("USER_OPTIONS")})))),(0,a.Z)(le.kw,{className:"hidden-sm hidden-md hidden-lg"},void 0,(0,a.Z)(le.Z6,{},void 0,(0,a.Z)("div",{className:"dropdown"},void 0,(0,a.Z)("button",{type:"button",className:"btn btn-default btn-outline btn-block dropdown-toggle","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,(0,a.Z)("span",{className:"material-icon"},void 0,t.icon),t.name),(0,a.Z)(v,{className:"dropdown-menu",baseUrl:x.Z.get("USERCP_URL"),options:x.Z.get("USER_OPTIONS")})))))))),(0,a.Z)(ce.Z,{},void 0,(0,a.Z)("div",{className:"row"},void 0,(0,a.Z)("div",{className:"col-md-3 hidden-xs hidden-sm"},void 0,(0,a.Z)(f,{baseUrl:x.Z.get("USERCP_URL"),options:x.Z.get("USER_OPTIONS")})),(0,a.Z)("div",{className:"col-md-9"},void 0,this.props.children))))}}]),u}(re.Z);function pe(e){return{tick:e.tick.tick,user:e.auth.user,"username-history":e["username-history"]}}function he(){var e=[{path:x.Z.get("USERCP_URL")+"forum-options/",component:(0,d.$j)(pe)(U)},{path:x.Z.get("USERCP_URL")+"edit-details/",component:(0,d.$j)(pe)(C)}],t=x.Z.get("SETTINGS").DELEGATE_AUTH;return t||(e.push({path:x.Z.get("USERCP_URL")+"change-username/",component:(0,d.$j)(pe)(J)}),e.push({path:x.Z.get("USERCP_URL")+"sign-in-credentials/",component:(0,d.$j)(pe)(oe)})),x.Z.get("ENABLE_DOWNLOAD_OWN_DATA")&&e.push({path:x.Z.get("USERCP_URL")+"download-data/",component:(0,d.$j)(pe)(L)}),!t&&x.Z.get("ENABLE_DELETE_OWN_ACCOUNT")&&e.push({path:x.Z.get("USERCP_URL")+"delete-account/",component:(0,d.$j)(pe)(w)}),e}var fe=n(39633);x.Z.addInitializer({name:"component:options",initializer:function(e){e.has("USER_OPTIONS")&&(0,fe.Z)({root:x.Z.get("USERCP_URL"),component:de,paths:he()})},after:"store"})},95563:function(e,t,n){"use strict";var a,s=n(37424),i=n(22928),o=n(15671),r=n(43144),l=n(97326),c=n(79340),u=n(6215),d=n(61120),p=n(4942),h=n(57588),f=n.n(h),v=n(30381),m=n.n(v),Z=n(95187),g=n(33556),b=n(32233),y=n(55547),_=n(53328);var N=function(e){(0,c.Z)(h,e);var t,n,s=(t=h,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function h(e){var t;return(0,o.Z)(this,h),t=s.call(this,e),(0,p.Z)((0,l.Z)(t),"update",(function(e){e.expires_on&&(e.expires_on=m()(e.expires_on)),t.setState({isLoaded:!0,error:null,ban:e})})),(0,p.Z)((0,l.Z)(t),"error",(function(e){t.setState({isLoaded:!0,error:e.detail,ban:null})})),b.Z.has("PROFILE_BAN")?t.initWithPreloadedData(b.Z.pop("PROFILE_BAN")):t.initWithoutPreloadedData(),t.startPolling(e.profile.api.ban),t}return(0,r.Z)(h,[{key:"initWithPreloadedData",value:function(e){e.expires_on&&(e.expires_on=m()(e.expires_on)),this.state={isLoaded:!0,ban:e}}},{key:"initWithoutPreloadedData",value:function(){this.state={isLoaded:!1}}},{key:"startPolling",value:function(e){y.Z.start({poll:"ban-details",url:e,frequency:9e4,update:this.update,error:this.error})}},{key:"componentDidMount",value:function(){_.Z.set({title:gettext("Ban details"),parent:this.props.profile.username})}},{key:"componentWillUnmount",value:function(){y.Z.stop("ban-details")}},{key:"getUserMessage",value:function(){return this.state.ban.user_message?(0,i.Z)("div",{className:"panel-body ban-message ban-user-message"},void 0,(0,i.Z)("h4",{},void 0,gettext("User-shown ban message")),(0,i.Z)("div",{className:"lead",dangerouslySetInnerHTML:{__html:this.state.ban.user_message.html}})):null}},{key:"getStaffMessage",value:function(){return this.state.ban.staff_message?(0,i.Z)("div",{className:"panel-body ban-message ban-staff-message"},void 0,(0,i.Z)("h4",{},void 0,gettext("Team-shown ban message")),(0,i.Z)("div",{className:"lead",dangerouslySetInnerHTML:{__html:this.state.ban.staff_message.html}})):null}},{key:"getExpirationMessage",value:function(){if(this.state.ban.expires_on){if(this.state.ban.expires_on.isAfter(m()())){var e=interpolate(gettext("This ban expires on %(expires_on)s."),{expires_on:this.state.ban.expires_on.format("LL, LT")},!0),t=interpolate(gettext("This ban expires %(expires_on)s."),{expires_on:this.state.ban.expires_on.fromNow()},!0);return(0,i.Z)("abbr",{title:e},void 0,t)}return gettext("This ban has expired.")}return interpolate(gettext("%(username)s's ban is permanent."),{username:this.props.profile.username},!0)}},{key:"getPanelBody",value:function(){return this.state.ban?Object.keys(this.state.ban).length?(0,i.Z)("div",{},void 0,this.getUserMessage(),this.getStaffMessage(),(0,i.Z)("div",{className:"panel-body ban-expires"},void 0,(0,i.Z)("h4",{},void 0,gettext("Ban expiration")),(0,i.Z)("p",{className:"lead"},void 0,this.getExpirationMessage()))):(0,i.Z)("div",{},void 0,(0,i.Z)(g.Z,{message:gettext("No ban is active at the moment.")})):this.state.error?(0,i.Z)("div",{},void 0,(0,i.Z)(g.Z,{icon:"error_outline",message:this.state.error})):a||(a=(0,i.Z)("div",{},void 0,(0,i.Z)(Z.Z,{})))}},{key:"render",value:function(){return(0,i.Z)("div",{className:"profile-ban-details"},void 0,(0,i.Z)("div",{className:"panel panel-default"},void 0,(0,i.Z)("div",{className:"panel-heading"},void 0,(0,i.Z)("h3",{className:"panel-title"},void 0,gettext("Ban details"))),this.getPanelBody()))}}]),h}(f().Component),k=n(21688);function x(e){var t=e.api,n=e.display,a=e.onCancel,s=e.onSuccess;return n?(0,i.Z)(k.Z,{api:t,onCancel:a,onSuccess:s}):null}function w(e){var t,n=e.isAuthenticated,a=e.profile;return t=n?gettext("You are not sharing any details with others."):interpolate(gettext("%(username)s is not sharing any details with others."),{username:a.username},!0),(0,i.Z)("div",{className:"panel panel-default"},void 0,(0,i.Z)("div",{className:"panel-body text-center lead"},void 0,t))}function R(e){var t=e.html,n=e.text,a=e.url;return t?(0,i.Z)("div",{className:"form-control-static col-md-9",dangerouslySetInnerHTML:{__html:t}}):(0,i.Z)("div",{className:"form-control-static col-md-9"},void 0,(0,i.Z)(C,{text:n,url:a}))}function C(e){var t=e.text,n=e.url;return n?(0,i.Z)("p",{},void 0,(0,i.Z)("a",{href:n,target:"_blank",rel:"nofollow"},void 0,t||n)):t?(0,i.Z)("p",{},void 0,t):null}function S(e){return(0,i.Z)("div",{className:"form-group"},void 0,(0,i.Z)("strong",{className:"control-label col-md-3"},void 0,e.name,":"),f().createElement(R,e))}function E(e){var t=e.fields,n=e.name;return(0,i.Z)("div",{className:"panel panel-default panel-profile-details-group"},void 0,(0,i.Z)("div",{className:"panel-heading"},void 0,(0,i.Z)("h3",{className:"panel-title"},void 0,n)),(0,i.Z)("div",{className:"panel-body"},void 0,(0,i.Z)("div",{className:"form-horizontal"},void 0,t.map((function(e){var t=e.fieldname,n=e.html,a=e.name,s=e.text,o=e.url;return(0,i.Z)(S,{name:a,html:n,text:s,url:o},t)})))))}var L,P=n(37848);function O(e){var t=e.display,n=e.groups,a=e.isAuthenticated,s=e.loading,o=e.profile;return t?s?L||(L=(0,i.Z)(P.Z,{})):n.length?(0,i.Z)("div",{},void 0,n.map((function(e,t){return(0,i.Z)(E,{fields:e.fields,name:e.name},t)}))):(0,i.Z)(w,{isAuthenticated:a,profile:o}):null}var T=n(92490),A=function(e){var t=e.onEdit,n=e.showEditButton;return(0,i.Z)(T.o8,{},void 0,(0,i.Z)(T.Z2,{auto:!0},void 0,(0,i.Z)(T.Eg,{auto:!0},void 0,(0,i.Z)("h3",{},void 0,gettext("Details")))),n&&(0,i.Z)(T.Z2,{},void 0,(0,i.Z)(T.Eg,{},void 0,(0,i.Z)("button",{className:"btn btn-default btn-outline btn-block",onClick:t,type:"button"},void 0,gettext("Edit")))))},B=n(58598),I=n(78657),j=n(53904);var D=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(){return(0,o.Z)(this,s),a.apply(this,arguments)}return(0,r.Z)(s,[{key:"componentDidMount",value:function(){var e=this.props,t=e.data,n=e.dispatch,a=e.user;t&&t.id===a.id||I.Z.get(this.props.user.api.details).then((function(e){n((0,B.zD)(e))}),(function(e){j.Z.apiError(e)}))}},{key:"render",value:function(){return this.props.children}}]),s}(f().Component);var U=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,p.Z)((0,l.Z)(t),"onCancel",(function(){t.setState({editing:!1})})),(0,p.Z)((0,l.Z)(t),"onEdit",(function(){t.setState({editing:!0})})),(0,p.Z)((0,l.Z)(t),"onSuccess",(function(e){var n,a=t.props,s=a.dispatch,i=a.isAuthenticated,o=a.profile;n=i?gettext("Your details have been updated."):interpolate(gettext("%(username)s's details have been updated."),{username:o.username},!0),j.Z.info(n),s((0,B.zD)(e)),t.setState({editing:!1})})),t.state={editing:!1},t}return(0,r.Z)(s,[{key:"componentDidMount",value:function(){_.Z.set({title:gettext("Details"),parent:this.props.profile.username})}},{key:"render",value:function(){var e=this.props,t=e.dispatch,n=e.isAuthenticated,a=e.profile,s=e.profileDetails,o=s.id!==a.id;return(0,i.Z)(D,{data:s,dispatch:t,user:a},void 0,(0,i.Z)("div",{className:"profile-details"},void 0,(0,i.Z)(A,{onEdit:this.onEdit,showEditButton:!!s.edit&&!this.state.editing}),(0,i.Z)(O,{display:!this.state.editing,groups:s.groups,isAuthenticated:n,loading:o,profile:a}),(0,i.Z)(x,{api:a.api.edit_details,dispatch:t,display:this.state.editing,onCancel:this.onCancel,onSuccess:this.onSuccess})))}}]),s}(f().Component),M=n(87462),z=n(11005),H=n(82211),F=n(21981),q=n(90287);var Y,V=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,p.Z)((0,l.Z)(t),"loadMore",(function(){t.setState({isLoading:!0}),t.loadItems(t.props.posts.next)})),t.state={isLoading:!1},t}return(0,r.Z)(s,[{key:"loadItems",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;I.Z.get(this.props.api,{start:t||0}).then((function(n){0===t?q.Z.dispatch(F.zD(n)):q.Z.dispatch(F.R3(n)),e.setState({isLoading:!1})}),(function(t){e.setState({isLoading:!1}),j.Z.apiError(t)}))}},{key:"componentDidMount",value:function(){_.Z.set({title:this.props.title,parent:this.props.profile.username}),this.loadItems()}},{key:"render",value:function(){return(0,i.Z)("div",{className:"profile-feed"},void 0,(0,i.Z)(T.o8,{},void 0,(0,i.Z)(T.Z2,{auto:!0},void 0,(0,i.Z)(T.Eg,{auto:!0},void 0,(0,i.Z)("h3",{},void 0,this.props.header)))),f().createElement($,(0,M.Z)({isLoading:this.state.isLoading,loadMore:this.loadMore},this.props)))}}]),s}(f().Component);function $(e){return e.posts.isLoaded&&!e.posts.results.length?(0,i.Z)("p",{className:"lead"},void 0,e.emptyMessage):(0,i.Z)("div",{},void 0,(0,i.Z)(z.Z,{isReady:e.posts.isLoaded,posts:e.posts.results,poster:e.profile}),(0,i.Z)(G,{isLoading:e.isLoading,loadMore:e.loadMore,next:e.posts.next}))}function G(e){return e.next?(0,i.Z)("div",{className:"pager-more"},void 0,(0,i.Z)(H.Z,{className:"btn btn-default btn-outline",loading:e.isLoading,onClick:e.loadMore},void 0,gettext("Show older activity"))):null}var W=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(){return(0,o.Z)(this,s),a.apply(this,arguments)}return(0,r.Z)(s,[{key:"getClassName",value:function(){return this.props.className?"form-search "+this.props.className:"form-search"}},{key:"render",value:function(){return(0,i.Z)("div",{className:this.getClassName()},void 0,(0,i.Z)("input",{type:"text",className:"form-control",value:this.props.value,onChange:this.props.onChange,placeholder:this.props.placeholder||gettext("Search...")}),Y||(Y=(0,i.Z)("span",{className:"material-icon"},void 0,"search")))}}]),s}(f().Component),K=n(40429),J=n(6935);var Q=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,p.Z)((0,l.Z)(t),"loadMore",(function(){t.setState({isBusy:!0}),t.loadUsers(t.state.page+1,t.state.search)})),(0,p.Z)((0,l.Z)(t),"search",(function(e){t.setState({isLoaded:!1,isBusy:!0,search:e.target.value,count:0,more:0,page:1,pages:1}),t.loadUsers(1,e.target.value)})),t.setSpecialProps(),b.Z.has(t.PRELOADED_DATA_KEY)?t.initWithPreloadedData(b.Z.pop(t.PRELOADED_DATA_KEY)):t.initWithoutPreloadedData(),t}return(0,r.Z)(s,[{key:"setSpecialProps",value:function(){this.PRELOADED_DATA_KEY="PROFILE_FOLLOWERS",this.TITLE=gettext("Followers"),this.API_FILTER="followers"}},{key:"initWithPreloadedData",value:function(e){this.state={isLoaded:!0,isBusy:!1,search:"",count:e.count,more:e.more,page:e.page,pages:e.pages},q.Z.dispatch((0,J.ZB)(e.results))}},{key:"initWithoutPreloadedData",value:function(){this.state={isLoaded:!1,isBusy:!1,search:"",count:0,more:0,page:1,pages:1},this.loadUsers()}},{key:"loadUsers",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,a=this.props.profile.api[this.API_FILTER];I.Z.get(a,{search:n,page:t||1},"user-"+this.API_FILTER).then((function(n){1===t?q.Z.dispatch((0,J.ZB)(n.results)):q.Z.dispatch((0,J.R3)(n.results)),e.setState({isLoaded:!0,isBusy:!1,count:n.count,more:n.more,page:n.page,pages:n.pages})}),(function(e){j.Z.apiError(e)}))}},{key:"componentDidMount",value:function(){_.Z.set({title:this.TITLE,parent:this.props.profile.username})}},{key:"getLabel",value:function(){if(this.state.isLoaded){if(this.state.search){var e=ngettext("Found %(users)s user.","Found %(users)s users.",this.state.count);return interpolate(e,{users:this.state.count},!0)}if(this.props.profile.id===this.props.user.id){var t=ngettext("You have %(users)s follower.","You have %(users)s followers.",this.state.count);return interpolate(t,{users:this.state.count},!0)}var n=ngettext("%(username)s has %(users)s follower.","%(username)s has %(users)s followers.",this.state.count);return interpolate(n,{username:this.props.profile.username,users:this.state.count},!0)}return gettext("Loading...")}},{key:"getEmptyMessage",value:function(){return this.state.search?gettext("Search returned no users matching specified criteria."):this.props.user.id===this.props.profile.id?gettext("You have no followers."):interpolate(gettext("%(username)s has no followers."),{username:this.props.profile.username},!0)}},{key:"getMoreButton",value:function(){return this.state.more?(0,i.Z)("div",{className:"pager-more"},void 0,(0,i.Z)(H.Z,{className:"btn btn-default btn-outline",loading:this.state.isBusy,onClick:this.loadMore},void 0,interpolate(gettext("Show more (%(more)s)"),{more:this.state.more},!0))):null}},{key:"getListBody",value:function(){return this.state.isLoaded&&0===this.state.count?(0,i.Z)("p",{className:"lead"},void 0,this.getEmptyMessage()):(0,i.Z)("div",{},void 0,(0,i.Z)(K.Z,{cols:3,isReady:this.state.isLoaded,users:this.props.users}),this.getMoreButton())}},{key:"getClassName",value:function(){return"profile-"+this.API_FILTER}},{key:"render",value:function(){return(0,i.Z)("div",{className:this.getClassName()},void 0,(0,i.Z)(T.o8,{},void 0,(0,i.Z)(T.Z2,{auto:!0},void 0,(0,i.Z)(T.Eg,{auto:!0},void 0,(0,i.Z)("h3",{},void 0,this.getLabel()))),(0,i.Z)(T.Z2,{},void 0,(0,i.Z)(T.Eg,{},void 0,(0,i.Z)(W,{value:this.state.search,onChange:this.search,placeholder:gettext("Search users...")})))),this.getListBody())}}]),s}(f().Component);var X=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(){return(0,o.Z)(this,s),a.apply(this,arguments)}return(0,r.Z)(s,[{key:"setSpecialProps",value:function(){this.PRELOADED_DATA_KEY="PROFILE_FOLLOWS",this.TITLE=gettext("Follows"),this.API_FILTER="follows"}},{key:"getLabel",value:function(){if(this.state.isLoaded){if(this.state.search){var e=ngettext("Found %(users)s user.","Found %(users)s users.",this.state.count);return interpolate(e,{users:this.state.count},!0)}if(this.props.profile.id===this.props.user.id){var t=ngettext("You are following %(users)s user.","You are following %(users)s users.",this.state.count);return interpolate(t,{users:this.state.count},!0)}var n=ngettext("%(username)s is following %(users)s user.","%(username)s is following %(users)s users.",this.state.count);return interpolate(n,{username:this.props.profile.username,users:this.state.count},!0)}return gettext("Loading...")}},{key:"getEmptyMessage",value:function(){return this.state.search?gettext("Search returned no users matching specified criteria."):this.props.user.id===this.props.profile.id?gettext("You are not following any users."):interpolate(gettext("%(username)s is not following any users."),{username:this.props.profile.username},!0)}}]),s}(Q),ee=n(7850),te=n(48927);var ne=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,p.Z)((0,l.Z)(t),"loadMore",(function(){t.setState({isBusy:!0}),t.loadChanges(t.state.page+1,t.state.search)})),(0,p.Z)((0,l.Z)(t),"search",(function(e){t.setState({isLoaded:!1,isBusy:!0,search:e.target.value,count:0,more:0,page:1,pages:1}),t.loadChanges(1,e.target.value)})),b.Z.has("PROFILE_NAME_HISTORY")?t.initWithPreloadedData(b.Z.pop("PROFILE_NAME_HISTORY")):t.initWithoutPreloadedData(),t}return(0,r.Z)(s,[{key:"initWithPreloadedData",value:function(e){this.state={isLoaded:!0,isBusy:!1,search:"",count:e.count,more:e.more,page:e.page,pages:e.pages},q.Z.dispatch((0,te.ZB)(e.results))}},{key:"initWithoutPreloadedData",value:function(){this.state={isLoaded:!1,isBusy:!1,search:"",count:0,more:0,page:1,pages:1},this.loadChanges()}},{key:"loadChanges",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;I.Z.get(b.Z.get("USERNAME_CHANGES_API"),{user:this.props.profile.id,search:n,page:t||1},"search-username-history").then((function(n){1===t?q.Z.dispatch((0,te.ZB)(n.results)):q.Z.dispatch((0,te.R3)(n.results)),e.setState({isLoaded:!0,isBusy:!1,count:n.count,more:n.more,page:n.page,pages:n.pages})}),(function(e){j.Z.apiError(e)}))}},{key:"componentDidMount",value:function(){_.Z.set({title:gettext("Username history"),parent:this.props.profile.username})}},{key:"getLabel",value:function(){if(this.state.isLoaded){if(this.state.search){var e=ngettext("Found %(changes)s username change.","Found %(changes)s username changes.",this.state.count);return interpolate(e,{changes:this.state.count},!0)}if(this.props.profile.id===this.props.user.id){var t=ngettext("Your username was changed %(changes)s time.","Your username was changed %(changes)s times.",this.state.count);return interpolate(t,{changes:this.state.count},!0)}var n=ngettext("%(username)s's username was changed %(changes)s time.","%(username)s's username was changed %(changes)s times.",this.state.count);return interpolate(n,{username:this.props.profile.username,changes:this.state.count},!0)}return gettext("Loading...")}},{key:"getEmptyMessage",value:function(){return this.state.search?gettext("Search returned no username changes matching specified criteria."):this.props.user.id===this.props.profile.id?gettext("No name changes have been recorded for your account."):interpolate(gettext("%(username)s's username was never changed."),{username:this.props.profile.username},!0)}},{key:"getMoreButton",value:function(){return this.state.more?(0,i.Z)("div",{className:"pager-more"},void 0,(0,i.Z)(H.Z,{className:"btn btn-default btn-outline",loading:this.state.isBusy,onClick:this.loadMore},void 0,interpolate(gettext("Show older (%(more)s)"),{more:this.state.more},!0))):null}},{key:"render",value:function(){return(0,i.Z)("div",{className:"profile-username-history"},void 0,(0,i.Z)(T.o8,{},void 0,(0,i.Z)(T.Z2,{auto:!0},void 0,(0,i.Z)(T.Eg,{auto:!0},void 0,(0,i.Z)("h3",{},void 0,this.getLabel()))),(0,i.Z)(T.Z2,{},void 0,(0,i.Z)(T.Eg,{},void 0,(0,i.Z)(W,{value:this.state.search,onChange:this.search,placeholder:gettext("Search history...")})))),(0,i.Z)(ee.Z,{isLoaded:this.state.isLoaded,emptyMessage:this.getEmptyMessage(),changes:this.props["username-history"]}),this.getMoreButton())}}]),s}(f().Component),ae=n(82125),se=n(27519),ie=n(59131),oe=n(19605),re=n(98936),le=n(99755);var ce,ue=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,p.Z)((0,l.Z)(t),"action",(function(){t.setState({isLoading:!0}),t.props.profile.is_followed?q.Z.dispatch((0,se.r$)({is_followed:!1,followers:t.props.profile.followers-1})):q.Z.dispatch((0,se.r$)({is_followed:!0,followers:t.props.profile.followers+1})),I.Z.post(t.props.profile.api.follow).then((function(e){t.setState({isLoading:!1}),q.Z.dispatch((0,se.r$)(e))}),(function(e){t.setState({isLoading:!1}),j.Z.apiError(e)}))})),t.state={isLoading:!1},t}return(0,r.Z)(s,[{key:"getClassName",value:function(){return this.props.profile.is_followed?this.props.className+" btn-default btn-following":this.props.className+" btn-default btn-follow"}},{key:"getIcon",value:function(){return this.props.profile.is_followed?"favorite":"favorite_border"}},{key:"getLabel",value:function(){return this.props.profile.is_followed?gettext("Following"):gettext("Follow")}},{key:"render",value:function(){return(0,i.Z)(H.Z,{className:this.getClassName(),disabled:this.state.isLoading,onClick:this.action},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,this.getIcon()),this.getLabel())}}]),s}(f().Component),de=n(27950);var pe,he,fe=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(){var e;(0,o.Z)(this,s);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return e=a.call.apply(a,[this].concat(n)),(0,p.Z)((0,l.Z)(e),"onClick",(function(){de.Z.open({mode:"START_PRIVATE",submit:b.Z.get("PRIVATE_THREADS_API"),to:[e.props.profile]})})),e}return(0,r.Z)(s,[{key:"render",value:function(){var e=this.props.user.acl.can_start_private_threads,t=this.props.user.id===this.props.profile.id;return!e||t?null:(0,i.Z)("button",{className:this.props.className,onClick:this.onClick,type:"button"},void 0,ce||(ce=(0,i.Z)("span",{className:"material-icon"},void 0,"comment")),gettext("Message"))}}]),s}(f().Component),ve=n(43345),me=n(96359),Ze=n(3784),ge=n(7227),be=n(30337);var ye,_e,Ne=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),(t=a.call(this,e)).state={isLoaded:!1,isLoading:!1,error:null,is_avatar_locked:"",avatar_lock_user_message:"",avatar_lock_staff_message:""},t}return(0,r.Z)(s,[{key:"componentDidMount",value:function(){var e=this;I.Z.get(this.props.profile.api.moderate_avatar).then((function(t){e.setState({isLoaded:!0,is_avatar_locked:t.is_avatar_locked,avatar_lock_user_message:t.avatar_lock_user_message||"",avatar_lock_staff_message:t.avatar_lock_staff_message||""})}),(function(t){e.setState({isLoaded:!0,error:t.detail})}))}},{key:"clean",value:function(){return!!this.isValid()||(j.Z.error(this.validate().username[0]),!1)}},{key:"send",value:function(){return I.Z.post(this.props.profile.api.moderate_avatar,{is_avatar_locked:this.state.is_avatar_locked,avatar_lock_user_message:this.state.avatar_lock_user_message,avatar_lock_staff_message:this.state.avatar_lock_staff_message})}},{key:"handleSuccess",value:function(e){q.Z.dispatch((0,J.n1)(this.props.profile,e.avatar_hash)),j.Z.success(gettext("Avatar controls have been changed."))}},{key:"getFormBody",value:function(){return(0,i.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,i.Z)("div",{className:"modal-body"},void 0,(0,i.Z)(me.Z,{label:gettext("Lock avatar"),helpText:gettext("Locking user avatar will prohibit user from changing his avatar and will reset his/her avatar to default one."),for:"id_is_avatar_locked"},void 0,(0,i.Z)(ge.Z,{id:"id_is_avatar_locked",disabled:this.state.isLoading,iconOn:"lock_outline",iconOff:"lock_open",labelOn:gettext("Disallow user from changing avatar"),labelOff:gettext("Allow user to change avatar"),onChange:this.bindInput("is_avatar_locked"),value:this.state.is_avatar_locked})),(0,i.Z)(me.Z,{label:gettext("User message"),helpText:gettext("Optional message for user explaining why he/she is prohibited form changing avatar."),for:"id_avatar_lock_user_message"},void 0,(0,i.Z)("textarea",{id:"id_avatar_lock_user_message",className:"form-control",rows:"4",disabled:this.state.isLoading,onChange:this.bindInput("avatar_lock_user_message"),value:this.state.avatar_lock_user_message})),(0,i.Z)(me.Z,{label:gettext("Staff message"),helpText:gettext("Optional message for forum team members explaining why user is prohibited form changing avatar."),for:"id_avatar_lock_staff_message"},void 0,(0,i.Z)("textarea",{id:"id_avatar_lock_staff_message",className:"form-control",rows:"4",disabled:this.state.isLoading,onChange:this.bindInput("avatar_lock_staff_message"),value:this.state.avatar_lock_staff_message}))),(0,i.Z)("div",{className:"modal-footer"},void 0,(0,i.Z)("button",{type:"button",className:"btn btn-default","data-dismiss":"modal"},void 0,gettext("Close")),(0,i.Z)(H.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Save changes"))))}},{key:"getModalBody",value:function(){return this.state.error?(0,i.Z)(be.Z,{icon:"remove_circle_outline",message:this.state.error}):this.state.isLoaded?this.getFormBody():pe||(pe=(0,i.Z)(Ze.Z,{}))}},{key:"getClassName",value:function(){return this.state.error?"modal-dialog modal-message modal-avatar-controls":"modal-dialog modal-avatar-controls"}},{key:"render",value:function(){return(0,i.Z)("div",{className:this.getClassName(),role:"document"},void 0,(0,i.Z)("div",{className:"modal-content"},void 0,(0,i.Z)("div",{className:"modal-header"},void 0,(0,i.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},void 0,he||(he=(0,i.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,i.Z)("h4",{className:"modal-title"},void 0,gettext("Avatar controls"))),this.getModalBody()))}}]),s}(ve.Z),ke=n(55210);var xe,we,Re,Ce=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),(t=a.call(this,e)).state={isLoaded:!1,isLoading:!1,error:null,username:"",validators:{username:[ke.lG()]}},t}return(0,r.Z)(s,[{key:"componentDidMount",value:function(){var e=this;I.Z.get(this.props.profile.api.moderate_username).then((function(){e.setState({isLoaded:!0})}),(function(t){e.setState({isLoaded:!0,error:t.detail})}))}},{key:"clean",value:function(){return!!this.isValid()||(j.Z.error(this.validate().username[0]),!1)}},{key:"send",value:function(){return I.Z.post(this.props.profile.api.moderate_username,{username:this.state.username})}},{key:"handleSuccess",value:function(e){this.setState({username:""}),q.Z.dispatch((0,te.KP)(e,this.props.profile,this.props.user)),q.Z.dispatch((0,J._S)(this.props.profile,e.username,e.slug)),j.Z.success(gettext("Username has been changed."))}},{key:"getFormBody",value:function(){return(0,i.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,i.Z)("div",{className:"modal-body"},void 0,(0,i.Z)(me.Z,{label:gettext("New username"),for:"id_username"},void 0,(0,i.Z)("input",{type:"text",id:"id_username",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("username"),value:this.state.username}))),(0,i.Z)("div",{className:"modal-footer"},void 0,(0,i.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,i.Z)(H.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Change username"))))}},{key:"getModalBody",value:function(){return this.state.error?(0,i.Z)(be.Z,{icon:"remove_circle_outline",message:this.state.error}):this.state.isLoaded?this.getFormBody():ye||(ye=(0,i.Z)(Ze.Z,{}))}},{key:"getClassName",value:function(){return this.state.error?"modal-dialog modal-message modal-rename-user":"modal-dialog modal-rename-user"}},{key:"render",value:function(){return(0,i.Z)("div",{className:this.getClassName(),role:"document"},void 0,(0,i.Z)("div",{className:"modal-content"},void 0,(0,i.Z)("div",{className:"modal-header"},void 0,(0,i.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},void 0,_e||(_e=(0,i.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,i.Z)("h4",{className:"modal-title"},void 0,gettext("Change username"))),this.getModalBody()))}}]),s}(ve.Z);var Se,Ee,Le,Pe=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,p.Z)((0,l.Z)(t),"countdown",(function(){window.setTimeout((function(){t.state.countdown>1?(t.setState({countdown:t.state.countdown-1}),t.countdown()):t.state.confirm||t.setState({confirm:!0})}),1e3)})),t.state={isLoaded:!1,isLoading:!1,isDeleted:!1,error:null,countdown:5,confirm:!1,with_content:!1},t}return(0,r.Z)(s,[{key:"componentDidMount",value:function(){var e=this;I.Z.get(this.props.profile.api.delete).then((function(){e.setState({isLoaded:!0}),e.countdown()}),(function(t){e.setState({isLoaded:!0,error:t.detail})}))}},{key:"send",value:function(){return I.Z.post(this.props.profile.api.delete,{with_content:this.state.with_content})}},{key:"handleSuccess",value:function(){y.Z.stop("user-profile"),this.state.with_content?this.setState({isDeleted:interpolate(gettext("%(username)s's account, threads, posts and other content has been deleted."),{username:this.props.profile.username},!0)}):this.setState({isDeleted:interpolate(gettext("%(username)s's account has been deleted and other content has been hidden."),{username:this.props.profile.username},!0)})}},{key:"getButtonLabel",value:function(){return this.state.confirm?interpolate(gettext("Delete %(username)s"),{username:this.props.profile.username},!0):interpolate(gettext("Please wait... (%(countdown)ss)"),{countdown:this.state.countdown},!0)}},{key:"getForm",value:function(){return(0,i.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,i.Z)("div",{className:"modal-body"},void 0,(0,i.Z)(me.Z,{label:gettext("User content"),for:"id_with_content"},void 0,(0,i.Z)(ge.Z,{id:"id_with_content",disabled:this.state.isLoading,labelOn:gettext("Delete together with user's account"),labelOff:gettext("Hide after deleting user's account"),onChange:this.bindInput("with_content"),value:this.state.with_content}))),(0,i.Z)("div",{className:"modal-footer"},void 0,(0,i.Z)("button",{type:"button",className:"btn btn-default","data-dismiss":"modal"},void 0,gettext("Cancel")),(0,i.Z)(H.Z,{className:"btn-danger",loading:this.state.isLoading,disabled:!this.state.confirm},void 0,this.getButtonLabel())))}},{key:"getDeletedBody",value:function(){return(0,i.Z)("div",{className:"modal-body"},void 0,xe||(xe=(0,i.Z)("div",{className:"message-icon"},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,i.Z)("div",{className:"message-body"},void 0,(0,i.Z)("p",{className:"lead"},void 0,this.state.isDeleted),(0,i.Z)("p",{},void 0,(0,i.Z)("a",{href:b.Z.get("USERS_LIST_URL")},void 0,gettext("Return to users list")))))}},{key:"getModalBody",value:function(){return this.state.error?(0,i.Z)(be.Z,{icon:"remove_circle_outline",message:this.state.error}):this.state.isLoaded?this.state.isDeleted?this.getDeletedBody():this.getForm():we||(we=(0,i.Z)(Ze.Z,{}))}},{key:"getClassName",value:function(){return this.state.error||this.state.isDeleted?"modal-dialog modal-message modal-delete-account":"modal-dialog modal-delete-account"}},{key:"render",value:function(){return(0,i.Z)("div",{className:this.getClassName(),role:"document"},void 0,(0,i.Z)("div",{className:"modal-content"},void 0,(0,i.Z)("div",{className:"modal-header"},void 0,(0,i.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},void 0,Re||(Re=(0,i.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,i.Z)("h4",{className:"modal-title"},void 0,gettext("Delete user account"))),this.getModalBody()))}}]),s}(ve.Z),Oe=n(59801);var Te,Ae,Be,Ie,je,De=function(e){return{tick:e.tick,user:e.auth,profile:e.profile}},Ue=function(e){(0,c.Z)(h,e);var t,n,a=(t=h,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function h(){var e;(0,o.Z)(this,h);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return e=a.call.apply(a,[this].concat(n)),(0,p.Z)((0,l.Z)(e),"showAvatarDialog",(function(){Oe.Z.show((0,s.$j)(De)(Ne))})),(0,p.Z)((0,l.Z)(e),"showRenameDialog",(function(){Oe.Z.show((0,s.$j)(De)(Ce))})),(0,p.Z)((0,l.Z)(e),"showDeleteDialog",(function(){Oe.Z.show((0,s.$j)(De)(Pe))})),e}return(0,r.Z)(h,[{key:"render",value:function(){var e=this.props.moderation;return(0,i.Z)("ul",{className:"dropdown-menu dropdown-menu-right",role:"menu"},void 0,!!e.avatar&&(0,i.Z)("li",{},void 0,(0,i.Z)("button",{type:"button",className:"btn btn-link",onClick:this.showAvatarDialog},void 0,Se||(Se=(0,i.Z)("span",{className:"material-icon"},void 0,"portrait")),gettext("Avatar controls"))),!!e.rename&&(0,i.Z)("li",{},void 0,(0,i.Z)("button",{type:"button",className:"btn btn-link",onClick:this.showRenameDialog},void 0,Ee||(Ee=(0,i.Z)("span",{className:"material-icon"},void 0,"credit_card")),gettext("Change username"))),!!e.delete&&(0,i.Z)("li",{},void 0,(0,i.Z)("button",{type:"button",className:"btn btn-link",onClick:this.showDeleteDialog},void 0,Le||(Le=(0,i.Z)("span",{className:"material-icon"},void 0,"clear")),gettext("Delete account"))))}}]),h}(f().Component),Me=n(24678),ze=function(e){var t=e.profile;return(0,i.Z)("ul",{className:"profile-data-list"},void 0,!1===t.is_active&&(0,i.Z)("li",{className:"user-account-disabled"},void 0,(0,i.Z)("abbr",{title:gettext("This user's account has been disabled by administrator.")},void 0,gettext("Account disabled"))),(0,i.Z)("li",{className:"user-status-display"},void 0,(0,i.Z)(Me.ZP,{user:t,status:t.status},void 0,(0,i.Z)(Me.Jj,{user:t,status:t.status}),(0,i.Z)(Me.pg,{user:t,status:t.status,className:"status-label"}))),t.rank.is_tab?(0,i.Z)("li",{className:"user-rank"},void 0,(0,i.Z)("a",{href:t.rank.url,className:"item-title"},void 0,t.rank.name)):(0,i.Z)("li",{className:"user-rank"},void 0,(0,i.Z)("span",{className:"item-title"},void 0,t.rank.name)),(t.title||t.rank.title)&&(0,i.Z)("li",{className:"user-title"},void 0,t.title||t.rank.title),(0,i.Z)("li",{className:"user-joined-on"},void 0,(0,i.Z)("abbr",{title:interpolate(gettext("Joined on %(joined_on)s"),{joined_on:t.joined_on.format("LL, LT")},!0)},void 0,interpolate(gettext("Joined %(joined_on)s"),{joined_on:t.joined_on.fromNow()},!0))),t.email&&(0,i.Z)("li",{className:"user-email"},void 0,(0,i.Z)("a",{href:"mailto:"+t.email,className:"item-title"},void 0,t.email)))},He=function(){return(0,i.Z)("button",{className:"btn btn-default btn-icon btn-outline dropdown-toggle",type:"button",title:gettext("Options"),"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,je||(je=(0,i.Z)("span",{className:"material-icon"},void 0,"settings")))},Fe=function(e){var t=e.profile,n=e.user,a=e.moderation,s=e.message,o=e.follow;return(0,i.Z)(le.sP,{},void 0,(0,i.Z)(le.mr,{styleName:t.rank.css_class?"rank-"+t.rank.css_class:"profile"},void 0,(0,i.Z)(le.gC,{styleName:t.rank.css_class?"rank-"+t.rank.css_class:"profile"},void 0,(0,i.Z)("div",{className:"profile-page-header"},void 0,(0,i.Z)("div",{className:"profile-page-header-avatar"},void 0,(0,i.Z)(oe.ZP,{className:"user-avatar hidden-sm hidden-md hidden-lg",user:t,size:200,size2x:400}),(0,i.Z)(oe.ZP,{className:"user-avatar hidden-xs hidden-md hidden-lg",user:t,size:64,size2x:128}),(0,i.Z)(oe.ZP,{className:"user-avatar hidden-xs hidden-sm",user:t,size:128,size2x:256})),(0,i.Z)("h1",{},void 0,t.username))),(0,i.Z)(le.eA,{className:"profile-page-header-details"},void 0,(0,i.Z)(re.gq,{},void 0,(0,i.Z)(re.kw,{auto:!0},void 0,(0,i.Z)(re.Z6,{},void 0,(0,i.Z)(ze,{profile:t}))),s&&(0,i.Z)(re.kw,{},void 0,(0,i.Z)(re.Z6,{},void 0,(0,i.Z)(fe,{className:"btn btn-default btn-block btn-outline",profile:t,user:n})),a.available&&!o&&(0,i.Z)(re.Z6,{shrink:!0},void 0,(0,i.Z)("div",{className:"dropdown"},void 0,Te||(Te=(0,i.Z)(He,{})),(0,i.Z)(Ue,{profile:t,moderation:a})))),o&&(0,i.Z)(re.kw,{},void 0,(0,i.Z)(re.Z6,{},void 0,(0,i.Z)(ue,{className:"btn btn-block btn-outline",profile:t})),a.available&&(0,i.Z)(re.Z6,{shrink:!0},void 0,(0,i.Z)("div",{className:"dropdown"},void 0,Ae||(Ae=(0,i.Z)(He,{})),(0,i.Z)(Ue,{profile:t,moderation:a})))),a.available&&!o&&!s&&(0,i.Z)(re.kw,{},void 0,(0,i.Z)(re.Z6,{className:"hidden-xs",shrink:!0},void 0,(0,i.Z)("div",{className:"dropdown"},void 0,Be||(Be=(0,i.Z)(He,{})),(0,i.Z)(Ue,{profile:t,moderation:a}))),(0,i.Z)(re.Z6,{className:"hidden-sm hidden-md hidden-lg"},void 0,(0,i.Z)("div",{className:"dropdown"},void 0,(0,i.Z)("button",{className:"btn btn-default btn-block btn-outline dropdown-toggle",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,Ie||(Ie=(0,i.Z)("span",{className:"material-icon"},void 0,"settings")),gettext("Options")),(0,i.Z)(Ue,{profile:t,moderation:a}))))))))},qe=n(69987),Ye=n(94417),Ve=function(e){var t=e.baseUrl,n=e.page,a=e.pages;return(0,i.Z)("div",{className:"nav-container"},void 0,(0,i.Z)("div",{className:"dropdown hidden-sm hidden-md hidden-lg"},void 0,(0,i.Z)("button",{className:"btn btn-default btn-block btn-outline dropdown-toggle",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,n.icon),n.name),(0,i.Z)("ul",{className:"dropdown-menu stick-to-bottom"},void 0,a.map((function(e){return(0,i.Z)("li",{},e.component,(0,i.Z)(qe.rU,{to:t+e.component+"/"},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,e.icon),e.name))})))),(0,i.Z)("ul",{className:"nav nav-pills hidden-xs",role:"menu"},void 0,a.map((function(e){return(0,i.Z)(Ye.Z,{path:t+e.component+"/"},e.component,(0,i.Z)(qe.rU,{to:t+e.component+"/"},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,e.icon),e.name))}))))};var $e=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,p.Z)((0,l.Z)(t),"update",(function(e){q.Z.dispatch((0,se.ZB)(e))})),t.startPolling(e.profile.api.index),t}return(0,r.Z)(s,[{key:"startPolling",value:function(e){y.Z.start({poll:"user-profile",url:e,frequency:9e4,update:this.update})}},{key:"render",value:function(){var e=this,t=b.Z.get("PROFILE").url,n=b.Z.get("PROFILE_PAGES"),a=n.filter((function(n){var a=t+n.component+"/";return e.props.location.pathname===a}))[0],s=this.props,o=s.profile,r=s.user,l=Ge(o,r),c=r.acl.can_start_private_threads&&o.id!==r.id,u=o.acl.can_follow&&o.id!==r.id;return(0,i.Z)("div",{className:"page page-user-profile"},void 0,(0,i.Z)(Fe,{profile:this.props.profile,user:this.props.user,moderation:l,message:c,follow:u}),(0,i.Z)(ie.Z,{},void 0,(0,i.Z)(Ve,{baseUrl:t,page:a,pages:n}),this.props.children))}}]),s}(ae.Z),Ge=function(e,t){var n={available:!1,rename:!1,avatar:!1,delete:!1};return t.is_anonumous||(n.rename=e.acl.can_rename,n.avatar=e.acl.can_moderate_avatar,n.delete=e.acl.can_delete,n.available=n.rename||n.avatar||n.delete),n};function We(e){return{isAuthenticated:e.auth.user.id===e.profile.id,tick:e.tick.tick,user:e.auth.user,users:e.users,posts:e.posts,profile:e.profile,profileDetails:e["profile-details"],"username-history":e["username-history"]}}var Ke={posts:function(e){var t;t=e.user.id===e.profile.id?gettext("You have posted no messages."):interpolate(gettext("%(username)s posted no messages."),{username:e.profile.username},!0);var n=null;if(e.posts.isLoaded)if(e.profile.id===e.user.id){var a=ngettext("You have posted %(posts)s message.","You have posted %(posts)s messages.",e.profile.posts);n=interpolate(a,{posts:e.profile.posts},!0)}else{var s=ngettext("%(username)s has posted %(posts)s message.","%(username)s has posted %(posts)s messages.",e.profile.posts);n=interpolate(s,{username:e.profile.username,posts:e.profile.posts},!0)}else n=gettext("Loading...");return f().createElement(V,(0,M.Z)({api:e.profile.api.posts,emptyMessage:t,header:n,title:gettext("Posts")},e))},threads:function(e){var t;t=e.user.id===e.profile.id?gettext("You have no started threads."):interpolate(gettext("%(username)s started no threads."),{username:e.profile.username},!0);var n=null;if(e.posts.isLoaded)if(e.profile.id===e.user.id){var a=ngettext("You have started %(threads)s thread.","You have started %(threads)s threads.",e.profile.threads);n=interpolate(a,{threads:e.profile.threads},!0)}else{var s=ngettext("%(username)s has started %(threads)s thread.","%(username)s has started %(threads)s threads.",e.profile.threads);n=interpolate(s,{username:e.profile.username,threads:e.profile.threads},!0)}else n=gettext("Loading...");return f().createElement(V,(0,M.Z)({api:e.profile.api.threads,emptyMessage:t,header:n,title:gettext("Threads")},e))},followers:Q,follows:X,details:U,"username-history":ne,"ban-details":N};function Je(){var e=[];return b.Z.get("PROFILE_PAGES").forEach((function(t){e.push(Object.assign({},t,{path:b.Z.get("PROFILE").url+t.component+"/",component:(0,s.$j)(We)(Ke[t.component])}))})),e}var Qe=n(39633);b.Z.addInitializer({name:"component:profile",initializer:function(e){e.has("PROFILE")&&e.has("PROFILE_PAGES")&&(0,Qe.Z)({root:b.Z.get("PROFILE").url,component:(0,s.$j)(We)($e),paths:Je()})},after:"reducer:profile-hydrate"})},32488:function(e,t,n){"use strict";var a,s=n(32233),i=n(97326),o=n(4942),r=n(22928),l=n(15671),c=n(43144),u=n(79340),d=n(6215),p=n(61120),h=n(57588),f=n.n(h),v=n(82211),m=n(43345),Z=n(78657),g=n(53904),b=n(55210),y=n(93051);function _(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,p.Z)(e);if(t){var s=(0,p.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,d.Z)(this,n)}}var N=function(e){(0,u.Z)(n,e);var t=_(n);function n(e){var a;return(0,l.Z)(this,n),(a=t.call(this,e)).state={isLoading:!1,email:"",validators:{email:[b.Do()]}},a}return(0,c.Z)(n,[{key:"clean",value:function(){return!!this.isValid()||(g.Z.error(gettext("Enter a valid email address.")),!1)}},{key:"send",value:function(){return Z.Z.post(s.Z.get("SEND_ACTIVATION_API"),{email:this.state.email})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){["already_active","inactive_admin"].indexOf(e.code)>-1?g.Z.info(e.detail):403===e.status&&e.ban?(0,y.Z)(e.ban):g.Z.apiError(e)}},{key:"render",value:function(){return(0,r.Z)("div",{className:"well well-form well-form-request-activation-link"},void 0,(0,r.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,r.Z)("div",{className:"form-group"},void 0,(0,r.Z)("div",{className:"control-input"},void 0,(0,r.Z)("input",{type:"text",className:"form-control",placeholder:gettext("Your e-mail address"),disabled:this.state.isLoading,onChange:this.bindInput("email"),value:this.state.email}))),(0,r.Z)(v.Z,{className:"btn-primary btn-block",loading:this.state.isLoading},void 0,gettext("Send link"))))}}]),n}(m.Z),k=function(e){(0,u.Z)(n,e);var t=_(n);function n(){return(0,l.Z)(this,n),t.apply(this,arguments)}return(0,c.Z)(n,[{key:"getMessage",value:function(){return interpolate(gettext("Activation link was sent to %(email)s"),{email:this.props.user.email},!0)}},{key:"render",value:function(){return(0,r.Z)("div",{className:"well well-form well-form-request-activation-link well-done"},void 0,(0,r.Z)("div",{className:"done-message"},void 0,a||(a=(0,r.Z)("div",{className:"message-icon"},void 0,(0,r.Z)("span",{className:"material-icon"},void 0,"check"))),(0,r.Z)("div",{className:"message-body"},void 0,(0,r.Z)("p",{},void 0,this.getMessage())),(0,r.Z)("button",{className:"btn btn-primary btn-block",type:"button",onClick:this.props.callback},void 0,gettext("Request another link"))))}}]),n}(f().Component),x=function(e){(0,u.Z)(n,e);var t=_(n);function n(e){var a;return(0,l.Z)(this,n),a=t.call(this,e),(0,o.Z)((0,i.Z)(a),"complete",(function(e){a.setState({complete:e})})),(0,o.Z)((0,i.Z)(a),"reset",(function(){a.setState({complete:!1})})),a.state={complete:!1},a}return(0,c.Z)(n,[{key:"render",value:function(){return this.state.complete?(0,r.Z)(k,{user:this.state.complete,callback:this.reset}):(0,r.Z)(N,{callback:this.complete})}}]),n}(f().Component),w=n(4869);s.Z.addInitializer({name:"component:request-activation-link",initializer:function(){document.getElementById("request-activation-link-mount")&&(0,w.Z)(x,"request-activation-link-mount",!1)},after:"store"})},11768:function(e,t,n){"use strict";var a,s,i=n(32233),o=n(97326),r=n(4942),l=n(22928),c=n(15671),u=n(43144),d=n(79340),p=n(6215),h=n(61120),f=n(57588),v=n.n(f),m=n(73935),Z=n.n(m),g=n(82211),b=n(43345),y=n(78657),_=n(53904),N=n(55210),k=n(93051);function x(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,h.Z)(e);if(t){var s=(0,h.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,p.Z)(this,n)}}var w=function(e){(0,d.Z)(n,e);var t=x(n);function n(e){var a;return(0,c.Z)(this,n),(a=t.call(this,e)).state={isLoading:!1,email:"",validators:{email:[N.Do()]}},a}return(0,u.Z)(n,[{key:"clean",value:function(){return!!this.isValid()||(_.Z.error(gettext("Enter a valid email address.")),!1)}},{key:"send",value:function(){return y.Z.post(i.Z.get("SEND_PASSWORD_RESET_API"),{email:this.state.email})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){["inactive_user","inactive_admin"].indexOf(e.code)>-1?this.props.showInactivePage(e):403===e.status&&e.ban?(0,k.Z)(e.ban):_.Z.apiError(e)}},{key:"render",value:function(){return(0,l.Z)("div",{className:"well well-form well-form-request-password-reset"},void 0,(0,l.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,l.Z)("div",{className:"form-group"},void 0,(0,l.Z)("div",{className:"control-input"},void 0,(0,l.Z)("input",{type:"text",className:"form-control",placeholder:gettext("Your e-mail address"),disabled:this.state.isLoading,onChange:this.bindInput("email"),value:this.state.email}))),(0,l.Z)(g.Z,{className:"btn-primary btn-block",loading:this.state.isLoading},void 0,gettext("Send link"))))}}]),n}(b.Z),R=function(e){(0,d.Z)(n,e);var t=x(n);function n(){return(0,c.Z)(this,n),t.apply(this,arguments)}return(0,u.Z)(n,[{key:"getMessage",value:function(){return interpolate(gettext("Reset password link was sent to %(email)s"),{email:this.props.user.email},!0)}},{key:"render",value:function(){return(0,l.Z)("div",{className:"well well-form well-form-request-password-reset well-done"},void 0,(0,l.Z)("div",{className:"done-message"},void 0,a||(a=(0,l.Z)("div",{className:"message-icon"},void 0,(0,l.Z)("span",{className:"material-icon"},void 0,"check"))),(0,l.Z)("div",{className:"message-body"},void 0,(0,l.Z)("p",{},void 0,this.getMessage())),(0,l.Z)("button",{type:"button",className:"btn btn-primary btn-block",onClick:this.props.callback},void 0,gettext("Request another link"))))}}]),n}(v().Component),C=function(e){(0,d.Z)(n,e);var t=x(n);function n(){return(0,c.Z)(this,n),t.apply(this,arguments)}return(0,u.Z)(n,[{key:"getActivateButton",value:function(){return"inactive_user"===this.props.activation?(0,l.Z)("p",{},void 0,(0,l.Z)("a",{href:i.Z.get("REQUEST_ACTIVATION_URL")},void 0,gettext("Activate your account."))):null}},{key:"render",value:function(){return(0,l.Z)("div",{className:"page page-message page-message-info page-forgotten-password-inactive"},void 0,(0,l.Z)("div",{className:"container"},void 0,(0,l.Z)("div",{className:"message-panel"},void 0,s||(s=(0,l.Z)("div",{className:"message-icon"},void 0,(0,l.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,l.Z)("div",{className:"message-body"},void 0,(0,l.Z)("p",{className:"lead"},void 0,gettext("Your account is inactive.")),(0,l.Z)("p",{},void 0,this.props.message),this.getActivateButton()))))}}]),n}(v().Component),S=function(e){(0,d.Z)(n,e);var t=x(n);function n(e){var a;return(0,c.Z)(this,n),a=t.call(this,e),(0,r.Z)((0,o.Z)(a),"complete",(function(e){a.setState({complete:e})})),(0,r.Z)((0,o.Z)(a),"reset",(function(){a.setState({complete:!1})})),a.state={complete:!1},a}return(0,u.Z)(n,[{key:"showInactivePage",value:function(e){Z().render((0,l.Z)(C,{activation:e.code,message:e.detail}),document.getElementById("page-mount"))}},{key:"render",value:function(){return this.state.complete?(0,l.Z)(R,{callback:this.reset,user:this.state.complete}):(0,l.Z)(w,{callback:this.complete,showInactivePage:this.showInactivePage})}}]),n}(v().Component),E=n(4869);i.Z.addInitializer({name:"component:request-password-reset",initializer:function(){document.getElementById("request-password-reset-mount")&&(0,E.Z)(S,"request-password-reset-mount",!1)},after:"store"})},61323:function(e,t,n){"use strict";var a,s=n(32233),i=n(97326),o=n(4942),r=n(22928),l=n(15671),c=n(43144),u=n(79340),d=n(6215),p=n(61120),h=n(57588),f=n.n(h),v=n(73935),m=n.n(v),Z=n(82211),g=n(43345),b=n(14467),y=n(78657),_=n(98274),N=n(59801),k=n(53904),x=n(93051),w=n(19755);function R(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,p.Z)(e);if(t){var s=(0,p.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,d.Z)(this,n)}}var C=function(e){(0,u.Z)(n,e);var t=R(n);function n(e){var a;return(0,l.Z)(this,n),(a=t.call(this,e)).state={isLoading:!1,password:""},a}return(0,c.Z)(n,[{key:"clean",value:function(){return!!this.state.password.trim().length||(k.Z.error(gettext("Enter new password.")),!1)}},{key:"send",value:function(){return y.Z.post(s.Z.get("CHANGE_PASSWORD_API"),{password:this.state.password})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){403===e.status&&e.ban?(0,x.Z)(e.ban):k.Z.apiError(e)}},{key:"render",value:function(){return(0,r.Z)("div",{className:"well well-form well-form-reset-password"},void 0,(0,r.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,r.Z)("div",{className:"form-group"},void 0,(0,r.Z)("div",{className:"control-input"},void 0,(0,r.Z)("input",{type:"password",className:"form-control",placeholder:gettext("Enter new password"),disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),(0,r.Z)(Z.Z,{className:"btn-primary btn-block",loading:this.state.isLoading},void 0,gettext("Change password"))))}}]),n}(g.Z),S=function(e){(0,u.Z)(n,e);var t=R(n);function n(){return(0,l.Z)(this,n),t.apply(this,arguments)}return(0,c.Z)(n,[{key:"getMessage",value:function(){return interpolate(gettext("%(username)s, your password has been changed successfully."),{username:this.props.user.username},!0)}},{key:"showSignIn",value:function(){N.Z.show(b.Z)}},{key:"render",value:function(){return(0,r.Z)("div",{className:"page page-message page-message-success page-forgotten-password-changed"},void 0,(0,r.Z)("div",{className:"container"},void 0,(0,r.Z)("div",{className:"message-panel"},void 0,a||(a=(0,r.Z)("div",{className:"message-icon"},void 0,(0,r.Z)("span",{className:"material-icon"},void 0,"check"))),(0,r.Z)("div",{className:"message-body"},void 0,(0,r.Z)("p",{className:"lead"},void 0,this.getMessage()),(0,r.Z)("p",{},void 0,gettext("You will have to sign in using new password before continuing.")),(0,r.Z)("p",{},void 0,(0,r.Z)("button",{type:"button",className:"btn btn-primary",onClick:this.showSignIn},void 0,gettext("Sign in")))))))}}]),n}(f().Component),E=function(e){(0,u.Z)(n,e);var t=R(n);function n(){var e;(0,l.Z)(this,n);for(var a=arguments.length,s=new Array(a),c=0;c<a;c++)s[c]=arguments[c];return e=t.call.apply(t,[this].concat(s)),(0,o.Z)((0,i.Z)(e),"complete",(function(e){_.Z.softSignOut(),w('#hidden-login-form input[name="redirect_to"]').remove(),m().render((0,r.Z)(S,{user:e}),document.getElementById("page-mount"))})),e}return(0,c.Z)(n,[{key:"render",value:function(){return(0,r.Z)(C,{callback:this.complete})}}]),n}(f().Component),L=n(4869);s.Z.addInitializer({name:"component:reset-password-form",initializer:function(){document.getElementById("reset-password-form-mount")&&(0,L.Z)(E,"reset-password-form-mount",!1)},after:"store"})},15049:function(e,t,n){"use strict";var a,s=n(37424),i=n(22928),o=n(87462),r=n(57588),l=n.n(r),c=n(59131),u=n(15671),d=n(43144),p=n(97326),h=n(79340),f=n(6215),v=n(61120),m=n(4942),Z=n(32233),g=n(43345),b=n(21981),y=n(16427),_=n(6935),N=n(78657),k=n(53904),x=n(90287),w=n(98936),R=n(99755);var C=function(e){(0,h.Z)(o,e);var t,n,s=(t=o,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function o(e){var t;return(0,u.Z)(this,o),t=s.call(this,e),(0,m.Z)((0,p.Z)(t),"onQueryChange",(function(e){t.changeValue("query",e.target.value)})),t.state={isLoading:!1,query:e.search.query},t}return(0,d.Z)(o,[{key:"componentDidMount",value:function(){this.state.query.length&&this.handleSubmit()}},{key:"clean",value:function(){return!!this.state.query.trim().length||(k.Z.error(gettext("You have to enter search query.")),!1)}},{key:"send",value:function(){x.Z.dispatch((0,y.Vx)({isLoading:!0}));var e=this.state.query.trim(),t=window.location.href,n=t.indexOf("?q=");return n>0&&(t=t.substring(0,n+3)),window.history.pushState({},"",t+encodeURIComponent(e)),N.Z.get(Z.Z.get("SEARCH_API"),{q:e})}},{key:"handleSuccess",value:function(e){x.Z.dispatch((0,y.Vx)({query:this.state.query.trim(),isLoading:!1,providers:e})),e.forEach((function(e){"users"===e.id?x.Z.dispatch((0,_.ZB)(e.results.results)):"threads"===e.id&&x.Z.dispatch((0,b.zD)(e.results))}))}},{key:"handleError",value:function(e){k.Z.apiError(e),x.Z.dispatch((0,y.Vx)({isLoading:!1}))}},{key:"render",value:function(){return(0,i.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,i.Z)(R.sP,{},void 0,(0,i.Z)(R.mr,{styleName:"site-search"},void 0,(0,i.Z)(R.gC,{styleName:"site-search"},void 0,(0,i.Z)("h1",{},void 0,gettext("Search"))),(0,i.Z)(R.eA,{className:"page-header-search-form"},void 0,(0,i.Z)(w.gq,{},void 0,(0,i.Z)(w.kw,{auto:!0},void 0,(0,i.Z)(w.Z6,{},void 0,(0,i.Z)("input",{className:"form-control",disabled:this.state.isLoading,type:"text",value:this.state.query,placeholder:gettext("Search"),onChange:this.onQueryChange})),(0,i.Z)(w.Z6,{shrink:!0},void 0,(0,i.Z)("button",{className:"btn btn-secondary btn-icon btn-outline",disabled:this.state.isLoading},void 0,a||(a=(0,i.Z)("span",{className:"material-icon"},void 0,"search"))))))))))}}]),o}(g.Z),S=n(69987);function E(e){return(0,i.Z)("div",{className:"list-group nav-side"},void 0,e.providers.map((function(e){return(0,i.Z)(S.rU,{activeClassName:"active",className:"list-group-item",to:e.url},e.id,(0,i.Z)("span",{className:"material-icon"},void 0,e.icon),e.name,(0,i.Z)(L,{results:e.results}))})))}function L(e){if(!e.results)return null;var t=e.results.count;return t>1e6?t=Math.ceil(t/1e6)+"KK":t>1e3&&(t=Math.ceil(t/1e3)+"K"),(0,i.Z)("span",{className:"badge"},void 0,t)}function P(e){return(0,i.Z)("div",{className:"page page-search"},void 0,(0,i.Z)(C,{provider:e.provider,search:e.search}),(0,i.Z)(c.Z,{},void 0,(0,i.Z)("div",{className:"row"},void 0,(0,i.Z)("div",{className:"col-md-3"},void 0,(0,i.Z)(E,{providers:e.search.providers})),(0,i.Z)("div",{className:"col-md-9"},void 0,e.children,(0,i.Z)(O,{provider:e.provider,search:e.search})))))}function O(e){var t=null;if(e.search.providers.forEach((function(n){n.id===e.provider.id&&(t=n.time)})),null===t)return null;var n=gettext("Search took %(time)s s to complete");return(0,i.Z)("footer",{className:"search-footer"},void 0,(0,i.Z)("p",{},void 0,interpolate(n,{time:t},!0)))}var T=n(11005),A=n(82211);function B(e){return(0,i.Z)("div",{},void 0,(0,i.Z)(T.Z,{isReady:!0,posts:e.results}),l().createElement(I,e))}n(69092);var I=function(e){(0,h.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function s(){var e;(0,u.Z)(this,s);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return e=a.call.apply(a,[this].concat(n)),(0,m.Z)((0,p.Z)(e),"onClick",(function(){x.Z.dispatch((0,b.Vx)({isBusy:!0})),N.Z.get(e.props.provider.api,{q:e.props.query,page:e.props.next}).then((function(e){e.forEach((function(e){"threads"===e.id&&(x.Z.dispatch((0,b.R3)(e.results)),x.Z.dispatch((0,y.P0)(e)))})),x.Z.dispatch((0,b.Vx)({isBusy:!1}))}),(function(e){k.Z.apiError(e),x.Z.dispatch((0,b.Vx)({isBusy:!1}))}))})),e}return(0,d.Z)(s,[{key:"render",value:function(){return this.props.more?(0,i.Z)("div",{className:"pager-more"},void 0,(0,i.Z)(A.Z,{className:"btn btn-default btn-outline",loading:this.props.isBusy,onClick:this.onClick},void 0,gettext("Show more"))):null}}]),s}(l().Component);function j(e){var t=e.children,n=e.loading,a=e.posts,s=e.query;return a&&a.count?t:s.length?(0,i.Z)("p",{className:"lead"},void 0,n?gettext("Loading results..."):gettext("No threads matching search query have been found.")):(0,i.Z)("p",{className:"lead"},void 0,gettext("Enter at least two characters to search threads."))}var D=n(40429);function U(e){var t=e.children,n=e.loading,a=e.query;return e.users.length?t:a.length?(0,i.Z)("p",{className:"lead"},void 0,n?gettext("Loading results..."):gettext("No users matching search query have been found.")):(0,i.Z)("p",{className:"lead"},void 0,gettext("Enter at least two characters to search users."))}var M={threads:function(e){return(0,i.Z)(P,{provider:e.route.provider,search:e.search},void 0,(0,i.Z)(j,{loading:e.search.isLoading,query:e.search.query,posts:e.posts},void 0,l().createElement(B,(0,o.Z)({provider:e.route.provider,query:e.search.query},e.posts))))},users:function(e){return(0,i.Z)(P,{provider:e.route.provider,search:e.search},void 0,(0,i.Z)(U,{loading:e.search.isLoading,query:e.search.query,users:e.users},void 0,(0,i.Z)(D.Z,{cols:3,isReady:!e.search.isLoading,users:e.users})))}};function z(e){return{posts:e.posts,search:e.search,tick:e.tick.tick,user:e.auth.user,users:e.users}}var H=n(39633);Z.Z.addInitializer({name:"component:search",initializer:function(e){var t;"misago:search"===e.get("CURRENT_LINK")&&(0,H.Z)({paths:(t=Z.Z.get("SEARCH_PROVIDERS"),t.map((function(e){return{path:e.url,component:(0,s.$j)(z)(M[e.id]),provider:e}})))})},after:"store"})},61814:function(e,t,n){"use strict";var a=n(37424),s=n(32233),i=n(22928),o=n(15671),r=n(43144),l=n(79340),c=n(6215),u=n(61120),d=n(57588);var p={info:"alert-info",success:"alert-success",warning:"alert-warning",error:"alert-danger"},h=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(){return(0,o.Z)(this,s),a.apply(this,arguments)}return(0,r.Z)(s,[{key:"getSnackbarClass",value:function(){var e="alerts-snackbar";return this.props.isVisible?e+=" in":e+=" out",e}},{key:"render",value:function(){return(0,i.Z)("div",{className:this.getSnackbarClass()},void 0,(0,i.Z)("p",{className:"alert "+p[this.props.type]},void 0,this.props.message))}}]),s}(n.n(d)().Component);function f(e){return e.snackbar}var v=n(4869);s.Z.addInitializer({name:"component:snackbar",initializer:function(){(0,v.Z)((0,a.$j)(f)(h),"snackbar-mount")},after:"snackbar"})},95920:function(e,t,n){"use strict";var a=n(57588),s=n.n(a),i=n(22928),o=n(15671),r=n(43144),l=n(97326),c=n(79340),u=n(6215),d=n(61120),p=n(4942),h=n(32233),f=n(26106),v=n(82211),m=n(43345),Z=n(96359),g=n(78657),b=n(53904),y=n(55210),_=function(e){var t=e.backendName,n=gettext("Sign in with %(backend)s"),a=interpolate(n,{backend:t},!0);return(0,i.Z)("div",{className:"page-header-bg"},void 0,(0,i.Z)("div",{className:"page-header"},void 0,(0,i.Z)("div",{className:"container"},void 0,(0,i.Z)("h1",{},void 0,a))))};function N(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function k(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?N(Object(n),!0).forEach((function(t){(0,p.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):N(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var x=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;(0,o.Z)(this,s),t=a.call(this,e),(0,p.Z)((0,l.Z)(t),"handlePrivacyPolicyChange",(function(e){var n=e.target.value;t.handleToggleAgreement("privacyPolicy",n)})),(0,p.Z)((0,l.Z)(t),"handleTermsOfServiceChange",(function(e){var n=e.target.value;t.handleToggleAgreement("termsOfService",n)})),(0,p.Z)((0,l.Z)(t),"handleToggleAgreement",(function(e,n){t.setState((function(a,s){if(null===a[e]){var i=k(k({},a.errors),{},(0,p.Z)({},e,null));return(0,p.Z)({errors:i},e,n)}var o=t.state.validators[e][0],r=k(k({},a.errors),{},(0,p.Z)({},e,[o(null)]));return(0,p.Z)({errors:r},e,null)}))}));var n={email:[y.Do()],username:[y.lG()]};return h.Z.get("TERMS_OF_SERVICE_ID")&&(n.termsOfService=[y.fT()]),h.Z.get("PRIVACY_POLICY_ID")&&(n.privacyPolicy=[y.jA()]),t.state={email:e.email||"",emailProtected:!!e.email,username:e.username||"",termsOfService:null,privacyPolicy:null,validators:n,errors:{},isLoading:!1},t}return(0,r.Z)(s,[{key:"clean",value:function(){if(this.validate(),-1!==[this.state.email.trim().length,this.state.username.trim().length].indexOf(0))return b.Z.error(gettext("Fill out all fields.")),!1;var e=this.state.validators;return h.Z.get("TERMS_OF_SERVICE_ID")&&null===this.state.termsOfService?(b.Z.error(e.termsOfService[0](null)),!1):!h.Z.get("PRIVACY_POLICY_ID")||null!==this.state.privacyPolicy||(b.Z.error(e.privacyPolicy[0](null)),b.Z.error(gettext("You need to accept the privacy policy.")),!1)}},{key:"send",value:function(){return g.Z.post(this.props.url,{email:this.state.email,username:this.state.username,terms_of_service:this.state.termsOfService,privacy_policy:this.state.privacyPolicy})}},{key:"handleSuccess",value:function(e){(0,this.props.onRegistrationComplete)(e)}},{key:"handleError",value:function(e){if(200===e.status)(0,this.props.onRegistrationComplete)({activation:"active",step:"done",username:this.state.username});else if(400===e.status){var t={errors:e};e.email&&(t.emailProtected=!1),this.setState(t)}else b.Z.apiError(e)}},{key:"render",value:function(){var e=this.props.backend_name,t=this.state,n=t.email,a=t.emailProtected,s=t.username,o=t.isLoading,r=null;if(a){var l=gettext("Your e-mail address has been verified by %(backend)s.");r=interpolate(l,{backend:e},!0)}return(0,i.Z)("div",{className:"page page-social-auth page-social-sauth-register"},void 0,(0,i.Z)(_,{backendName:e}),(0,i.Z)("div",{className:"container"},void 0,(0,i.Z)("div",{className:"row"},void 0,(0,i.Z)("div",{className:"col-md-6 col-md-offset-3"},void 0,(0,i.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,i.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,i.Z)("div",{className:"panel-heading"},void 0,(0,i.Z)("h3",{className:"panel-title"},void 0,gettext("Complete your details"))),(0,i.Z)("div",{className:"panel-body"},void 0,(0,i.Z)(Z.Z,{for:"id_username",label:gettext("Username"),validation:this.state.errors.username},void 0,(0,i.Z)("input",{type:"text",id:"id_username",className:"form-control",disabled:o,onChange:this.bindInput("username"),value:s})),(0,i.Z)(Z.Z,{for:"id_email",label:gettext("E-mail address"),helpText:r,validation:a?null:this.state.errors.email},void 0,(0,i.Z)("input",{type:"email",id:"id_email",className:"form-control",disabled:o||a,onChange:this.bindInput("email"),value:n})),(0,i.Z)(f.Z,{errors:this.state.errors,privacyPolicy:this.state.privacyPolicy,termsOfService:this.state.termsOfService,onPrivacyPolicyChange:this.handlePrivacyPolicyChange,onTermsOfServiceChange:this.handleTermsOfServiceChange})),(0,i.Z)("div",{className:"panel-footer"},void 0,(0,i.Z)(v.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Sign in")))))))))}}]),s}(m.Z),w=function(e){var t,n,a=e.activation,s=e.backend_name,o=e.username;return n="user"===a?gettext("%(username)s, your account has been created but you need to activate it before you will be able to sign in."):"admin"===a?gettext("%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in."):gettext("%(username)s, your account has been created and you have been signed in to it."),t="active"===a?"check":"info_outline",(0,i.Z)("div",{className:"page page-social-auth page-social-sauth-register"},void 0,(0,i.Z)(_,{backendName:s}),(0,i.Z)("div",{className:"container"},void 0,(0,i.Z)("div",{className:"row"},void 0,(0,i.Z)("div",{className:"col-md-6 col-md-offset-3"},void 0,(0,i.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,i.Z)("div",{className:"panel-heading"},void 0,(0,i.Z)("h3",{className:"panel-title"},void 0,gettext("Registration completed!"))),(0,i.Z)("div",{className:"panel-body panel-message-body"},void 0,(0,i.Z)("div",{className:"message-icon"},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,t)),(0,i.Z)("div",{className:"message-body"},void 0,(0,i.Z)("p",{className:"lead"},void 0,interpolate(n,{username:o},!0)),(0,i.Z)("p",{className:"help-block"},void 0,(0,i.Z)("a",{className:"btn btn-default",href:h.Z.get("MISAGO_PATH")},void 0,gettext("Return to forum index"))))))))))};var R=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,p.Z)((0,l.Z)(t),"handleRegistrationComplete",(function(e){var n=e.activation,a=e.email,s=e.step,i=e.username;t.setState({activation:n,email:a,step:s,username:i})})),t.state={step:e.step,activation:e.activation||"",email:e.email||"",username:e.username||""},t}return(0,r.Z)(s,[{key:"render",value:function(){var e=this.props,t=e.backend_name,n=e.url,a=this.state,s=a.activation,o=a.email,r=a.step,l=a.username;return"register"===r?(0,i.Z)(x,{backend_name:t,email:o,url:n,username:l,onRegistrationComplete:this.handleRegistrationComplete}):(0,i.Z)(w,{activation:s,backend_name:t,email:o,url:n,username:l})}}]),s}(s().Component),C=n(4869);h.Z.addInitializer({name:"component:social-auth",initializer:function(e){if("misago:social-complete"===e.get("CURRENT_LINK")){var t=e.get("SOCIAL_AUTH_FORM");(0,C.Z)(s().createElement(R,t),"page-mount")}},after:"store"})},59203:function(e,t,n){"use strict";var a,s,i=n(37424),o=n(22928),r=n(15671),l=n(43144),c=n(97326),u=n(79340),d=n(6215),p=n(61120),h=n(4942),f=n(57588),v=n.n(f),m=n(87462),Z=n(43345),g=n(96359),b=n(8154),y=n(7738),_=n(78657),N=n(59801),k=n(53904),x=n(90287);var w,R=function(e){(0,u.Z)(i,e);var t,n,s=(t=i,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function i(e){var t;return(0,r.Z)(this,i),t=s.call(this,e),(0,h.Z)((0,c.Z)(t),"onUsernameChange",(function(e){t.changeValue("username",e.target.value)})),t.state={isLoading:!1,username:""},t}return(0,l.Z)(i,[{key:"clean",value:function(){return!!this.state.username.trim().length||(k.Z.error(gettext("You have to enter user name.")),!1)}},{key:"send",value:function(){return _.Z.patch(this.props.thread.api.index,[{op:"add",path:"participants",value:this.state.username},{op:"add",path:"acl",value:1}])}},{key:"handleSuccess",value:function(e){x.Z.dispatch((0,y.y8)(e)),x.Z.dispatch(b.gx(e.participants)),k.Z.success(gettext("New participant has been added to thread.")),N.Z.hide()}},{key:"render",value:function(){return(0,o.Z)("div",{className:"modal-dialog modal-sm",role:"document"},void 0,(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,a||(a=(0,o.Z)(C,{})),(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(g.Z,{for:"id_username",label:gettext("User to add")},void 0,(0,o.Z)("input",{id:"id_username",className:"form-control",disabled:this.state.isLoading,onChange:this.onUsernameChange,type:"text",value:this.state.username}))),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)("button",{className:"btn btn-block btn-primary",disabled:this.state.isLoading},void 0,gettext("Add participant")),(0,o.Z)("button",{className:"btn btn-block btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel"))))))}}]),i}(Z.Z);function C(e){return(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,s||(s=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Add participant")))}var S=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(){var e;(0,r.Z)(this,s);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return e=a.call.apply(a,[this].concat(n)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){N.Z.show((0,o.Z)(R,{thread:e.props.thread}))})),e}return(0,l.Z)(s,[{key:"render",value:function(){return this.props.thread.acl.can_add_participants?(0,o.Z)("div",{className:"col-xs-12 col-sm-3"},void 0,(0,o.Z)("button",{className:"btn btn-default btn-block",onClick:this.onClick,type:"button"},void 0,w||(w=(0,o.Z)("span",{className:"material-icon"},void 0,"person_add")),gettext("Add participant"))):null}}]),s}(v().Component),E=n(32233);var L=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(e){var t;return(0,r.Z)(this,s),t=a.call(this,e),(0,h.Z)((0,c.Z)(t),"onClick",(function(){var e,n,a=!1;if(t.isUser)a=window.confirm(gettext("Are you sure you want to take over this thread?"));else{var s=gettext("Are you sure you want to change thread owner to %(user)s?");a=window.confirm(interpolate(s,{user:t.props.participant.username},!0))}a&&(e=t.props.thread,n=t.props.participant,_.Z.patch(e.api.index,[{op:"replace",path:"owner",value:n.id},{op:"add",path:"acl",value:1}]).then((function(e){x.Z.dispatch((0,y.y8)(e)),x.Z.dispatch(b.gx(e.participants));var t=gettext("%(user)s has been made new thread owner.");k.Z.success(interpolate(t,{user:n.username},!0))}),(function(e){k.Z.apiError(e)})))})),t.isUser=e.participant.id===e.user.id,t}return(0,l.Z)(s,[{key:"render",value:function(){return this.props.participant.is_owner?null:this.props.thread.acl.can_change_owner?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,gettext("Make owner"))):null}}]),s}(v().Component);var P,O,T,A=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(e){var t;return(0,r.Z)(this,s),t=a.call(this,e),(0,h.Z)((0,c.Z)(t),"onClick",(function(){var e,n,a=!1;if(t.isUser)a=window.confirm(gettext("Are you sure you want to leave this thread?"));else{var s=gettext("Are you sure you want to remove %(user)s from this thread?");a=window.confirm(interpolate(s,{user:t.props.participant.username},!0))}a&&(t.isUser?(e=t.props.thread,n=t.props.participant,_.Z.patch(e.api.index,[{op:"remove",path:"participants",value:n.id}]).then((function(){k.Z.success(gettext("You have left this thread.")),window.setTimeout((function(){window.location=E.Z.get("PRIVATE_THREADS_URL")}),3e3)}),(function(e){k.Z.apiError(e)}))):function(e,t){_.Z.patch(e.api.index,[{op:"remove",path:"participants",value:t.id},{op:"add",path:"acl",value:1}]).then((function(e){x.Z.dispatch((0,y.y8)(e)),x.Z.dispatch(b.gx(e.participants));var n=gettext("%(user)s has been removed from this thread.");k.Z.success(interpolate(n,{user:t.username},!0))}),(function(e){k.Z.apiError(e)}))}(t.props.thread,t.props.participant))})),t.isUser=e.participant.id===e.user.id,t}return(0,l.Z)(s,[{key:"render",value:function(){var e=this.props.user.acl.can_moderate_private_threads;return this.props.userIsOwner||this.isUser||e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,this.isUser?gettext("Leave thread"):gettext("Remove"))):null}}]),s}(v().Component),B=n(19605);function I(e){var t=e.participant,n="btn btn-default";return t.is_owner&&(n="btn btn-primary"),n+=" btn-user btn-block",(0,o.Z)("div",{className:"col-xs-12 col-sm-3 col-md-2 participant-card"},void 0,(0,o.Z)("div",{className:"dropdown"},void 0,(0,o.Z)("button",{"aria-haspopup":"true","aria-expanded":"false",className:n,"data-toggle":"dropdown",type:"button"},void 0,(0,o.Z)(B.ZP,{size:"34",user:t}),(0,o.Z)("span",{className:"btn-text"},void 0,t.username)),(0,o.Z)("ul",{className:"dropdown-menu stick-to-bottom"},void 0,(0,o.Z)(j,{isOwner:t.is_owner}),P||(P=(0,o.Z)("li",{className:"dropdown-header"})),(0,o.Z)("li",{},void 0,(0,o.Z)("a",{href:t.url},void 0,gettext("See profile"))),O||(O=(0,o.Z)("li",{role:"separator",className:"divider"})),v().createElement(L,e),v().createElement(A,e))))}function j(e){return e.isOwner?(0,o.Z)("li",{className:"dropdown-header dropdown-header-owner"},void 0,T||(T=(0,o.Z)("span",{className:"material-icon"},void 0,"start")),(0,o.Z)("span",{className:"icon-text"},void 0,gettext("Thread owner"))):null}function D(e){var t=e.participants,n=e.thread,a=e.user,s=e.userIsOwner;return(0,o.Z)("div",{className:"participants-cards"},void 0,(0,o.Z)("div",{className:"row"},void 0,t.map((function(e){return(0,o.Z)(I,{participant:e,thread:n,user:a,userIsOwner:s},e.id)}))))}function U(e){return e.participants.length?(0,o.Z)("div",{className:"panel panel-default panel-participants"},void 0,(0,o.Z)("div",{className:"panel-body"},void 0,v().createElement(D,(0,m.Z)({userIsOwner:M(e.user,e.participants)},e)),(0,o.Z)("div",{className:"row"},void 0,(0,o.Z)(S,{thread:e.thread}),(0,o.Z)("div",{className:"col-xs-12 col-sm-9"},void 0,(0,o.Z)("p",{},void 0,function(e){var t=e.length,n=ngettext("This thread has %(users)s participant.","This thread has %(users)s participants.",t);return interpolate(n,{users:t},!0)}(e.participants)))))):null}function M(e,t){return t[0].id===e.id}var z=n(91876),H={changed_title:"edit",pinned_globally:"bookmark",pinned_locally:"bookmark_border",unpinned:"panorama_fish_eye",moved:"arrow_forward",merged:"call_merge",approved:"done",opened:"lock_open",closed:"lock_outline",unhid:"visibility",hid:"visibility_off",changed_owner:"grade",tookover:"grade",added_participant:"person_add",owner_left:"person_outline",participant_left:"person_outline",removed_participant:"remove_circle_outline"},F=function(e){return(0,o.Z)("span",{className:"event-icon-bg"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,H[e.post.event_type]))},q=n(89627),Y=n(30381),V=n.n(Y),$=n(92747);function G(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,p.Z)(e);if(t){var s=(0,p.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,d.Z)(this,n)}}function W(e){return e.post.acl.can_hide?(0,o.Z)("li",{className:"event-controls"},void 0,v().createElement(K,e),v().createElement(J,e),v().createElement(Q,e)):null}var K=function(e){(0,u.Z)(n,e);var t=G(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){x.Z.dispatch($.r$(e.props.post,{is_hidden:!0,hidden_on:V()(),hidden_by_name:e.props.user.username,url:Object.assign(e.props.post.url,{hidden_by:e.props.user.url})})),_.Z.patch(e.props.post.api.index,[{op:"replace",path:"is-hidden",value:!0}]).then((function(t){x.Z.dispatch($.r$(e.props.post,t))}),(function(t){400===t.status?k.Z.error(t.detail[0]):k.Z.apiError(t),x.Z.dispatch($.r$(e.props.post,{is_hidden:!1}))}))})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.is_hidden?null:(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,gettext("Hide"))}}]),n}(v().Component),J=function(e){(0,u.Z)(n,e);var t=G(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){x.Z.dispatch($.r$(e.props.post,{is_hidden:!1})),_.Z.patch(e.props.post.api.index,[{op:"replace",path:"is-hidden",value:!1}]).then((function(t){x.Z.dispatch($.r$(e.props.post,t))}),(function(t){400===t.status?k.Z.error(t.detail[0]):k.Z.apiError(t),x.Z.dispatch($.r$(e.props.post,{is_hidden:!0}))}))})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.is_hidden?(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,gettext("Unhide")):null}}]),n}(v().Component),Q=function(e){(0,u.Z)(n,e);var t=G(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){window.confirm(gettext("Are you sure you wish to delete this event? This action is not reversible!"))&&e.delete()})),(0,h.Z)((0,c.Z)(e),"delete",(function(){x.Z.dispatch($.r$(e.props.post,{isDeleted:!0})),_.Z.delete(e.props.post.api.index).then((function(){k.Z.success(gettext("Event has been deleted."))}),(function(t){400===t.status?k.Z.error(t.detail[0]):k.Z.apiError(t),x.Z.dispatch($.r$(e.props.post,{isDeleted:!1}))}))})),e}return(0,l.Z)(n,[{key:"render",value:function(){return(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,gettext("Delete"))}}]),n}(v().Component),X='<span class="item-title">%(user)s</span>',ee='<a href="%(url)s" class="item-title">%(user)s</a>';function te(e){return(0,o.Z)("ul",{className:"list-inline event-info"},void 0,v().createElement(ne,e),v().createElement(ae,e),v().createElement(W,e))}function ne(e){if(e.post.is_hidden){var t;t=e.post.url.hidden_by?interpolate(ee,{url:(0,q.Z)(e.post.url.hidden_by),user:(0,q.Z)(e.post.hidden_by_name)},!0):interpolate(X,{user:(0,q.Z)(e.post.hidden_by_name)},!0);var n=interpolate('<abbr title="%(absolute)s">%(relative)s</abbr>',{absolute:(0,q.Z)(e.post.hidden_on.format("LLL")),relative:(0,q.Z)(e.post.hidden_on.fromNow())},!0),a=interpolate((0,q.Z)(gettext("Hidden by %(event_by)s %(event_on)s.")),{event_by:t,event_on:n},!0);return(0,o.Z)("li",{className:"event-hidden-message",dangerouslySetInnerHTML:{__html:a}})}return null}function ae(e){var t;t=e.post.poster?interpolate(ee,{url:(0,q.Z)(e.post.poster.url),user:(0,q.Z)(e.post.poster_name)},!0):interpolate(X,{user:(0,q.Z)(e.post.poster_name)},!0);var n=interpolate('<a href="%(url)s" title="%(absolute)s">%(relative)s</a>',{url:(0,q.Z)(e.post.url.index),absolute:(0,q.Z)(e.post.posted_on.format("LLL")),relative:(0,q.Z)(e.post.posted_on.fromNow())},!0),a=interpolate((0,q.Z)(gettext("By %(event_by)s %(event_on)s.")),{event_by:t,event_on:n},!0);return(0,o.Z)("li",{className:"event-posters",dangerouslySetInnerHTML:{__html:a}})}var se={pinned_globally:gettext("Thread has been pinned globally."),pinned_locally:gettext("Thread has been pinned locally."),unpinned:gettext("Thread has been unpinned."),approved:gettext("Thread has been approved."),opened:gettext("Thread has been opened."),closed:gettext("Thread has been closed."),unhid:gettext("Thread has been revealed."),hid:gettext("Thread has been made hidden."),tookover:gettext("Took thread over."),owner_left:gettext("Owner has left thread. This thread is now closed."),participant_left:gettext("Participant has left thread.")},ie='<a href="%(url)s" class="item-title">%(name)s</a>',oe='<span class="item-title">%(name)s</span>';function re(e){return se[e.post.event_type]?(0,o.Z)("p",{className:"event-message"},void 0,se[e.post.event_type]):"changed_title"===e.post.event_type?v().createElement(le,e):"moved"===e.post.event_type?v().createElement(ce,e):"merged"===e.post.event_type?v().createElement(ue,e):"changed_owner"===e.post.event_type?v().createElement(de,e):"added_participant"===e.post.event_type?v().createElement(pe,e):"removed_participant"===e.post.event_type?v().createElement(he,e):null}function le(e){var t=(0,q.Z)(gettext("Thread title has been changed from %(old_title)s.")),n=interpolate(oe,{name:(0,q.Z)(e.post.event_context.old_title)},!0),a=interpolate(t,{old_title:n},!0);return(0,o.Z)("p",{className:"event-message",dangerouslySetInnerHTML:{__html:a}})}function ce(e){var t=(0,q.Z)(gettext("Thread has been moved from %(from_category)s.")),n=interpolate(ie,{url:(0,q.Z)(e.post.event_context.from_category.url),name:(0,q.Z)(e.post.event_context.from_category.name)},!0),a=interpolate(t,{from_category:n},!0);return(0,o.Z)("p",{className:"event-message",dangerouslySetInnerHTML:{__html:a}})}function ue(e){var t=(0,q.Z)(gettext("The %(merged_thread)s thread has been merged into this thread.")),n=interpolate(oe,{name:(0,q.Z)(e.post.event_context.merged_thread)},!0),a=interpolate(t,{merged_thread:n},!0);return(0,o.Z)("p",{className:"event-message",dangerouslySetInnerHTML:{__html:a}})}function de(e){var t=(0,q.Z)(gettext("Changed thread owner to %(user)s.")),n=interpolate(ie,{url:(0,q.Z)(e.post.event_context.user.url),name:(0,q.Z)(e.post.event_context.user.username)},!0),a=interpolate(t,{user:n},!0);return(0,o.Z)("p",{className:"event-message",dangerouslySetInnerHTML:{__html:a}})}function pe(e){var t=(0,q.Z)(gettext("Added %(user)s to thread.")),n=interpolate(ie,{url:(0,q.Z)(e.post.event_context.user.url),name:(0,q.Z)(e.post.event_context.user.username)},!0),a=interpolate(t,{user:n},!0);return(0,o.Z)("p",{className:"event-message",dangerouslySetInnerHTML:{__html:a}})}function he(e){var t=(0,q.Z)(gettext("Removed %(user)s from thread.")),n=interpolate(ie,{url:(0,q.Z)(e.post.event_context.user.url),name:(0,q.Z)(e.post.event_context.user.username)},!0),a=interpolate(t,{user:n},!0);return(0,o.Z)("p",{className:"event-message",dangerouslySetInnerHTML:{__html:a}})}function fe(e){return e.post.is_read?null:(0,o.Z)("div",{className:"event-label"},void 0,(0,o.Z)("span",{className:"label label-unread"},void 0,gettext("New event")))}var ve=n(19755);var me=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(){return(0,r.Z)(this,s),a.apply(this,arguments)}return(0,l.Z)(s,[{key:"componentDidMount",value:function(){var e=this;this.props.post.is_read||ve(this.element).waypoint({handler:function(t){"down"!==t||e.props.post.is_read||window.setTimeout((function(){var t=e.element.getBoundingClientRect(),n=t.height+t.top,a=document.documentElement.clientHeight;n<5||n>a||(x.Z.dispatch($.r$(e.props.post,{is_read:!0})),_.Z.post(e.props.post.api.read).then((function(t){x.Z.dispatch(y.Vx(e.props.thread,{is_read:t.thread_is_read}))}),(function(e){k.Z.apiError(e)})))}),1e3)},offset:"bottom-in-view"})}},{key:"render",value:function(){var e=this;return v().createElement("div",{className:this.props.className,ref:function(t){t&&(e.element=t)}},this.props.children)}}]),s}(v().Component);function Ze(e){var t="event";return e.post.isDeleted?t="hide":e.post.is_hidden&&(t="event post-hidden"),(0,o.Z)("li",{id:"post-"+e.post.id,className:t},void 0,(0,o.Z)(fe,{post:e.post}),(0,o.Z)("div",{className:"event-body"},void 0,(0,o.Z)("div",{className:"event-icon"},void 0,v().createElement(F,e)),(0,o.Z)(me,{className:"event-content",post:e.post},void 0,v().createElement(re,e),v().createElement(te,e))))}var ge=n(69130),be=n(48772);function ye(e){return(0,o.Z)("div",{className:"col-xs-12 col-md-6"},void 0,v().createElement(_e,e),(0,o.Z)("div",{className:"post-attachment"},void 0,(0,o.Z)("a",{href:e.attachment.url.index,className:"attachment-name item-title"},void 0,e.attachment.filename),v().createElement(xe,e)))}function _e(e){return e.attachment.is_image?(0,o.Z)("div",{className:"post-attachment-preview"},void 0,v().createElement(ke,e)):(0,o.Z)("div",{className:"post-attachment-preview"},void 0,v().createElement(Ne,e))}function Ne(e){return(0,o.Z)("a",{href:e.attachment.url.index,className:"material-icon"},void 0,"insert_drive_file")}function ke(e){var t=e.attachment.url.thumb||e.attachment.url.index;return(0,o.Z)("a",{className:"post-thumbnail",href:e.attachment.url.index,style:{backgroundImage:'url("'+(0,q.Z)(t)+'")'}})}function xe(e){var t;t=e.attachment.url.uploader?interpolate('<a href="%(url)s" class="item-title">%(user)s</a>',{url:(0,q.Z)(e.attachment.url.uploader),user:(0,q.Z)(e.attachment.uploader_name)},!0):interpolate('<span class="item-title">%(user)s</span>',{user:(0,q.Z)(e.attachment.uploader_name)},!0);var n=interpolate('<abbr title="%(absolute)s">%(relative)s</abbr>',{absolute:(0,q.Z)(e.attachment.uploaded_on.format("LLL")),relative:(0,q.Z)(e.attachment.uploaded_on.fromNow())},!0),a=interpolate((0,q.Z)(gettext("%(filetype)s, %(size)s, uploaded by %(uploader)s %(uploaded_on)s.")),{filetype:e.attachment.filetype,size:(0,be.Z)(e.attachment.size),uploader:t,uploaded_on:n},!0);return(0,o.Z)("p",{className:"post-attachment-description",dangerouslySetInnerHTML:{__html:a}})}function we(e){return function(e){return(!e.is_hidden||e.acl.can_see_hidden)&&e.attachments}(e.post)?(0,o.Z)("div",{className:"post-attachments"},void 0,(0,ge.Z)(e.post.attachments,2).map((function(e){var t=e.map((function(e){return e?e.id:0})).join("_");return(0,o.Z)(Re,{row:e},t)}))):null}function Re(e){return(0,o.Z)("div",{className:"row"},void 0,e.row.map((function(e){return(0,o.Z)(ye,{attachment:e},e?e.id:0)})))}var Ce,Se,Ee,Le,Pe=n(69092);function Oe(e){return e.post.is_hidden&&!e.post.acl.can_see_hidden?v().createElement(Ae,e):e.post.content?v().createElement(Te,e):v().createElement(Be,e)}function Te(e){return(0,o.Z)(me,{className:"post-body",post:e.post},void 0,(0,o.Z)(Pe.Z,{markup:e.post.content}))}function Ae(e){var t;t=e.post.hidden_by?interpolate('<a href="%(url)s" class="item-title">%(user)s</a>',{url:(0,q.Z)(e.post.url.hidden_by),user:(0,q.Z)(e.post.hidden_by_name)},!0):interpolate('<span class="item-title">%(user)s</span>',{user:(0,q.Z)(e.post.hidden_by_name)},!0);var n=interpolate('<abbr class="last-title" title="%(absolute)s">%(relative)s</abbr>',{absolute:(0,q.Z)(e.post.hidden_on.format("LLL")),relative:(0,q.Z)(e.post.hidden_on.fromNow())},!0),a=interpolate((0,q.Z)(gettext("Hidden by %(hidden_by)s %(hidden_on)s.")),{hidden_by:t,hidden_on:n},!0);return(0,o.Z)(me,{className:"post-body post-body-hidden",post:e.post},void 0,(0,o.Z)("p",{className:"lead"},void 0,gettext("This post is hidden. You cannot see its contents.")),(0,o.Z)("p",{className:"text-muted",dangerouslySetInnerHTML:{__html:a}}))}function Be(e){return(0,o.Z)(me,{className:"post-body post-body-invalid",post:e.post},void 0,(0,o.Z)("p",{className:"lead"},void 0,gettext("This post's contents cannot be displayed.")),(0,o.Z)("p",{className:"text-muted"},void 0,gettext("This error is caused by invalid post content manipulation.")))}function Ie(e){var t=e.post,n=e.thread,a=e.user;if(!Me(t)||t.id!==n.best_answer)return null;var s;return s=a.id&&n.best_answer_marked_by===a.id?interpolate(gettext("Marked as best answer by you %(marked_on)s."),{marked_on:n.best_answer_marked_on.fromNow()},!0):interpolate(gettext("Marked as best answer by %(marked_by)s %(marked_on)s."),{marked_by:n.best_answer_marked_by_name,marked_on:n.best_answer_marked_on.fromNow()},!0),(0,o.Z)("div",{className:"post-status-message post-status-best-answer"},void 0,Ce||(Ce=(0,o.Z)("span",{className:"material-icon"},void 0,"check_box")),(0,o.Z)("p",{},void 0,s))}function je(e){return Me(e.post)&&e.post.is_hidden?(0,o.Z)("div",{className:"post-status-message post-status-hidden"},void 0,Se||(Se=(0,o.Z)("span",{className:"material-icon"},void 0,"visibility_off")),(0,o.Z)("p",{},void 0,gettext("This post is hidden. Only users with permission may see its contents."))):null}function De(e){return Me(e.post)&&e.post.is_unapproved?(0,o.Z)("div",{className:"post-status-message post-status-unapproved"},void 0,Ee||(Ee=(0,o.Z)("span",{className:"material-icon"},void 0,"remove_circle_outline")),(0,o.Z)("p",{},void 0,gettext("This post is unapproved. Only users with permission to approve posts and its author may see its contents."))):null}function Ue(e){return Me(e.post)&&e.post.is_protected?(0,o.Z)("div",{className:"post-status-message post-status-protected visible-xs-block"},void 0,Le||(Le=(0,o.Z)("span",{className:"material-icon"},void 0,"lock_outline")),(0,o.Z)("p",{},void 0,gettext("This post is protected. Only moderators may change it."))):null}function Me(e){return!e.is_hidden||e.acl.can_see_hidden}function ze(e){x.Z.dispatch($.r$(e.post,{is_unapproved:!1})),Ge(e,[{op:"replace",path:"is-unapproved",value:!1}],{is_unapproved:e.post.is_unapproved})}function He(e){x.Z.dispatch($.r$(e.post,{is_protected:!0})),Ge(e,[{op:"replace",path:"is-protected",value:!0}],{is_protected:e.post.is_protected})}function Fe(e){x.Z.dispatch($.r$(e.post,{is_protected:!1})),Ge(e,[{op:"replace",path:"is-protected",value:!1}],{is_protected:e.post.is_protected})}function qe(e){x.Z.dispatch($.r$(e.post,{is_hidden:!0,hidden_on:V()(),hidden_by_name:e.user.username,url:Object.assign(e.post.url,{hidden_by:e.user.url})})),Ge(e,[{op:"replace",path:"is-hidden",value:!0}],{is_hidden:e.post.is_hidden,hidden_on:e.post.hidden_on,hidden_by_name:e.post.hidden_by_name,url:e.post.url})}function Ye(e){x.Z.dispatch($.r$(e.post,{is_hidden:!1})),Ge(e,[{op:"replace",path:"is-hidden",value:!1}],{is_hidden:e.post.is_hidden})}function Ve(e){var t=e.post.last_likes||[],n=[e.user].concat(t),a=n.length>3?n.slice(0,-1):n;x.Z.dispatch($.r$(e.post,{is_liked:!0,likes:e.post.likes+1,last_likes:a})),Ge(e,[{op:"replace",path:"is-liked",value:!0}],{is_liked:e.post.is_liked,likes:e.post.likes,last_likes:e.post.last_likes})}function $e(e){x.Z.dispatch($.r$(e.post,{is_liked:!1,likes:e.post.likes-1,last_likes:e.post.last_likes.filter((function(t){return!t.id||t.id!==e.user.id}))}));var t={is_liked:e.post.is_liked,likes:e.post.likes,last_likes:e.post.last_likes};Ge(e,[{op:"replace",path:"is-liked",value:!1}],t)}function Ge(e,t,n){_.Z.patch(e.post.api.index,t).then((function(t){x.Z.dispatch($.r$(e.post,t))}),(function(t){400===t.status?k.Z.error(t.detail[0]):k.Z.apiError(t),x.Z.dispatch($.r$(e.post,n))}))}function We(e){window.confirm(gettext("Are you sure you want to delete this post? This action is not reversible!"))&&(x.Z.dispatch($.r$(e.post,{isDeleted:!0})),_.Z.delete(e.post.api.index).then((function(){k.Z.success(gettext("Post has been deleted."))}),(function(t){400===t.status?k.Z.error(t.detail):k.Z.apiError(t),x.Z.dispatch($.r$(e.post,{isDeleted:!1}))})))}function Ke(e){var t=e.post,n=e.user;x.Z.dispatch(y.Vx({best_answer:t.id,best_answer_is_protected:t.is_protected,best_answer_marked_on:V()(),best_answer_marked_by:n.id,best_answer_marked_by_name:n.username,best_answer_marked_by_slug:n.slug})),Qe(e,[{op:"replace",path:"best-answer",value:t.id},{op:"add",path:"acl",value:!0}],{best_answer:e.thread.best_answer,best_answer_is_protected:e.thread.best_answer_is_protected,best_answer_marked_on:e.thread.best_answer_marked_on,best_answer_marked_by:e.thread.best_answer_marked_by,best_answer_marked_by_name:e.thread.best_answer_marked_by_name,best_answer_marked_by_slug:e.thread.best_answer_marked_by_slug})}function Je(e){var t=e.post;x.Z.dispatch(y.Vx({best_answer:null,best_answer_is_protected:!1,best_answer_marked_on:null,best_answer_marked_by:null,best_answer_marked_by_name:null,best_answer_marked_by_slug:null})),Qe(e,[{op:"remove",path:"best-answer",value:t.id},{op:"add",path:"acl",value:!0}],{best_answer:e.thread.best_answer,best_answer_is_protected:e.thread.best_answer_is_protected,best_answer_marked_on:e.thread.best_answer_marked_on,best_answer_marked_by:e.thread.best_answer_marked_by,best_answer_marked_by_name:e.thread.best_answer_marked_by_name,best_answer_marked_by_slug:e.thread.best_answer_marked_by_slug})}function Qe(e,t,n){_.Z.patch(e.thread.api.index,t).then((function(e){e.best_answer_marked_on&&(e.best_answer_marked_on=V()(e.best_answer_marked_on)),x.Z.dispatch(y.Vx(e))}),(function(e){400===e.status?k.Z.error(e.detail[0]):k.Z.apiError(e),x.Z.dispatch(y.Vx(n))}))}var Xe,et,tt,nt=n(30337),at=n(3784);var st=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(e){var t;return(0,r.Z)(this,s),(t=a.call(this,e)).state={isReady:!1,error:null,likes:[]},t}return(0,l.Z)(s,[{key:"componentDidMount",value:function(){var e=this;_.Z.get(this.props.post.api.likes).then((function(t){e.setState({isReady:!0,likes:t.map(it)})}),(function(t){e.setState({isReady:!0,error:t.detail})}))}},{key:"render",value:function(){return this.state.error?(0,o.Z)(ot,{className:"modal-message"},void 0,(0,o.Z)(nt.Z,{message:this.state.error})):this.state.isReady?this.state.likes.length?(0,o.Z)(ot,{className:"modal-sm",likes:this.state.likes},void 0,(0,o.Z)(rt,{likes:this.state.likes})):(0,o.Z)(ot,{className:"modal-message"},void 0,(0,o.Z)(nt.Z,{message:gettext("No users have liked this post.")})):Xe||(Xe=(0,o.Z)(ot,{className:"modal-sm"},void 0,(0,o.Z)(at.Z,{})))}}]),s}(v().Component);function it(e){return Object.assign({},e,{liked_on:V()(e.liked_on)})}function ot(e){var t=e.className,n=e.children,a=e.likes,s=gettext("Post Likes");if(a){var i=a.length,r=ngettext("%(likes)s like","%(likes)s likes",i);s=interpolate(r,{likes:i},!0)}return(0,o.Z)("div",{className:"modal-dialog "+(t||""),role:"document"},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,et||(et=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,s)),n))}function rt(e){return(0,o.Z)("div",{className:"modal-body modal-post-likers"},void 0,(0,o.Z)("ul",{className:"media-list"},void 0,e.likes.map((function(e){return v().createElement(lt,(0,m.Z)({key:e.id},e))}))))}function lt(e){if(e.url){var t={id:e.liker_id,avatars:e.avatars};return(0,o.Z)("li",{className:"media"},void 0,(0,o.Z)("div",{className:"media-left"},void 0,(0,o.Z)("a",{className:"user-avatar",href:e.url},void 0,(0,o.Z)(B.ZP,{size:"50",user:t}))),(0,o.Z)("div",{className:"media-body"},void 0,(0,o.Z)("a",{className:"item-title",href:e.url},void 0,e.username)," ",(0,o.Z)(ct,{likedOn:e.liked_on})))}return(0,o.Z)("li",{className:"media"},void 0,tt||(tt=(0,o.Z)("div",{className:"media-left"},void 0,(0,o.Z)("span",{className:"user-avatar"},void 0,(0,o.Z)(B.ZP,{size:"50"})))),(0,o.Z)("div",{className:"media-body"},void 0,(0,o.Z)("strong",{},void 0,e.username)," ",(0,o.Z)(ct,{likedOn:e.liked_on})))}function ct(e){return(0,o.Z)("span",{className:"text-muted",title:e.likedOn.format("LLL")},void 0,e.likedOn.fromNow())}var ut,dt,pt,ht,ft=n(27950);function vt(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,p.Z)(e);if(t){var s=(0,p.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,d.Z)(this,n)}}function mt(e){return function(e){return(!e.is_hidden||e.acl.can_see_hidden)&&(e.acl.can_reply||e.acl.can_edit||e.acl.can_see_likes&&(e.last_likes||[]).length||e.acl.can_like)}(e.post)?(0,o.Z)("div",{className:"post-footer"},void 0,v().createElement(Zt,e),v().createElement(gt,e),v().createElement(bt,e),v().createElement(yt,(0,m.Z)({lastLikes:e.post.last_likes,likes:e.post.likes},e)),v().createElement(_t,(0,m.Z)({likes:e.post.likes},e)),v().createElement(wt,e),v().createElement(Rt,e)):null}var Zt=function(e){(0,u.Z)(n,e);var t=vt(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Ke(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.post,n=e.thread;return n.acl.can_mark_best_answer&&t.acl.can_mark_as_best_answer?n.best_answer&&!n.acl.can_change_best_answer?null:(0,o.Z)("button",{className:"hidden-xs btn btn-default btn-sm pull-left",disabled:this.props.post.isBusy||t.id===n.best_answer,onClick:this.onClick,type:"button"},void 0,ut||(ut=(0,o.Z)("span",{className:"material-icon"},void 0,"check_box")),gettext("Best answer")):null}}]),n}(v().Component),gt=function(e){(0,u.Z)(n,e);var t=vt(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Ke(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.post,n=e.thread;return n.acl.can_mark_best_answer&&t.acl.can_mark_as_best_answer?n.best_answer&&!n.acl.can_change_best_answer?null:(0,o.Z)("button",{className:"visible-xs-inline-block btn btn-default btn-sm pull-left",disabled:this.props.post.isBusy||t.id===n.best_answer,onClick:this.onClick,type:"button"},void 0,dt||(dt=(0,o.Z)("span",{className:"material-icon"},void 0,"check_box"))):null}}]),n}(v().Component),bt=function(e){(0,u.Z)(n,e);var t=vt(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){e.props.post.is_liked?$e(e.props):Ve(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){if(!this.props.post.acl.can_like)return null;var e="btn btn-default btn-sm pull-left";return this.props.post.is_liked&&(e="btn btn-success btn-sm pull-left"),(0,o.Z)("button",{className:e,disabled:this.props.post.isBusy,onClick:this.onClick,type:"button"},void 0,this.props.post.is_liked?gettext("Liked"):gettext("Like"))}}]),n}(v().Component),yt=function(e){(0,u.Z)(n,e);var t=vt(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){N.Z.show((0,o.Z)(st,{post:e.props.post}))})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=(this.props.post.last_likes||[]).length>0;return this.props.post.acl.can_see_likes&&e?2===this.props.post.acl.can_see_likes?(0,o.Z)("button",{className:"btn btn-link btn-sm pull-left hidden-xs",onClick:this.onClick,type:"button"},void 0,Nt(this.props.likes,this.props.lastLikes)):(0,o.Z)("p",{className:"pull-left hidden-xs"},void 0,Nt(this.props.likes,this.props.lastLikes)):null}}]),n}(v().Component),_t=function(e){(0,u.Z)(n,e);var t=vt(n);function n(){return(0,r.Z)(this,n),t.apply(this,arguments)}return(0,l.Z)(n,[{key:"render",value:function(){var e=(this.props.post.last_likes||[]).length>0;return this.props.post.acl.can_see_likes&&e?2===this.props.post.acl.can_see_likes?(0,o.Z)("button",{className:"btn btn-link btn-sm likes-compact pull-left visible-xs-block",onClick:this.onClick,type:"button"},void 0,pt||(pt=(0,o.Z)("span",{className:"material-icon"},void 0,"favorite")),this.props.likes):(0,o.Z)("p",{className:"likes-compact pull-left visible-xs-block"},void 0,ht||(ht=(0,o.Z)("span",{className:"material-icon"},void 0,"favorite")),this.props.likes):null}}]),n}(yt);function Nt(e,t){var n=t.slice(0,3).map((function(e){return e.username}));if(1==n.length)return interpolate(gettext("%(user)s likes this."),{user:n[0]},!0);var a=e-n.length,s=n.slice(0,-1).join(", "),i=n.slice(-1)[0],o=interpolate(gettext("%(users)s and %(last_user)s"),{users:s,last_user:i},!0);if(0===a)return interpolate(gettext("%(users)s like this."),{users:o},!0);var r=ngettext("%(users)s and %(likes)s other user like this.","%(users)s and %(likes)s other users like this.",a);return interpolate(r,{users:n.join(", "),likes:a},!0)}var kt,xt,wt=function(e){(0,u.Z)(n,e);var t=vt(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){ft.Z.open({mode:"REPLY",config:e.props.thread.api.editor,submit:e.props.thread.api.posts.index,context:{reply:e.props.post.id}})})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.acl.can_reply?(0,o.Z)("button",{className:"btn btn-primary btn-sm pull-right",type:"button",onClick:this.onClick},void 0,gettext("Reply")):null}}]),n}(v().Component),Rt=function(e){(0,u.Z)(n,e);var t=vt(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){ft.Z.open({mode:"EDIT",config:e.props.post.api.editor,submit:e.props.post.api.index})})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.acl.can_edit?(0,o.Z)("button",{className:"hidden-xs btn btn-default btn-sm pull-right",type:"button",onClick:this.onClick},void 0,gettext("Edit")):null}}]),n}(v().Component),Ct=n(82211);var St=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(e){var t;return(0,r.Z)(this,s),t=a.call(this,e),(0,h.Z)((0,c.Z)(t),"onUrlChange",(function(e){t.changeValue("url",e.target.value)})),t.state={isLoading:!1,url:"",validators:{url:[]},errors:{}},t}return(0,l.Z)(s,[{key:"clean",value:function(){return!!this.state.url.trim().length||(k.Z.error(gettext("You have to enter link to the other thread.")),!1)}},{key:"send",value:function(){return _.Z.post(this.props.thread.api.posts.move,{new_thread:this.state.url,posts:[this.props.post.id]})}},{key:"handleSuccess",value:function(e){x.Z.dispatch($.r$(this.props.post,{isDeleted:!0})),N.Z.hide(),k.Z.success(gettext("Selected post was moved to the other thread."))}},{key:"handleError",value:function(e){400===e.status?k.Z.error(e.detail):k.Z.apiError(e)}},{key:"render",value:function(){return(0,o.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,kt||(kt=(0,o.Z)(Et,{})),(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(g.Z,{for:"id_url",label:gettext("Link to thread you want to move post to")},void 0,(0,o.Z)("input",{className:"form-control",disabled:this.state.isLoading,id:"id_url",onChange:this.onUrlChange,value:this.state.url}))),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)("button",{className:"btn btn-primary",disabled:this.state.isLoading},void 0,gettext("Move post"))))))}}]),s}(Z.Z);function Et(e){return(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,xt||(xt=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Move post")))}function Lt(e){return(0,o.Z)("div",{className:"modal-body post-changelog-diff"},void 0,(0,o.Z)("ul",{className:"list-unstyled"},void 0,e.diff.map((function(e,t){return(0,o.Z)(Pt,{item:e},t)}))))}function Pt(e){return"?"===e.item[0]?null:(0,o.Z)("li",{className:(t=e.item,n="diff-item","-"===t[0]?n+=" diff-item-sub":"+"===t[0]&&(n+=" diff-item-add"),n)},void 0,e.item.substr(2));var t,n}var Ot,Tt,At,Bt=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(){var e;(0,r.Z)(this,s);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return e=a.call.apply(a,[this].concat(n)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){e.props.revertEdit(e.props.edit.id)})),e}return(0,l.Z)(s,[{key:"render",value:function(){return this.props.canRevert?(0,o.Z)("div",{className:"modal-footer visible-xs-block"},void 0,(0,o.Z)(Ct.Z,{className:"btn-default btn-sm btn-block",disabled:this.props.disabled,onClick:this.onClick,title:gettext("Revert post to state from before this edit.")},void 0,gettext("Revert"))):null}}]),s}(v().Component);var It,jt,Dt=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(){var e;(0,r.Z)(this,s);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return e=a.call.apply(a,[this].concat(n)),(0,h.Z)((0,c.Z)(e),"goLast",(function(){e.props.goToEdit()})),(0,h.Z)((0,c.Z)(e),"goForward",(function(){e.props.goToEdit(e.props.edit.next)})),(0,h.Z)((0,c.Z)(e),"goBack",(function(){e.props.goToEdit(e.props.edit.previous)})),(0,h.Z)((0,c.Z)(e),"revertEdit",(function(){e.props.revertEdit(e.props.edit.id)})),e}return(0,l.Z)(s,[{key:"render",value:function(){return(0,o.Z)("div",{className:"modal-toolbar post-changelog-toolbar"},void 0,(0,o.Z)("div",{className:"row"},void 0,(0,o.Z)("div",{className:"col-xs-12 col-sm-4"},void 0,(0,o.Z)("div",{className:"row"},void 0,(0,o.Z)("div",{className:"col-xs-4"},void 0,(0,o.Z)(Ut,{disabled:this.props.disabled,edit:this.props.edit,onClick:this.goBack})),(0,o.Z)("div",{className:"col-xs-4"},void 0,(0,o.Z)(Mt,{disabled:this.props.disabled,edit:this.props.edit,onClick:this.goForward})),(0,o.Z)("div",{className:"col-xs-4"},void 0,(0,o.Z)(zt,{disabled:this.props.disabled,edit:this.props.edit,onClick:this.goLast})))),(0,o.Z)("div",{className:"col-xs-12 col-sm-5 xs-margin-top-half post-change-label"},void 0,(0,o.Z)(Ft,{edit:this.props.edit})),(0,o.Z)(Ht,{canRevert:this.props.canRevert,disabled:this.props.disabled,onClick:this.revertEdit})))}}]),s}(v().Component);function Ut(e){return(0,o.Z)(Ct.Z,{className:"btn-default btn-block btn-icon btn-sm",disabled:e.disabled||!e.edit.previous,onClick:e.onClick,title:gettext("See previous change")},void 0,Ot||(Ot=(0,o.Z)("span",{className:"material-icon"},void 0,"chevron_left")))}function Mt(e){return(0,o.Z)(Ct.Z,{className:"btn-default btn-block btn-icon btn-sm",disabled:e.disabled||!e.edit.next,onClick:e.onClick,title:gettext("See next change")},void 0,Tt||(Tt=(0,o.Z)("span",{className:"material-icon"},void 0,"chevron_right")))}function zt(e){return(0,o.Z)(Ct.Z,{className:"btn-default btn-block btn-icon btn-sm",disabled:e.disabled||!e.edit.next,onClick:e.onClick,title:gettext("See previous change")},void 0,At||(At=(0,o.Z)("span",{className:"material-icon"},void 0,"last_page")))}function Ht(e){return e.canRevert?(0,o.Z)("div",{className:"col-sm-3 hidden-xs"},void 0,(0,o.Z)(Ct.Z,{className:"btn-default btn-sm btn-block",disabled:e.disabled,onClick:e.onClick,title:gettext("Revert post to state from before this edit.")},void 0,gettext("Revert"))):null}function Ft(e){var t;t=e.edit.url.editor?interpolate('<a href="%(url)s" class="item-title">%(user)s</a>',{url:(0,q.Z)(e.edit.url.editor),user:(0,q.Z)(e.edit.editor_name)},!0):interpolate('<span class="item-title">%(user)s</span>',{user:(0,q.Z)(e.edit.editor_name)},!0);var n=interpolate('<abbr title="%(absolute)s">%(relative)s</abbr>',{absolute:(0,q.Z)(e.edit.edited_on.format("LLL")),relative:(0,q.Z)(e.edit.edited_on.fromNow())},!0),a=interpolate((0,q.Z)(gettext("By %(edited_by)s %(edited_on)s.")),{edited_by:t,edited_on:n},!0);return(0,o.Z)("p",{dangerouslySetInnerHTML:{__html:a}})}function qt(e){return Object.assign({},e,{edited_on:V()(e.edited_on)})}var Yt=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(e){var t;return(0,r.Z)(this,s),t=a.call(this,e),(0,h.Z)((0,c.Z)(t),"goToEdit",(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;t.setState({isBusy:!0});var n=t.props.post.api.edits;null!==e&&(n+="?edit="+e),_.Z.get(n).then((function(e){t.setState({isReady:!0,isBusy:!1,edit:qt(e)})}),(function(e){t.setState({isReady:!0,isBusy:!1,error:e.detail})}))})),(0,h.Z)((0,c.Z)(t),"revertEdit",(function(e){if(!t.state.isBusy&&window.confirm(gettext("Are you sure you with to revert this post to the state from before this edit?"))){t.setState({isBusy:!0});var n=t.props.post.api.edits+"?edit="+e;_.Z.post(n).then((function(e){var t=$.ZB(e);x.Z.dispatch($.r$(e,t)),k.Z.success(gettext("Post has been reverted to previous state.")),N.Z.hide()}),(function(e){k.Z.apiError(e),t.setState({isBusy:!1})}))}})),t.state={isReady:!1,isBusy:!0,canRevert:e.post.acl.can_edit,error:null,edit:null},t}return(0,l.Z)(s,[{key:"componentDidMount",value:function(){this.goToEdit()}},{key:"render",value:function(){return this.state.error?(0,o.Z)(Vt,{className:"modal-dialog modal-message"},void 0,(0,o.Z)(nt.Z,{message:this.state.error})):this.state.isReady?(0,o.Z)(Vt,{},void 0,(0,o.Z)(Dt,{canRevert:this.state.canRevert,disabled:this.state.isBusy,edit:this.state.edit,goToEdit:this.goToEdit,revertEdit:this.revertEdit}),(0,o.Z)(Lt,{diff:this.state.edit.diff}),(0,o.Z)(Bt,{canRevert:this.state.canRevert,disabled:this.state.isBusy,edit:this.state.edit,revertEdit:this.revertEdit})):It||(It=(0,o.Z)(Vt,{},void 0,(0,o.Z)(at.Z,{})))}}]),s}(v().Component);function Vt(e){return(0,o.Z)("div",{className:e.className||"modal-dialog",role:"document"},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,jt||(jt=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Post edits history"))),e.children))}var $t,Gt,Wt,Kt,Jt,Qt,Xt=n(57026),en=n(60471),tn=n(55210);function nn(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,p.Z)(e);if(t){var s=(0,p.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,d.Z)(this,n)}}function an(e){return v().createElement(gn,(0,m.Z)({},e,{Form:bn}))}var sn,on,rn,ln,cn,un,dn,pn,hn,fn,vn,mn,Zn,gn=function(e){(0,u.Z)(n,e);var t=nn(n);function n(e){var a;return(0,r.Z)(this,n),(a=t.call(this,e)).state={isLoaded:!1,isError:!1,categories:[]},a}return(0,l.Z)(n,[{key:"componentDidMount",value:function(){var e=this;_.Z.get(misago.get("THREAD_EDITOR_API")).then((function(t){var n=t.map((function(e){return Object.assign(e,{disabled:!1===e.post,label:e.name,value:e.id,post:e.post})}));e.setState({isLoaded:!0,categories:n})}),(function(t){e.setState({isError:t.detail})}))}},{key:"render",value:function(){return this.state.isError?(0,o.Z)(_n,{message:this.state.isError}):this.state.isLoaded?v().createElement(bn,(0,m.Z)({},this.props,{categories:this.state.categories})):$t||($t=(0,o.Z)(yn,{}))}}]),n}(v().Component),bn=function(e){(0,u.Z)(n,e);var t=nn(n);function n(e){var a;return(0,r.Z)(this,n),a=t.call(this,e),(0,h.Z)((0,c.Z)(a),"onCategoryChange",(function(e){var t=e.target.value,n={category:t};a.acl[t].can_pin_threads<n.weight&&(n.weight=0),a.acl[t].can_hide_threads||(n.is_hidden=0),a.acl[t].can_close_threads||(n.is_closed=!1),a.setState(n)})),a.state={isLoading:!1,title:"",category:null,categories:e.categories,weight:0,is_hidden:0,is_closed:!1,validators:{title:[tn.C1()]},errors:{}},a.isHiddenChoices=[{value:0,icon:"visibility",label:gettext("No")},{value:1,icon:"visibility_off",label:gettext("Yes")}],a.isClosedChoices=[{value:!1,icon:"lock_outline",label:gettext("No")},{value:!0,icon:"lock",label:gettext("Yes")}],a.acl={},a.props.categories.forEach((function(e){e.post&&(a.state.category||(a.state.category=e.id),a.acl[e.id]={can_pin_threads:e.post.pin,can_close_threads:e.post.close,can_hide_threads:e.post.hide})})),a}return(0,l.Z)(n,[{key:"clean",value:function(){return!!this.isValid()||(k.Z.error(gettext("Form contains errors.")),this.setState({errors:this.validate()}),!1)}},{key:"send",value:function(){return _.Z.post(this.props.thread.api.posts.split,{title:this.state.title,category:this.state.category,weight:this.state.weight,is_hidden:this.state.is_hidden,is_closed:this.state.is_closed,posts:[this.props.post.id]})}},{key:"handleSuccess",value:function(e){x.Z.dispatch($.r$(this.props.post,{isDeleted:!0})),N.Z.hide(),k.Z.success(gettext("Selected post was split into new thread."))}},{key:"handleError",value:function(e){400===e.status?(this.setState({errors:Object.assign({},this.state.errors,e)}),k.Z.error(gettext("Form contains errors."))):k.Z.apiError(e)}},{key:"getWeightChoices",value:function(){var e=[{value:0,icon:"remove",label:gettext("Not pinned")},{value:1,icon:"bookmark_border",label:gettext("Pinned locally")}];return 2==this.acl[this.state.category].can_pin_threads&&e.push({value:2,icon:"bookmark",label:gettext("Pinned globally")}),e}},{key:"renderWeightField",value:function(){return this.acl[this.state.category].can_pin_threads?(0,o.Z)(g.Z,{label:gettext("Thread weight"),for:"id_weight",labelClass:"col-sm-4",controlClass:"col-sm-8"},void 0,(0,o.Z)(en.Z,{id:"id_weight",onChange:this.bindInput("weight"),value:this.state.weight,choices:this.getWeightChoices()})):null}},{key:"renderHiddenField",value:function(){return this.acl[this.state.category].can_hide_threads?(0,o.Z)(g.Z,{label:gettext("Hide thread"),for:"id_is_hidden",labelClass:"col-sm-4",controlClass:"col-sm-8"},void 0,(0,o.Z)(en.Z,{id:"id_is_closed",onChange:this.bindInput("is_hidden"),value:this.state.is_hidden,choices:this.isHiddenChoices})):null}},{key:"renderClosedField",value:function(){return this.acl[this.state.category].can_close_threads?(0,o.Z)(g.Z,{label:gettext("Close thread"),for:"id_is_closed",labelClass:"col-sm-4",controlClass:"col-sm-8"},void 0,(0,o.Z)(en.Z,{id:"id_is_closed",onChange:this.bindInput("is_closed"),value:this.state.is_closed,choices:this.isClosedChoices})):null}},{key:"render",value:function(){return(0,o.Z)(Nn,{className:"modal-dialog"},void 0,(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(g.Z,{label:gettext("Thread title"),for:"id_title",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.title},void 0,(0,o.Z)("input",{id:"id_title",className:"form-control",type:"text",onChange:this.bindInput("title"),value:this.state.title})),Gt||(Gt=(0,o.Z)("div",{className:"clearfix"})),(0,o.Z)(g.Z,{label:gettext("Category"),for:"id_category",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.category},void 0,(0,o.Z)(Xt.Z,{id:"id_category",onChange:this.onCategoryChange,value:this.state.category,choices:this.state.categories})),Wt||(Wt=(0,o.Z)("div",{className:"clearfix"})),this.renderWeightField(),this.renderHiddenField(),this.renderClosedField()),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)(Ct.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Split post")))))}}]),n}(Z.Z);function yn(){return Kt||(Kt=(0,o.Z)(Nn,{className:"modal-dialog"},void 0,(0,o.Z)(at.Z,{})))}function _n(e){return(0,o.Z)(Nn,{className:"modal-dialog modal-message"},void 0,Jt||(Jt=(0,o.Z)("div",{className:"message-icon"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,o.Z)("div",{className:"message-body"},void 0,(0,o.Z)("p",{className:"lead"},void 0,gettext("You can't move this post at the moment.")),(0,o.Z)("p",{},void 0,e.message)))}function Nn(e){return(0,o.Z)("div",{className:e.className,role:"document"},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,Qt||(Qt=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Split post into new thread"))),e.children))}function kn(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,p.Z)(e);if(t){var s=(0,p.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,d.Z)(this,n)}}function xn(e){return(0,o.Z)("ul",{className:"dropdown-menu dropdown-menu-right stick-to-bottom"},void 0,v().createElement(Rn,e),v().createElement(Cn,e),v().createElement(Sn,e),v().createElement(En,e),v().createElement(Ln,e),v().createElement(Pn,e),v().createElement(On,e),v().createElement(Tn,e),v().createElement(An,e),v().createElement(Bn,e),v().createElement(In,e),v().createElement(jn,e),v().createElement(Dn,e))}var wn,Rn=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){var t=window.location.protocol+"//";t+=window.location.host,t+=e.props.post.url.index,prompt(gettext("Permament link to this post:"),t)})),e}return(0,l.Z)(n,[{key:"render",value:function(){return(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,sn||(sn=(0,o.Z)("span",{className:"material-icon"},void 0,"link")),gettext("Permament link")))}}]),n}(v().Component),Cn=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){ft.Z.open({mode:"EDIT",config:e.props.post.api.editor,submit:e.props.post.api.index})})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.acl.can_edit?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,on||(on=(0,o.Z)("span",{className:"material-icon"},void 0,"edit")),gettext("Edit"))):null}}]),n}(v().Component),Sn=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Ke(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.post,n=e.thread;return n.acl.can_mark_best_answer&&t.acl.can_mark_as_best_answer?t.id===n.best_answer||n.best_answer&&!n.acl.can_change_best_answer?null:(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,rn||(rn=(0,o.Z)("span",{className:"material-icon"},void 0,"check_box")),gettext("Mark as best answer"))):null}}]),n}(v().Component),En=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Je(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.post,n=e.thread;return t.id!==n.best_answer?null:n.acl.can_unmark_best_answer?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,ln||(ln=(0,o.Z)("span",{className:"material-icon"},void 0,"check_box_outline_blank")),gettext("Unmark best answer"))):null}}]),n}(v().Component),Ln=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){N.Z.show((0,o.Z)(Yt,{post:e.props.post}))})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.post.is_hidden&&!this.props.post.acl.can_see_hidden,t=0===this.props.post.edits;if(e||t)return null;var n=ngettext("This post was edited %(edits)s time.","This post was edited %(edits)s times.",this.props.post.edits);return interpolate(n,{edits:this.props.post.edits},!0),(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,cn||(cn=(0,o.Z)("span",{className:"material-icon"},void 0,"edit")),gettext("Changes history")))}}]),n}(v().Component),Pn=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){ze(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.acl.can_approve&&this.props.post.is_unapproved?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,un||(un=(0,o.Z)("span",{className:"material-icon"},void 0,"done")),gettext("Approve"))):null}}]),n}(v().Component),On=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){N.Z.show(v().createElement(St,e.props))})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.acl.can_move?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,dn||(dn=(0,o.Z)("span",{className:"material-icon"},void 0,"arrow_forward")),gettext("Move"))):null}}]),n}(v().Component),Tn=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){N.Z.show(v().createElement(an,e.props))})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.acl.can_move?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,pn||(pn=(0,o.Z)("span",{className:"material-icon"},void 0,"call_split")),gettext("Split"))):null}}]),n}(v().Component),An=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){He(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.acl.can_protect?this.props.post.is_protected?null:(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,hn||(hn=(0,o.Z)("span",{className:"material-icon"},void 0,"lock_outline")),gettext("Protect"))):null}}]),n}(v().Component),Bn=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Fe(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.acl.can_protect&&this.props.post.is_protected?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,fn||(fn=(0,o.Z)("span",{className:"material-icon"},void 0,"lock_open")),gettext("Remove protection"))):null}}]),n}(v().Component),In=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){qe(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.post,n=e.thread;return t.id===n.best_answer?null:t.acl.can_hide?t.is_hidden?null:(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,vn||(vn=(0,o.Z)("span",{className:"material-icon"},void 0,"visibility_off")),gettext("Hide"))):null}}]),n}(v().Component),jn=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Ye(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.acl.can_unhide&&this.props.post.is_hidden?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,mn||(mn=(0,o.Z)("span",{className:"material-icon"},void 0,"visibility")),gettext("Unhide"))):null}}]),n}(v().Component),Dn=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){We(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.post,n=e.thread;return t.id===n.best_answer?null:t.acl.can_delete?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,Zn||(Zn=(0,o.Z)("span",{className:"material-icon"},void 0,"clear")),gettext("Delete"))):null}}]),n}(v().Component);function Un(e){return(0,o.Z)("div",{className:"pull-right dropdown"},void 0,wn||(wn=(0,o.Z)("button",{"aria-expanded":"true","aria-haspopup":"true",className:"btn btn-default btn-icon dropdown-toggle","data-toggle":"dropdown",type:"button"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,"expand_more"))),v().createElement(xn,e))}var Mn=n(21981);var zn,Hn=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(){var e;(0,r.Z)(this,s);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return e=a.call.apply(a,[this].concat(n)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){e.props.post.isSelected?x.Z.dispatch(Mn._H(e.props.post)):x.Z.dispatch(Mn.Ys(e.props.post))})),e}return(0,l.Z)(s,[{key:"render",value:function(){return this.props.thread.acl.can_merge_posts||(e=this.props.post.acl).can_approve||e.can_hide||e.can_protect||e.can_unhide||e.can_delete||e.can_move?(0,o.Z)("div",{className:"pull-right"},void 0,(0,o.Z)("button",{className:"btn btn-default btn-icon",onClick:this.onClick,type:"button"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,this.props.post.isSelected?"check_box":"check_box_outline_blank"))):null;var e}}]),s}(v().Component),Fn=n(24678);function qn(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,p.Z)(e);if(t){var s=(0,p.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,d.Z)(this,n)}}function Yn(e){return(0,o.Z)("div",{className:"post-heading"},void 0,v().createElement(Vn,e),v().createElement($n,e),v().createElement(Gn,e),v().createElement(Wn,e),v().createElement(Qn,e),v().createElement(Xn,e),v().createElement(ea,e),v().createElement(Hn,e),v().createElement(Un,e))}function Vn(e){return e.post.is_read?null:(0,o.Z)("span",{className:"label label-unread hidden-xs"},void 0,gettext("New post"))}function $n(e){return e.post.is_read?null:(0,o.Z)("span",{className:"label label-unread visible-xs-inline-block"},void 0,gettext("New"))}function Gn(e){var t=interpolate(gettext("posted %(posted_on)s"),{posted_on:e.post.posted_on.format("LL, LT")},!0);return(0,o.Z)("a",{href:e.post.url.index,className:"btn btn-link posted-on hidden-xs",title:t},void 0,e.post.posted_on.fromNow())}function Wn(e){return(0,o.Z)("a",{href:e.post.url.index,className:"btn btn-link posted-on visible-xs-inline-block"},void 0,e.post.posted_on.fromNow())}var Kn,Jn,Qn=function(e){(0,u.Z)(n,e);var t=qn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){N.Z.show((0,o.Z)(Yt,{post:e.props.post}))})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.post.is_hidden&&!this.props.post.acl.can_see_hidden,t=0===this.props.post.edits;if(e||t)return null;var n=ngettext("This post was edited %(edits)s time.","This post was edited %(edits)s times.",this.props.post.edits),a=interpolate(n,{edits:this.props.post.edits},!0),s=ngettext("edited %(edits)s time","edited %(edits)s times",this.props.post.edits);return(0,o.Z)("button",{className:"btn btn-link btn-see-edits hidden-xs",onClick:this.onClick,title:a,type:"button"},void 0,interpolate(s,{edits:this.props.post.edits},!0))}}]),n}(v().Component),Xn=function(e){(0,u.Z)(n,e);var t=qn(n);function n(){return(0,r.Z)(this,n),t.apply(this,arguments)}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.post.is_hidden&&!this.props.post.acl.can_see_hidden,t=0===this.props.post.edits;if(e||t)return null;var n=ngettext("%(edits)s edit","%(edits)s edits",this.props.post.edits);return(0,o.Z)("button",{className:"btn btn-link btn-see-edits visible-xs-inline-block",onClick:this.onClick,type:"button"},void 0,interpolate(n,{edits:this.props.post.edits},!0))}}]),n}(Qn);function ea(e){var t=e.post.poster&&e.post.poster.id===e.user.id,n=e.post.acl.can_protect;return e.user.id&&e.post.is_protected&&(t||n)?(0,o.Z)("span",{className:"label label-protected hidden-xs",title:gettext("This post is protected and may not be edited.")},void 0,zn||(zn=(0,o.Z)("span",{className:"material-icon"},void 0,"lock_outline")),gettext("protected")):null}function ta(e){var t=e.post,n=e.thread;return(0,o.Z)("div",{className:"post-side post-side-anonymous"},void 0,(0,o.Z)(Hn,{post:t,thread:n}),(0,o.Z)(Un,{post:t,thread:n}),(0,o.Z)("div",{className:"media"},void 0,Kn||(Kn=(0,o.Z)("div",{className:"media-left"},void 0,(0,o.Z)("span",{},void 0,(0,o.Z)(B.ZP,{className:"poster-avatar",size:100})))),(0,o.Z)("div",{className:"media-body"},void 0,(0,o.Z)("span",{className:"media-heading item-title"},void 0,t.poster_name),(0,o.Z)("span",{className:"user-title user-title-anonymous"},void 0,gettext("Removed user")))))}function na(e){var t=e.title,n=e.rank;return n.is_tab||!!t||!!n.title}function aa(e){var t=e.poster,n=ngettext("%(posts)s post","%(posts)s posts",t.posts),a="user-postcount";return na(t)&&(a+=" hidden-xs hidden-sm"),(0,o.Z)("span",{className:a},void 0,interpolate(n,{posts:t.posts},!0))}function sa(e){var t=e.poster,n="hidden-xs";return na(t)&&(n+=" hidden-sm"),(0,o.Z)("span",{className:n},void 0,(0,o.Z)(Fn.ZP,{status:t.status},void 0,(0,o.Z)(Fn.pg,{status:t.status,user:t})))}function ia(e){var t=e.rank,n=e.title||t.title;if(!n&&t.is_tab&&(n=t.name),!n)return null;var a="user-title";return t.css_class&&(a+=" user-title-"+t.css_class),t.is_tab?(0,o.Z)("div",{className:a},void 0,(0,o.Z)("a",{href:t.url},void 0,n)):(0,o.Z)("div",{className:a},void 0,n)}function oa(e){var t=e.post,n=e.thread,a=t.poster;return(0,o.Z)("div",{className:"post-side post-side-registered"},void 0,(0,o.Z)(Hn,{post:t,thread:n}),(0,o.Z)(Un,{post:t,thread:n}),(0,o.Z)("div",{className:"media"},void 0,(0,o.Z)("div",{className:"media-left"},void 0,(0,o.Z)("a",{href:a.url},void 0,(0,o.Z)(B.ZP,{className:"poster-avatar",size:100,user:a}))),(0,o.Z)("div",{className:"media-body"},void 0,(0,o.Z)("div",{className:"media-heading"},void 0,(0,o.Z)("a",{className:"item-title",href:a.url},void 0,a.username),(0,o.Z)(Fn.ZP,{status:a.status},void 0,(0,o.Z)(Fn.Jj,{status:a.status}))),(0,o.Z)(ia,{rank:a.rank,title:a.title}),(0,o.Z)(sa,{poster:a}),(0,o.Z)(aa,{poster:a}))))}function ra(e){return e.post.poster?v().createElement(oa,e):v().createElement(ta,e)}function la(e){var t="post";return e.post.isDeleted?t="hide":e.post.is_hidden&&!e.post.acl.can_see_hidden&&(t="post post-hidden"),e.post.poster&&e.post.poster.rank.css_class&&(t+=" post-"+e.post.poster.rank.css_class),e.post.is_read||(t+=" post-new"),(0,o.Z)("li",{id:"post-"+e.post.id,className:t},void 0,(0,o.Z)("div",{className:"panel panel-default panel-post"},void 0,(0,o.Z)("div",{className:"panel-body"},void 0,v().createElement(ra,e),(0,o.Z)("div",{className:"panel-content"},void 0,v().createElement(Yn,e),v().createElement(Ie,e),v().createElement(De,e),v().createElement(Ue,e),v().createElement(je,e),v().createElement(Oe,e),v().createElement(we,e),v().createElement(mt,e)))))}var ca,ua=function(){return(0,o.Z)("li",{className:"post"},void 0,(0,o.Z)("div",{className:"panel panel-default panel-post"},void 0,(0,o.Z)("div",{className:"panel-body"},void 0,(0,o.Z)("div",{className:"post-side post-side-registered"},void 0,(0,o.Z)("div",{className:"media"},void 0,Jn||(Jn=(0,o.Z)("div",{className:"media-left"},void 0,(0,o.Z)("span",{},void 0,(0,o.Z)(B.ZP,{className:"poster-avatar",size:"100"})))),(0,o.Z)("div",{className:"media-body"},void 0,(0,o.Z)("span",{className:"media-heading item-title"},void 0,(0,o.Z)("span",{className:"ui-preview-text",style:{width:"80px"}},void 0," ")),(0,o.Z)("span",{className:"user-title user-title-anonymous"},void 0,(0,o.Z)("span",{className:"ui-preview-text",style:{width:"60px"}},void 0," "))))),(0,o.Z)("div",{className:"panel-content"},void 0,(0,o.Z)("div",{className:"post-body"},void 0,(0,o.Z)("article",{className:"misago-markup"},void 0,(0,o.Z)("p",{className:"ui-preview-text",style:{width:"100%"}},void 0," "),(0,o.Z)("p",{className:"ui-preview-text",style:{width:"70%"}},void 0," "),(0,o.Z)("p",{className:"ui-preview-text hidden-xs hidden-sm",style:{width:"85%"}},void 0," ")))))))};function da(e){return e.posts.isLoaded?(0,o.Z)("ul",{className:"posts-list ui-ready"},void 0,e.posts.results.map((function(t){return v().createElement(pa,(0,m.Z)({key:t.id,post:t},e))}))):ca||(ca=(0,o.Z)("ul",{className:"posts-list ui-preview"},void 0,(0,o.Z)(ua,{})))}function pa(e){return e.post.is_event?v().createElement(Ze,e):v().createElement(la,e)}var ha,fa,va,ma=n(59752),Za=n(55547),ga=n(53328),ba=n(59131),ya=n(98936),_a=n(50366),Na=n(16768),ka=function(e){var t=e.thread;return(0,o.Z)("div",{className:"thread-user-card"},void 0,(0,o.Z)("div",{className:"thread-user-card-media"},void 0,t.starter?(0,o.Z)("a",{href:t.url.starter},void 0,(0,o.Z)(B.ZP,{size:40,user:t.starter})):ha||(ha=(0,o.Z)(B.ZP,{size:40}))),(0,o.Z)("div",{className:"thread-user-card-body"},void 0,(0,o.Z)("div",{className:"thread-user-card-header"},void 0,t.starter?(0,o.Z)("a",{className:"item-title",href:t.url.starter,title:gettext("Thread author")},void 0,t.starter.username):(0,o.Z)("span",{className:"item-title",title:gettext("Thread author")},void 0,t.starter_name)),(0,o.Z)("div",{},void 0,(0,o.Z)("span",{className:"text-muted",title:interpolate(gettext("Started on: %(timestamp)s"),{timestamp:t.started_on.format("LLL")},!0)},void 0,t.started_on.fromNow()))))},xa=n(99755),wa=n(12891);var Ra=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(e){var t;return(0,r.Z)(this,s),t=a.call(this,e),(0,h.Z)((0,c.Z)(t),"handleSuccess",(function(e){t.handleSuccessUnmounted(e),t.setState({isLoading:!0}),N.Z.hide()})),(0,h.Z)((0,c.Z)(t),"handleSuccessUnmounted",(function(e){x.Z.dispatch(y.Ar()),x.Z.dispatch(y.Vx(e))})),(0,h.Z)((0,c.Z)(t),"handleError",(function(e){x.Z.dispatch(y.Ar()),400===e.status?k.Z.error(e.detail[0]):k.Z.apiError(e)})),(0,h.Z)((0,c.Z)(t),"onChange",(function(e){t.changeValue("title",e.target.value)})),t.state={isLoading:!1,title:e.thread.title,validators:{title:(0,wa.jn)()},errors:{}},t}return(0,l.Z)(s,[{key:"clean",value:function(){if(!this.state.title.trim().length)return k.Z.error(gettext("You have to enter thread title.")),!1;var e=this.validate();return!e.title||(k.Z.error(e.title[0]),!1)}},{key:"send",value:function(){return x.Z.dispatch(y.n6()),_.Z.patch(this.props.thread.api.index,[{op:"replace",path:"title",value:this.state.title}])}},{key:"render",value:function(){return(0,o.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,fa||(fa=(0,o.Z)(Ca,{})),(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(g.Z,{for:"id_modal_title",label:gettext("Thread title")},void 0,(0,o.Z)("input",{className:"form-control",disabled:this.state.isLoading||this.props.thread.isBusy,id:"id_modal_title",onChange:this.onChange,value:this.state.title}))),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,o.Z)("button",{className:"btn btn-primary",disabled:this.state.isLoading||this.props.thread.isBusy},void 0,gettext("Change title"))))))}}]),s}(Z.Z);function Ca(e){return(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,va||(va=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Change title")))}var Sa,Ea,La=n(52753);var Pa,Oa,Ta,Aa,Ba,Ia,ja=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(e){var t;return(0,r.Z)(this,s),t=a.call(this,e),(0,h.Z)((0,c.Z)(t),"handleSuccess",(function(e){t.handleSuccessUnmounted(e),t.setState({isLoading:!0})})),(0,h.Z)((0,c.Z)(t),"handleSuccessUnmounted",(function(e){k.Z.success(gettext("Thread has been merged with other one.")),window.location=e.url})),(0,h.Z)((0,c.Z)(t),"handleError",(function(e){x.Z.dispatch(y.Ar()),400===e.status?e.best_answers||e.polls?N.Z.show((0,o.Z)(La.ZP,{api:t.props.thread.api.merge,bestAnswers:e.best_answers,data:{other_thread:t.state.url},polls:e.polls,onError:t.handleError,onSuccess:t.handleSuccessUnmounted})):e.best_answer?k.Z.error(e.best_answer[0]):e.poll?k.Z.error(e.poll[0]):k.Z.error(e.detail):k.Z.apiError(e)})),(0,h.Z)((0,c.Z)(t),"onUrlChange",(function(e){t.changeValue("url",e.target.value)})),t.state={isLoading:!1,url:"",validators:{url:[]},errors:{}},t}return(0,l.Z)(s,[{key:"clean",value:function(){return!!this.state.url.trim().length||(k.Z.error(gettext("You have to enter link to the other thread.")),!1)}},{key:"send",value:function(){return x.Z.dispatch(y.n6()),_.Z.post(this.props.thread.api.merge,{other_thread:this.state.url})}},{key:"render",value:function(){return(0,o.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,Sa||(Sa=(0,o.Z)(Da,{})),(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(g.Z,{for:"id_url",label:gettext("Link to thread you want to merge with"),help_text:gettext("Merge will delete current thread and move its contents to the thread specified here.")},void 0,(0,o.Z)("input",{className:"form-control",disabled:this.state.isLoading||this.props.thread.isBusy,id:"id_url",onChange:this.onUrlChange,value:this.state.url}))),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,o.Z)("button",{className:"btn btn-primary",disabled:this.state.isLoading||this.props.thread.isBusy},void 0,gettext("Merge thread"))))))}}]),s}(Z.Z);function Da(e){return(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,Ea||(Ea=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Merge thread")))}var Ua,Ma,za,Ha,Fa,qa,Ya,Va,$a,Ga,Wa,Ka,Ja=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(e){var t;return(0,r.Z)(this,s),t=a.call(this,e),(0,h.Z)((0,c.Z)(t),"onCategoryChange",(function(e){t.changeValue("category",e.target.value)})),t.state={isReady:!1,isLoading:!1,isError:!1,category:null,categories:[]},t}return(0,l.Z)(s,[{key:"componentDidMount",value:function(){var e=this;_.Z.get(E.Z.get("THREAD_EDITOR_API")).then((function(t){var n=null,a=t.map((function(e){return!1===e.post||n||(n=e.id),Object.assign(e,{disabled:!1===e.post,label:e.name,value:e.id})}));e.setState({isReady:!0,category:n,categories:a})}),(function(t){e.setState({isError:t.detail})}))}},{key:"send",value:function(){return x.Z.dispatch(y.n6()),_.Z.patch(this.props.thread.api.index,[{op:"replace",path:"category",value:this.state.category}])}},{key:"handleSuccess",value:function(){_.Z.get(this.props.thread.api.posts.index,{page:this.props.posts.page}).then((function(e){x.Z.dispatch(y.gx(e)),x.Z.dispatch(Mn.zD(e.post_set)),x.Z.dispatch(y.Ar()),k.Z.success(gettext("Thread has been moved.")),N.Z.hide()}),(function(e){x.Z.dispatch(y.Ar()),k.Z.apiError(e)}))}},{key:"handleError",value:function(e){400===e.status?k.Z.error(e.detail[0]):k.Z.apiError(e)}},{key:"render",value:function(){return this.state.isReady?(0,o.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,Pa||(Pa=(0,o.Z)(Qa,{})),(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(g.Z,{for:"id_category",label:gettext("New category")},void 0,(0,o.Z)(Xt.Z,{choices:this.state.categories,disabled:this.state.isLoading||this.props.thread.isBusy,id:"id_category",onChange:this.onCategoryChange,value:this.state.category}))),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,o.Z)("button",{className:"btn btn-primary",disabled:this.state.isLoading||this.props.thread.isBusy},void 0,gettext("Move thread")))))):this.state.isError?(0,o.Z)(es,{message:this.state.isError}):Oa||(Oa=(0,o.Z)(Xa,{}))}}]),s}(Z.Z);function Qa(e){return(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,Ta||(Ta=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Move thread")))}function Xa(e){return Aa||(Aa=(0,o.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,(0,o.Z)(Qa,{}),(0,o.Z)(at.Z,{}))))}function es(e){return(0,o.Z)("div",{className:"modal-dialog modal-message",role:"document"},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,Ba||(Ba=(0,o.Z)(Qa,{})),Ia||(Ia=(0,o.Z)("div",{className:"message-icon"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,o.Z)("div",{className:"message-body"},void 0,(0,o.Z)("p",{className:"lead"},void 0,gettext("You can't move this thread at the moment.")),(0,o.Z)("p",{},void 0,e.message),(0,o.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,gettext("Ok")))))}var ts,ns,as,ss,is=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(){var e;(0,r.Z)(this,s);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return e=a.call.apply(a,[this].concat(n)),(0,h.Z)((0,c.Z)(e),"callApi",(function(t,n){x.Z.dispatch(y.n6()),t.push({op:"add",path:"acl",value:!0}),_.Z.patch(e.props.thread.api.index,t).then((function(e){x.Z.dispatch(y.Vx(e)),x.Z.dispatch(y.Ar()),k.Z.success(n)}),(function(e){x.Z.dispatch(y.Ar()),400===e.status?k.Z.error(e.detail[0]):k.Z.apiError(e)}))})),(0,h.Z)((0,c.Z)(e),"changeTitle",(function(){N.Z.show((0,o.Z)(Ra,{thread:e.props.thread}))})),(0,h.Z)((0,c.Z)(e),"pinGlobally",(function(){e.callApi([{op:"replace",path:"weight",value:2}],gettext("Thread has been pinned globally."))})),(0,h.Z)((0,c.Z)(e),"pinLocally",(function(){e.callApi([{op:"replace",path:"weight",value:1}],gettext("Thread has been pinned locally."))})),(0,h.Z)((0,c.Z)(e),"unpin",(function(){e.callApi([{op:"replace",path:"weight",value:0}],gettext("Thread has been unpinned."))})),(0,h.Z)((0,c.Z)(e),"approve",(function(){e.callApi([{op:"replace",path:"is-unapproved",value:!1}],gettext("Thread has been approved."))})),(0,h.Z)((0,c.Z)(e),"open",(function(){e.callApi([{op:"replace",path:"is-closed",value:!1}],gettext("Thread has been opened."))})),(0,h.Z)((0,c.Z)(e),"close",(function(){e.callApi([{op:"replace",path:"is-closed",value:!0}],gettext("Thread has been closed."))})),(0,h.Z)((0,c.Z)(e),"unhide",(function(){e.callApi([{op:"replace",path:"is-hidden",value:!1}],gettext("Thread has been made visible."))})),(0,h.Z)((0,c.Z)(e),"hide",(function(){e.callApi([{op:"replace",path:"is-hidden",value:!0}],gettext("Thread has been made hidden."))})),(0,h.Z)((0,c.Z)(e),"move",(function(){N.Z.show((0,o.Z)(Ja,{posts:e.props.posts,thread:e.props.thread}))})),(0,h.Z)((0,c.Z)(e),"merge",(function(){N.Z.show((0,o.Z)(ja,{thread:e.props.thread}))})),(0,h.Z)((0,c.Z)(e),"delete",(function(){window.confirm(gettext("Are you sure you want to delete this thread?"))&&(x.Z.dispatch(y.n6()),_.Z.delete(e.props.thread.api.index).then((function(t){k.Z.success(gettext("Thread has been deleted.")),window.location=e.props.thread.category.url.index}),(function(e){x.Z.dispatch(y.Ar()),k.Z.apiError(e)})))})),e}return(0,l.Z)(s,[{key:"render",value:function(){var e=this.props.moderation;return(0,o.Z)("ul",{className:"dropdown-menu dropdown-menu-right stick-to-bottom"},void 0,!!e.edit&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.changeTitle,type:"button"},void 0,Ua||(Ua=(0,o.Z)("span",{className:"material-icon"},void 0,"edit")),gettext("Change title"))),!!e.pinGlobally&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.pinGlobally,type:"button"},void 0,Ma||(Ma=(0,o.Z)("span",{className:"material-icon"},void 0,"bookmark")),gettext("Pin globally"))),!!e.pinLocally&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.pinLocally,type:"button"},void 0,za||(za=(0,o.Z)("span",{className:"material-icon"},void 0,"bookmark_border")),gettext("Pin locally"))),!!e.unpin&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.unpin,type:"button"},void 0,Ha||(Ha=(0,o.Z)("span",{className:"material-icon"},void 0,"panorama_fish_eye")),gettext("Unpin"))),!!e.move&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.move,type:"button"},void 0,Fa||(Fa=(0,o.Z)("span",{className:"material-icon"},void 0,"arrow_forward")),gettext("Move"))),!!e.merge&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.merge,type:"button"},void 0,qa||(qa=(0,o.Z)("span",{className:"material-icon"},void 0,"call_merge")),gettext("Merge"))),!!e.approve&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.approve,type:"button"},void 0,Ya||(Ya=(0,o.Z)("span",{className:"material-icon"},void 0,"done")),gettext("Approve"))),!!e.open&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.open,type:"button"},void 0,Va||(Va=(0,o.Z)("span",{className:"material-icon"},void 0,"lock_open")),gettext("Open"))),!!e.close&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.close,type:"button"},void 0,$a||($a=(0,o.Z)("span",{className:"material-icon"},void 0,"lock_outline")),gettext("Close"))),!!e.unhide&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.unhide,type:"button"},void 0,Ga||(Ga=(0,o.Z)("span",{className:"material-icon"},void 0,"visibility")),gettext("Unhide"))),!!e.hide&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.hide,type:"button"},void 0,Wa||(Wa=(0,o.Z)("span",{className:"material-icon"},void 0,"visibility_off")),gettext("Hide"))),!!e.delete&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.delete,type:"button"},void 0,Ka||(Ka=(0,o.Z)("span",{className:"material-icon"},void 0,"clear")),gettext("Delete"))))}}]),s}(v().Component),os=is,rs=function(e){var t=e.thread,n=e.posts,a=e.moderation;return(0,o.Z)("div",{className:"dropdown"},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-default btn-outline btn-icon dropdown-toggle",title:gettext("Thread options"),"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",disabled:t.isBusy},void 0,ts||(ts=(0,o.Z)("span",{className:"material-icon"},void 0,"settings"))),(0,o.Z)(os,{thread:t,posts:n,moderation:a}))},ls=n(94184),cs=n.n(ls);function us(e,t,n){var a={subscription:e.subscription};x.Z.dispatch(y.Vx({subscription:t})),_.Z.patch(e.api.index,[{op:"replace",path:"subscription",value:n}]).then((function(e){x.Z.dispatch(y.Vx(e))}),(function(e){400===e.status?k.Z.error(e.detail[0]):k.Z.apiError(e),x.Z.dispatch(y.Vx(a))}))}var ds,ps,hs,fs,vs,ms,Zs,gs,bs,ys,_s,Ns,ks,xs=function(e){var t,n=e.stickToBottom,a=e.thread;return(0,o.Z)("div",{className:"dropdown"},void 0,(0,o.Z)("button",{className:"btn btn-default btn-outline btn-block","aria-expanded":"true","aria-haspopup":"true","data-toggle":"dropdown",type:"button"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,!0===(t=a.subscription)?"star":!1===t?"star_half":"star_border"),function(e){return!0===e?gettext("E-mail"):!1===e?gettext("Enabled"):gettext("Disabled")}(a.subscription)),(0,o.Z)("ul",{className:cs()("dropdown-menu dropdown-menu-right",{"stick-to-bottom":n})},void 0,(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:function(){return function(e){null!==e.subscription&&us(e,null,"unsubscribe")}(a)}},void 0,ns||(ns=(0,o.Z)("span",{className:"material-icon"},void 0,"star_border")),gettext("Unsubscribe"))),(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:function(){return function(e){!1!==e.subscription&&us(e,!1,"notify")}(a)}},void 0,as||(as=(0,o.Z)("span",{className:"material-icon"},void 0,"star_half")),gettext("Subscribe"))),(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:function(){return function(e){!0!==e.subscription&&us(e,!0,"email")}(a)}},void 0,ss||(ss=(0,o.Z)("span",{className:"material-icon"},void 0,"star")),gettext("Subscribe with e-mail")))))},ws=function(e){var t=e.children,n=e.className;return(0,o.Z)("ul",{className:cs()("breadcrumbs",n)},void 0,t)},Rs=function(e){var t=e.category,n=e.className;return(0,o.Z)("li",{className:cs()("breadcrumbs-item",n)},void 0,(0,o.Z)("a",{href:t.url.index},void 0,(0,o.Z)("span",{className:"material-icon",style:{color:t.color||"inherit"}},void 0,"label"),!!t.short_name&&(0,o.Z)("span",{className:"breadcrumbs-item-name hidden-sm hidden-md hidden-lg",title:t.name},void 0,t.short_name),!!t.short_name&&(0,o.Z)("span",{className:"breadcrumbs-item-name hidden-xs"},void 0,t.name),!t.short_name&&(0,o.Z)("span",{className:"breadcrumbs-item-name"},void 0,t.name)))},Cs=function(e){var t=e.category,n=e.className;return(0,o.Z)("li",{className:cs()("breadcrumbs-item",n)},void 0,(0,o.Z)("a",{href:t.url.index},void 0,ds||(ds=(0,o.Z)("span",{className:"material-icon"},void 0,"chevron_right")),(0,o.Z)("span",{className:"breadcrumbs-item-name"},void 0,"root_category"===t.special_role?gettext("Threads"):gettext("Private threads"))))},Ss=function(e){var t=e.breadcrumbs;return(0,o.Z)(ws,{},void 0,t.map((function(e){return e.special_role?(0,o.Z)(Cs,{category:e},e.id):(0,o.Z)(Rs,{category:e},e.id)})))},Es=function(e){var t=e.styleName,n=e.thread,a=e.posts,s=e.user,i=e.moderation;return(0,o.Z)(xa.sP,{},void 0,(0,o.Z)(xa.mr,{styleName:t},void 0,(0,o.Z)(xa.gC,{styleName:t},void 0,(0,o.Z)(Ss,{breadcrumbs:n.path}),(0,o.Z)("h1",{},void 0,n.title)),(0,o.Z)(xa.eA,{className:"page-header-thread-details"},void 0,(0,o.Z)(ya.gq,{},void 0,(0,o.Z)(ya.kw,{auto:!0},void 0,(0,o.Z)(ya.Z6,{shrink:!0},void 0,(0,o.Z)(ka,{thread:n})),ps||(ps=(0,o.Z)(ya.Z6,{auto:!0})),n.replies>0&&(0,o.Z)(ya.Z6,{shrink:!0},void 0,(0,o.Z)(Na.Z,{thread:n})),function(e){return e.is_closed||e.is_hidden||e.is_unapproved||e.weight>0||e.best_answer||e.has_poll||e.has_unapproved_posts}(n)&&(0,o.Z)(ya.Z6,{shrink:!0},void 0,(0,o.Z)(_a.Z,{thread:n}))),s.is_authenticated&&(0,o.Z)(ya.kw,{},void 0,(0,o.Z)(ya.Z6,{},void 0,(0,o.Z)(xs,{thread:n})),i.enabled&&(0,o.Z)(ya.Z6,{shrink:!0},void 0,(0,o.Z)(rs,{thread:n,posts:a,moderation:i})))))))},Ls=n(92490),Ps=n(69987),Os=function(e){var t=e.baseUrl,n=e.posts;return(0,o.Z)("div",{className:"misago-pagination"},void 0,n.isLoaded&&n.first?(0,o.Z)(Ps.rU,{className:"btn btn-default btn-outline btn-icon",to:t,title:gettext("Go to first page")},void 0,hs||(hs=(0,o.Z)("span",{className:"material-icon"},void 0,"first_page"))):(0,o.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:gettext("Go to first page"),type:"button",disabled:!0},void 0,fs||(fs=(0,o.Z)("span",{className:"material-icon"},void 0,"first_page"))),n.isLoaded&&n.previous?(0,o.Z)(Ps.rU,{className:"btn btn-default btn-outline btn-icon",to:t+(n.previous>1?n.previous+"/":""),title:gettext("Go to previous page")},void 0,vs||(vs=(0,o.Z)("span",{className:"material-icon"},void 0,"chevron_left"))):(0,o.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:gettext("Go to previous page"),type:"button",disabled:!0},void 0,ms||(ms=(0,o.Z)("span",{className:"material-icon"},void 0,"chevron_left"))),n.isLoaded&&n.next?(0,o.Z)(Ps.rU,{className:"btn btn-default btn-outline btn-icon",to:t+n.next+"/",title:gettext("Go to next page")},void 0,Zs||(Zs=(0,o.Z)("span",{className:"material-icon"},void 0,"chevron_right"))):(0,o.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:gettext("Go to next page"),type:"button",disabled:!0},void 0,gs||(gs=(0,o.Z)("span",{className:"material-icon"},void 0,"chevron_right"))),n.isLoaded&&n.last?(0,o.Z)(Ps.rU,{className:"btn btn-default btn-outline btn-icon",to:t+n.last+"/",title:gettext("Go to last page")},void 0,bs||(bs=(0,o.Z)("span",{className:"material-icon"},void 0,"last_page"))):(0,o.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:gettext("Go to last page"),type:"button",disabled:!0},void 0,ys||(ys=(0,o.Z)("span",{className:"material-icon"},void 0,"last_page"))))},Ts=function(e){var t=e.posts;return t.more?(0,o.Z)("p",{},void 0,interpolate(ngettext("There is %(more)s more post in this thread.","There are %(more)s more posts in this thread.",t.more),{more:t.more},!0)):(0,o.Z)("p",{},void 0,gettext("There are no more posts in this thread."))};function As(e){var t=e.errors,n=e.posts;return(0,o.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,_s||(_s=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Moderation"))),(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)("p",{className:"lead"},void 0,gettext("One or more posts could not be changed:")),(0,o.Z)("ul",{className:"list-unstyled list-errored-items"},void 0,t.map((function(e){return(0,o.Z)(Bs,{errors:e.detail,post:n[e.id]},e.id)}))))))}function Bs(e){var t=e.errors,n=e.post,a=interpolate(gettext("%(username)s on %(posted_on)s"),{posted_on:n.posted_on.format("LL, LT"),username:n.poster_name},!0);return(0,o.Z)("li",{},void 0,(0,o.Z)("h5",{},void 0,a,":"),t.map((function(e,t){return(0,o.Z)("p",{},t,e)})))}function Is(e){var t=e.selection,n=t.map((function(e){return{id:e.id,is_unapproved:!1}})),a=t.map((function(e){return{id:e.id,is_unapproved:e.is_unapproved}}));zs(e,[{op:"replace",path:"is-unapproved",value:!1}],n,a)}function js(e){var t=e.selection,n=t.map((function(e){return{id:e.id,is_protected:!0}})),a=t.map((function(e){return{id:e.id,is_protected:e.is_protected}}));zs(e,[{op:"replace",path:"is-protected",value:!0}],n,a)}function Ds(e){var t=e.selection,n=t.map((function(e){return{id:e.id,is_protected:!1}})),a=t.map((function(e){return{id:e.id,is_protected:e.is_protected}}));zs(e,[{op:"replace",path:"is-protected",value:!1}],n,a)}function Us(e){var t=e.selection,n=t.map((function(t){return{id:t.id,is_hidden:!0,hidden_on:V()(),hidden_by_name:e.user.username,url:Object.assign(t.url,{hidden_by:e.user.url})}})),a=t.map((function(e){return{id:e.id,is_hidden:e.is_hidden,hidden_on:e.hidden_on,hidden_by_name:e.hidden_by_name,url:e.url}}));zs(e,[{op:"replace",path:"is-hidden",value:!0}],n,a)}function Ms(e){var t=e.selection,n=t.map((function(t){return{id:t.id,is_hidden:!1,hidden_on:V()(),hidden_by_name:e.user.username,url:Object.assign(t.url,{hidden_by:e.user.url})}})),a=t.map((function(e){return{id:e.id,is_hidden:e.is_hidden,hidden_on:e.hidden_on,hidden_by_name:e.hidden_by_name,url:e.url}}));zs(e,[{op:"replace",path:"is-hidden",value:!1}],n,a)}function zs(e,t,n,a){var s=e.selection,i=e.thread;n.forEach((function(e){$.r$(e,e)})),x.Z.dispatch(Mn.kR());var r={ops:t,ids:s.map((function(e){return e.id}))};_.Z.patch(i.api.posts.index,r).then((function(e){e.forEach((function(e){x.Z.dispatch($.r$(e,e))}))}),(function(e){if(400!==e.status)return a.forEach((function(e){x.Z.dispatch($.r$(e,e))})),k.Z.apiError(e);var t=[],n=[];e.forEach((function(e){e.detail?(t.push(e),n.push(e.id)):x.Z.dispatch($.r$(e,e)),a.forEach((function(e){-1!==n.indexOf(e)&&x.Z.dispatch($.r$(e,e))}))}));var i={};s.forEach((function(e){i[e.id]=e})),N.Z.show((0,o.Z)(As,{errors:t,posts:i}))}))}function Hs(e){window.confirm(gettext("Are you sure you want to merge selected posts? This action is not reversible!"))&&(e.selection.slice(1).map((function(e){x.Z.dispatch($.r$(e,{isDeleted:!0}))})),_.Z.post(e.thread.api.posts.merge,{posts:e.selection.map((function(e){return e.id}))}).then((function(e){x.Z.dispatch($.r$(e,$.ZB(e)))}),(function(t){400===t.status?k.Z.error(t.detail):k.Z.apiError(t),e.selection.slice(1).map((function(e){x.Z.dispatch($.r$(e,{isDeleted:!1}))}))})),x.Z.dispatch(Mn.kR()))}function Fs(e){if(window.confirm(gettext("Are you sure you want to delete selected posts? This action is not reversible!"))){e.selection.map((function(e){x.Z.dispatch($.r$(e,{isDeleted:!0}))}));var t=e.selection.map((function(e){return e.id}));_.Z.delete(e.thread.api.posts.index,t).then((function(){}),(function(t){400===t.status?k.Z.error(t.detail):k.Z.apiError(t),e.selection.map((function(e){x.Z.dispatch($.r$(e,{isDeleted:!1}))}))})),x.Z.dispatch(Mn.kR())}}var qs,Ys,Vs,$s,Gs,Ws,Ks=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(e){var t;return(0,r.Z)(this,s),t=a.call(this,e),(0,h.Z)((0,c.Z)(t),"onUrlChange",(function(e){t.changeValue("url",e.target.value)})),t.state={isLoading:!1,url:"",validators:{url:[]},errors:{}},t}return(0,l.Z)(s,[{key:"clean",value:function(){return!!this.state.url.trim().length||(k.Z.error(gettext("You have to enter link to the other thread.")),!1)}},{key:"send",value:function(){return _.Z.post(this.props.thread.api.posts.move,{new_thread:this.state.url,posts:this.props.selection.map((function(e){return e.id}))})}},{key:"handleSuccess",value:function(e){this.props.selection.forEach((function(e){x.Z.dispatch($.r$(e,{isDeleted:!0}))})),N.Z.hide(),k.Z.success(gettext("Selected posts were moved to the other thread."))}},{key:"handleError",value:function(e){400===e.status?k.Z.error(e.detail):k.Z.apiError(e)}},{key:"render",value:function(){return(0,o.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,Ns||(Ns=(0,o.Z)(Js,{})),(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(g.Z,{for:"id_url",label:gettext("Link to thread you want to move posts to")},void 0,(0,o.Z)("input",{className:"form-control",disabled:this.state.isLoading,id:"id_url",onChange:this.onUrlChange,value:this.state.url}))),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,o.Z)("button",{className:"btn btn-primary",disabled:this.state.isLoading},void 0,gettext("Move posts"))))))}}]),s}(Z.Z);function Js(e){return(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,ks||(ks=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Move posts")))}function Qs(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,p.Z)(e);if(t){var s=(0,p.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,d.Z)(this,n)}}function Xs(e){return v().createElement(ci,(0,m.Z)({},e,{Form:ui}))}var ei,ti,ni,ai,si,ii,oi,ri,li,ci=function(e){(0,u.Z)(n,e);var t=Qs(n);function n(e){var a;return(0,r.Z)(this,n),(a=t.call(this,e)).state={isLoaded:!1,isError:!1,categories:[]},a}return(0,l.Z)(n,[{key:"componentDidMount",value:function(){var e=this;_.Z.get(misago.get("THREAD_EDITOR_API")).then((function(t){var n=t.map((function(e){return Object.assign(e,{disabled:!1===e.post,label:e.name,value:e.id,post:e.post})}));e.setState({isLoaded:!0,categories:n})}),(function(t){e.setState({isError:t.detail})}))}},{key:"render",value:function(){return this.state.isError?(0,o.Z)(pi,{message:this.state.isError}):this.state.isLoaded?v().createElement(ui,(0,m.Z)({},this.props,{categories:this.state.categories})):qs||(qs=(0,o.Z)(di,{}))}}]),n}(v().Component),ui=function(e){(0,u.Z)(n,e);var t=Qs(n);function n(e){var a;return(0,r.Z)(this,n),a=t.call(this,e),(0,h.Z)((0,c.Z)(a),"onCategoryChange",(function(e){var t=e.target.value,n={category:t};a.acl[t].can_pin_threads<n.weight&&(n.weight=0),a.acl[t].can_hide_threads||(n.is_hidden=0),a.acl[t].can_close_threads||(n.is_closed=!1),a.setState(n)})),a.state={isLoading:!1,title:"",category:null,categories:e.categories,weight:0,is_hidden:0,is_closed:!1,validators:{title:[tn.C1()]},errors:{}},a.isHiddenChoices=[{value:0,icon:"visibility",label:gettext("No")},{value:1,icon:"visibility_off",label:gettext("Yes")}],a.isClosedChoices=[{value:!1,icon:"lock_outline",label:gettext("No")},{value:!0,icon:"lock",label:gettext("Yes")}],a.acl={},a.props.categories.forEach((function(e){e.post&&(a.state.category||(a.state.category=e.id),a.acl[e.id]={can_pin_threads:e.post.pin,can_close_threads:e.post.close,can_hide_threads:e.post.hide})})),a}return(0,l.Z)(n,[{key:"clean",value:function(){return!!this.isValid()||(k.Z.error(gettext("Form contains errors.")),this.setState({errors:this.validate()}),!1)}},{key:"send",value:function(){return _.Z.post(this.props.thread.api.posts.split,{title:this.state.title,category:this.state.category,weight:this.state.weight,is_hidden:this.state.is_hidden,is_closed:this.state.is_closed,posts:this.props.selection.map((function(e){return e.id}))})}},{key:"handleSuccess",value:function(e){this.props.selection.forEach((function(e){x.Z.dispatch($.r$(e,{isDeleted:!0}))})),N.Z.hide(),k.Z.success(gettext("Selected posts were split into new thread."))}},{key:"handleError",value:function(e){400===e.status?(this.setState({errors:Object.assign({},this.state.errors,e)}),k.Z.error(gettext("Form contains errors."))):403===e.status&&Array.isArray(e)?N.Z.show((0,o.Z)(As,{errors:e})):k.Z.apiError(e)}},{key:"getWeightChoices",value:function(){var e=[{value:0,icon:"remove",label:gettext("Not pinned")},{value:1,icon:"bookmark_border",label:gettext("Pinned locally")}];return 2==this.acl[this.state.category].can_pin_threads&&e.push({value:2,icon:"bookmark",label:gettext("Pinned globally")}),e}},{key:"renderWeightField",value:function(){return this.acl[this.state.category].can_pin_threads?(0,o.Z)(g.Z,{label:gettext("Thread weight"),for:"id_weight",labelClass:"col-sm-4",controlClass:"col-sm-8"},void 0,(0,o.Z)(en.Z,{id:"id_weight",onChange:this.bindInput("weight"),value:this.state.weight,choices:this.getWeightChoices()})):null}},{key:"renderHiddenField",value:function(){return this.acl[this.state.category].can_hide_threads?(0,o.Z)(g.Z,{label:gettext("Hide thread"),for:"id_is_hidden",labelClass:"col-sm-4",controlClass:"col-sm-8"},void 0,(0,o.Z)(en.Z,{id:"id_is_closed",onChange:this.bindInput("is_hidden"),value:this.state.is_hidden,choices:this.isHiddenChoices})):null}},{key:"renderClosedField",value:function(){return this.acl[this.state.category].can_close_threads?(0,o.Z)(g.Z,{label:gettext("Close thread"),for:"id_is_closed",labelClass:"col-sm-4",controlClass:"col-sm-8"},void 0,(0,o.Z)(en.Z,{id:"id_is_closed",onChange:this.bindInput("is_closed"),value:this.state.is_closed,choices:this.isClosedChoices})):null}},{key:"render",value:function(){return(0,o.Z)(hi,{className:"modal-dialog"},void 0,(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(g.Z,{label:gettext("Thread title"),for:"id_title",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.title},void 0,(0,o.Z)("input",{id:"id_title",className:"form-control",type:"text",onChange:this.bindInput("title"),value:this.state.title})),Ys||(Ys=(0,o.Z)("div",{className:"clearfix"})),(0,o.Z)(g.Z,{label:gettext("Category"),for:"id_category",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.category},void 0,(0,o.Z)(Xt.Z,{id:"id_category",onChange:this.onCategoryChange,value:this.state.category,choices:this.state.categories})),Vs||(Vs=(0,o.Z)("div",{className:"clearfix"})),this.renderWeightField(),this.renderHiddenField(),this.renderClosedField()),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,o.Z)(Ct.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Split posts")))))}}]),n}(Z.Z);function di(){return $s||($s=(0,o.Z)(hi,{className:"modal-dialog"},void 0,(0,o.Z)(at.Z,{})))}function pi(e){return(0,o.Z)(hi,{className:"modal-dialog modal-message"},void 0,Gs||(Gs=(0,o.Z)("div",{className:"message-icon"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,o.Z)("div",{className:"message-body"},void 0,(0,o.Z)("p",{className:"lead"},void 0,gettext("You can't move selected posts at the moment.")),(0,o.Z)("p",{},void 0,e.message),(0,o.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,gettext("Ok"))))}function hi(e){return(0,o.Z)("div",{className:e.className,role:"document"},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,Ws||(Ws=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Split posts into new thread"))),e.children))}function fi(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,p.Z)(e);if(t){var s=(0,p.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,d.Z)(this,n)}}function vi(e){return(0,o.Z)("ul",{className:"dropdown-menu dropdown-menu-right stick-to-bottom"},void 0,v().createElement(Ri,e),v().createElement(Ci,e),v().createElement(Si,e),v().createElement(Ei,e),v().createElement(Li,e),v().createElement(Pi,e),v().createElement(Ti,e),v().createElement(Oi,e),v().createElement(Ai,e))}var mi,Zi,gi,bi,yi,_i,Ni,ki,xi,wi,Ri=function(e){(0,u.Z)(n,e);var t=fi(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Is(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.selection.find((function(e){return e.acl.can_approve&&e.is_unapproved}));return e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,ei||(ei=(0,o.Z)("span",{className:"material-icon"},void 0,"done")),gettext("Approve"))):null}}]),n}(v().Component),Ci=function(e){(0,u.Z)(n,e);var t=fi(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Hs(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.selection.length>1&&this.props.selection.find((function(e){return e.acl.can_merge}));return e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,ti||(ti=(0,o.Z)("span",{className:"material-icon"},void 0,"call_merge")),gettext("Merge"))):null}}]),n}(v().Component),Si=function(e){(0,u.Z)(n,e);var t=fi(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){N.Z.show(v().createElement(Ks,e.props))})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.selection.find((function(e){return e.acl.can_move}));return e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,ni||(ni=(0,o.Z)("span",{className:"material-icon"},void 0,"arrow_forward")),gettext("Move"))):null}}]),n}(v().Component),Ei=function(e){(0,u.Z)(n,e);var t=fi(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){N.Z.show(v().createElement(Xs,e.props))})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.selection.find((function(e){return e.acl.can_move}));return e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,ai||(ai=(0,o.Z)("span",{className:"material-icon"},void 0,"call_split")),gettext("Split"))):null}}]),n}(v().Component),Li=function(e){(0,u.Z)(n,e);var t=fi(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){js(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.selection.find((function(e){return!e.is_protected&&e.acl.can_protect}));return e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,si||(si=(0,o.Z)("span",{className:"material-icon"},void 0,"lock_outline")),gettext("Protect"))):null}}]),n}(v().Component),Pi=function(e){(0,u.Z)(n,e);var t=fi(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Ds(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.selection.find((function(e){return e.is_protected&&e.acl.can_protect}));return e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,ii||(ii=(0,o.Z)("span",{className:"material-icon"},void 0,"lock_open")),gettext("Unprotect"))):null}}]),n}(v().Component),Oi=function(e){(0,u.Z)(n,e);var t=fi(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Us(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.selection.find((function(e){return e.acl.can_hide&&!e.is_hidden}));return e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,oi||(oi=(0,o.Z)("span",{className:"material-icon"},void 0,"visibility_off")),gettext("Hide"))):null}}]),n}(v().Component),Ti=function(e){(0,u.Z)(n,e);var t=fi(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Ms(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.selection.find((function(e){return e.acl.can_unhide&&e.is_hidden}));return e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,ri||(ri=(0,o.Z)("span",{className:"material-icon"},void 0,"visibility")),gettext("Unhide"))):null}}]),n}(v().Component),Ai=function(e){(0,u.Z)(n,e);var t=fi(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Fs(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.selection.find((function(e){return e.acl.can_delete}));return e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,li||(li=(0,o.Z)("span",{className:"material-icon"},void 0,"clear")),gettext("Delete"))):null}}]),n}(v().Component),Bi=function(e){var t=e.thread,n=e.user,a=e.selection,s=e.dropup;return(0,o.Z)("div",{className:s?"dropup":"dropdown"},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-default btn-outline btn-icon dropdown-toggle",title:gettext("Posts options"),"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",disabled:0===a.length},void 0,mi||(mi=(0,o.Z)("span",{className:"material-icon"},void 0,"settings"))),(0,o.Z)(vi,{thread:t,user:n,selection:a}))},Ii=function(e){var t=e.onClick;return(0,o.Z)("button",{className:"btn btn-primary btn-outline btn-block",type:"button",onClick:t},void 0,Zi||(Zi=(0,o.Z)("span",{className:"material-icon"},void 0,"chat")),gettext("Reply"))},ji=function(e){var t=e.thread,n=e.posts,a=e.user,s=e.selection,i=e.moderation,r=e.onReply;return(0,o.Z)(Ls.o8,{},void 0,(0,o.Z)(Ls.Z2,{},void 0,(0,o.Z)(Ls.Eg,{},void 0,(0,o.Z)(Os,{baseUrl:t.url.index,posts:n})),(0,o.Z)(Ls.Eg,{className:"hidden-sm hidden-md hidden-lg",shrink:!0},void 0,(0,o.Z)(Bi,{thread:t,user:a,selection:s,dropup:!0}))),(0,o.Z)(Ls.Z2,{className:"hidden-xs hidden-sm",auto:!0},void 0,(0,o.Z)(Ls.Eg,{},void 0,(0,o.Z)(Ts,{posts:n}))),gi||(gi=(0,o.Z)(Ls.tw,{className:"hidden-md hidden-lg"})),a.is_authenticated&&(0,o.Z)(Ls.Z2,{},void 0,(0,o.Z)(Ls.Eg,{},void 0,(0,o.Z)(xs,{thread:t})),t.acl.can_reply&&(0,o.Z)(Ls.Eg,{},void 0,(0,o.Z)(Ii,{onClick:r})),i.enabled&&(0,o.Z)(Ls.Eg,{className:"hidden-xs",shrink:!0},void 0,(0,o.Z)(Bi,{thread:t,user:a,selection:s,dropup:!0}))))},Di=function(e){var t=e.compact,n=e.onClick;return(0,o.Z)("button",{className:cs()("btn btn-default btn-outline",{"btn-block":!t,"btn-icon":t}),type:"button",title:t?gettext("Add poll"):null,onClick:n},void 0,bi||(bi=(0,o.Z)("span",{className:"material-icon"},void 0,"poll")),!t&&gettext("Add poll"))},Ui=function(e){var t=e.user,n=e.thread;return(0,o.Z)("div",{className:"dropdown"},void 0,(0,o.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:gettext("Shortcuts"),"aria-expanded":"true","aria-haspopup":"true","data-toggle":"dropdown",type:"button"},void 0,yi||(yi=(0,o.Z)("span",{className:"material-icon"},void 0,"bookmark"))),(0,o.Z)("ul",{className:"dropdown-menu"},void 0,t.is_authenticated&&n.is_new&&(0,o.Z)("li",{},void 0,(0,o.Z)("a",{className:"btn btn-link",href:n.url.new_post},void 0,_i||(_i=(0,o.Z)("span",{className:"material-icon"},void 0,"comment")),gettext("Go to new post"))),n.best_answer&&(0,o.Z)("li",{},void 0,(0,o.Z)("a",{className:"btn btn-link",href:n.url.best_answer},void 0,Ni||(Ni=(0,o.Z)("span",{className:"material-icon"},void 0,"check_circle")),gettext("Go to best answer"))),n.has_unapproved_posts&&n.acl.can_approve&&(0,o.Z)("li",{},void 0,(0,o.Z)("a",{className:"btn btn-link",href:n.url.unapproved_post},void 0,ki||(ki=(0,o.Z)("span",{className:"material-icon"},void 0,"visibility")),gettext("Go to unapproved post"))),(0,o.Z)("li",{},void 0,(0,o.Z)("a",{className:"btn btn-link",href:n.url.last_post},void 0,xi||(xi=(0,o.Z)("span",{className:"material-icon"},void 0,"reply")),gettext("Go to last post")))))},Mi=function(e){var t=e.thread,n=e.posts,a=e.user,s=e.selection,i=e.moderation,r=e.onPoll,l=e.onReply;return(0,o.Z)(Ls.o8,{},void 0,(0,o.Z)(Ls.Z2,{className:"hidden-xs"},void 0,(0,o.Z)(Ls.Eg,{},void 0,(0,o.Z)(Ui,{thread:t,user:a})),(0,o.Z)(Ls.Eg,{className:"hidden-xs hidden-sm"},void 0,(0,o.Z)(Os,{baseUrl:t.url.index,posts:n}))),wi||(wi=(0,o.Z)(Ls.tw,{})),t.acl.can_start_poll&&!t.poll&&(0,o.Z)(Ls.Z2,{className:"hidden-xs"},void 0,(0,o.Z)(Ls.Eg,{},void 0,(0,o.Z)(Di,{onClick:r}))),t.acl.can_reply?(0,o.Z)(Ls.Z2,{},void 0,(0,o.Z)(Ls.Eg,{className:"hidden-sm hidden-md hidden-lg",shrink:!0},void 0,(0,o.Z)(Ui,{thread:t,user:a})),(0,o.Z)(Ls.Eg,{},void 0,(0,o.Z)(Ii,{onClick:l})),t.acl.can_start_poll&&!t.poll&&(0,o.Z)(Ls.Eg,{className:"hidden-sm hidden-md hidden-lg",shrink:!0},void 0,(0,o.Z)(Di,{onClick:r,compact:!0})),i.enabled&&(0,o.Z)(Ls.Eg,{className:"hidden-xs",shrink:!0},void 0,(0,o.Z)(Bi,{thread:t,user:a,selection:s}))):(0,o.Z)(Ls.Z2,{},void 0,(0,o.Z)(Ls.Eg,{className:"hidden-sm hidden-md hidden-lg",shrink:!0},void 0,(0,o.Z)(Ui,{thread:t,user:a})),t.acl.can_start_poll&&!t.poll&&(0,o.Z)(Ls.Eg,{},void 0,(0,o.Z)(Di,{onClick:r})),i.enabled&&(0,o.Z)(Ls.Eg,{shrink:!0},void 0,(0,o.Z)(Bi,{thread:t,user:a,selection:s}))))};var zi=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(){var e;(0,r.Z)(this,s);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return e=a.call.apply(a,[this].concat(n)),(0,h.Z)((0,c.Z)(e),"update",(function(t){x.Z.dispatch(y.gx(t)),x.Z.dispatch(Mn.zD(t.post_set)),t.participants&&x.Z.dispatch(b.gx(t.participants)),t.poll&&x.Z.dispatch(ma.gx(t.poll)),e.setPageTitle()})),(0,h.Z)((0,c.Z)(e),"openPollForm",(function(){ft.Z.open({mode:"POLL",submit:e.props.thread.api.poll,thread:e.props.thread,poll:null})})),(0,h.Z)((0,c.Z)(e),"openReplyForm",(function(){ft.Z.open({mode:"REPLY",config:e.props.thread.api.editor,submit:e.props.thread.api.posts.index})})),e}return(0,l.Z)(s,[{key:"componentDidMount",value:function(){this.shouldFetchData()&&(this.fetchData(),this.setPageTitle()),this.startPollingApi()}},{key:"componentDidUpdate",value:function(){this.shouldFetchData()&&(this.fetchData(),this.startPollingApi(),this.setPageTitle())}},{key:"componentWillUnmount",value:function(){this.stopPollingApi()}},{key:"shouldFetchData",value:function(){return!!this.props.posts.isLoaded&&1*(this.props.params.page||1)!=this.props.posts.page}},{key:"fetchData",value:function(){var e=this;x.Z.dispatch(Mn.Rz()),_.Z.get(this.props.thread.api.posts.index,{page:this.props.params.page||1},"posts").then((function(t){e.update(t)}),(function(e){k.Z.apiError(e)}))}},{key:"startPollingApi",value:function(){Za.Z.start({poll:"thread-posts",url:this.props.thread.api.posts.index,data:{page:this.props.params.page||1},update:this.update,frequency:12e4,delayed:!0})}},{key:"stopPollingApi",value:function(){Za.Z.stop("thread-posts")}},{key:"setPageTitle",value:function(){ga.Z.set({title:this.props.thread.title,parent:this.props.thread.category.name,page:1*(this.props.params.page||1)})}},{key:"render",value:function(){var e=this.props.thread.category,t="page page-thread";e.css_class&&(t+=" page-thread-"+e.css_class);var n="private_threads"===e.special_role?"private-threads":e.css_class||"category-threads",a=Hi(this.props.thread,this.props.user),s=Fi(this.props.posts.results,this.props.user),i=this.props.posts.results.filter((function(e){return e.isSelected}));return(0,o.Z)("div",{className:t},void 0,(0,o.Z)(Es,{styleName:n,thread:this.props.thread,posts:this.props.posts,user:this.props.user,moderation:a}),(0,o.Z)(ba.Z,{},void 0,(0,o.Z)(U,{participants:this.props.participants,thread:this.props.thread,user:this.props.user}),(0,o.Z)(Mi,{thread:this.props.thread,posts:this.props.posts,user:this.props.user,selection:i,moderation:s,onPoll:this.openPollForm,onReply:this.openReplyForm}),(0,o.Z)(z.n,{poll:this.props.poll,thread:this.props.thread,user:this.props.user}),v().createElement(da,this.props),(0,o.Z)(ji,{thread:this.props.thread,posts:this.props.posts,user:this.props.user,selection:i,moderation:s,onReply:this.openReplyForm})))}}]),s}(v().Component),Hi=function(e,t){var n={enabled:!1,edit:!1,approve:!1,close:!1,open:!1,hide:!1,unhide:!1,move:!1,merge:!1,pinGlobally:!1,pinLocally:!1,unpin:!1,delete:!1};return t.is_authenticated?(n.edit=e.acl.can_edit,n.approve=e.acl.can_approve&&e.is_unapproved,n.close=e.acl.can_close&&!e.is_closed,n.open=e.acl.can_close&&e.is_closed,n.hide=e.acl.can_hide&&!e.is_hidden,n.unhide=e.acl.can_unhide&&e.is_hidden,n.move=e.acl.can_move,n.merge=e.acl.can_merge,n.pinGlobally=e.acl.can_pin_globally&&e.weight<2,n.pinLocally=e.acl.can_pin&&1!==e.weight,n.unpin=e.acl.can_pin&&1===e.weight||e.acl.can_pin_globally&&2===e.weight,n.delete=e.acl.can_delete,n.enabled=n.edit||n.approve||n.close||n.open||n.hide||n.unhide||n.move||n.merge||n.pinGlobally||n.pinLocally||n.unpin||n.delete,n):n},Fi=function(e,t){var n={enabled:!1,approve:!1,move:!1,merge:!1,protect:!1,hide:!1,delete:!1};return t.is_authenticated?(e.forEach((function(e){e.is_event||(e.acl.can_approve&&e.is_unapproved&&(n.approve=!0),e.acl.can_move&&(n.move=!0),e.acl.can_merge&&(n.merge=!0),(e.acl.can_protect||e.acl.can_unprotect)&&(n.protect=!0),(e.acl.can_hide||e.acl.can_unhide)&&(n.hide=!0),e.acl.can_delete&&(n.delete=!0),(n.approve||n.move||n.merge||n.protect||n.hide||n.delete)&&(n.enabled=!0))})),n):n};function qi(e){return{participants:e.participants,poll:e.poll,posts:e.posts,thread:e.thread,tick:e.tick.tick,user:e.auth.user}}var Yi=n(39633);E.Z.addInitializer({name:"component:thread",initializer:function(e){var t,n;e.has("THREAD")&&e.has("POSTS")&&(0,Yi.Z)({paths:(t=E.Z.get("THREAD"),n=t.url.index.replace(t.slug+"-"+t.pk,":slug"),[{path:n,component:(0,i.$j)(qi)(zi)},{path:n+":page/",component:(0,i.$j)(qi)(zi)}])})},after:"store"})},72168:function(e,t,n){"use strict";var a=n(37424),s=n(22928),i=n(15671),o=n(43144),r=n(97326),l=n(79340),c=n(6215),u=n(61120),d=n(4942),p=n(57588),h=n.n(p),f=n(82211);function v(e,t){return e.last_post>t.last_post?-1:e.last_post<t.last_post?1:0}function m(e,t){return 2===e.weight&&e.weight>t.weight?-1:2===t.weight&&e.weight<t.weight?1:v(e,t)}function Z(e,t){return e.weight>t.weight?-1:e.weight<t.weight?1:v(e,t)}var g,b,y=n(59131),_=n(27950),N=n(92490),k=n(69987),x=function(e){var t=e.allItems,n=e.parentUrl,a=e.category,i=e.categories,o=e.list;return(0,s.Z)("div",{className:"dropdown threads-category-picker"},void 0,(0,s.Z)("button",{type:"button",className:"btn btn-default btn-outline dropdown-toggle btn-block text-ellipsis","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,a&&(0,s.Z)("span",{className:"material-icon",style:{color:a.color||"inherit"}},void 0,"label"),a&&a.short_name&&(0,s.Z)("span",{className:a.short_name&&"hidden-md hidden-lg"},void 0,a.short_name),a?(0,s.Z)("span",{className:a.short_name&&"hidden-xs hidden-sm"},void 0,a.name):t),(0,s.Z)("ul",{className:"dropdown-menu"},void 0,(0,s.Z)("li",{},void 0,(0,s.Z)(k.rU,{to:n+o.path},void 0,t)),g||(g=(0,s.Z)("li",{role:"separator",className:"divider"})),i.map((function(e){return(0,s.Z)("li",{},e.id,(0,s.Z)(k.rU,{to:e.url.index+o.path},void 0,(0,s.Z)("span",{className:"material-icon",style:{color:e.color||"inherit"}},void 0,"label"),e.name))}))))},w=function(e){var t=e.baseUrl,n=e.list,a=e.lists;return(0,s.Z)("div",{className:"dropdown threads-list-picker"},void 0,(0,s.Z)("button",{type:"button",className:"btn btn-default btn-outline dropdown-toggle btn-block","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,n.longName),(0,s.Z)("ul",{className:"dropdown-menu stick-to-bottom"},void 0,a.map((function(e){return(0,s.Z)("li",{},e.type,(0,s.Z)(k.rU,{to:t+e.path},void 0,e.longName))}))))};var R=function(e){(0,l.Z)(r,e);var t,n,a=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function r(){return(0,i.Z)(this,r),a.apply(this,arguments)}return(0,o.Z)(r,[{key:"render",value:function(){return(0,s.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,s.Z)("div",{className:"modal-content"},void 0,(0,s.Z)("div",{className:"modal-header"},void 0,(0,s.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,b||(b=(0,s.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,s.Z)("h4",{className:"modal-title"},void 0,gettext("Threads moderation"))),(0,s.Z)("div",{className:"modal-body"},void 0,(0,s.Z)("p",{className:"lead"},void 0,gettext("One or more threads could not be deleted:")),(0,s.Z)("ul",{className:"list-unstyled list-errored-items"},void 0,this.props.errors.map((function(e){return(0,s.Z)(C,{errors:e.errors,thread:e.thread},e.thread.id)}))))))}}]),r}(h().Component);function C(e){var t=e.errors,n=e.thread;return(0,s.Z)("li",{},void 0,(0,s.Z)("h5",{},void 0,n.title),t.map((function(e,t){return(0,s.Z)("p",{},void 0,e)})))}var S,E,L,P,O=n(43345),T=n(96359),A=n(57026),B=n(60471),I=n(32233),j=n(61340),D=n(77751),U=n(52753),M=n(78657),z=n(59801),H=n(53904),F=n(90287),q=n(55210);var Y,V,$=function(e){(0,l.Z)(p,e);var t,n,a=(t=p,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function p(e){var t;for(var n in(0,i.Z)(this,p),t=a.call(this,e),(0,d.Z)((0,r.Z)(t),"getFormdata",(function(){return{threads:t.props.threads.map((function(e){return e.id})),title:t.state.title,category:t.state.category,weight:t.state.weight,is_hidden:t.state.is_hidden,is_closed:t.state.is_closed}})),(0,d.Z)((0,r.Z)(t),"handleSuccess",(function(e){t.props.threads.forEach((function(e){t.props.freezeThread(e.id),t.props.deleteThread(e)})),F.Z.dispatch(D.YP()),t.props.addThreads([e]),F.Z.dispatch((0,j.V8)(t.props.route.category,t.props.categoriesMap)),z.Z.hide()})),(0,d.Z)((0,r.Z)(t),"handleError",(function(e){400===e.status?e.best_answers||e.polls?z.Z.show((0,s.Z)(U.ZP,{api:I.Z.get("MERGE_THREADS_API"),bestAnswers:e.best_answers,data:t.getFormdata(),polls:e.polls,onError:t.handleError,onSuccess:t.handleSuccess})):(t.setState({errors:Object.assign({},t.state.errors,e)}),H.Z.error(gettext("Form contains errors."))):403===e.status&&Array.isArray(e)?z.Z.show((0,s.Z)(R,{errors:e})):e.best_answer?H.Z.error(e.best_answer[0]):e.poll?H.Z.error(e.poll[0]):H.Z.apiError(e)})),(0,d.Z)((0,r.Z)(t),"onCategoryChange",(function(e){var n=e.target.value,a={category:n};t.acl[n].can_pin_threads<a.weight&&(a.weight=0),t.acl[n].can_hide_threads||(a.is_hidden=0),t.acl[n].can_close_threads||(a.is_closed=!1),t.setState(a)})),t.state={isLoading:!1,title:"",category:null,weight:0,is_hidden:0,is_closed:!1,validators:{title:[q.C1()]},errors:{}},t.acl={},e.user.acl.categories)if(e.user.acl.categories.hasOwnProperty(n)){var o=e.user.acl.categories[n];t.acl[o.id]=o}return t.categoryChoices=[],e.categories.forEach((function(e){if(e.level>0){var n=t.acl[e.id],a=!n.can_start_threads||e.is_closed&&!n.can_close_threads;t.categoryChoices.push({value:e.id,disabled:a,level:e.level-1,label:e.name}),a||t.state.category||(t.state.category=e.id)}})),t.isHiddenChoices=[{value:0,icon:"visibility",label:gettext("No")},{value:1,icon:"visibility_off",label:gettext("Yes")}],t.isClosedChoices=[{value:!1,icon:"lock_outline",label:gettext("No")},{value:!0,icon:"lock",label:gettext("Yes")}],t}return(0,o.Z)(p,[{key:"clean",value:function(){return!!this.isValid()||(H.Z.error(gettext("Form contains errors.")),this.setState({errors:this.validate()}),!1)}},{key:"send",value:function(){return M.Z.post(I.Z.get("MERGE_THREADS_API"),this.getFormdata())}},{key:"getWeightChoices",value:function(){var e=[{value:0,icon:"remove",label:gettext("Not pinned")},{value:1,icon:"bookmark_border",label:gettext("Pinned locally")}];return 2==this.acl[this.state.category].can_pin_threads&&e.push({value:2,icon:"bookmark",label:gettext("Pinned globally")}),e}},{key:"renderWeightField",value:function(){return this.acl[this.state.category].can_pin_threads?(0,s.Z)(T.Z,{label:gettext("Thread weight"),for:"id_weight"},void 0,(0,s.Z)(B.Z,{id:"id_weight",onChange:this.bindInput("weight"),value:this.state.weight,choices:this.getWeightChoices()})):null}},{key:"renderHiddenField",value:function(){return this.acl[this.state.category].can_hide_threads?(0,s.Z)(T.Z,{label:gettext("Hide thread"),for:"id_is_hidden"},void 0,(0,s.Z)(B.Z,{id:"id_is_closed",onChange:this.bindInput("is_hidden"),value:this.state.is_hidden,choices:this.isHiddenChoices})):null}},{key:"renderClosedField",value:function(){return this.acl[this.state.category].can_close_threads?(0,s.Z)(T.Z,{label:gettext("Close thread"),for:"id_is_closed"},void 0,(0,s.Z)(B.Z,{id:"id_is_closed",onChange:this.bindInput("is_closed"),value:this.state.is_closed,choices:this.isClosedChoices})):null}},{key:"renderForm",value:function(){return(0,s.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,s.Z)("div",{className:"modal-body"},void 0,(0,s.Z)(T.Z,{label:gettext("Thread title"),for:"id_title",validation:this.state.errors.title},void 0,(0,s.Z)("input",{id:"id_title",className:"form-control",type:"text",onChange:this.bindInput("title"),value:this.state.title})),S||(S=(0,s.Z)("div",{className:"clearfix"})),(0,s.Z)(T.Z,{label:gettext("Category"),for:"id_category",validation:this.state.errors.category},void 0,(0,s.Z)(A.Z,{id:"id_category",onChange:this.onCategoryChange,value:this.state.category,choices:this.categoryChoices})),E||(E=(0,s.Z)("div",{className:"clearfix"})),this.renderWeightField(),this.renderHiddenField(),this.renderClosedField()),(0,s.Z)("div",{className:"modal-footer"},void 0,(0,s.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,s.Z)(f.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Merge threads"))))}},{key:"renderCantMergeMessage",value:function(){return(0,s.Z)("div",{className:"modal-body"},void 0,L||(L=(0,s.Z)("div",{className:"message-icon"},void 0,(0,s.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,s.Z)("div",{className:"message-body"},void 0,(0,s.Z)("p",{className:"lead"},void 0,gettext("You can't move threads because there are no categories you are allowed to move them to.")),(0,s.Z)("p",{},void 0,gettext("You need permission to start threads in category to be able to merge threads to it.")),(0,s.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,gettext("Ok"))))}},{key:"getClassName",value:function(){return this.state.category?"modal-dialog":"modal-dialog modal-message"}},{key:"render",value:function(){return(0,s.Z)("div",{className:this.getClassName(),role:"document"},void 0,(0,s.Z)("div",{className:"modal-content"},void 0,(0,s.Z)("div",{className:"modal-header"},void 0,(0,s.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},void 0,P||(P=(0,s.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,s.Z)("h4",{className:"modal-title"},void 0,gettext("Merge threads"))),this.state.category?this.renderForm():this.renderCantMergeMessage()))}}]),p}(O.Z);var G,W,K,J,Q,X,ee,te,ne,ae,se,ie,oe,re,le=function(e){(0,l.Z)(p,e);var t,n,a=(t=p,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function p(e){var t;(0,i.Z)(this,p),t=a.call(this,e),(0,d.Z)((0,r.Z)(t),"handleSubmit",(function(e){e.preventDefault(),z.Z.hide(),t.props.callApi([{op:"replace",path:"category",value:t.state.category},{op:"replace",path:"flatten-categories",value:null},{op:"add",path:"acl",value:!0}],gettext("Selected threads were moved."),(function(){F.Z.dispatch((0,j.V8)(t.props.route.category,t.props.categoriesMap));var e=F.Z.getState(),n=e.threads.map((function(e){return e.id}));F.Z.dispatch(D.$6(e.selection.filter((function(e){return-1!==n.indexOf(e)}))))}))})),t.state={category:null};var n={};for(var s in e.user.acl.categories)if(e.user.acl.categories.hasOwnProperty(s)){var o=e.user.acl.categories[s];n[o.id]=o}return t.categoryChoices=[],e.categories.forEach((function(e){if(e.level>0){var a=n[e.id],s=!a.can_start_threads||e.is_closed&&!a.can_close_threads;t.categoryChoices.push({value:e.id,disabled:s,level:e.level-1,label:e.name}),s||t.state.category||(t.state.category=e.id)}})),t}return(0,o.Z)(p,[{key:"getClassName",value:function(){return this.state.category?"modal-dialog":"modal-dialog modal-message"}},{key:"renderForm",value:function(){return(0,s.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,s.Z)("div",{className:"modal-body"},void 0,(0,s.Z)(T.Z,{label:gettext("New category"),for:"id_new_category"},void 0,(0,s.Z)(A.Z,{id:"id_new_category",onChange:this.bindInput("category"),value:this.state.category,choices:this.categoryChoices}))),(0,s.Z)("div",{className:"modal-footer"},void 0,(0,s.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,s.Z)("button",{className:"btn btn-primary"},void 0,gettext("Move threads"))))}},{key:"renderCantMoveMessage",value:function(){return(0,s.Z)("div",{className:"modal-body"},void 0,Y||(Y=(0,s.Z)("div",{className:"message-icon"},void 0,(0,s.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,s.Z)("div",{className:"message-body"},void 0,(0,s.Z)("p",{className:"lead"},void 0,gettext("You can't move threads because there are no categories you are allowed to move them to.")),(0,s.Z)("p",{},void 0,gettext("You need permission to start threads in category to be able to move threads to it.")),(0,s.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,gettext("Ok"))))}},{key:"render",value:function(){return(0,s.Z)("div",{className:this.getClassName(),role:"document"},void 0,(0,s.Z)("div",{className:"modal-content"},void 0,(0,s.Z)("div",{className:"modal-header"},void 0,(0,s.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},void 0,V||(V=(0,s.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,s.Z)("h4",{className:"modal-title"},void 0,gettext("Move threads"))),this.state.category?this.renderForm():this.renderCantMoveMessage()))}}]),p}(O.Z);var ce,ue,de,pe=function(e){(0,l.Z)(p,e);var t,n,a=(t=p,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function p(){var e;(0,i.Z)(this,p);for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return e=a.call.apply(a,[this].concat(n)),(0,d.Z)((0,r.Z)(e),"callApi",(function(t,n){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;e.props.threads.forEach((function(t){e.props.freezeThread(t.id)}));var i=e.props.threads.map((function(e){return e.id}));t.push({op:"add",path:"acl",value:!0}),M.Z.patch(e.props.api,{ids:i,ops:t}).then((function(t){e.props.threads.forEach((function(t){e.props.freezeThread(t.id)})),t.forEach((function(t){e.props.updateThread(t)})),H.Z.success(n),a&&a()}),(function(t){if(e.props.threads.forEach((function(t){e.props.freezeThread(t.id)})),400!==t.status)return H.Z.apiError(t);var n=[],a={};e.props.threads.forEach((function(e){a[e.id]=e})),t.forEach((function(e){var t=e.id,s=e.detail;void 0!==a[t]&&n.push({errors:s,thread:a[t]})})),z.Z.show((0,s.Z)(R,{errors:n}))}))})),(0,d.Z)((0,r.Z)(e),"pinGlobally",(function(){e.callApi([{op:"replace",path:"weight",value:2}],gettext("Selected threads were pinned globally."))})),(0,d.Z)((0,r.Z)(e),"pinLocally",(function(){e.callApi([{op:"replace",path:"weight",value:1}],gettext("Selected threads were pinned locally."))})),(0,d.Z)((0,r.Z)(e),"unpin",(function(){e.callApi([{op:"replace",path:"weight",value:0}],gettext("Selected threads were unpinned."))})),(0,d.Z)((0,r.Z)(e),"approve",(function(){e.callApi([{op:"replace",path:"is-unapproved",value:!1}],gettext("Selected threads were approved."))})),(0,d.Z)((0,r.Z)(e),"open",(function(){e.callApi([{op:"replace",path:"is-closed",value:!1}],gettext("Selected threads were opened."))})),(0,d.Z)((0,r.Z)(e),"close",(function(){e.callApi([{op:"replace",path:"is-closed",value:!0}],gettext("Selected threads were closed."))})),(0,d.Z)((0,r.Z)(e),"unhide",(function(){e.callApi([{op:"replace",path:"is-hidden",value:!1}],gettext("Selected threads were unhidden."))})),(0,d.Z)((0,r.Z)(e),"hide",(function(){e.callApi([{op:"replace",path:"is-hidden",value:!0}],gettext("Selected threads were hidden."))})),(0,d.Z)((0,r.Z)(e),"move",(function(){z.Z.show((0,s.Z)(le,{callApi:e.callApi,categories:e.props.categories,categoriesMap:e.props.categoriesMap,route:e.props.route,user:e.props.user}))})),(0,d.Z)((0,r.Z)(e),"merge",(function(){var t=[];if(e.props.threads.forEach((function(e){e.acl.can_merge||t.append({id:e.id,title:e.title,errors:[gettext("You don't have permission to merge this thread with others.")]})})),e.props.threads.length<2)H.Z.info(gettext("You have to select at least two threads to merge."));else{if(t.length)return void z.Z.show((0,s.Z)(R,{errors:t}));z.Z.show(h().createElement($,e.props))}})),(0,d.Z)((0,r.Z)(e),"delete",(function(){if(window.confirm(gettext("Are you sure you want to delete selected threads?"))){e.props.threads.map((function(t){e.props.freezeThread(t.id)}));var t=e.props.threads.map((function(e){return e.id}));M.Z.delete(e.props.api,t).then((function(){e.props.threads.map((function(t){e.props.freezeThread(t.id),e.props.deleteThread(t)})),H.Z.success(gettext("Selected threads were deleted."))}),(function(t){if(400===t.status){var n=t.map((function(e){return e.id}));e.props.threads.map((function(t){e.props.freezeThread(t.id),-1===n.indexOf(t.id)&&e.props.deleteThread(t)})),z.Z.show((0,s.Z)(R,{errors:t}))}else H.Z.apiError(t)}))}})),e}return(0,o.Z)(p,[{key:"render",value:function(){var e=this.props,t=e.moderation,n=e.threads,a=0==this.props.selection.length;return(0,s.Z)("ul",{className:"dropdown-menu dropdown-menu-right stick-to-bottom"},void 0,(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",onClick:function(){return F.Z.dispatch(D.$6(n.map((function(e){return e.id}))))}},void 0,G||(G=(0,s.Z)("span",{className:"material-icon"},void 0,"check_box")),gettext("Select all"))),(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:function(){return F.Z.dispatch(D.YP())}},void 0,W||(W=(0,s.Z)("span",{className:"material-icon"},void 0,"check_box_outline_blank")),gettext("Select none"))),K||(K=(0,s.Z)("li",{role:"separator",className:"divider"})),!!t.can_pin_globally&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.pinGlobally},void 0,J||(J=(0,s.Z)("span",{className:"material-icon"},void 0,"bookmark")),gettext("Pin threads globally"))),!!t.can_pin&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.pinLocally},void 0,Q||(Q=(0,s.Z)("span",{className:"material-icon"},void 0,"bookmark_border")),gettext("Pin threads locally"))),!!t.can_pin&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.unpin},void 0,X||(X=(0,s.Z)("span",{className:"material-icon"},void 0,"panorama_fish_eye")),gettext("Unpin threads"))),!!t.can_move&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.move},void 0,ee||(ee=(0,s.Z)("span",{className:"material-icon"},void 0,"arrow_forward")),gettext("Move threads"))),!!t.can_merge&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.merge},void 0,te||(te=(0,s.Z)("span",{className:"material-icon"},void 0,"call_merge")),gettext("Merge threads"))),!!t.can_approve&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.approve},void 0,ne||(ne=(0,s.Z)("span",{className:"material-icon"},void 0,"done")),gettext("Approve threads"))),!!t.can_close&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.open},void 0,ae||(ae=(0,s.Z)("span",{className:"material-icon"},void 0,"lock_open")),gettext("Open threads"))),!!t.can_close&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.close},void 0,se||(se=(0,s.Z)("span",{className:"material-icon"},void 0,"lock_outline")),gettext("Close threads"))),!!t.can_unhide&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.unhide},void 0,ie||(ie=(0,s.Z)("span",{className:"material-icon"},void 0,"visibility")),gettext("Unhide threads"))),!!t.can_hide&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.hide},void 0,oe||(oe=(0,s.Z)("span",{className:"material-icon"},void 0,"visibility_off")),gettext("Hide threads"))),!!t.can_delete&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.delete},void 0,re||(re=(0,s.Z)("span",{className:"material-icon"},void 0,"clear")),gettext("Delete threads"))))}}]),p}(h().Component),he=function(e){var t=e.api,n=e.categoriesMap,a=e.categories,i=e.threads,o=e.addThreads,r=e.freezeThread,l=e.updateThread,c=e.deleteThread,u=e.selection,d=e.moderation,p=e.route,h=e.user,f=e.disabled;return(0,s.Z)("div",{className:"dropdown threads-moderation"},void 0,(0,s.Z)("button",{type:"button",className:"btn btn-default btn-outline btn-icon dropdown-toggle",title:gettext("Moderation"),"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",disabled:f},void 0,ce||(ce=(0,s.Z)("span",{className:"material-icon"},void 0,"settings"))),(0,s.Z)(pe,{api:t,categories:a,categoriesMap:n,threads:i,addThreads:o,freezeThread:r,updateThread:l,deleteThread:c,selection:u,moderation:d,route:p,user:h,disabled:f}))},fe=function(e){var t=e.api,n=e.baseUrl,a=e.category,i=e.categories,o=e.categoriesMap,r=e.topCategory,l=e.topCategories,c=e.subCategory,u=e.subCategories,d=e.list,p=e.lists,h=e.threads,v=e.addThreads,m=e.startThread,Z=e.freezeThread,g=e.updateThread,b=e.deleteThread,y=e.selection,k=e.moderation,R=e.route,C=e.user,S=e.disabled;return(0,s.Z)(N.o8,{},void 0,l.length>0&&(0,s.Z)(N.Z2,{},void 0,(0,s.Z)(N.Eg,{},void 0,(0,s.Z)(x,{allItems:gettext("All categories"),parentUrl:d.path,category:r,categories:l,list:d})),r&&u.length>0&&(0,s.Z)(N.Eg,{},void 0,(0,s.Z)(x,{allItems:gettext("All subcategories"),parentUrl:r.url.index,category:c,categories:u,list:d}))),p.length>1&&(0,s.Z)(N.Z2,{className:"hidden-xs"},void 0,(0,s.Z)(N.Eg,{},void 0,(0,s.Z)(w,{baseUrl:n,list:d,lists:p}))),ue||(ue=(0,s.Z)(N.tw,{})),!!C.id&&(0,s.Z)(N.Z2,{},void 0,(0,s.Z)(N.Eg,{},void 0,(0,s.Z)(f.Z,{className:"btn-primary btn-outline btn-block",disabled:S,onClick:function(){_.Z.open(m||{mode:"START",config:misago.get("THREAD_EDITOR_API"),submit:misago.get("THREADS_API"),category:a.id})}},void 0,de||(de=(0,s.Z)("span",{className:"material-icon"},void 0,"chat")),gettext("Start thread"))),!!k.allow&&(0,s.Z)(N.Eg,{shrink:!0},void 0,(0,s.Z)(he,{api:t,categories:i,categoriesMap:o,threads:h.filter((function(e){return-1!==y.indexOf(e.id)})),addThreads:v,freezeThread:Z,updateThread:g,deleteThread:b,selection:y,moderation:k,route:R,user:C,disabled:S}))))};var ve=function(e){(0,l.Z)(r,e);var t,n,a=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function r(){return(0,i.Z)(this,r),a.apply(this,arguments)}return(0,o.Z)(r,[{key:"render",value:function(){var e=this.props.root,t=this.props.route,n=t.category,a=t.categories,i=t.categoriesMap,o=me(e,n,i);return(0,s.Z)(y.Z,{},void 0,(0,s.Z)(fe,{api:this.props.api,baseUrl:n.url.index,category:n,categories:a,categoriesMap:i,topCategory:o,topCategories:a.filter((function(t){return t.parent===e.id})),subCategories:o?a.filter((function(e){return e.parent===o.id})):[],subCategory:2===n.level?n:null,subcategories:this.props.subcategories,list:this.props.route.list,lists:this.props.route.lists,threads:this.props.threads,addThreads:this.props.addThreads,startThread:this.props.startThread,freezeThread:this.props.freezeThread,deleteThread:this.props.deleteThread,updateThread:this.props.updateThread,selection:this.props.selection,moderation:this.props.moderation,route:this.props.route,user:this.props.user,disabled:!this.props.isLoaded||this.props.isBusy||this.props.busyThreads.length}),this.props.children)}}]),r}(h().Component),me=function(e,t,n){return t.parent?t.parent===e.id?t:n[t.parent]:null};function Ze(e){var t={allow:!1,can_approve:0,can_close:0,can_delete:0,can_hide:0,can_merge:0,can_move:0,can_pin:0,can_pin_globally:0,can_unhide:0};return e.forEach((function(e){e.is_unapproved&&e.acl.can_approve>t.can_approve&&(t.can_approve=e.acl.can_approve),e.acl.can_close>t.can_close&&(t.can_close=e.acl.can_close),e.acl.can_delete>t.can_delete&&(t.can_delete=e.acl.can_delete),e.acl.can_hide>t.can_hide&&(t.can_hide=e.acl.can_hide),e.acl.can_merge>t.can_merge&&(t.can_merge=e.acl.can_merge),e.acl.can_move>t.can_move&&(t.can_move=e.acl.can_move),e.acl.can_pin>t.can_pin&&(t.can_pin=e.acl.can_pin),e.acl.can_pin_globally>t.can_pin_globally&&(t.can_pin_globally=e.acl.can_pin_globally),e.is_hidden&&e.acl.can_unhide>t.can_unhide&&(t.can_unhide=e.acl.can_unhide),t.allow=t.can_approve||t.can_close||t.can_delete||t.can_hide||t.can_merge||t.can_move||t.can_pin||t.can_pin_globally||t.can_unhide})),t}var ge,be,ye,_e,Ne=function(e){var t=e.category,n=e.list,a=e.message;return"all"===n.type?a?(0,s.Z)("li",{className:"list-group-item empty-message"},void 0,(0,s.Z)("p",{className:"lead"},void 0,a),(0,s.Z)("p",{},void 0,gettext("Why not start one yourself?"))):(0,s.Z)("li",{className:"list-group-item empty-message"},void 0,(0,s.Z)("p",{className:"lead"},void 0,t.special_role?gettext("There are no threads on this forum... yet!"):gettext("There are no threads in this category.")),(0,s.Z)("p",{},void 0,gettext("Why not start one yourself?"))):(0,s.Z)("li",{className:"list-group-item empty-message"},void 0,(0,s.Z)("p",{className:"lead"},void 0,gettext("No threads matching specified criteria were found.")))},ke=n(50366),xe=n(16768),we=function(e){var t=e.thread;return(0,s.Z)("a",{href:t.url.last_post,className:"threads-list-item-last-activity",title:interpolate(gettext("Last activity: %(timestamp)s"),{timestamp:t.last_post_on.format("LLL")},!0)},void 0,t.last_post_on.fromNow(!0))},Re=function(e){var t="threads-list-item-category threads-list-category-label";return e.color&&(t+=" threads-list-category-label-color"),t},Ce=function(e){var t=e.parent,n=e.category;return(0,s.Z)("span",{},void 0,t&&(0,s.Z)("a",{href:t.url.index,className:Re(t)+" threads-list-item-parent-category",style:t.color?{"--label-color":t.color}:null,title:t.short_name?t.name:null},void 0,t.short_name||t.name),(0,s.Z)("a",{href:n.url.index,className:Re(n),style:n.color?{"--label-color":n.color}:null,title:n.short_name?n.name:null},void 0,n.short_name||n.name))},Se=function(e){var t=e.checked,n=e.disabled,a=e.thread;return(0,s.Z)("button",{className:"btn btn-default btn-icon",type:"button",disabled:n,onClick:function(){return F.Z.dispatch(D.wc(a.id))}},void 0,(0,s.Z)("span",{className:"material-icon"},void 0,t?"check_box":"check_box_outline_blank"))},Ee=function(e){var t=e.thread,n="threads-list-icon";return t.is_read||(n+=" threads-list-icon-new"),(0,s.Z)("a",{title:t.is_read?gettext("No new posts"):gettext("New posts"),href:t.is_read?t.url.last_post:t.url.new_post,className:n},void 0,(0,s.Z)("span",{className:"material-icon"},void 0,t.is_read?"chat_bubble_outline":"chat_bubble"))},Le=n(19605),Pe=function(e){var t=e.thread;return t.last_poster?(0,s.Z)("a",{href:t.url.last_poster,className:"threads-list-item-last-poster",title:interpolate(gettext("Last post by: %(poster)s"),{poster:t.last_poster.username},!0)},void 0,(0,s.Z)(Le.ZP,{size:32,user:t.last_poster})):(0,s.Z)("span",{className:"threads-list-item-last-poster",title:interpolate(gettext("Last post by: %(poster)s"),{poster:t.last_poster_name},!0)},void 0,ge||(ge=(0,s.Z)(Le.ZP,{size:32})))};var Oe,Te,Ae,Be,Ie,je,De,Ue,Me,ze,He={unsubscribe:null,notify:!1,email:!0},Fe=function(e){(0,l.Z)(p,e);var t,n,a=(t=p,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function p(e){var t;return(0,i.Z)(this,p),t=a.call(this,e),(0,d.Z)((0,r.Z)(t),"update",(function(e){var n=t.props.thread;t.setState({loading:!0}),F.Z.dispatch((0,j.r$)(n,{subscription:He[e]})),M.Z.patch(n.api.index,[{op:"replace",path:"subscription",value:e}]).then((function(){}),(function(e){F.Z.dispatch((0,j.r$)(n,{subscription:He[n.subscription]})),H.Z.apiError(e)})).then((function(){return t.setState({loading:!1})}))})),(0,d.Z)((0,r.Z)(t),"render",(function(){var e=t.state.loading,n=t.props,a=n.disabled,i=n.thread;return(0,s.Z)("ul",{className:"dropdown-menu dropdown-menu-right"},void 0,(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn-link",disabled:a||e||null===i.subscription,onClick:function(){return t.update("unsubscribe")}},void 0,be||(be=(0,s.Z)("span",{className:"material-icon"},void 0,"star_border")),gettext("Unsubscribe"))),(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn-link",disabled:a||e||!1===i.subscription,onClick:function(){return t.update("notify")}},void 0,ye||(ye=(0,s.Z)("span",{className:"material-icon"},void 0,"star_half")),gettext("Subscribe with alert"))),(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn-link",disabled:a||e||!0===i.subscription,onClick:function(){return t.update("email")}},void 0,_e||(_e=(0,s.Z)("span",{className:"material-icon"},void 0,"star")),gettext("Subscribe with e-mail"))))})),t.state={loading:!1},t}return(0,o.Z)(p)}(h().Component),qe=function(e){var t,n=e.disabled,a=e.thread;return(0,s.Z)("div",{className:"dropdown"},void 0,(0,s.Z)("button",{className:"btn btn-default btn-icon",type:"button",title:(t=a.subscription,!0===t?gettext("Subscribed to e-mails"):!1===t?gettext("Subscribed to alerts"):gettext("Not subscribed")),disabled:n,"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,(0,s.Z)("span",{className:"material-icon"},void 0,function(e){return!0===e?"star":!1===e?"star_half":"star_border"}(a.subscription))),(0,s.Z)(Fe,{disabled:n,thread:a}))},Ye=function(e){var t=e.activeCategory,n=e.categories,a=e.showOptions,i=e.showSubscription,o=e.thread,r=e.isBusy,l=e.isSelected,c=null,u=null;t.id!==o.category&&(u=n[o.category]).parent&&u.parent!==t.id&&n[u.parent]&&!n[u.parent].special_role&&(c=n[u.parent]);var d=o.is_closed||o.is_hidden||o.is_unapproved||o.weight>0||o.best_answer||o.has_poll||o.has_unapproved_posts,p=!a||o.is_new;return(0,s.Z)("li",{className:"list-group-item threads-list-item"+(r?" threads-list-item-is-busy":"")},void 0,(0,s.Z)("div",{className:"threads-list-item-top-row"},void 0,a&&(0,s.Z)("div",{className:"threads-list-item-col-icon"},void 0,(0,s.Z)(Ee,{thread:o})),(0,s.Z)("div",{className:"threads-list-item-col-title"},void 0,(0,s.Z)("a",{href:o.url.index,className:"threads-list-item-title"},void 0,o.title),(0,s.Z)("a",{href:p?o.url.new_post:o.url.index,className:"threads-list-item-title-sm"+(p?" threads-list-item-title-new":"")},void 0,o.title)),a&&o.moderation.length>0&&(0,s.Z)("div",{className:"threads-list-item-col-checkbox-sm"},void 0,(0,s.Z)(Se,{checked:l,disabled:r,thread:o}))),(0,s.Z)("div",{className:"threads-list-item-bottom-row"},void 0,d&&(0,s.Z)("div",{className:"threads-list-item-col-flags"},void 0,(0,s.Z)(ke.Z,{thread:o})),!!u&&(0,s.Z)("div",{className:"threads-list-item-col-category"},void 0,(0,s.Z)(Ce,{parent:c,category:u})),(0,s.Z)("div",{className:"threads-list-item-col-replies"},void 0,(0,s.Z)(xe.Z,{thread:o})),(0,s.Z)("div",{className:"threads-list-item-col-last-poster"},void 0,(0,s.Z)(Pe,{thread:o})),(0,s.Z)("div",{className:"threads-list-item-col-last-activity"},void 0,(0,s.Z)(we,{thread:o})),a&&i&&(0,s.Z)("div",{className:"threads-list-item-col-subscription"},void 0,(0,s.Z)(qe,{disabled:r,thread:o})),a&&o.moderation.length>0&&(0,s.Z)("div",{className:"threads-list-item-col-checkbox"},void 0,(0,s.Z)(Se,{checked:l,disabled:r,thread:o}))))},Ve=function(e){var t=e.width;return(0,s.Z)("span",{className:"ui-preview-text",style:{width:t+"px"}},void 0," ")},$e=function(e){var t=e.showOptions;return(0,s.Z)("div",{className:"threads-list threads-list-loader"},void 0,(0,s.Z)("ul",{className:"list-group"},void 0,(0,s.Z)("li",{className:"list-group-item threads-list-item"},void 0,(0,s.Z)("div",{className:"threads-list-item-top-row"},void 0,t&&(Oe||(Oe=(0,s.Z)("div",{className:"threads-list-item-col-icon"},void 0,(0,s.Z)("span",{className:"threads-list-icon ui-preview-img"})))),Te||(Te=(0,s.Z)("div",{className:"threads-list-item-col-title"},void 0,(0,s.Z)("span",{className:"threads-list-item-title"},void 0,(0,s.Z)(Ve,{width:"90"})," ",(0,s.Z)(Ve,{width:"40"})," ",(0,s.Z)(Ve,{width:"120"})),(0,s.Z)("span",{className:"threads-list-item-title-sm"},void 0,(0,s.Z)(Ve,{width:"90"})," ",(0,s.Z)(Ve,{width:"40"})," ",(0,s.Z)(Ve,{width:"120"}))))),Ae||(Ae=(0,s.Z)("div",{className:"threads-list-item-bottom-row"},void 0,(0,s.Z)("div",{className:"threads-list-item-col-category"},void 0,(0,s.Z)(Ve,{width:"70"})),(0,s.Z)("div",{className:"threads-list-item-col-replies"},void 0,(0,s.Z)(Ve,{width:"50"})),(0,s.Z)("div",{className:"threads-list-item-col-last-poster"},void 0,(0,s.Z)("span",{className:"threads-list-item-last-poster"},void 0,(0,s.Z)(Le.ZP,{size:32}))),(0,s.Z)("div",{className:"threads-list-item-col-last-activity"},void 0,(0,s.Z)("span",{className:"threads-list-item-last-activity"},void 0,(0,s.Z)(Ve,{width:"50"})))))),(0,s.Z)("li",{className:"list-group-item threads-list-item"},void 0,(0,s.Z)("div",{className:"threads-list-item-top-row"},void 0,t&&(Be||(Be=(0,s.Z)("div",{className:"threads-list-item-col-icon"},void 0,(0,s.Z)("span",{className:"threads-list-icon ui-preview-img"})))),Ie||(Ie=(0,s.Z)("div",{className:"threads-list-item-col-title"},void 0,(0,s.Z)("span",{className:"threads-list-item-title"},void 0,(0,s.Z)(Ve,{width:"120"})," ",(0,s.Z)(Ve,{width:"30"})," ",(0,s.Z)(Ve,{width:"60"})),(0,s.Z)("span",{className:"threads-list-item-title-sm"},void 0,(0,s.Z)(Ve,{width:"120"})," ",(0,s.Z)(Ve,{width:"30"})," ",(0,s.Z)(Ve,{width:"60"}))))),je||(je=(0,s.Z)("div",{className:"threads-list-item-bottom-row"},void 0,(0,s.Z)("div",{className:"threads-list-item-col-category"},void 0,(0,s.Z)(Ve,{width:"55"})),(0,s.Z)("div",{className:"threads-list-item-col-replies"},void 0,(0,s.Z)(Ve,{width:"60"})),(0,s.Z)("div",{className:"threads-list-item-col-last-poster"},void 0,(0,s.Z)("span",{className:"threads-list-item-last-poster"},void 0,(0,s.Z)(Le.ZP,{size:32}))),(0,s.Z)("div",{className:"threads-list-item-col-last-activity"},void 0,(0,s.Z)("span",{className:"threads-list-item-last-activity"},void 0,(0,s.Z)(Ve,{width:"70"})))))),(0,s.Z)("li",{className:"list-group-item threads-list-item"},void 0,(0,s.Z)("div",{className:"threads-list-item-top-row"},void 0,t&&(De||(De=(0,s.Z)("div",{className:"threads-list-item-col-icon"},void 0,(0,s.Z)("span",{className:"threads-list-icon ui-preview-img"})))),Ue||(Ue=(0,s.Z)("div",{className:"threads-list-item-col-title"},void 0,(0,s.Z)("span",{className:"threads-list-item-title"},void 0,(0,s.Z)(Ve,{width:"40"})," ",(0,s.Z)(Ve,{width:"120"})," ",(0,s.Z)(Ve,{width:"80"})),(0,s.Z)("span",{className:"threads-list-item-title-sm"},void 0,(0,s.Z)(Ve,{width:"40"})," ",(0,s.Z)(Ve,{width:"120"})," ",(0,s.Z)(Ve,{width:"80"}))))),Me||(Me=(0,s.Z)("div",{className:"threads-list-item-bottom-row"},void 0,(0,s.Z)("div",{className:"threads-list-item-col-category"},void 0,(0,s.Z)(Ve,{width:"75"})),(0,s.Z)("div",{className:"threads-list-item-col-replies"},void 0,(0,s.Z)(Ve,{width:"40"})),(0,s.Z)("div",{className:"threads-list-item-col-last-poster"},void 0,(0,s.Z)("span",{className:"threads-list-item-last-poster"},void 0,(0,s.Z)(Le.ZP,{size:32}))),(0,s.Z)("div",{className:"threads-list-item-col-last-activity"},void 0,(0,s.Z)("span",{className:"threads-list-item-last-activity"},void 0,(0,s.Z)(Ve,{width:"60"}))))))))},Ge=function(e){var t=e.threads,n=e.onClick;return(0,s.Z)("li",{className:"list-group-item threads-list-update-prompt"},void 0,(0,s.Z)("button",{type:"button",className:"btn btn-block threads-list-update-prompt-btn",onClick:n},void 0,ze||(ze=(0,s.Z)("span",{className:"material-icon"},void 0,"cached")),(0,s.Z)("span",{className:"threads-list-update-prompt-message"},void 0,interpolate(ngettext("There is %(threads)s new or updated thread. Click here to show it.","There are %(threads)s new or updated threads. Click here to show them.",t),{threads:t},!0))))},We=function(e){var t=e.list,n=e.categories,a=e.category,i=e.threads,o=e.busyThreads,r=e.selection,l=e.isLoaded,c=e.showOptions,u=e.updatedThreads,d=e.applyUpdate,p=e.emptyMessage;return l?(0,s.Z)("div",{className:"threads-list"},void 0,i.length>0?(0,s.Z)("ul",{className:"list-group"},void 0,u>0&&(0,s.Z)(Ge,{threads:u,onClick:d}),i.map((function(e){return(0,s.Z)(Ye,{activeCategory:a,categories:n,thread:e,showOptions:c,showSubscription:c&&"subscribed"===t.type,isBusy:o.indexOf(e.id)>=0,isSelected:r.indexOf(e.id)>=0},e.id)}))):(0,s.Z)("ul",{className:"list-group"},void 0,u>0&&(0,s.Z)(Ge,{threads:u,onClick:d}),(0,s.Z)(Ne,{category:a,list:t,message:p}))):(0,s.Z)($e,{showOptions:c})},Ke=n(82125),Je=n(55547),Qe=n(53328),Xe=n(20370),et=n(99755);var tt=function(e){(0,l.Z)(p,e);var t,n,a=(t=p,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function p(e){var t;(0,i.Z)(this,p),t=a.call(this,e),(0,d.Z)((0,r.Z)(t),"loadMore",(function(){t.setState({isBusy:!0}),t.loadThreads(t.getCategory(),t.state.next)})),(0,d.Z)((0,r.Z)(t),"pollResponse",(function(e){var n,a,s;t.setState({diff:Object.assign({},e,{results:(n=t.props.threads,a=e.results,s={},n.forEach((function(e){s[e.id]=e})),a.filter((function(e){return!s[e.id]||function(e,t){return[e.title===t.title,e.weight===t.weight,e.category===t.category,e.last_post===t.last_post,e.last_poster_name===t.last_poster_name].indexOf(!1)>=0}(s[e.id],e)})))})})})),(0,d.Z)((0,r.Z)(t),"addThreads",(function(e){F.Z.dispatch((0,j.R3)(e,t.getSorting()))})),(0,d.Z)((0,r.Z)(t),"applyDiff",(function(){t.addThreads(t.state.diff.results),t.setState(Object.assign({},t.state.diff,{moderation:Ze(F.Z.getState().threads),diff:{results:[]}}))})),(0,d.Z)((0,r.Z)(t),"freezeThread",(function(e){t.setState((function(t){return{busyThreads:Xe.ZN(t.busyThreads,e)}}))})),(0,d.Z)((0,r.Z)(t),"updateThread",(function(e){F.Z.dispatch((0,j.r$)(e,e,t.getSorting()))})),(0,d.Z)((0,r.Z)(t),"deleteThread",(function(e){F.Z.dispatch((0,j.l8)(e))})),t.state={isMounted:!0,isLoaded:!1,isBusy:!1,diff:{results:[]},moderation:[],busyThreads:[],dropdown:!1,subcategories:[],next:0};var n=t.getCategory();return I.Z.has("THREADS")?t.initWithPreloadedData(n,I.Z.get("THREADS")):t.initWithoutPreloadedData(n),t}return(0,o.Z)(p,[{key:"getCategory",value:function(){return this.props.route.category.special_role?null:this.props.route.category.id}},{key:"initWithPreloadedData",value:function(e,t){this.state=Object.assign(this.state,{moderation:Ze(t.results),subcategories:t.subcategories,next:t.next}),this.startPolling(e)}},{key:"initWithoutPreloadedData",value:function(e){this.loadThreads(e)}},{key:"loadThreads",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;M.Z.get(this.props.options.api,{category:e,list:this.props.route.list.type,start:n||0},"threads").then((function(a){t.state.isMounted&&(0===n?F.Z.dispatch((0,j.ZB)(a.results)):F.Z.dispatch((0,j.R3)(a.results,t.getSorting())),t.setState({isLoaded:!0,isBusy:!1,moderation:Ze(F.Z.getState().threads),subcategories:a.subcategories,next:a.next}),t.startPolling(e))}),(function(e){H.Z.apiError(e)}))}},{key:"startPolling",value:function(e){Je.Z.start({poll:"threads",url:this.props.options.api,data:{category:e,list:this.props.route.list.type},frequency:12e4,update:this.pollResponse})}},{key:"componentDidMount",value:function(){this.setPageTitle(),I.Z.has("THREADS")&&(F.Z.dispatch((0,j.ZB)(I.Z.pop("THREADS").results)),this.setState({isLoaded:!0})),F.Z.dispatch(D.YP())}},{key:"componentWillUnmount",value:function(){this.state.isMounted=!1,Je.Z.stop("threads")}},{key:"getTitle",value:function(){return this.props.options.title?this.props.options.title:(e=this.props.route).category.level?e.category.name:I.Z.get("THREADS_ON_INDEX")?I.Z.get("SETTINGS").index_header?I.Z.get("SETTINGS").index_header:I.Z.get("SETTINGS").forum_name:gettext("Threads");var e}},{key:"setPageTitle",value:function(){var e;this.props.route.category.level||!I.Z.get("THREADS_ON_INDEX")?Qe.Z.set((e=this.props.route).category.level?e.list.path?{title:e.list.longName,parent:e.category.name}:{title:e.category.name}:I.Z.get("THREADS_ON_INDEX")?e.list.path?{title:e.list.longName}:null:e.list.path?{title:e.list.longName,parent:gettext("Threads")}:{title:gettext("Threads")}):this.props.options.title?Qe.Z.set(this.props.options.title):I.Z.get("SETTINGS").index_title?document.title=I.Z.get("SETTINGS").index_title:document.title=I.Z.get("SETTINGS").forum_name}},{key:"getSorting",value:function(){return this.props.route.category.level?Z:m}},{key:"getMoreButton",value:function(){return this.state.next?(0,s.Z)("div",{className:"pager-more"},void 0,(0,s.Z)(f.Z,{className:"btn btn-default btn-outline",loading:this.state.isBusy||this.state.busyThreads.length,onClick:this.loadMore},void 0,gettext("Show more"))):null}},{key:"getClassName",value:function(){var e,t="page page-threads";return t+=" page-threads-"+this.props.route.list.type,(e=this.props).route.category.level||!I.Z.get("THREADS_ON_INDEX")||e.options.title||(t+=" page-threads-index"),this.props.route.category.css_class&&(t+=" page-threads-"+this.props.route.category.css_class),t}},{key:"render",value:function(){var e=this.props.route.categories[0],t=this.props.route,n=t.category,a=t.list,i=n.special_role;return(0,s.Z)("div",{className:this.getClassName()},void 0,"root_category"==i&&I.Z.get("THREADS_ON_INDEX")&&I.Z.get("SETTINGS").index_header&&(0,s.Z)(et.Iv,{header:I.Z.get("SETTINGS").index_header,message:n.description&&(0,s.Z)(et.Ql,{message:n.description.html}),styleName:"forum-index"}),"root_category"==i&&!I.Z.get("THREADS_ON_INDEX")&&(0,s.Z)(et.Iv,{header:gettext("Threads"),styleName:"threads"}),"private_threads"==i&&(0,s.Z)(et.Iv,{header:this.props.options.title,message:this.props.options.pageLead&&(0,s.Z)(et.bM,{},void 0,(0,s.Z)("p",{},void 0,this.props.options.pageLead)),styleName:"private-threads"}),!i&&(0,s.Z)(et.Iv,{header:n.name,message:n.description&&(0,s.Z)(et.Ql,{message:n.description.html}),styleName:n.css_class||"category-threads"}),(0,s.Z)(ve,{api:this.props.options.api,root:e,route:this.props.route,user:this.props.user,pageLead:this.props.options.pageLead,threads:this.props.threads,threadsCount:this.state.count,moderation:this.state.moderation,selection:this.props.selection,busyThreads:this.state.busyThreads,addThreads:this.addThreads,startThread:this.props.options.startThread,freezeThread:this.freezeThread,deleteThread:this.deleteThread,updateThread:this.updateThread,isLoaded:this.state.isLoaded,isBusy:this.state.isBusy},void 0,(0,s.Z)(We,{category:n,categories:this.props.route.categoriesMap,list:a,selection:this.props.selection,threads:this.props.threads,updatedThreads:this.state.diff.results.length,applyUpdate:this.applyDiff,showOptions:!!this.props.user.id,isLoaded:this.state.isLoaded,busyThreads:this.state.busyThreads,emptyMessage:this.props.options.emptyMessage}),this.getMoreButton()))}}]),p}(Ke.Z);var nt=n(39633),at="misago:private-threads";function st(e){return e.get("CURRENT_LINK").substr(0,at.length)===at?{api:e.get("PRIVATE_THREADS_API"),startThread:{mode:"START_PRIVATE",submit:I.Z.get("PRIVATE_THREADS_API")},title:gettext("Private threads"),pageLead:gettext("Private threads are threads which only those that started them and those they have invited may see and participate in."),emptyMessage:gettext("You aren't participating in any private threads.")}:{api:e.get("THREADS_API")}}I.Z.addInitializer({name:"component:threads",initializer:function(e){var t,n,s,i,o;e.has("THREADS")&&e.has("CATEGORIES")&&(0,nt.Z)({paths:(t=e.get("user"),n=st(e),s=function(e){var t=[{type:"all",path:"",name:gettext("All"),longName:gettext("All threads")}];return e.id&&(t.push({type:"my",path:"my/",name:gettext("My"),longName:gettext("My threads")}),t.push({type:"new",path:"new/",name:gettext("New"),longName:gettext("New threads")}),t.push({type:"unread",path:"unread/",name:gettext("Unread"),longName:gettext("Unread threads")}),t.push({type:"subscribed",path:"subscribed/",name:gettext("Subscribed"),longName:gettext("Subscribed threads")}),e.acl.can_see_unapproved_content_lists&&t.push({type:"unapproved",path:"unapproved/",name:gettext("Unapproved"),longName:gettext("Unapproved content")})),t}(t),i=[],o={},I.Z.get("CATEGORIES").forEach((function(e){s.forEach((function(t){var r;o[e.id]=e,i.push({path:e.url.index+t.path,component:(0,a.$j)((r=n,function(e){return{options:r,selection:e.selection,threads:e.threads,tick:e.tick.tick,user:e.auth.user}}))(tt),categories:I.Z.get("CATEGORIES"),categoriesMap:o,category:e,lists:s,list:t})}))})),i)})},after:"store"})},47806:function(e,t,n){"use strict";var a=n(37424),s=n(32233),i=n(22928),o=n(15671),r=n(43144),l=n(79340),c=n(6215),u=n(61120),d=n(57588),p=n.n(d),h=n(19605),f=n(97326),v=n(4942),m=n(78657),Z=n(53904);function g(e){return e.filter((function(e){return e.results.count>0})).map((function(e){return Object.assign({},e,{count:e.results.count,results:e.results.results.slice(0,5)})}))}var b=n(87462),y="HEADER",_="RESULT",N="FOOTER";function k(e){var t=e.value,n=e.onChange;return(0,i.Z)("input",{"aria-haspopup":"true","aria-expanded":"false","aria-controls":"dropdown-menu dropdown-search-results",autoComplete:"off",className:"form-control",value:t,onChange:n,placeholder:gettext("Search"),role:"combobox",type:"text"})}function x(e){var t=e.children,n=e.onChange,a=e.query;return(0,i.Z)("ul",{className:"dropdown-menu dropdown-search-results",role:"menu"},void 0,(0,i.Z)("li",{className:"form-group"},void 0,(0,i.Z)(k,{value:a,onChange:n})),t)}function w(){return(0,i.Z)("li",{className:"dropdown-search-message"},void 0,gettext("Search returned no results."))}var R,C=n(37848);function S(e){return e.message,R||(R=(0,i.Z)("li",{className:"dropdown-search-loader"},void 0,(0,i.Z)(C.Z,{})))}function E(e){var t=e.provider,n=e.query,a=t.url+"?q="+encodeURI(n),s=ngettext('See full "%(provider)s" results page with %(count)s result.','See full "%(provider)s" results page with %(count)s results.',t.count);return(0,i.Z)("li",{className:"dropdown-search-footer"},void 0,(0,i.Z)("a",{href:a},void 0,interpolate(s,{count:t.count,provider:t.name},!0)))}function L(e){var t=e.provider;return(0,i.Z)("li",{className:"dropdown-search-header"},void 0,t.name)}var P,O,T,A=n(30381),B=n.n(A),I=n(19755);function j(e){var t=e.result,n=(t.poster,t.thread),a=gettext("Posted by %(poster)s on %(posted_on)s in %(category)s.");return(0,i.Z)("li",{},void 0,(0,i.Z)("a",{href:t.url.index,className:"dropdown-search-thread"},void 0,(0,i.Z)("h5",{},void 0,n.title),(0,i.Z)("small",{className:"dropdown-search-post-content"},void 0,I(t.content).text()),(0,i.Z)("small",{className:"dropdown-search-post-footer"},void 0,interpolate(a,{category:t.category.name,posted_on:B()(t.posted_on).format("LL"),poster:t.poster_name},!0))))}function D(e){var t=e.result,n=t.rank,a=gettext("%(title)s, joined on %(joined_on)s"),s=t.title||n.title||n.name;return(0,i.Z)("li",{},void 0,(0,i.Z)("a",{href:t.url,className:"dropdown-search-user"},void 0,(0,i.Z)("div",{className:"media"},void 0,(0,i.Z)("div",{className:"media-left"},void 0,(0,i.Z)(h.ZP,{size:38,user:t})),(0,i.Z)("div",{className:"media-body"},void 0,(0,i.Z)("h5",{className:"media-heading"},void 0,t.username),(0,i.Z)("small",{},void 0,interpolate(a,{title:s,joined_on:B()(t.joined_on).format("LL")},!0))))))}function U(e){var t=e.provider,n=e.result;return"threads"===t.id?(0,i.Z)(j,{result:n}):(0,i.Z)(D,{result:n})}function M(e){var t=e.provider,n=e.result,a=e.type,s=e.query;return a===y?(0,i.Z)(L,{provider:t}):a===N?(0,i.Z)(E,{provider:t,query:s}):(0,i.Z)(U,{provider:t,result:n})}function z(e,t){for(var n=e.results.length,a=0;a<n;a++){var s=e.results[a];t.push({provider:e,result:s,type:_})}t.push({provider:e,type:N})}function H(e){var t=e.isLoading,n=e.onChange,a=e.results,s=e.query;if(!s.trim().length)return(0,i.Z)(x,{onChange:n,query:s});if(a.length){var o=function(e){var t=[];return function(e,t){for(var n=e.length,a=0;a<n;a++){var s=e[a];t.push({provider:s,type:y}),z(s,t)}}(e,t),t}(a);return(0,i.Z)(x,{onChange:n,query:s},void 0,o.map((function(e){var t=e.type,n=e.provider,a=e.result;return t===_?p().createElement(M,(0,b.Z)({key:[n.id,t,a.id].join("_")},e)):p().createElement(M,(0,b.Z)({key:[n.id,t].join("_"),query:s},e))})))}return t?(0,i.Z)(x,{onChange:n,query:s},void 0,P||(P=(0,i.Z)(S,{}))):(0,i.Z)(x,{onChange:n,query:s},void 0,O||(O=(0,i.Z)(w,{})))}var F=function(e){(0,l.Z)(d,e);var t,n,a=(t=d,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function d(){var e;return(0,o.Z)(this,d),e=a.call(this),(0,v.Z)((0,f.Z)(e),"onToggle",(function(t){e.setState((function(t,n){return t.isOpen||window.setTimeout((function(){e.container.querySelector("input").focus()}),100),{isOpen:!t.isOpen}}))})),(0,v.Z)((0,f.Z)(e),"onDocumentMouseDown",(function(t){for(var n=!0,a=t.target;null!==a&&a!==document;){if(a===e.container)return void(n=!1);a=a.parentNode}n&&e.setState({isOpen:!1})})),(0,v.Z)((0,f.Z)(e),"onEscape",(function(t){"Escape"===t.key&&e.setState({isOpen:!1})})),(0,v.Z)((0,f.Z)(e),"onChange",(function(t){var n=t.target.value;e.setState({query:n}),e.loadResults(n.trim())})),e.state={isLoading:!1,isOpen:!1,query:"",results:[]},e.intervalId=null,e}return(0,r.Z)(d,[{key:"componentDidMount",value:function(){document.addEventListener("mousedown",this.onDocumentMouseDown),document.addEventListener("keydown",this.onEscape)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.onDocumentMouseDown),document.removeEventListener("keydown",this.onEscape)}},{key:"loadResults",value:function(e){var t=this;if(e.length){var n=300+300*Math.random();this.intervalId&&window.clearTimeout(this.intervalId),this.setState({isLoading:!0}),this.intervalId=window.setTimeout((function(){m.Z.get(s.Z.get("SEARCH_API"),{q:e}).then((function(e){t.setState({intervalId:null,isLoading:!1,results:g(e)})}),(function(e){Z.Z.apiError(e),t.setState({intervalId:null,isLoading:!1,results:[]})}))}),n)}}},{key:"render",value:function(){var e=this,t="navbar-search dropdown";return this.state.isOpen&&(t+=" open"),p().createElement("div",{className:t,ref:function(t){return e.container=t}},(0,i.Z)("a",{"aria-haspopup":"true","aria-expanded":"false",className:"navbar-icon","data-toggle":"dropdown",href:s.Z.get("SEARCH_URL"),onClick:this.onToggle},void 0,T||(T=(0,i.Z)("i",{className:"material-icon"},void 0,"search"))),(0,i.Z)(H,{isLoading:this.state.isLoading,onChange:this.onChange,results:this.state.results,query:this.state.query}))}}]),d}(p().Component),q=n(82211),Y=n(43345),V=n(96359),$=n(59940);var G,W,K,J=["progress-bar-danger","progress-bar-warning","progress-bar-warning","progress-bar-primary","progress-bar-success"],Q=[gettext("Entered password is very weak."),gettext("Entered password is weak."),gettext("Entered password is average."),gettext("Entered password is strong."),gettext("Entered password is very strong.")],X=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),(t=a.call(this,e))._score=0,t._password=null,t._inputs=[],t.state={loaded:!1},t}return(0,r.Z)(s,[{key:"componentDidMount",value:function(){var e=this;$.Z.load().then((function(){e.setState({loaded:!0})}))}},{key:"getScore",value:function(e,t){var n=this,a=!1;return e!==this._password&&(a=!0),t.length!==this._inputs.length?a=!0:t.map((function(e,t){e.trim()!==n._inputs[t]&&(a=!0)})),a&&(this._score=$.Z.scorePassword(e,t),this._password=e,this._inputs=t.map((function(e){return e.trim()}))),this._score}},{key:"render",value:function(){if(!this.state.loaded)return null;var e=this.getScore(this.props.password,this.props.inputs);return(0,i.Z)("div",{className:"help-block password-strength"},void 0,(0,i.Z)("div",{className:"progress"},void 0,(0,i.Z)("div",{className:"progress-bar "+J[e],style:{width:20+20*e+"%"},role:"progress-bar","aria-valuenow":e,"aria-valuemin":"0","aria-valuemax":"4"},void 0,(0,i.Z)("span",{className:"sr-only"},void 0,Q[e]))),(0,i.Z)("p",{className:"text-small"},void 0,Q[e]))}}]),s}(p().Component),ee=n(26106),te=n(47235),ne=n(98274),ae=n(93825),se=n(59801),ie=n(93051),oe=n(55210);function re(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function le(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?re(Object(n),!0).forEach((function(t){(0,v.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):re(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ce(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,u.Z)(e);if(t){var s=(0,u.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,c.Z)(this,n)}}var ue,de=function(e){(0,l.Z)(n,e);var t=ce(n);function n(e){var a;(0,o.Z)(this,n),a=t.call(this,e),(0,v.Z)((0,f.Z)(a),"handlePrivacyPolicyChange",(function(e){var t=e.target.value;a.handleToggleAgreement("privacyPolicy",t)})),(0,v.Z)((0,f.Z)(a),"handleTermsOfServiceChange",(function(e){var t=e.target.value;a.handleToggleAgreement("termsOfService",t)})),(0,v.Z)((0,f.Z)(a),"handleToggleAgreement",(function(e,t){a.setState((function(n,s){if(null===n[e]){var i=le(le({},n.errors),{},(0,v.Z)({},e,null));return(0,v.Z)({errors:i},e,t)}var o=a.state.validators[e][0],r=le(le({},n.errors),{},(0,v.Z)({},e,[o(null)]));return(0,v.Z)({errors:r},e,null)}))}));var i=a.props.criteria,r=i.username,l=i.password,c=0;l.forEach((function(e){"MinimumLengthValidator"===e.name&&(c=e.min_length)}));var u={username:[oe.lG(),oe.HR(r.min_length),oe.gS(r.max_length)],email:[oe.Do()],password:[oe.Vb(c)],captcha:ae.ZP.validator()};return s.Z.get("TERMS_OF_SERVICE_ID")&&(u.termsOfService=[oe.fT()]),s.Z.get("PRIVACY_POLICY_ID")&&(u.privacyPolicy=[oe.jA()]),a.state={isLoading:!1,username:"",email:"",password:"",captcha:"",termsOfService:null,privacyPolicy:null,validators:u,errors:{}},a}return(0,r.Z)(n,[{key:"clean",value:function(){return!!this.isValid()||(Z.Z.error(gettext("Form contains errors.")),this.setState({errors:this.validate()}),!1)}},{key:"send",value:function(){return m.Z.post(s.Z.get("USERS_API"),{username:this.state.username,email:this.state.email,password:this.state.password,captcha:this.state.captcha,terms_of_service:this.state.termsOfService,privacy_policy:this.state.privacyPolicy})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){400===e.status?(this.setState({errors:Object.assign({},this.state.errors,e)}),e.__all__&&e.__all__.length>0?Z.Z.error(e.__all__[0]):Z.Z.error(gettext("Form contains errors."))):403===e.status&&e.ban?((0,ie.Z)(e.ban),se.Z.hide()):Z.Z.apiError(e)}},{key:"render",value:function(){return(0,i.Z)("div",{className:"modal-dialog modal-register",role:"document"},void 0,(0,i.Z)("div",{className:"modal-content"},void 0,(0,i.Z)("div",{className:"modal-header"},void 0,(0,i.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},void 0,G||(G=(0,i.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,i.Z)("h4",{className:"modal-title"},void 0,gettext("Register"))),(0,i.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,i.Z)("input",{type:"type",style:{display:"none"}}),(0,i.Z)("input",{type:"password",style:{display:"none"}}),(0,i.Z)("div",{className:"modal-body"},void 0,(0,i.Z)(te.Z,{buttonClassName:"col-xs-12 col-sm-6",buttonLabel:gettext("Join with %(site)s"),formLabel:gettext("Or create forum account:")}),(0,i.Z)(V.Z,{label:gettext("Username"),for:"id_username",validation:this.state.errors.username},void 0,(0,i.Z)("input",{type:"text",id:"id_username",className:"form-control","aria-describedby":"id_username_status",disabled:this.state.isLoading,onChange:this.bindInput("username"),value:this.state.username})),(0,i.Z)(V.Z,{label:gettext("E-mail"),for:"id_email",validation:this.state.errors.email},void 0,(0,i.Z)("input",{type:"text",id:"id_email",className:"form-control","aria-describedby":"id_email_status",disabled:this.state.isLoading,onChange:this.bindInput("email"),value:this.state.email})),(0,i.Z)(V.Z,{label:gettext("Password"),for:"id_password",validation:this.state.errors.password,extra:(0,i.Z)(X,{password:this.state.password,inputs:[this.state.username,this.state.email]})},void 0,(0,i.Z)("input",{type:"password",id:"id_password",className:"form-control","aria-describedby":"id_password_status",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password})),ae.ZP.component({form:this}),(0,i.Z)(ee.Z,{errors:this.state.errors,privacyPolicy:this.state.privacyPolicy,termsOfService:this.state.termsOfService,onPrivacyPolicyChange:this.handlePrivacyPolicyChange,onTermsOfServiceChange:this.handleTermsOfServiceChange})),(0,i.Z)("div",{className:"modal-footer"},void 0,(0,i.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,i.Z)(q.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Register account"))))))}}]),n}(Y.Z),pe=function(e){(0,l.Z)(n,e);var t=ce(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"getLead",value:function(){return"user"===this.props.activation?gettext("%(username)s, your account has been created but you need to activate it before you will be able to sign in."):"admin"===this.props.activation?gettext("%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in."):void 0}},{key:"getSubscript",value:function(){return"user"===this.props.activation?gettext("We have sent an e-mail to %(email)s with link that you have to click to activate your account."):"admin"===this.props.activation?gettext("We will send an e-mail to %(email)s when this takes place."):void 0}},{key:"render",value:function(){return(0,i.Z)("div",{className:"modal-dialog modal-message modal-register",role:"document"},void 0,(0,i.Z)("div",{className:"modal-content"},void 0,(0,i.Z)("div",{className:"modal-header"},void 0,(0,i.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},void 0,W||(W=(0,i.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,i.Z)("h4",{className:"modal-title"},void 0,gettext("Registration complete"))),(0,i.Z)("div",{className:"modal-body"},void 0,K||(K=(0,i.Z)("div",{className:"message-icon"},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,i.Z)("div",{className:"message-body"},void 0,(0,i.Z)("p",{className:"lead"},void 0,interpolate(this.getLead(),{username:this.props.username},!0)),(0,i.Z)("p",{},void 0,interpolate(this.getSubscript(),{email:this.props.email},!0)),(0,i.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,gettext("Ok"))))))}}]),n}(p().Component),he=function(e){(0,l.Z)(n,e);var t=ce(n);function n(e){var a;return(0,o.Z)(this,n),a=t.call(this,e),(0,v.Z)((0,f.Z)(a),"completeRegistration",(function(e){"active"===e.activation?(se.Z.hide(),ne.Z.signIn(e)):a.setState({complete:e})})),a.state={complete:!1},a}return(0,r.Z)(n,[{key:"render",value:function(){return this.state.complete?(0,i.Z)(pe,{activation:this.state.complete.activation,email:this.state.complete.email,username:this.state.complete.username}):p().createElement(de,(0,b.Z)({callback:this.completeRegistration},this.props))}}]),n}(p().Component);var fe,ve,me,Ze=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,v.Z)((0,f.Z)(t),"showRegisterForm",(function(){"closed"===misago.get("SETTINGS").account_activation?Z.Z.info(gettext("New registrations are currently disabled.")):t.state.isLoaded?se.Z.show((0,i.Z)(he,{criteria:t.state.criteria})):(t.setState({isLoading:!0}),Promise.all([ae.ZP.load(),m.Z.get(misago.get("AUTH_CRITERIA_API"))]).then((function(e){t.setState({isLoading:!1,isLoaded:!0,criteria:e[1]}),se.Z.show((0,i.Z)(he,{criteria:e[1]}))}),(function(){t.setState({isLoading:!1}),Z.Z.error(gettext("Registration is currently unavailable due to an error."))})))})),t.state={isLoading:!1,isLoaded:!1,criteria:null},t}return(0,r.Z)(s,[{key:"getClassName",value:function(){return this.props.className+(this.state.isLoading?" btn-loading":"")}},{key:"render",value:function(){return(0,i.Z)("button",{className:"btn "+this.getClassName(),disabled:this.state.isLoading,onClick:this.showRegisterForm,type:"button"},void 0,gettext("Register"),this.state.isLoading?ue||(ue=(0,i.Z)(C.Z,{})):null)}}]),s}(p().Component),ge=n(14467),be=n(8621);function ye(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,u.Z)(e);if(t){var s=(0,u.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,c.Z)(this,n)}}var _e,Ne=function(e){(0,l.Z)(n,e);var t=ye(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"showSignInModal",value:function(){se.Z.show(ge.Z)}},{key:"render",value:function(){var e=s.Z.get("SETTINGS").DELEGATE_AUTH;return(0,i.Z)("ul",{className:"dropdown-menu user-dropdown dropdown-menu-right",role:"menu"},void 0,(0,i.Z)("li",{className:"guest-preview"},void 0,(0,i.Z)("h4",{},void 0,gettext("You are browsing as guest.")),(0,i.Z)("p",{},void 0,gettext("Sign in or register to start and participate in discussions.")),e?(0,i.Z)("div",{className:"row"},void 0,(0,i.Z)("div",{className:"col-xs-12"},void 0,(0,i.Z)("a",{className:"btn btn-default btn-sign-in btn-block",href:s.Z.get("SETTINGS").LOGIN_URL},void 0,gettext("Sign in")))):(0,i.Z)("div",{className:"row"},void 0,(0,i.Z)("div",{className:"col-xs-6"},void 0,(0,i.Z)("button",{className:"btn btn-default btn-sign-in btn-block",onClick:this.showSignInModal,type:"button"},void 0,gettext("Sign in"))),(0,i.Z)("div",{className:"col-xs-6"},void 0,(0,i.Z)(Ze,{className:"btn-primary btn-register btn-block"},void 0,gettext("Register"))))))}}]),n}(p().Component),ke=function(e){(0,l.Z)(n,e);var t=ye(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"render",value:function(){return s.Z.get("SETTINGS").DELEGATE_AUTH?(0,i.Z)("div",{className:"nav nav-guest"},void 0,(0,i.Z)("a",{className:"btn navbar-btn btn-default btn-sign-in",href:s.Z.get("SETTINGS").LOGIN_URL},void 0,gettext("Sign in")),fe||(fe=(0,i.Z)("div",{className:"navbar-left"},void 0,(0,i.Z)(F,{})))):(0,i.Z)("div",{className:"nav nav-guest"},void 0,(0,i.Z)("button",{className:"btn navbar-btn btn-default btn-sign-in",onClick:this.showSignInModal,type:"button"},void 0,gettext("Sign in")),(0,i.Z)(Ze,{className:"navbar-btn btn-primary btn-register"},void 0,gettext("Register")),ve||(ve=(0,i.Z)("div",{className:"navbar-left"},void 0,(0,i.Z)(F,{}))))}}]),n}(Ne),xe=function(e){(0,l.Z)(n,e);var t=ye(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"showGuestMenu",value:function(){be.Z.show(Ne)}},{key:"render",value:function(){return(0,i.Z)("button",{type:"button",onClick:this.showGuestMenu},void 0,me||(me=(0,i.Z)(h.ZP,{size:"64"})))}}]),n}(p().Component);var we,Re=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,v.Z)((0,f.Z)(t),"setGravatar",(function(){t.callApi("gravatar")})),(0,v.Z)((0,f.Z)(t),"setGenerated",(function(){t.callApi("generated")})),t.state={isLoading:!1},t}return(0,r.Z)(s,[{key:"callApi",value:function(e){var t=this;if(this.state.isLoading)return!1;this.setState({isLoading:!0}),m.Z.post(this.props.user.api.avatar,{avatar:e}).then((function(e){t.setState({isLoading:!1}),Z.Z.success(e.detail),t.props.onComplete(e)}),(function(e){400===e.status?(Z.Z.error(e.detail),t.setState({isLoading:!1})):t.props.showError(e)}))}},{key:"getGravatarButton",value:function(){return this.props.options.gravatar?(0,i.Z)(q.Z,{onClick:this.setGravatar,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-gravatar"},void 0,gettext("Download my Gravatar")):null}},{key:"getCropButton",value:function(){return this.props.options.crop_src?(0,i.Z)(q.Z,{className:"btn-default btn-block btn-avatar-crop",disabled:this.state.isLoading,onClick:this.props.showCrop},void 0,gettext("Re-crop uploaded image")):null}},{key:"getUploadButton",value:function(){return this.props.options.upload?(0,i.Z)(q.Z,{className:"btn-default btn-block btn-avatar-upload",disabled:this.state.isLoading,onClick:this.props.showUpload},void 0,gettext("Upload new image")):null}},{key:"getGalleryButton",value:function(){return this.props.options.galleries?(0,i.Z)(q.Z,{className:"btn-default btn-block btn-avatar-gallery",disabled:this.state.isLoading,onClick:this.props.showGallery},void 0,gettext("Pick avatar from gallery")):null}},{key:"getAvatarPreview",value:function(){var e={id:this.props.user.id,avatars:this.props.options.avatars};return this.state.isLoading?(0,i.Z)("div",{className:"avatar-preview preview-loading"},void 0,(0,i.Z)(h.ZP,{size:"200",user:e}),_e||(_e=(0,i.Z)(C.Z,{}))):(0,i.Z)("div",{className:"avatar-preview"},void 0,(0,i.Z)(h.ZP,{size:"200",user:e}))}},{key:"render",value:function(){return(0,i.Z)("div",{className:"modal-body modal-avatar-index"},void 0,(0,i.Z)("div",{className:"row"},void 0,(0,i.Z)("div",{className:"col-md-5"},void 0,this.getAvatarPreview()),(0,i.Z)("div",{className:"col-md-7"},void 0,this.getGravatarButton(),(0,i.Z)(q.Z,{onClick:this.setGenerated,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-generate"},void 0,gettext("Generate my individual avatar")),this.getCropButton(),this.getUploadButton(),this.getGalleryButton())))}}]),s}(p().Component),Ce=n(19755);var Se,Ee=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,v.Z)((0,f.Z)(t),"cropAvatar",(function(){if(t.state.isLoading)return!1;t.setState({isLoading:!0});var e=t.props.upload?"crop_tmp":"crop_src",n=Ce(".crop-form"),a=n.cropit("exportZoom"),s=n.cropit("offset");m.Z.post(t.props.user.api.avatar,{avatar:e,crop:{offset:{x:s.x*a,y:s.y*a},zoom:n.cropit("zoom")*a}}).then((function(e){t.props.onComplete(e),Z.Z.success(e.detail)}),(function(e){400===e.status?(Z.Z.error(e.detail),t.setState({isLoading:!1})):t.props.showError(e)}))})),t.state={isLoading:!1,deviceRatio:1},t}return(0,r.Z)(s,[{key:"getAvatarSize",value:function(){return this.props.upload?this.props.options.crop_tmp.size:this.props.options.crop_src.size}},{key:"getImagePath",value:function(){return this.props.upload?this.props.dataUrl:this.props.options.crop_src.url}},{key:"componentDidMount",value:function(){for(var e=this,t=Ce(".crop-form"),n=this.getAvatarSize(),a=t.width();a<n;)n/=2;var s=this.getAvatarSize()/n;t.width(n),t.cropit({width:n,height:n,exportZoom:s,imageState:{src:this.getImagePath()},onImageLoaded:function(){if(e.props.upload){var n=t.cropit("zoom"),a=t.cropit("imageSize");if(a.width>a.height){var s=(a.width*n-e.getAvatarSize())/-2;t.cropit("offset",{x:s,y:0})}else if(a.width<a.height){var i=(a.height*n-e.getAvatarSize())/-2;t.cropit("offset",{x:0,y:i})}else t.cropit("offset",{x:0,y:0})}else{var o=e.props.options.crop_src.crop;o&&(t.cropit("zoom",o.zoom),t.cropit("offset",{x:o.x,y:o.y}))}}})}},{key:"componentWillUnmount",value:function(){Ce(".crop-form").cropit("disable")}},{key:"render",value:function(){return(0,i.Z)("div",{},void 0,we||(we=(0,i.Z)("div",{className:"modal-body modal-avatar-crop"},void 0,(0,i.Z)("div",{className:"crop-form"},void 0,(0,i.Z)("div",{className:"cropit-preview"}),(0,i.Z)("input",{type:"range",className:"cropit-image-zoom-input"})))),(0,i.Z)("div",{className:"modal-footer"},void 0,(0,i.Z)("div",{className:"col-md-6 col-md-offset-3"},void 0,(0,i.Z)(q.Z,{onClick:this.cropAvatar,loading:this.state.isLoading,className:"btn-primary btn-block"},void 0,this.props.upload?gettext("Set avatar"):gettext("Crop image")),(0,i.Z)(q.Z,{onClick:this.props.showIndex,disabled:this.state.isLoading,className:"btn-default btn-block"},void 0,gettext("Cancel")))))}}]),s}(p().Component),Le=n(48772);var Pe,Oe=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,v.Z)((0,f.Z)(t),"pickFile",(function(){document.getElementById("avatar-hidden-upload").click()})),(0,v.Z)((0,f.Z)(t),"uploadFile",(function(){var e=document.getElementById("avatar-hidden-upload").files[0];if(e){var n=t.validateFile(e);if(n)Z.Z.error(n);else{t.setState({image:e,preview:URL.createObjectURL(e),progress:0});var a=new FormData;a.append("avatar","upload"),a.append("image",e),m.Z.upload(t.props.user.api.avatar,a,(function(e){t.setState({progress:e})})).then((function(e){t.setState({options:e,uploaded:e.detail}),Z.Z.info(gettext("Your image has been uploaded and you may now crop it."))}),(function(e){400===e.status||413===e.status?(Z.Z.error(e.detail),t.setState({isLoading:!1,image:null,progress:0})):t.props.showError(e)}))}}})),t.state={image:null,preview:null,progress:0,uploaded:null,dataUrl:null},t}return(0,r.Z)(s,[{key:"validateFile",value:function(e){if(e.size>this.props.options.upload.limit)return interpolate(gettext("Selected file is too big. (%(filesize)s)"),{filesize:(0,Le.Z)(e.size)},!0);var t=gettext("Selected file type is not supported.");if(-1===this.props.options.upload.allowed_mime_types.indexOf(e.type))return t;var n=!1,a=e.name.toLowerCase();return this.props.options.upload.allowed_extensions.map((function(e){a.substr(-1*e.length)===e&&(n=!0)})),!n&&t}},{key:"getUploadRequirements",value:function(e){var t=e.allowed_extensions.map((function(e){return e.substr(1)}));return interpolate(gettext("%(files)s files smaller than %(limit)s"),{files:t.join(", "),limit:(0,Le.Z)(e.limit)},!0)}},{key:"getUploadButton",value:function(){return(0,i.Z)("div",{className:"modal-body modal-avatar-upload"},void 0,(0,i.Z)(q.Z,{className:"btn-pick-file",onClick:this.pickFile},void 0,Se||(Se=(0,i.Z)("div",{className:"material-icon"},void 0,"input")),gettext("Select file")),(0,i.Z)("p",{className:"text-muted"},void 0,this.getUploadRequirements(this.props.options.upload)))}},{key:"getUploadProgressLabel",value:function(){return interpolate(gettext("%(progress)s % complete"),{progress:this.state.progress},!0)}},{key:"getUploadProgress",value:function(){return(0,i.Z)("div",{className:"modal-body modal-avatar-upload"},void 0,(0,i.Z)("div",{className:"upload-progress"},void 0,(0,i.Z)("img",{src:this.state.preview}),(0,i.Z)("div",{className:"progress"},void 0,(0,i.Z)("div",{className:"progress-bar",role:"progressbar","aria-valuenow":"{this.state.progress}","aria-valuemin":"0","aria-valuemax":"100",style:{width:this.state.progress+"%"}},void 0,(0,i.Z)("span",{className:"sr-only"},void 0,this.getUploadProgressLabel())))))}},{key:"renderUpload",value:function(){return(0,i.Z)("div",{},void 0,(0,i.Z)("input",{type:"file",id:"avatar-hidden-upload",className:"hidden-file-upload",onChange:this.uploadFile}),this.state.image?this.getUploadProgress():this.getUploadButton(),(0,i.Z)("div",{className:"modal-footer"},void 0,(0,i.Z)("div",{className:"col-md-6 col-md-offset-3"},void 0,(0,i.Z)(q.Z,{onClick:this.props.showIndex,disabled:!!this.state.image,className:"btn-default btn-block"},void 0,gettext("Cancel")))))}},{key:"renderCrop",value:function(){return(0,i.Z)(Ee,{options:this.state.options,user:this.props.user,upload:this.state.uploaded,dataUrl:this.state.preview,onComplete:this.props.onComplete,showError:this.props.showError,showIndex:this.props.showIndex})}},{key:"render",value:function(){return this.state.uploaded?this.renderCrop():this.renderUpload()}}]),s}(p().Component),Te=n(69130);function Ae(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,u.Z)(e);if(t){var s=(0,u.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,c.Z)(this,n)}}var Be,Ie,je,De=function(e){(0,l.Z)(n,e);var t=Ae(n);function n(){var e;(0,o.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,v.Z)((0,f.Z)(e),"select",(function(){e.props.select(e.props.id)})),e}return(0,r.Z)(n,[{key:"getClassName",value:function(){return this.props.selection===this.props.id?this.props.disabled?"btn btn-avatar btn-disabled avatar-selected":"btn btn-avatar avatar-selected":this.props.disabled?"btn btn-avatar btn-disabled":"btn btn-avatar"}},{key:"render",value:function(){return(0,i.Z)("button",{type:"button",className:this.getClassName(),disabled:this.props.disabled,onClick:this.select},void 0,(0,i.Z)("img",{src:this.props.url}))}}]),n}(p().Component),Ue=function(e){(0,l.Z)(n,e);var t=Ae(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"render",value:function(){var e=this;return(0,i.Z)("div",{className:"avatars-gallery"},void 0,(0,i.Z)("h3",{},void 0,this.props.name),(0,i.Z)("div",{className:"avatars-gallery-images"},void 0,(0,Te.Z)(this.props.images,4,null).map((function(t,n){return(0,i.Z)("div",{className:"row"},n,t.map((function(t,n){return(0,i.Z)("div",{className:"col-xs-3"},n,t?p().createElement(De,(0,b.Z)({disabled:e.props.disabled,select:e.props.select,selection:e.props.selection},t)):Pe||(Pe=(0,i.Z)("div",{className:"blank-avatar"})))})))}))))}}]),n}(p().Component),Me=function(e){(0,l.Z)(n,e);var t=Ae(n);function n(e){var a;return(0,o.Z)(this,n),a=t.call(this,e),(0,v.Z)((0,f.Z)(a),"select",(function(e){a.setState({selection:e})})),(0,v.Z)((0,f.Z)(a),"save",(function(){if(a.state.isLoading)return!1;a.setState({isLoading:!0}),m.Z.post(a.props.user.api.avatar,{avatar:"galleries",image:a.state.selection}).then((function(e){a.setState({isLoading:!1}),Z.Z.success(e.detail),a.props.onComplete(e),a.props.showIndex()}),(function(e){400===e.status?(Z.Z.error(e.detail),a.setState({isLoading:!1})):a.props.showError(e)}))})),a.state={selection:null,isLoading:!1},a}return(0,r.Z)(n,[{key:"render",value:function(){var e=this;return(0,i.Z)("div",{},void 0,(0,i.Z)("div",{className:"modal-body modal-avatar-gallery"},void 0,this.props.options.galleries.map((function(t,n){return(0,i.Z)(Ue,{name:t.name,images:t.images,selection:e.state.selection,disabled:e.state.isLoading,select:e.select},n)}))),(0,i.Z)("div",{className:"modal-footer"},void 0,(0,i.Z)("div",{className:"row"},void 0,(0,i.Z)("div",{className:"col-md-6 col-md-offset-3"},void 0,(0,i.Z)(q.Z,{onClick:this.save,loading:this.state.isLoading,disabled:!this.state.selection,className:"btn-primary btn-block"},void 0,this.state.selection?gettext("Save choice"):gettext("Select avatar")),(0,i.Z)(q.Z,{onClick:this.props.showIndex,disabled:this.state.isLoading,className:"btn-default btn-block"},void 0,gettext("Cancel"))))))}}]),n}(p().Component),ze=n(3784),He=n(6935),Fe=n(90287);function qe(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,u.Z)(e);if(t){var s=(0,u.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,c.Z)(this,n)}}var Ye,Ve,$e,Ge,We,Ke,Je,Qe,Xe,et,tt,nt,at=function(e){(0,l.Z)(n,e);var t=qe(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"getErrorReason",value:function(){return this.props.reason?(0,i.Z)("p",{dangerouslySetInnerHTML:{__html:this.props.reason}}):null}},{key:"render",value:function(){return(0,i.Z)("div",{className:"modal-body"},void 0,Be||(Be=(0,i.Z)("div",{className:"message-icon"},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,"remove_circle_outline"))),(0,i.Z)("div",{className:"message-body"},void 0,(0,i.Z)("p",{className:"lead"},void 0,this.props.message),this.getErrorReason(),(0,i.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,gettext("Ok"))))}}]),n}(p().Component),st=function(e){(0,l.Z)(n,e);var t=qe(n);function n(){var e;(0,o.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,v.Z)((0,f.Z)(e),"showError",(function(t){e.setState({error:t})})),(0,v.Z)((0,f.Z)(e),"showIndex",(function(){e.setState({component:Re})})),(0,v.Z)((0,f.Z)(e),"showUpload",(function(){e.setState({component:Oe})})),(0,v.Z)((0,f.Z)(e),"showCrop",(function(){e.setState({component:Ee})})),(0,v.Z)((0,f.Z)(e),"showGallery",(function(){e.setState({component:Me})})),(0,v.Z)((0,f.Z)(e),"completeFlow",(function(t){Fe.Z.dispatch((0,He.n1)(e.props.user,t.avatars)),e.setState({component:Re,options:t})})),e}return(0,r.Z)(n,[{key:"componentDidMount",value:function(){var e=this;m.Z.get(this.props.user.api.avatar).then((function(t){e.setState({component:Re,options:t,error:null})}),(function(t){e.showError(t)}))}},{key:"getBody",value:function(){return this.state?this.state.error?(0,i.Z)(at,{message:this.state.error.detail,reason:this.state.error.reason}):(0,i.Z)(this.state.component,{options:this.state.options,user:this.props.user,onComplete:this.completeFlow,showError:this.showError,showIndex:this.showIndex,showCrop:this.showCrop,showUpload:this.showUpload,showGallery:this.showGallery}):Ie||(Ie=(0,i.Z)(ze.Z,{}))}},{key:"getClassName",value:function(){return this.state&&this.state.error?"modal-dialog modal-message modal-change-avatar":"modal-dialog modal-change-avatar"}},{key:"render",value:function(){return(0,i.Z)("div",{className:this.getClassName(),role:"document"},void 0,(0,i.Z)("div",{className:"modal-content"},void 0,(0,i.Z)("div",{className:"modal-header"},void 0,(0,i.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},void 0,je||(je=(0,i.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,i.Z)("h4",{className:"modal-title"},void 0,gettext("Change your avatar"))),this.getBody()))}}]),n}(p().Component);function it(e){return{user:e.auth.user}}function ot(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,u.Z)(e);if(t){var s=(0,u.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,c.Z)(this,n)}}var rt=function(e){(0,l.Z)(n,e);var t=ot(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"changeAvatar",value:function(){se.Z.show((0,a.$j)(it)(st))}},{key:"render",value:function(){var e=this.props.user;return(0,i.Z)("ul",{className:"dropdown-menu user-dropdown dropdown-menu-right",role:"menu"},void 0,(0,i.Z)("li",{className:"dropdown-header"},void 0,(0,i.Z)("strong",{},void 0,e.username),(0,i.Z)("div",{className:"row user-stats"},void 0,(0,i.Z)("div",{className:"col-sm-3"},void 0,Ye||(Ye=(0,i.Z)("span",{className:"material-icon"},void 0,"message")),e.posts),(0,i.Z)("div",{className:"col-sm-3"},void 0,Ve||(Ve=(0,i.Z)("span",{className:"material-icon"},void 0,"forum")),e.threads),(0,i.Z)("div",{className:"col-sm-3"},void 0,$e||($e=(0,i.Z)("span",{className:"material-icon"},void 0,"favorite")),e.followers),(0,i.Z)("div",{className:"col-sm-3"},void 0,Ge||(Ge=(0,i.Z)("span",{className:"material-icon"},void 0,"favorite_outline")),e.following))),We||(We=(0,i.Z)("li",{className:"divider"})),(0,i.Z)("li",{},void 0,(0,i.Z)("a",{href:e.url},void 0,Ke||(Ke=(0,i.Z)("span",{className:"material-icon"},void 0,"account_circle")),gettext("See your profile"))),(0,i.Z)("li",{},void 0,(0,i.Z)("a",{href:s.Z.get("USERCP_URL")},void 0,Je||(Je=(0,i.Z)("span",{className:"material-icon"},void 0,"done_all")),gettext("Change options"))),(0,i.Z)("li",{},void 0,(0,i.Z)("button",{className:"btn-link",onClick:this.changeAvatar,type:"button"},void 0,Qe||(Qe=(0,i.Z)("span",{className:"material-icon"},void 0,"portrait")),gettext("Change avatar"))),!!e.acl.can_use_private_threads&&(0,i.Z)("li",{},void 0,(0,i.Z)("a",{href:s.Z.get("PRIVATE_THREADS_URL")},void 0,Xe||(Xe=(0,i.Z)("span",{className:"material-icon"},void 0,"message")),gettext("Private threads"),(0,i.Z)(lt,{user:e}))),et||(et=(0,i.Z)("li",{className:"divider"})),(0,i.Z)("li",{className:"dropdown-buttons"},void 0,(0,i.Z)("button",{className:"btn btn-default btn-block",onClick:function(){return document.getElementById("hidden-logout-form").submit()},type:"button"},void 0,gettext("Log out"))))}}]),n}(p().Component);function lt(e){var t=e.user;return t.unread_private_threads?(0,i.Z)("span",{className:"badge"},void 0,t.unread_private_threads):null}function ct(e){var t=e.user;return(0,i.Z)("ul",{className:"ul nav navbar-nav nav-user"},void 0,tt||(tt=(0,i.Z)("li",{},void 0,(0,i.Z)(F,{}))),(0,i.Z)(ut,{user:t}),(0,i.Z)("li",{className:"dropdown"},void 0,(0,i.Z)("a",{"aria-haspopup":"true","aria-expanded":"false",className:"dropdown-toggle","data-toggle":"dropdown",href:t.url,role:"button"},void 0,(0,i.Z)(h.ZP,{user:t,size:"64"})),(0,i.Z)(rt,{user:t})))}function ut(e){var t=e.user;if(!t.acl.can_use_private_threads)return null;var n;return n=t.unread_private_threads?gettext("You have unread private threads!"):gettext("Private threads"),(0,i.Z)("li",{},void 0,(0,i.Z)("a",{className:"navbar-icon",href:s.Z.get("PRIVATE_THREADS_URL"),title:n},void 0,nt||(nt=(0,i.Z)("span",{className:"material-icon"},void 0,"message")),t.unread_private_threads>0&&(0,i.Z)("span",{className:"badge"},void 0,t.unread_private_threads)))}function dt(e){return{user:e.auth.user}}var pt,ht,ft=function(e){(0,l.Z)(n,e);var t=ot(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"showUserMenu",value:function(){be.Z.showConnected("user-menu",(0,a.$j)(dt)(rt))}},{key:"render",value:function(){return(0,i.Z)("button",{type:"button",onClick:this.showUserMenu},void 0,(0,i.Z)(h.ZP,{user:this.props.user,size:"50"}))}}]),n}(p().Component);function vt(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,u.Z)(e);if(t){var s=(0,u.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,c.Z)(this,n)}}var mt=function(e){(0,l.Z)(n,e);var t=vt(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"render",value:function(){return this.props.isAuthenticated?(0,i.Z)(ct,{user:this.props.user}):pt||(pt=(0,i.Z)(ke,{}))}}]),n}(p().Component),Zt=function(e){(0,l.Z)(n,e);var t=vt(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"render",value:function(){return this.props.isAuthenticated?(0,i.Z)(ft,{user:this.props.user}):ht||(ht=(0,i.Z)(xe,{}))}}]),n}(p().Component);function gt(e){return e.auth}var bt=n(4869);s.Z.addInitializer({name:"component:user-menu",initializer:function(){(0,bt.Z)((0,a.$j)(gt)(mt),"user-menu-mount"),(0,bt.Z)((0,a.$j)(gt)(Zt),"user-menu-compact-mount")},after:"store"})},77031:function(e,t,n){"use strict";var a,s=n(22928),i=n(15671),o=n(43144),r=n(79340),l=n(6215),c=n(61120),u=n(57588),d=n.n(u),p=n(37424),h=n(97326),f=n(4942),v=n(59131),m=n(69987),Z=n(94417),g=function(e,t){var n=e;return"rank"===t.component?n+=t.slug:n+=t.component,n+"/"},b=function(e){var t=e.baseUrl,n=e.page,i=e.pages;return(0,s.Z)("div",{className:"nav-container"},void 0,(0,s.Z)("div",{className:"dropdown hidden-sm hidden-md hidden-lg"},void 0,(0,s.Z)("button",{className:"btn btn-default btn-block btn-outline dropdown-toggle",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,a||(a=(0,s.Z)("span",{className:"material-icon"},void 0,"menu")),n.name),(0,s.Z)("ul",{className:"dropdown-menu stick-to-bottom"},void 0,i.map((function(e){var n=g(t,e);return(0,s.Z)("li",{},n,(0,s.Z)(m.rU,{to:n},void 0,e.name))})))),(0,s.Z)("ul",{className:"nav nav-pills hidden-xs",role:"menu"},void 0,i.map((function(e){var n=g(t,e);return(0,s.Z)(Z.Z,{path:n},n,(0,s.Z)(m.rU,{to:n},void 0,e.name))}))))};var y,_,N=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(){return(0,i.Z)(this,u),a.apply(this,arguments)}return(0,o.Z)(u,[{key:"getEmptyMessage",value:function(){return interpolate(gettext("No users have posted any new messages during last %(days)s days."),{days:this.props.trackedPeriod},!0)}},{key:"render",value:function(){return(0,s.Z)("div",{className:"active-posters-list"},void 0,(0,s.Z)(v.Z,{},void 0,(0,s.Z)(b,{baseUrl:misago.get("USERS_LIST_URL"),page:this.props.page,pages:misago.get("USERS_LISTS")}),(0,s.Z)("p",{className:"lead"},void 0,this.getEmptyMessage())))}}]),u}(d().Component),k=n(19605),x=n(44039);var w=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(){return(0,i.Z)(this,u),a.apply(this,arguments)}return(0,o.Z)(u,[{key:"shouldComponentUpdate",value:function(){return!1}},{key:"getClassName",value:function(){return this.props.hiddenOnMobile?"list-group-item hidden-xs hidden-sm":"list-group-item"}},{key:"render",value:function(){return(0,s.Z)("li",{className:this.getClassName()},void 0,y||(y=(0,s.Z)("div",{className:"rank-user-avatar"},void 0,(0,s.Z)("span",{},void 0,(0,s.Z)(k.ZP,{size:"50"})))),(0,s.Z)("div",{className:"rank-user"},void 0,(0,s.Z)("div",{className:"user-name"},void 0,(0,s.Z)("span",{className:"item-title"},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:x.e(30,80)+"px"}},void 0," "))),(0,s.Z)("div",{className:"user-details"},void 0,(0,s.Z)("span",{className:"user-status"},void 0,_||(_=(0,s.Z)("span",{className:"status-icon ui-preview-text"},void 0," ")),(0,s.Z)("span",{className:"status-label ui-preview-text hidden-xs hidden-sm",style:{width:x.e(30,50)+"px"}},void 0," ")),(0,s.Z)("span",{className:"rank-name"},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:x.e(30,50)+"px"}},void 0," ")),(0,s.Z)("span",{className:"user-title hidden-xs hidden-sm"},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:x.e(30,50)+"px"}},void 0," "))),(0,s.Z)("div",{className:"user-compact-stats visible-xs-block"},void 0,(0,s.Z)("span",{className:"rank-position"},void 0,(0,s.Z)("strong",{},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:x.e(20,30)+"px"}},void 0," ")),(0,s.Z)("small",{},void 0,gettext("Rank"))),(0,s.Z)("span",{className:"rank-posts-counted"},void 0,(0,s.Z)("strong",{},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:x.e(20,30)+"px"}},void 0," ")),(0,s.Z)("small",{},void 0,gettext("Ranked posts"))))),(0,s.Z)("div",{className:"rank-position hidden-xs"},void 0,(0,s.Z)("strong",{},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:x.e(20,30)+"px"}},void 0," ")),(0,s.Z)("small",{},void 0,gettext("Rank"))),(0,s.Z)("div",{className:"rank-posts-counted hidden-xs"},void 0,(0,s.Z)("strong",{},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:x.e(20,30)+"px"}},void 0," ")),(0,s.Z)("small",{},void 0,gettext("Ranked posts"))),(0,s.Z)("div",{className:"rank-posts-total hidden-xs"},void 0,(0,s.Z)("strong",{},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:x.e(20,30)+"px"}},void 0," ")),(0,s.Z)("small",{},void 0,gettext("Total posts"))))}}]),u}(d().Component);var R,C=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(){return(0,i.Z)(this,u),a.apply(this,arguments)}return(0,o.Z)(u,[{key:"shouldComponentUpdate",value:function(){return!1}},{key:"render",value:function(){return(0,s.Z)("div",{className:"active-posters-list"},void 0,(0,s.Z)(v.Z,{},void 0,(0,s.Z)(b,{baseUrl:misago.get("USERS_LIST_URL"),page:this.props.page,pages:misago.get("USERS_LISTS")}),(0,s.Z)("p",{className:"lead ui-preview"},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:x.e(50,220)+"px"}},void 0," ")),(0,s.Z)("div",{className:"active-posters ui-preview"},void 0,(0,s.Z)("ul",{className:"list-group"},void 0,[0,1,2].map((function(e){return(0,s.Z)(w,{hiddenOnMobile:e>0},e)}))))))}}]),u}(d().Component),S=n(24678),E=n(32233);var L=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(){return(0,i.Z)(this,u),a.apply(this,arguments)}return(0,o.Z)(u,[{key:"getClassName",value:function(){return this.props.rank.css_class?"list-group-item list-group-rank-"+this.props.rank.css_class:"list-group-item"}},{key:"getUserStatus",value:function(){return this.props.user.status?(0,s.Z)(S.ZP,{user:this.props.user,status:this.props.user.status},void 0,(0,s.Z)(S.Jj,{user:this.props.user,status:this.props.user.status}),(0,s.Z)(S.pg,{user:this.props.user,status:this.props.user.status,className:"status-label hidden-xs hidden-sm"})):(0,s.Z)("span",{className:"user-status"},void 0,R||(R=(0,s.Z)("span",{className:"status-icon ui-preview-text"},void 0," ")),(0,s.Z)("span",{className:"status-label ui-preview-text hidden-xs hidden-sm",style:{width:x.e(30,50)+"px"}},void 0," "))}},{key:"getRankName",value:function(){if(!this.props.rank.is_tab)return(0,s.Z)("span",{className:"rank-name item-title"},void 0,this.props.rank.name);var e=E.Z.get("USERS_LIST_URL")+this.props.rank.slug+"/";return(0,s.Z)(m.rU,{to:e,className:"rank-name item-title"},void 0,this.props.rank.name)}},{key:"getUserTitle",value:function(){return this.props.user.title?(0,s.Z)("span",{className:"user-title hidden-xs hidden-sm"},void 0,this.props.user.title):null}},{key:"render",value:function(){return(0,s.Z)("li",{className:this.getClassName()},void 0,(0,s.Z)("div",{className:"rank-user-avatar"},void 0,(0,s.Z)("a",{href:this.props.user.url},void 0,(0,s.Z)(k.ZP,{user:this.props.user,size:50,size2x:64}))),(0,s.Z)("div",{className:"rank-user"},void 0,(0,s.Z)("div",{className:"user-name"},void 0,(0,s.Z)("a",{href:this.props.user.url,className:"item-title"},void 0,this.props.user.username)),(0,s.Z)("div",{className:"user-details"},void 0,this.getUserStatus(),this.getRankName(),this.getUserTitle()),(0,s.Z)("div",{className:"user-compact-stats visible-xs-block"},void 0,(0,s.Z)("span",{className:"rank-position"},void 0,(0,s.Z)("strong",{},void 0,"#",this.props.counter),(0,s.Z)("small",{},void 0,gettext("Rank"))),(0,s.Z)("span",{className:"rank-posts-counted"},void 0,(0,s.Z)("strong",{},void 0,this.props.user.meta.score),(0,s.Z)("small",{},void 0,gettext("Ranked posts"))))),(0,s.Z)("div",{className:"rank-position hidden-xs"},void 0,(0,s.Z)("strong",{},void 0,"#",this.props.counter),(0,s.Z)("small",{},void 0,gettext("Rank"))),(0,s.Z)("div",{className:"rank-posts-counted hidden-xs"},void 0,(0,s.Z)("strong",{},void 0,this.props.user.meta.score),(0,s.Z)("small",{},void 0,gettext("Ranked posts"))),(0,s.Z)("div",{className:"rank-posts-total hidden-xs"},void 0,(0,s.Z)("strong",{},void 0,this.props.user.posts),(0,s.Z)("small",{},void 0,gettext("Total posts"))))}}]),u}(d().Component);var P=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(){return(0,i.Z)(this,u),a.apply(this,arguments)}return(0,o.Z)(u,[{key:"getLeadMessage",value:function(){var e=ngettext("%(posters)s top poster from last %(days)s days.","%(posters)s top posters from last %(days)s days.",this.props.count);return interpolate(e,{posters:this.props.count,days:this.props.trackedPeriod},!0)}},{key:"render",value:function(){return(0,s.Z)("div",{className:"active-posters-list"},void 0,(0,s.Z)(v.Z,{},void 0,(0,s.Z)(b,{baseUrl:misago.get("USERS_LIST_URL"),page:this.props.page,pages:misago.get("USERS_LISTS")}),(0,s.Z)("p",{className:"lead"},void 0,this.getLeadMessage()),(0,s.Z)("div",{className:"active-posters ui-ready"},void 0,(0,s.Z)("ul",{className:"list-group"},void 0,this.props.users.map((function(e,t){return(0,s.Z)(L,{user:e,rank:e.rank,counter:t+1},e.id)}))))))}}]),u}(d().Component),O=n(6935),T=n(55547),A=n(90287),B=n(53328);var I=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(e){var t;return(0,i.Z)(this,u),t=a.call(this,e),(0,f.Z)((0,h.Z)(t),"update",(function(e){A.Z.dispatch((0,O.ZB)(e.results)),t.setState({isLoaded:!0,trackedPeriod:e.tracked_period,count:e.count})})),E.Z.has("USERS")?t.initWithPreloadedData(E.Z.pop("USERS")):t.initWithoutPreloadedData(),t.startPolling(),t}return(0,o.Z)(u,[{key:"initWithPreloadedData",value:function(e){this.state={isLoaded:!0,trackedPeriod:e.tracked_period,count:e.count},A.Z.dispatch((0,O.ZB)(e.results))}},{key:"initWithoutPreloadedData",value:function(){this.state={isLoaded:!1}}},{key:"startPolling",value:function(){T.Z.start({poll:"active-posters",url:E.Z.get("USERS_API"),data:{list:"active"},frequency:9e4,update:this.update})}},{key:"componentDidMount",value:function(){B.Z.set({title:this.props.route.extra.name,parent:gettext("Users")})}},{key:"componentWillUnmount",value:function(){T.Z.stop("active-posters")}},{key:"render",value:function(){var e={name:this.props.route.extra.name};return this.state.isLoaded?this.state.count>0?(0,s.Z)(P,{page:e,users:this.props.users,trackedPeriod:this.state.trackedPeriod,count:this.state.count}):(0,s.Z)(N,{page:e,trackedPeriod:this.state.trackedPeriod}):(0,s.Z)(C,{page:e})}}]),u}(d().Component);var j,D=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(){return(0,i.Z)(this,u),a.apply(this,arguments)}return(0,o.Z)(u,[{key:"getClassName",value:function(){return this.props.copy&&this.props.copy.length&&1===function(e,t){if(e=(e+"").toLowerCase(),(t=(t+"").toLowerCase()).length<=0)return 0;for(var n=0,a=0,s=t.length;(a=e.indexOf(t,a))>=0;)n+=1,a+=s;return n}(this.props.copy,"<p")&&-1===this.props.copy.indexOf("<br")?"page-lead lead":"page-lead"}},{key:"render",value:function(){return this.props.copy&&this.props.copy.length?(0,s.Z)("div",{className:this.getClassName(),dangerouslySetInnerHTML:{__html:this.props.copy}}):null}}]),u}(d().Component),U=n(40429),M=function(e){var t=e.users;return(0,s.Z)(U.Z,{cols:4,isReady:!0,showStatus:!0,users:t})};var z,H,F,q,Y,V,$,G,W,K=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(){var e;(0,i.Z)(this,u);for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return e=a.call.apply(a,[this].concat(n)),(0,f.Z)((0,h.Z)(e),"render",(function(){return j||(j=(0,s.Z)(U.Z,{cols:4,isReady:!1}))})),e}return(0,o.Z)(u,[{key:"shouldComponentUpdate",value:function(){return!1}}]),u}(d().Component),J=K,Q=n(92490),X=function(e){var t=e.users;return t.more?(0,s.Z)("p",{},void 0,interpolate(ngettext("There is %(more)s more member with this role.","There are %(more)s more members with this role.",t.more),{more:t.more},!0)):(0,s.Z)("p",{},void 0,gettext("There are no more members with this role."))},ee=function(e){var t=e.baseUrl,n=e.users;return(0,s.Z)("div",{className:"misago-pagination"},void 0,n.isLoaded&&n.first?(0,s.Z)(m.rU,{className:"btn btn-default btn-outline btn-icon",to:t,title:gettext("Go to first page")},void 0,z||(z=(0,s.Z)("span",{className:"material-icon"},void 0,"first_page"))):(0,s.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:gettext("Go to first page"),type:"button",disabled:!0},void 0,H||(H=(0,s.Z)("span",{className:"material-icon"},void 0,"first_page"))),n.isLoaded&&n.previous?(0,s.Z)(m.rU,{className:"btn btn-default btn-outline btn-icon",to:t+(n.previous>1?n.previous+"/":""),title:gettext("Go to previous page")},void 0,F||(F=(0,s.Z)("span",{className:"material-icon"},void 0,"chevron_left"))):(0,s.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:gettext("Go to previous page"),type:"button",disabled:!0},void 0,q||(q=(0,s.Z)("span",{className:"material-icon"},void 0,"chevron_left"))),n.isLoaded&&n.next?(0,s.Z)(m.rU,{className:"btn btn-default btn-outline btn-icon",to:t+n.next+"/",title:gettext("Go to next page")},void 0,Y||(Y=(0,s.Z)("span",{className:"material-icon"},void 0,"chevron_right"))):(0,s.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:gettext("Go to next page"),type:"button",disabled:!0},void 0,V||(V=(0,s.Z)("span",{className:"material-icon"},void 0,"chevron_right"))),n.isLoaded&&n.last?(0,s.Z)(m.rU,{className:"btn btn-default btn-outline btn-icon",to:t+n.last+"/",title:gettext("Go to last page")},void 0,$||($=(0,s.Z)("span",{className:"material-icon"},void 0,"last_page"))):(0,s.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:gettext("Go to last page"),type:"button",disabled:!0},void 0,G||(G=(0,s.Z)("span",{className:"material-icon"},void 0,"last_page"))))},te=function(e){var t=e.baseUrl,n=e.users;return(0,s.Z)(Q.o8,{},void 0,(0,s.Z)(Q.Z2,{},void 0,(0,s.Z)(Q.Eg,{},void 0,(0,s.Z)(ee,{baseUrl:t,users:n}))),(0,s.Z)(Q.Z2,{auto:!0},void 0,(0,s.Z)(Q.Eg,{},void 0,(0,s.Z)(X,{users:n}))))};var ne=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(e){var t;return(0,i.Z)(this,u),t=a.call(this,e),(0,f.Z)((0,h.Z)(t),"update",(function(e){A.Z.dispatch((0,O.ZB)(e.results)),e.isLoaded=!0,t.setState(e)})),E.Z.has("USERS")?t.initWithPreloadedData(E.Z.pop("USERS")):t.initWithoutPreloadedData(),t.startPolling(e.params.page||1),t}return(0,o.Z)(u,[{key:"initWithPreloadedData",value:function(e){this.state=Object.assign(e,{isLoaded:!0}),A.Z.dispatch((0,O.ZB)(e.results))}},{key:"initWithoutPreloadedData",value:function(){this.state={isLoaded:!1}}},{key:"startPolling",value:function(e){T.Z.start({poll:"rank-users",url:E.Z.get("USERS_API"),data:{rank:this.props.route.rank.id,page:e},frequency:9e4,update:this.update})}},{key:"componentDidMount",value:function(){B.Z.set({title:this.props.route.rank.name,page:this.props.params.page||null,parent:gettext("Users")})}},{key:"componentWillUnmount",value:function(){T.Z.stop("rank-users")}},{key:"componentWillReceiveProps",value:function(e){this.props.params.page!==e.params.page&&(B.Z.set({title:this.props.route.rank.name,page:e.params.page||null,parent:gettext("Users")}),this.setState({isLoaded:!1}),T.Z.stop("rank-users"),this.startPolling(e.params.page))}},{key:"getClassName",value:function(){return this.props.route.rank.css_class?"rank-users-list rank-users-"+this.props.route.rank.css_class:"rank-users-list"}},{key:"getRankDescription",value:function(){return this.props.route.rank.description?(0,s.Z)("div",{className:"rank-description"},void 0,(0,s.Z)(D,{copy:this.props.route.rank.description.html})):null}},{key:"getComponent",value:function(){return this.state.isLoaded?this.state.count>0?(0,s.Z)(M,{users:this.props.users}):(0,s.Z)("p",{className:"lead"},void 0,gettext("There are no users with this rank at the moment.")):W||(W=(0,s.Z)(J,{}))}},{key:"render",value:function(){return(0,s.Z)("div",{className:this.getClassName()},void 0,(0,s.Z)(v.Z,{},void 0,(0,s.Z)(b,{baseUrl:E.Z.get("USERS_LIST_URL"),page:{name:this.props.route.rank.name},pages:E.Z.get("USERS_LISTS")}),this.getRankDescription(),this.getComponent(),(0,s.Z)(te,{baseUrl:E.Z.get("USERS_LIST_URL")+this.props.route.rank.slug+"/",users:this.state})))}}]),u}(d().Component),ae=n(82125),se=n(99755);var ie=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(){return(0,i.Z)(this,u),a.apply(this,arguments)}return(0,o.Z)(u,[{key:"render",value:function(){return(0,s.Z)("div",{className:"page page-users-lists"},void 0,(0,s.Z)(se.sP,{},void 0,(0,s.Z)(se.mr,{styleName:"users-lists"},void 0,(0,s.Z)(se.gC,{styleName:"users-lists"},void 0,(0,s.Z)("h1",{},void 0,gettext("Users"))))),this.props.children)}}]),u}(ae.Z);function oe(e){return{tick:e.tick.tick,user:e.auth.user,users:e.users}}function re(){var e=[];return E.Z.get("USERS_LISTS").forEach((function(t){"rank"===t.component?(e.push({path:E.Z.get("USERS_LIST_URL")+t.slug+"/:page/",component:(0,p.$j)(oe)(ne),rank:t}),e.push({path:E.Z.get("USERS_LIST_URL")+t.slug+"/",component:(0,p.$j)(oe)(ne),rank:t})):"active-posters"===t.component&&e.push({path:E.Z.get("USERS_LIST_URL")+t.component+"/",component:(0,p.$j)(oe)(I),extra:{name:t.name}})})),e}var le=n(39633);E.Z.addInitializer({name:"component:users",initializer:function(e){e.has("USERS_LISTS")&&(0,le.Z)({root:E.Z.get("USERS_LIST_URL"),component:ie,paths:re()})},after:"store"})},97751:function(e,t,n){"use strict";var a=n(32233),s=n(96142);a.Z.addInitializer({name:"include",initializer:function(e){s.Z.init(e.get("STATIC_URL"))}})},76093:function(e,t,n){"use strict";var a=n(32233),s=n(62833);a.Z.addInitializer({name:"local-storage",initializer:function(){s.Z.init("misago_")}})},19764:function(e,t,n){"use strict";var a=n(32233),s=n(8621);a.Z.addInitializer({name:"dropdown",initializer:function(){var e=document.getElementById("mobile-navbar-dropdown-mount");e&&s.Z.init(e)},before:"store"})},47549:function(e,t,n){"use strict";var a=n(32233),s=n(59801);a.Z.addInitializer({name:"modal",initializer:function(){var e=document.getElementById("modal-mount");e&&s.Z.init(e)},before:"store"})},22331:function(e,t,n){"use strict";var a=n(30381),s=n.n(a),i=n(32233),o=n(19755);i.Z.addInitializer({name:"moment",initializer:function(){s().locale(o("html").attr("lang"))}})},21513:function(e,t,n){"use strict";var a=n(32233),s=n(53328);a.Z.addInitializer({name:"page-title",initializer:function(e){s.Z.init(e.get("SETTINGS").forum_index_title,e.get("SETTINGS").forum_name)}})},98749:function(e,t,n){"use strict";var a=n(32233),s=n(78657),i=n(53904),o=n(55547);a.Z.addInitializer({name:"polls",initializer:function(){o.Z.init(s.Z,i.Z)}})},98251:function(e,t,n){"use strict";var a=n(32233),s=n(78657),i=n(27950),o=n(53904);a.Z.addInitializer({name:"posting",initializer:function(){i.Z.init(s.Z,o.Z,document.getElementById("posting-placeholder"))}})},6720:function(e,t,n){"use strict";var a=n(32233),s=n(35486),i=n(90287);a.Z.addInitializer({name:"reducer:auth",initializer:function(e){i.Z.addReducer("auth",s.ZP,Object.assign({isAuthenticated:e.get("isAuthenticated"),isAnonymous:!e.get("isAuthenticated"),user:e.get("user")},s.E3))},before:"store"})},10846:function(e,t,n){"use strict";var a=n(32233),s=n(8154),i=n(90287);a.Z.addInitializer({name:"reducer:participants",initializer:function(){var e=null;a.Z.has("THREAD")&&(e=a.Z.get("THREAD").participants),i.Z.addReducer("participants",s.ZP,e||[])},before:"store"})},18255:function(e,t,n){"use strict";var a=n(32233),s=n(59752),i=n(90287);a.Z.addInitializer({name:"reducer:poll",initializer:function(){var e;e=a.Z.has("THREAD")&&a.Z.get("THREAD").poll?(0,s.ZB)(a.Z.get("THREAD").poll):{isBusy:!1},i.Z.addReducer("poll",s.ZP,e)},before:"store"})},14113:function(e,t,n){"use strict";var a=n(32233),s=n(21981),i=n(90287);a.Z.addInitializer({name:"reducer:posts",initializer:function(){var e;e=a.Z.has("POSTS")?(0,s.ZB)(a.Z.get("POSTS")):{isLoaded:!1,isBusy:!1},i.Z.addReducer("posts",s.ZP,e)},before:"store"})},24444:function(e,t,n){"use strict";var a=n(32233),s=n(58598),i=n(90287);a.Z.addInitializer({name:"reducer:profile-details",initializer:function(){var e=null;a.Z.has("PROFILE_DETAILS")&&(e=a.Z.get("PROFILE_DETAILS")),i.Z.addReducer("profile-details",s.ZP,e||{})},before:"store"})},1764:function(e,t,n){"use strict";var a=n(32233),s=n(27519),i=n(90287);a.Z.addInitializer({name:"reducer:profile-hydrate",initializer:function(){a.Z.has("PROFILE")&&i.Z.dispatch((0,s.ZB)(a.Z.get("PROFILE")))},after:"store"})},68351:function(e,t,n){"use strict";var a=n(32233),s=n(27519),i=n(90287);a.Z.addInitializer({name:"reducer:profile",initializer:function(){i.Z.addReducer("profile",s.ZP,{})},before:"store"})},81521:function(e,t,n){"use strict";var a=n(32233),s=n(16427),i=n(90287);a.Z.addInitializer({name:"reducer:search",initializer:function(){i.Z.addReducer("search",s.ZP,Object.assign({},s.E3,{providers:a.Z.get("SEARCH_PROVIDERS")||[],query:a.Z.get("SEARCH_QUERY")||""}))},before:"store"})},19984:function(e,t,n){"use strict";var a=n(32233),s=n(77751),i=n(90287);a.Z.addInitializer({name:"reducer:selection",initializer:function(){i.Z.addReducer("selection",s.ZP,[])},before:"store"})},41229:function(e,t,n){"use strict";var a=n(32233),s=n(27346),i=n(90287);a.Z.addInitializer({name:"reducer:snackbar",initializer:function(){i.Z.addReducer("snackbar",s.ZP,s.E3)},before:"store"})},43589:function(e,t,n){"use strict";var a=n(32233),s=n(7738),i=n(90287);a.Z.addInitializer({name:"reducer:thread",initializer:function(){var e;e=a.Z.has("THREAD")?(0,s.ZB)(a.Z.get("THREAD")):{isBusy:!1},i.Z.addReducer("thread",s.ZP,e)},before:"store"})},24108:function(e,t,n){"use strict";var a=n(32233),s=n(61340),i=n(90287);a.Z.addInitializer({name:"reducer:threads",initializer:function(){i.Z.addReducer("threads",s.ZP,[])},before:"store"})},33934:function(e,t,n){"use strict";var a=n(32233),s=n(85586),i=n(90287);a.Z.addInitializer({name:"reducer:tick",initializer:function(){i.Z.addReducer("tick",s.ZP,s.E3)},before:"store"})},85577:function(e,t,n){"use strict";var a=n(32233),s=n(48927),i=n(90287);a.Z.addInitializer({name:"reducer:username-history",initializer:function(){i.Z.addReducer("username-history",s.ZP,[])},before:"store"})},83526:function(e,t,n){"use strict";var a=n(32233),s=n(6935),i=n(90287);a.Z.addInitializer({name:"reducer:users",initializer:function(){i.Z.addReducer("users",s.ZP,[])},before:"store"})},43060:function(e,t,n){"use strict";var a=n(32233),s=n(53904),i=n(90287);a.Z.addInitializer({name:"snackbar",initializer:function(){s.Z.init(i.Z)},after:"store"})},92292:function(e,t,n){"use strict";var a=n(32233),s=n(90287);a.Z.addInitializer({name:"store",initializer:function(){s.Z.init()},before:"_end"})},33409:function(e,t,n){"use strict";var a=n(32233),s=n(85586),i=n(90287);a.Z.addInitializer({name:"tick-start",initializer:function(){window.setInterval((function(){i.Z.dispatch((0,s.bq)())}),5e4)},after:"store"})},31341:function(e,t,n){"use strict";var a=n(32233),s=n(96142),i=n(59940);a.Z.addInitializer({name:"zxcvbn",initializer:function(){i.Z.init(s.Z)}})},35486:function(e,t,n){"use strict";n.d(t,{E3:function(){return s},ZP:function(){return d},r$:function(){return l},w7:function(){return u},zB:function(){return c}});var a=n(6935),s={signedIn:!1,signedOut:!1},i="PATCH_USER",o="SIGN_IN",r="SIGN_OUT";function l(e){return{type:i,patch:e}}function c(e){return{type:o,user:e}}function u(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return{type:r,soft:e}}function d(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:s,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case i:var n=Object.assign({},e);return n.user=Object.assign({},e.user,t.patch),n;case o:return Object.assign({},e,{signedIn:t.user});case r:return Object.assign({},e,{isAuthenticated:!1,isAnonymous:!0,signedOut:!t.soft});case a.oB:if(e.isAuthenticated&&e.user.id===t.userId){var l=Object.assign({},e);return l.user=Object.assign({},e.user,{avatars:t.avatars}),l}return e;case a.D9:if(e.isAuthenticated&&e.user.id===t.userId){var c=Object.assign({},e);return c.user=Object.assign({},e.user,{username:t.username,slug:t.slug}),c}return e;default:return e}}},8154:function(e,t,n){"use strict";n.d(t,{ZP:function(){return i},gx:function(){return s}});var a="REPLACE_PARTICIPANTS";function s(e){return{type:a,state:e}}function i(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return t.type===a?t.state:e}},59752:function(e,t,n){"use strict";n.d(t,{Ar:function(){return p},Od:function(){return f},ZB:function(){return u},ZH:function(){return r},ZP:function(){return v},b9:function(){return l},gx:function(){return h},n6:function(){return d}});var a=n(30381),s=n.n(a),i="BUSY_POLL",o="RELEASE_POLL",r="REMOVE_POLL",l="REPLACE_POLL",c="UPDATE_POLL";function u(e){var t=!1;for(var n in e.choices)if(e.choices[n].selected){t=!0;break}return Object.assign({},e,{posted_on:s()(e.posted_on),hasSelectedChoices:t,endsOn:e.length?s()(e.posted_on).add(e.length,"days"):null,isBusy:!1})}function d(){return{type:i}}function p(){return{type:o}}function h(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{type:l,state:t?e:u(e)}}function f(){return{type:r}}function v(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case i:return Object.assign({},e,{isBusy:!0});case o:return Object.assign({},e,{isBusy:!1});case r:return{isBusy:!1};case l:return t.state;case c:return Object.assign({},e,t.data);default:return e}}},92747:function(e,t,n){"use strict";n.d(t,{Qu:function(){return o},ZB:function(){return r},ZP:function(){return u},r$:function(){return c}});var a=n(30381),s=n.n(a),i=n(6935),o="PATCH_POST";function r(e){return Object.assign({},e,{posted_on:s()(e.posted_on),updated_on:s()(e.updated_on),hidden_on:s()(e.hidden_on),attachments:e.attachments?e.attachments.map(l):null,poster:e.poster?(0,i.Ru)(e.poster):null,isSelected:!1,isBusy:!1,isDeleted:!1})}function l(e){return Object.assign({},e,{uploaded_on:s()(e.uploaded_on)})}function c(e,t){return{type:o,post:e,patch:t}}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return t.type===o&&e.id==t.post.id?Object.assign({},e,t.patch):e}},21981:function(e,t,n){"use strict";n.d(t,{R3:function(){return m},Rz:function(){return Z},Vx:function(){return g},Ys:function(){return d},ZB:function(){return f},ZP:function(){return b},_H:function(){return p},kR:function(){return h},zD:function(){return v}});var a=n(92747),s="APPEND_POSTS",i="SELECT_POST",o="DESELECT_POST",r="DESELECT_POSTS",l="LOAD_POSTS",c="UNLOAD_POSTS",u="UPDATE_POSTS";function d(e){return{type:i,post:e}}function p(e){return{type:o,post:e}}function h(){return{type:r}}function f(e){return Object.assign({},e,{results:e.results.map(a.ZB),isLoaded:!0,isBusy:!1,isSelected:!1})}function v(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{type:l,state:t?e:f(e)}}function m(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{type:s,state:t?e:f(e)}}function Z(){return{type:c}}function g(e){return{type:u,update:e}}function b(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case i:var n=e.results.map((function(e){return e.id==t.post.id?Object.assign({},e,{isSelected:!0}):e}));return Object.assign({},e,{results:n});case o:var d=e.results.map((function(e){return e.id==t.post.id?Object.assign({},e,{isSelected:!1}):e}));return Object.assign({},e,{results:d});case r:var p=e.results.map((function(e){return Object.assign({},e,{isSelected:!1})}));return Object.assign({},e,{results:p});case s:var h=e.results.slice(),f=e.results.map((function(e){return e.id}));return t.state.results.map((function(e){-1===f.indexOf(e.id)&&h.push(e)})),Object.assign({},t.state,{results:h});case l:return t.state;case c:return Object.assign({},e,{isLoaded:!1});case u:return Object.assign({},e,t.update);case a.Qu:var v=e.results.map((function(e){return(0,a.ZP)(e,t)}));return Object.assign({},e,{results:v});default:return e}}},58598:function(e,t,n){"use strict";n.d(t,{ZP:function(){return i},zD:function(){return s}});var a="LOAD_DETAILS";function s(e){return{type:a,newState:e}}function i(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return t.type===a?t.newState:e}},27519:function(e,t,n){"use strict";n.d(t,{ZB:function(){return l},ZP:function(){return u},r$:function(){return c}});var a=n(30381),s=n.n(a),i=n(6935),o="HYDRATE_PROFILE",r="PATCH_PROFILE";function l(e){return{type:o,profile:e}}function c(e){return{type:r,patch:e}}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case o:return Object.assign({},t.profile,{joined_on:s()(t.profile.joined_on),status:(0,i.$q)(t.profile.status)});case r:return Object.assign({},e,t.patch);case i.oB:return e.id===t.userId?Object.assign({},e,{avatars:t.avatars}):e;case i.D9:return e.id===t.userId?Object.assign({},e,{username:t.username,slug:t.slug}):e;default:return e}}},16427:function(e,t,n){"use strict";n.d(t,{E3:function(){return o},P0:function(){return l},Vx:function(){return r},ZP:function(){return c}});var a="REPLACE_SEARCH",s="UPDATE_SEARCH",i="UPDATE_SEARCH_PROVIDER",o={isLoading:!1,query:"",providers:[]};function r(e){return{type:s,update:e}}function l(e){return{type:i,provider:e}}function c(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case a:return t.state;case s:return Object.assign({},e,t.update);case i:return Object.assign({},e,{providers:e.providers.map((function(e){return e.id===t.provider.id?t.provider:e}))});default:return e}}},77751:function(e,t,n){"use strict";n.d(t,{$6:function(){return r},YP:function(){return l},ZP:function(){return u},wc:function(){return c}});var a=n(20370),s="SELECT_ALL",i="SELECT_NONE",o="SELECT_ITEM";function r(e){return{type:s,items:e}}function l(){return{type:i}}function c(e){return{type:o,item:e}}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case s:return t.items;case i:return[];case o:return(0,a.ZN)(e,t.item);default:return e}}},27346:function(e,t,n){"use strict";n.d(t,{E3:function(){return a},OV:function(){return o},ZP:function(){return l},p2:function(){return r}});var a={type:"info",message:"",isVisible:!1},s="SHOW_SNACKBAR",i="HIDE_SNACKBAR";function o(e,t){return{type:s,message:e,messageType:t}}function r(){return{type:i}}function l(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return t.type===s?{type:t.messageType,message:t.message,isVisible:!0}:t.type===i?Object.assign({},e,{isVisible:!1}):e}},7738:function(e,t,n){"use strict";n.d(t,{Ar:function(){return h},Vx:function(){return v},ZB:function(){return d},ZP:function(){return Z},gx:function(){return f},n6:function(){return p},y8:function(){return m}});var a=n(30381),s=n.n(a),i=n(59752),o="BUSY_THREAD",r="RELEASE_THREAD",l="REPLACE_THREAD",c="UPDATE_THREAD",u="UPDATE_THREAD_ACL";function d(e){return Object.assign({},e,{started_on:s()(e.started_on),last_post_on:s()(e.last_post_on),best_answer_marked_on:e.best_answer_marked_on?s()(e.best_answer_marked_on):null,isBusy:!1})}function p(){return{type:o}}function h(){return{type:r}}function f(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{type:l,state:t?e:d(e)}}function v(e){return{type:c,data:e}}function m(e){return{type:u,data:e}}function Z(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case o:return Object.assign({},e,{isBusy:!0});case r:return Object.assign({},e,{isBusy:!1});case i.ZH:return Object.assign({},e,{poll:null});case i.b9:return Object.assign({},e,{poll:t.state});case l:return t.state;case c:return Object.assign({},e,t.data);case u:var n=Object.assign({},e.acl,t.data);return Object.assign({},e,{acl:n});default:return e}}},61340:function(e,t,n){"use strict";n.d(t,{R3:function(){return h},V8:function(){return v},ZB:function(){return m},ZP:function(){return b},l8:function(){return f},r$:function(){return Z}});var a=n(30381),s=n.n(a),i=n(89759),o="APPEND_THREADS",r="DELETE_THREAD",l="FILTER_THREADS",c="HYDRATE_THREADS",u="PATCH_THREAD",d="SORT_THREADS",p=["can_announce","can_approve","can_close","can_hide","can_move","can_merge","can_pin","can_review"];function h(e,t){return{type:o,items:e,sorting:t}}function f(e){return{type:r,thread:e}}function v(e,t){return{type:l,category:e,categoriesMap:t}}function m(e){return{type:c,items:e}}function Z(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return{type:u,thread:e,patch:t,sorting:n}}function g(e){return Object.assign({},e,{started_on:s()(e.started_on),last_post_on:s()(e.last_post_on),moderation:(t=e.acl,n=[],p.forEach((function(e){t[e]&&n.push(e)})),n)});var t,n}function b(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case o:var n=(0,i.Z)(t.items.map(g),e);return n.sort(t.sorting);case r:return e.filter((function(e){return e.id!==t.thread.id}));case l:return e.filter((function(e){var n=t.categoriesMap[e.category];return n.lft>=t.category.lft&&n.rght<=t.category.rght||2==e.weight}));case c:return t.items.map(g);case u:var a=e.map((function(e){return e.id===t.thread.id?Object.assign({},e,t.patch):e}));return t.sorting?a.sort(t.sorting):a;case d:return e.sort(t.sorting);default:return e}}},85586:function(e,t,n){"use strict";n.d(t,{E3:function(){return a},ZP:function(){return o},bq:function(){return i}});var a={tick:0},s="TICK";function i(){return{type:s}}function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return t.type===s?Object.assign({},e,{tick:e.tick+1}):e}},48927:function(e,t,n){"use strict";n.d(t,{KP:function(){return u},R3:function(){return d},ZB:function(){return p},ZP:function(){return f}});var a=n(30381),s=n.n(a),i=n(6935),o=n(89759),r="ADD_NAME_CHANGE",l="APPEND_HISTORY",c="HYDRATE_HISTORY";function u(e,t,n){return{type:r,change:e,user:t,changedBy:n}}function d(e){return{type:l,items:e}}function p(e){return{type:c,items:e}}function h(e){return Object.assign({},e,{changed_on:s()(e.changed_on)})}function f(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case r:var n=e.slice();return n.unshift({id:Math.floor(Date.now()/1e3),changed_by:t.changedBy,changed_by_username:t.changedBy.username,changed_on:s()(),new_username:t.change.username,old_username:t.user.username}),n;case l:return(0,o.Z)(e,t.items.map(h));case c:return t.items.map(h);case i.oB:return e.map((function(e){return(e=Object.assign({},e)).changed_by&&e.changed_by.id===t.userId&&(e.changed_by=Object.assign({},e.changed_by,{avatars:t.avatars})),e}));case i.D9:return e.map((function(e){return(e=Object.assign({},e)).changed_by&&e.changed_by.id===t.userId&&(e.changed_by=Object.assign({},e.changed_by,{username:t.username,slug:t.slug})),Object.assign({},e)}));default:return e}}},6935:function(e,t,n){"use strict";n.d(t,{$q:function(){return p},D9:function(){return c},R3:function(){return u},Ru:function(){return h},ZB:function(){return d},ZP:function(){return m},_S:function(){return v},n1:function(){return f},oB:function(){return l}});var a=n(30381),s=n.n(a),i=n(89759),o="APPEND_USERS",r="HYDRATE_USERS",l="UPDATE_AVATAR",c="UPDATE_USERNAME";function u(e){return{type:o,items:e}}function d(e){return{type:r,items:e}}function p(e){return e?Object.assign({},e,{last_click:e.last_click?s()(e.last_click):null,banned_until:e.banned_until?s()(e.banned_until):null}):null}function h(e){return Object.assign({},e,{joined_on:s()(e.joined_on),status:p(e.status)})}function f(e,t){return{type:l,userId:e.id,avatars:t}}function v(e,t,n){return{type:c,userId:e.id,username:t,slug:n}}function m(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case o:return(0,i.Z)(e,t.items.map(h));case r:return t.items.map(h);case l:return e.map((function(e){return(e=Object.assign({},e)).id===t.userId&&(e.avatars=t.avatars),e}));default:return e}}},78657:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=n(19755),o=function(){function e(){(0,a.Z)(this,e),this._cookieName=null,this._csrfToken=null,this._locks={}}return(0,s.Z)(e,[{key:"init",value:function(e){this._cookieName=e}},{key:"getCsrfToken",value:function(){if(-1!==document.cookie.indexOf(this._cookieName)){var e=new RegExp(this._cookieName+"=([^;]*)"),t=document.cookie.match(e)[0];return t?t.split("=")[1]:null}return null}},{key:"request",value:function(e,t,n){var a=this;return new Promise((function(s,o){var r={url:t,method:e,headers:{"X-CSRFToken":a.getCsrfToken()},data:n?JSON.stringify(n):null,contentType:"application/json; charset=utf-8",dataType:"json",success:function(e){s(e)},error:function(e){var t=e.responseJSON||{};t.status=e.status,0===t.status&&(t.detail=gettext("Lost connection with application.")),404===t.status&&(t.detail&&"NOT FOUND"!==t.detail||(t.detail=gettext("Action link is invalid."))),500!==t.status||t.detail||(t.detail=gettext("Unknown error has occured.")),t.statusText=e.statusText,o(t)}};i.ajax(r)}))}},{key:"get",value:function(e,t,n){if(t&&(e+="?"+i.param(t)),n){var a=this;return this._locks[n]&&(this._locks[n].url=e),this._locks[n]&&this._locks[n].waiter?{then:function(){}}:this._locks[n]&&this._locks[n].wait?(this._locks[n].waiter=!0,new Promise((function(t,s){var i=function e(i){a._locks[n].wait?window.setTimeout((function(){e(i)}),300):a._locks[n].url!==i?e(a._locks[n].url):(a._locks[n].waiter=!1,a.request("GET",a._locks[n].url).then((function(s){a._locks[n].url===i?t(s):(a._locks[n].waiter=!0,e(a._locks[n].url))}),(function(t){a._locks[n].url===i?s(t):(a._locks[n].waiter=!0,e(a._locks[n].url))})))};window.setTimeout((function(){i(e)}),300)}))):(this._locks[n]={url:e,wait:!0,waiter:!1},new Promise((function(t,s){a.request("GET",e).then((function(s){a._locks[n].wait=!1,a._locks[n].url===e&&t(s)}),(function(t){a._locks[n].wait=!1,a._locks[n].url===e&&s(t)}))})))}return this.request("GET",e)}},{key:"post",value:function(e,t){return this.request("POST",e,t)}},{key:"patch",value:function(e,t){return this.request("PATCH",e,t)}},{key:"put",value:function(e,t){return this.request("PUT",e,t)}},{key:"delete",value:function(e,t){return this.request("DELETE",e,t)}},{key:"upload",value:function(e,t,n){var a=this;return new Promise((function(s,o){var r={url:e,method:"POST",headers:{"X-CSRFToken":a.getCsrfToken()},data:t,contentType:!1,processData:!1,xhr:function(){var e=new window.XMLHttpRequest;return e.upload.addEventListener("progress",(function(e){e.lengthComputable&&n(Math.round(e.loaded/e.total*100))}),!1),e},success:function(e){s(e)},error:function(e){var t=e.responseJSON||{};t.status=e.status,0===t.status&&(t.detail=gettext("Lost connection with application.")),413!==t.status||t.detail||(t.detail=gettext("Upload was rejected by server as too large.")),404===t.status&&(t.detail&&"NOT FOUND"!==t.detail||(t.detail=gettext("Action link is invalid."))),500!==t.status||t.detail||(t.detail=gettext("Unknown error has occured.")),t.statusText=e.statusText,o(t)}};i.ajax(r)}))}}]),e}();t.Z=new o},98274:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=n(35486),o=function(){function e(){(0,a.Z)(this,e)}return(0,s.Z)(e,[{key:"init",value:function(e,t,n){this._store=e,this._local=t,this._modal=n,this.syncSession(),this.watchState()}},{key:"syncSession",value:function(){var e=this._store.getState().auth;e.isAuthenticated?this._local.set("auth",{isAuthenticated:!0,username:e.user.username}):this._local.set("auth",{isAuthenticated:!1})}},{key:"watchState",value:function(){var e=this,t=this._store.getState().auth;this._local.watch("auth",(function(n){n.isAuthenticated?e._store.dispatch((0,i.zB)({username:n.username})):t.isAuthenticated&&e._store.dispatch((0,i.w7)())})),this._modal.hide()}},{key:"signIn",value:function(e){this._store.dispatch((0,i.zB)(e)),this._local.set("auth",{isAuthenticated:!0,username:e.username}),this._modal.hide()}},{key:"signOut",value:function(){this._store.dispatch((0,i.w7)()),this._local.set("auth",{isAuthenticated:!1}),this._modal.hide()}},{key:"softSignOut",value:function(){this._store.dispatch((0,i.w7)(!0)),this._local.set("auth",{isAuthenticated:!1}),this._modal.hide()}}]),e}();t.Z=new o},93825:function(e,t,n){"use strict";var a,s=n(22928),i=n(79340),o=n(6215),r=n(61120),l=n(15671),c=n(43144),u=n(57588),d=n.n(u),p=n(96359);function h(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,r.Z)(e);if(t){var s=(0,r.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,o.Z)(this,n)}}var f=function(){function e(){(0,l.Z)(this,e)}return(0,c.Z)(e,[{key:"init",value:function(e,t,n,a){this._context=e,this._ajax=t,this._include=n,this._snackbar=a}}]),e}(),v=function(e){(0,i.Z)(n,e);var t=h(n);function n(){return(0,l.Z)(this,n),t.apply(this,arguments)}return(0,c.Z)(n,[{key:"load",value:function(){return new Promise((function(e){e()}))}},{key:"validator",value:function(){return null}},{key:"component",value:function(){return null}}]),n}(f),m=function(e){(0,i.Z)(n,e);var t=h(n);function n(){return(0,l.Z)(this,n),t.apply(this,arguments)}return(0,c.Z)(n,[{key:"load",value:function(){var e=this;return new Promise((function(t,n){e._ajax.get(e._context.get("CAPTCHA_API")).then((function(n){e.question=n.question,e.helpText=n.help_text,t()}),(function(){e._snackbar.error(gettext("Failed to load CAPTCHA.")),n()}))}))}},{key:"validator",value:function(){return[]}},{key:"component",value:function(e){return(0,s.Z)(p.Z,{label:this.question,for:"id_captcha",labelClass:e.labelClass||"",controlClass:e.controlClass||"",validation:e.form.state.errors.captcha,helpText:this.helpText||null},void 0,(0,s.Z)("input",{"aria-describedby":"id_captcha_status",className:"form-control",disabled:e.form.state.isLoading,id:"id_captcha",onChange:e.form.bindInput("captcha"),type:"text",value:e.form.state.captcha}))}}]),n}(f),Z=function(e){(0,i.Z)(n,e);var t=h(n);function n(){return(0,l.Z)(this,n),t.apply(this,arguments)}return(0,c.Z)(n,[{key:"componentDidMount",value:function(){var e=this;grecaptcha.render("recaptcha",{sitekey:this.props.siteKey,callback:function(t){e.props.binding({target:{value:t}})}})}},{key:"render",value:function(){return a||(a=(0,s.Z)("div",{id:"recaptcha"}))}}]),n}(d().Component),g=function(e){(0,i.Z)(n,e);var t=h(n);function n(){return(0,l.Z)(this,n),t.apply(this,arguments)}return(0,c.Z)(n,[{key:"load",value:function(){return this._include.include("https://www.google.com/recaptcha/api.js",!0),new Promise((function(e){!function t(){"undefined"==typeof grecaptcha?window.setTimeout((function(){t()}),200):e()}()}))}},{key:"validator",value:function(){return[]}},{key:"component",value:function(e){return(0,s.Z)(p.Z,{label:gettext("Please solve the quick test"),for:"id_captcha",labelClass:e.labelClass||"",controlClass:e.controlClass||"",validation:e.form.state.errors.captcha,helpText:gettext("This test helps us prevent automated spam registrations on our site.")},void 0,(0,s.Z)(Z,{binding:e.form.bindInput("captcha"),siteKey:this._context.get("SETTINGS").recaptcha_site_key}))}}]),n}(f),b=function(){function e(){(0,l.Z)(this,e)}return(0,c.Z)(e,[{key:"init",value:function(e,t,n,a){switch(e.get("SETTINGS").captcha_type){case"no":this._captcha=new v;break;case"qa":this._captcha=new m;break;case"re":this._captcha=new g}this._captcha.init(e,t,n,a)}},{key:"load",value:function(){return this._captcha.load()}},{key:"validator",value:function(){return this._captcha.validator()}},{key:"component",value:function(e){return this._captcha.component(e)}}]),e}();t.ZP=new b},96142:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=n(19755),o=function(){function e(){(0,a.Z)(this,e)}return(0,s.Z)(e,[{key:"init",value:function(e){this._staticUrl=e,this._included=[]}},{key:"include",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];-1===this._included.indexOf(e)&&(this._included.push(e),this._include(e,t))}},{key:"_include",value:function(e,t){i.ajax({url:(t?"":this._staticUrl)+e,cache:!0,dataType:"script"})}}]),e}();t.Z=new o},62833:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=window.localStorage,o=function(){function e(){(0,a.Z)(this,e)}return(0,s.Z)(e,[{key:"init",value:function(e){var t=this;this._prefix=e,this._watchers=[],window.addEventListener("storage",(function(e){var n=JSON.parse(e.newValue);t._watchers.forEach((function(t){t.key===e.key&&e.oldValue!==e.newValue&&t.callback(n)}))}))}},{key:"set",value:function(e,t){i.setItem(this._prefix+e,JSON.stringify(t))}},{key:"get",value:function(e){var t=i.getItem(this._prefix+e);return t?JSON.parse(t):null}},{key:"watch",value:function(e,t){this._watchers.push({key:this._prefix+e,callback:t})}}]),e}();t.Z=new o},8621:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=n(4869),o=n(19755),r=function(){function e(){(0,a.Z)(this,e)}return(0,s.Z)(e,[{key:"init",value:function(e){this._element=e,this._component=null}},{key:"show",value:function(e){this._component===e?this.hide():(this._component=e,(0,i.Z)(e,this._element.id),o(this._element).addClass("open"))}},{key:"showConnected",value:function(e,t){this._component===e?this.hide():(this._component=e,(0,i.Z)(t,this._element.id,!0),o(this._element).addClass("open"))}},{key:"hide",value:function(){o(this._element).removeClass("open"),this._component=null}}]),e}();t.Z=new r},59801:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=n(73935),o=n.n(i),r=n(4869),l=n(19755),c=function(){function e(){(0,a.Z)(this,e)}return(0,s.Z)(e,[{key:"init",value:function(e){var t=this;this._element=e,this._modal=l(e).modal({show:!1}),this._modal.on("hidden.bs.modal",(function(){o().unmountComponentAtNode(t._element)}))}},{key:"show",value:function(e){(0,r.Z)(e,this._element.id),this._modal.modal("show")}},{key:"hide",value:function(){this._modal.modal("hide")}}]),e}();t.Z=new c},53328:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=function(){function e(){(0,a.Z)(this,e)}return(0,s.Z)(e,[{key:"init",value:function(e,t){this._indexTitle=e,this._forumName=t}},{key:"set",value:function(e){if(e){"string"==typeof e&&(e={title:e});var t=e.title;e.page>1&&(t+=" ("+interpolate(gettext("page: %(page)s"),{page:e.page},!0)+")"),e.parent&&(t+=" | "+e.parent),document.title=t+" | "+this._forumName}else document.title=this._indexTitle||this._forumName}}]),e}();t.Z=new i},55547:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=function(){function e(){(0,a.Z)(this,e)}return(0,s.Z)(e,[{key:"init",value:function(e,t){this._ajax=e,this._snackbar=t,this._polls={}}},{key:"start",value:function(e){var t=this;this.stop(e.poll);var n=function n(){t._polls[e.poll]=e,t._ajax.get(e.url,e.data||null).then((function(a){t._polls[e.poll]._stopped||(e.update(a),t._polls[e.poll].timeout=window.setTimeout(n,e.frequency))}),(function(n){t._polls[e.poll]._stopped||(e.error?e.error(n):t._snackbar.apiError(n))}))};e.delayed?this._polls[e.poll]={timeout:window.setTimeout(n,e.frequency)}:n()}},{key:"stop",value:function(e){this._polls[e]&&(window.clearTimeout(this._polls[e].timeout),this._polls[e]._stopped=!0)}}]),e}();t.Z=new i},27950:function(e,t,n){"use strict";n.d(t,{Z:function(){return ft}});var a=n(15671),s=n(43144),i=n(4942),o=n(57588),r=n.n(o),l=n(73935),c=n.n(l),u=n(91876),d=n(22928),p=n(97326),h=n(79340),f=n(6215),v=n(61120),m=n(57026),Z=n(87462);var g,b,y,_=function(e){(0,h.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function r(){var e;(0,a.Z)(this,r);for(var t=arguments.length,n=new Array(t),s=0;s<t;s++)n[s]=arguments[s];return e=o.call.apply(o,[this].concat(n)),(0,i.Z)((0,p.Z)(e),"onClick",(function(){e.props.replaceSelection(e.props.execAction)})),e}return(0,s.Z)(r,[{key:"render",value:function(){return(0,d.Z)("button",{className:"btn btn-icon "+this.props.className,disabled:this.props.disabled,onClick:this.onClick,title:this.props.title,type:"button"},void 0,this.props.children)}}]),r}(r().Component),N=n(19755);function k(e){return r().createElement(_,(0,Z.Z)({execAction:x,title:gettext("Insert code")},e),g||(g=(0,d.Z)("span",{className:"material-icon"},void 0,"functions")))}function x(e,t){t("\n\n```"+N.trim(prompt(gettext("Enter name of syntax of your code (optional)")+":"))+"\n"+e+"\n```\n\n")}function w(e){return r().createElement(_,(0,Z.Z)({execAction:R,title:gettext("Emphase selection")},e),b||(b=(0,d.Z)("span",{className:"material-icon"},void 0,"format_italic")))}function R(e,t){e.length&&t("*"+e+"*")}function C(e){return r().createElement(_,(0,Z.Z)({execAction:S,title:gettext("Insert horizontal ruler")},e),y||(y=(0,d.Z)("span",{className:"material-icon"},void 0,"remove")))}function S(e,t){t("\n\n- - - - -\n\n")}var E=n(19755),L=new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$","i");function P(e){return L.test(E.trim(e))}var O,T=n(19755);function A(e){return r().createElement(_,(0,Z.Z)({execAction:B,title:gettext("Insert image")},e),O||(O=(0,d.Z)("span",{className:"material-icon"},void 0,"insert_photo")))}function B(e,t){var n="",a="";e.length&&(P(e)?n=e:a=e),(n=T.trim(prompt(gettext("Enter link to image")+":",n))).length&&((a=T.trim(prompt(gettext("Enter image label (optional)")+":",a))).length>0?t("!["+a+"]("+n+")"):t("!("+n+")"))}var I,j,D,U,M=n(19755);function z(e){return r().createElement(_,(0,Z.Z)({execAction:H,title:gettext("Insert link")},e),I||(I=(0,d.Z)("span",{className:"material-icon"},void 0,"insert_link")))}function H(e,t){var n="",a="";if(e.length&&(P(e)?n=e:a=e),0===(n=M.trim(prompt(gettext("Enter link address")+":",n)||"")).length)return!1;a=M.trim(prompt(gettext("Enter link label (optional)")+":",a)),n.length&&(a.length>0?t("["+a+"]("+n+")"):t(n))}function F(e){return r().createElement(_,(0,Z.Z)({execAction:q,title:gettext("Insert spoiler")},e),j||(j=(0,d.Z)("span",{className:"material-icon"},void 0,"not_interested")))}function q(e,t){t("\n\n[spoiler]\n"+e+"\n[/spoiler]\n\n")}function Y(e){return r().createElement(_,(0,Z.Z)({execAction:V,title:gettext("Strikethrough selection")},e),D||(D=(0,d.Z)("span",{className:"material-icon"},void 0,"format_strikethrough")))}function V(e,t){e.length&&t("~~"+e+"~~")}function $(e){return r().createElement(_,(0,Z.Z)({execAction:G,title:gettext("Bolder selection")},e),U||(U=(0,d.Z)("span",{className:"material-icon"},void 0,"format_bold")))}function G(e,t){e.length&&t("**"+e+"**")}var W,K=n(19755);function J(e){return r().createElement(_,(0,Z.Z)({execAction:Q,title:gettext("Insert quote")},e),W||(W=(0,d.Z)("span",{className:"material-icon"},void 0,"format_quote")))}function Q(e,t){var n=K.trim(prompt(gettext("Enter quote autor, prefix usernames with @")+":",n));t(n?'\n\n[quote="'+n+'"]\n'+e+"\n[/quote]\n\n":"\n\n[quote]\n"+e+"\n[/quote]\n\n")}var X,ee=n(32233),te=n(89627),ne=n(48772);var ae,se=function(e){(0,h.Z)(l,e);var t,n,o=(t=l,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function l(){var e;(0,a.Z)(this,l);for(var t=arguments.length,n=new Array(t),s=0;s<t;s++)n[s]=arguments[s];return e=o.call.apply(o,[this].concat(n)),(0,i.Z)((0,p.Z)(e),"onInsert",(function(){e.props.replaceSelection(e.insertAttachment)})),(0,i.Z)((0,p.Z)(e),"insertAttachment",(function(t,n){var a=e.props.item;a.is_image?a.url.thumb?n("[!["+a.filename+"]("+a.url.thumb+")]("+a.url.index+")"):n("[!["+a.filename+"]("+a.url.index+")]("+a.url.index+")"):n("["+a.filename+"]("+a.url.index+")")})),(0,i.Z)((0,p.Z)(e),"onRemove",(function(){e.updateItem({isRemoved:!0})})),(0,i.Z)((0,p.Z)(e),"onUndo",(function(){e.updateItem({isRemoved:!1})})),(0,i.Z)((0,p.Z)(e),"updateItem",(function(t){var n=e.props.attachments.map((function(n){return n.id===e.props.item.id?Object.assign({},n,t):n}));e.props.onAttachmentsChange(n)})),e}return(0,s.Z)(l,[{key:"render",value:function(){return(0,d.Z)("li",{className:"editor-attachment-complete"},void 0,(0,d.Z)("div",{className:"row"},void 0,(0,d.Z)("div",{className:"col-xs-12 col-sm-8 col-md-9"},void 0,r().createElement(ie,this.props),(0,d.Z)("div",{className:"editor-attachment-details"},void 0,r().createElement(le,this.props),r().createElement(ce,this.props))),(0,d.Z)("div",{className:"col-xs-12 col-sm-4 col-md-3 xs-margin-top-half"},void 0,r().createElement(ue,(0,Z.Z)({onInsert:this.onInsert,onRemove:this.onRemove,onUndo:this.onUndo},this.props)))))}}]),l}(r().Component);function ie(e){return e.item.is_image?r().createElement(oe,e):r().createElement(re,e)}function oe(e){var t=e.item.url.thumb||e.item.url.index;return(0,d.Z)("div",{className:"editor-attachment-image"},void 0,(0,d.Z)("a",{href:e.item.url.index+"?shva=1",style:{backgroundImage:"url('"+t+"?shva=1')"},target:"_blank"}))}function re(e){return X||(X=(0,d.Z)("div",{className:"editor-attachment-icon"},void 0,(0,d.Z)("span",{className:"material-icon"},void 0,"insert_drive_file")))}function le(e){return(0,d.Z)("h4",{},void 0,(0,d.Z)("a",{className:"item-title",href:e.item.url.index+"?shva=1",target:"_blank"},void 0,e.item.filename))}function ce(e){var t;t=e.item.url.uploader?interpolate('<a href="%(url)s" class="item-title">%(user)s</a>',{url:(0,te.Z)(e.item.url.uploader),user:(0,te.Z)(e.item.uploader_name)},!0):interpolate('<span class="item-title">%(user)s</span>',{user:(0,te.Z)(e.item.uploader_name)},!0);var n=interpolate('<abbr title="%(absolute)s">%(relative)s</abbr>',{absolute:(0,te.Z)(e.item.uploaded_on.format("LLL")),relative:(0,te.Z)(e.item.uploaded_on.fromNow())},!0),a=interpolate((0,te.Z)(gettext("%(filetype)s, %(size)s, uploaded by %(uploader)s %(uploaded_on)s.")),{filetype:e.item.filetype,size:(0,ne.Z)(e.item.size),uploader:t,uploaded_on:n},!0);return(0,d.Z)("p",{dangerouslySetInnerHTML:{__html:a}})}function ue(e){return(0,d.Z)("div",{className:"editor-attachment-actions"},void 0,(0,d.Z)("div",{className:"row"},void 0,r().createElement(de,e),r().createElement(pe,e),r().createElement(he,e)))}function de(e){return e.item.isRemoved?null:(0,d.Z)("div",{className:"col-xs-6"},void 0,(0,d.Z)("button",{className:"btn btn-default btn-sm btn-block",onClick:e.onInsert,type:"button"},void 0,gettext("Insert")))}function pe(e){return e.item.isRemoved&&e.item.acl.can_delete?null:(0,d.Z)("div",{className:"col-xs-6"},void 0,(0,d.Z)("button",{className:"btn btn-default btn-sm btn-block",onClick:e.onRemove,type:"button"},void 0,gettext("Remove")))}function he(e){return e.item.isRemoved?(0,d.Z)("div",{className:"col-xs-12"},void 0,(0,d.Z)("button",{className:"btn btn-default btn-sm btn-block",onClick:e.onUndo,type:"button"},void 0,gettext("Undo removal"))):null}var fe=function(e){(0,h.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function r(){var e;(0,a.Z)(this,r);for(var t=arguments.length,n=new Array(t),s=0;s<t;s++)n[s]=arguments[s];return e=o.call.apply(o,[this].concat(n)),(0,i.Z)((0,p.Z)(e),"onClick",(function(){var t=e.props.attachments.filter((function(t){return t.key!==e.props.item.key}));e.props.onAttachmentsChange(t)})),e}return(0,s.Z)(r,[{key:"render",value:function(){var e=interpolate("<strong>%(name)s</strong>",{name:(0,te.Z)(this.props.item.filename)},!0),t=interpolate(gettext("Error uploading %(filename)s"),{filename:e,progress:this.props.item.progress+"%"},!0);return(0,d.Z)("li",{className:"editor-attachment-error"},void 0,ae||(ae=(0,d.Z)("div",{className:"editor-attachment-error-icon"},void 0,(0,d.Z)("span",{className:"material-icon"},void 0,"warning"))),(0,d.Z)("div",{className:"editor-attachment-error-message"},void 0,(0,d.Z)("h4",{dangerouslySetInnerHTML:{__html:t+":"}}),(0,d.Z)("p",{},void 0,this.props.item.error),(0,d.Z)("button",{className:"btn btn-default btn-sm",onClick:this.onClick,type:"button"},void 0,gettext("Dismiss"))))}}]),r}(r().Component);function ve(e){var t=interpolate("<strong>%(name)s</strong>",{name:(0,te.Z)(e.item.filename)},!0),n=interpolate(gettext("Uploading %(filename)s... %(progress)s"),{filename:t,progress:e.item.progress+"%"},!0);return(0,d.Z)("li",{className:"editor-attachment-upload"},void 0,(0,d.Z)("div",{className:"editor-attachment-progress-bar"},void 0,(0,d.Z)("div",{className:"editor-attachment-progress",style:{width:e.item.progress+"%"}})),(0,d.Z)("p",{className:"editor-attachment-upload-message",dangerouslySetInnerHTML:{__html:n}}))}function me(e){return e.item.id?r().createElement(se,e):e.item.error?r().createElement(fe,e):r().createElement(ve,e)}function Ze(e){return(0,d.Z)("ul",{className:"list-unstyled editor-attachments-list"},void 0,e.attachments.map((function(t){return r().createElement(me,(0,Z.Z)({item:t,key:t.id||t.key},e))})))}var ge=n(30381),be=n.n(ge),ye=n(78657),_e=n(53904);var Ne,ke=function(e){(0,h.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function r(){var e;(0,a.Z)(this,r);for(var t=arguments.length,n=new Array(t),s=0;s<t;s++)n[s]=arguments[s];return e=o.call.apply(o,[this].concat(n)),(0,i.Z)((0,p.Z)(e),"onChange",(function(t){var n=t.target.files[0];if(n){var a={id:null,key:xe(),progress:0,error:null,filename:n.name};e.props.onAttachmentsChange([a].concat(e.props.attachments));var s=new FormData;s.append("upload",n),ye.Z.upload(ee.Z.get("ATTACHMENTS_API"),s,(function(t){a.progress=t,e.props.onAttachmentsChange(e.props.attachments.concat())})).then((function(t){t.uploaded_on=be()(t.uploaded_on),Object.assign(a,t),e.props.onAttachmentsChange(e.props.attachments.concat())}),(function(t){400===t.status||413===t.status?(a.error=t.detail,e.props.onAttachmentsChange(e.props.attachments.concat())):_e.Z.apiError(t)}))}})),e}return(0,s.Z)(r,[{key:"render",value:function(){return(0,d.Z)("input",{id:"editor-upload-field",onChange:this.onChange,type:"file"})}}]),r}(r().Component);function xe(){return"upld-"+Math.round((new Date).getTime())}function we(e){return ee.Z.get("user").acl.max_attachment_size?(0,d.Z)("div",{className:"editor-attachments"},void 0,r().createElement(Ze,e),r().createElement(ke,e)):null}var Re,Ce=function(e){(0,h.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function r(){var e;(0,a.Z)(this,r);for(var t=arguments.length,n=new Array(t),s=0;s<t;s++)n[s]=arguments[s];return e=o.call.apply(o,[this].concat(n)),(0,i.Z)((0,p.Z)(e),"onClick",(function(){document.getElementById("editor-upload-field").click()})),e}return(0,s.Z)(r,[{key:"render",value:function(){return ee.Z.get("user").acl.max_attachment_size?(0,d.Z)("button",{className:"btn btn-icon "+this.props.className,disabled:this.props.disabled,onClick:this.onClick,title:gettext("Upload file"),type:"button"},void 0,Ne||(Ne=(0,d.Z)("span",{className:"material-icon"},void 0,"file_upload"))):null}}]),r}(r().Component),Se=n(69092);function Ee(e){return(0,d.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,d.Z)("div",{className:"modal-content"},void 0,(0,d.Z)("div",{className:"modal-header"},void 0,(0,d.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,Re||(Re=(0,d.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,d.Z)("h4",{className:"modal-title"},void 0,gettext("Preview message"))),(0,d.Z)("div",{className:"modal-body markup-preview"},void 0,(0,d.Z)(Se.Z,{markup:e.markup}))))}var Le=n(19755),Pe="editor-textarea";function Oe(){return document.getElementById(Pe)}function Te(e,t){return{start:e,end:t}}function Ae(){var e=Oe();if(document.selection){e.focus();var t=document.selection.createRange(),n=t.text.length;return t.moveStart("character",-e.value.length),Te(t.text.length-n,t.text.length)}if(e.selectionStart||"0"==e.selectionStart)return Te(e.selectionStart,e.selectionEnd)}function Be(e,t){var n=Oe(),a=n.value,s=a.substring(0,e.start);return n.value=a.substring(0,e.start)+t+a.substring(e.end),function(e){var t=Oe();if(t.setSelectionRange)t.focus(),t.setSelectionRange(e.start,e.end);else if(t.createTextRange){var n=t.createTextRange();n.collapse(!0),n.moveStart("character",e.start),n.moveEnd("character",e.end),n.select()}}(Te(s.length+t.length,s.length+t.length)),n.value}var Ie,je=n(82211),De=n(59801),Ue=n(19755);var Me=function(e){(0,h.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function r(e){var t;return(0,a.Z)(this,r),t=o.call(this,e),(0,i.Z)((0,p.Z)(t),"onPreviewClick",(function(){t.state.isPreviewLoading||(t.setState({isPreviewLoading:!0}),ye.Z.post(ee.Z.get("PARSE_MARKUP_API"),{post:t.props.value}).then((function(e){De.Z.show((0,d.Z)(Ee,{markup:e.parsed})),t.setState({isPreviewLoading:!1})}),(function(e){400===e.status?_e.Z.error(e.detail):_e.Z.apiError(e),t.setState({isPreviewLoading:!1})})))})),(0,i.Z)((0,p.Z)(t),"replaceSelection",(function(e){var n;e((n=Ae(),Le.trim(document.getElementById(Pe).value.substring(n.start,n.end))),t._replaceSelection)})),(0,i.Z)((0,p.Z)(t),"_replaceSelection",(function(e){var n;t.props.onChange({target:{value:(n=e,Be(Ae(),n))}})})),t.state={isPreviewLoading:!1},t}return(0,s.Z)(r,[{key:"componentDidMount",value:function(){var e=this;Ue("#editor-textarea").atwho({at:"@",displayTpl:'<li><img src="${avatar}" alt="">${username}</li>',insertTpl:"@${username}",searchKey:"username",callbacks:{remoteFilter:function(e,t){Ue.getJSON(ee.Z.get("MENTION_API"),{q:e},t)}}}),Ue("#editor-textarea").on("inserted.atwho",(function(t,n,a){e.props.onChange(t)}))}},{key:"render",value:function(){return(0,d.Z)("div",{className:"editor-border"},void 0,(0,d.Z)("textarea",{className:"form-control",value:this.props.value,disabled:this.props.loading,id:"editor-textarea",onChange:this.props.onChange,rows:"9"}),(0,d.Z)("div",{className:"editor-footer"},void 0,(0,d.Z)("div",{className:"buttons-list pull-left"},void 0,(0,d.Z)($,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,replaceSelection:this.replaceSelection}),(0,d.Z)(w,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,replaceSelection:this.replaceSelection}),(0,d.Z)(Y,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,replaceSelection:this.replaceSelection}),(0,d.Z)(C,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,replaceSelection:this.replaceSelection}),(0,d.Z)(z,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,replaceSelection:this.replaceSelection}),(0,d.Z)(A,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,replaceSelection:this.replaceSelection}),(0,d.Z)(J,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,replaceSelection:this.replaceSelection}),(0,d.Z)(F,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,replaceSelection:this.replaceSelection}),(0,d.Z)(k,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,replaceSelection:this.replaceSelection}),(0,d.Z)(Ce,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading})),(0,d.Z)(je.Z,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,onClick:this.onPreviewClick,type:"button"},void 0,gettext("Preview")),(0,d.Z)(je.Z,{className:"btn-primary btn-sm pull-right",loading:this.props.loading},void 0,this.props.submitLabel||gettext("Post")),(0,d.Z)("button",{className:"btn btn-default btn-sm pull-right",disabled:this.props.loading,onClick:this.props.onCancel,type:"button"},void 0,gettext("Cancel")),Ie||(Ie=(0,d.Z)("div",{className:"clearfix visible-xs-block"})),(0,d.Z)(ze,{canProtect:this.props.canProtect,disabled:this.props.loading,onProtect:this.props.onProtect,onUnprotect:this.props.onUnprotect,protect:this.props.protect})),(0,d.Z)(we,{attachments:this.props.attachments,onAttachmentsChange:this.props.onAttachmentsChange,placeholder:this.props.placeholder,replaceSelection:this.replaceSelection}))}}]),r}(r().Component);function ze(e){if(!e.canProtect)return null;var t=e.protect?gettext("Protected"):gettext("Protect");return(0,d.Z)("button",{className:"btn btn-icon btn-default btn-protect btn-sm pull-right",disabled:e.disabled,onClick:e.protect?e.onUnprotect:e.onProtect,title:t,type:"button"},void 0,(0,d.Z)("span",{className:"material-icon"},void 0,e.protect?"lock":"lock_outline"),(0,d.Z)("span",{className:"btn-text hidden-md hidden-lg"},void 0,t))}var He=n(43345);function Fe(e){return(0,d.Z)("div",{className:e.className},void 0,(0,d.Z)("div",{className:"container"},void 0,e.children))}var qe,Ye,Ve=n(37848);function $e(e){return qe||(qe=(0,d.Z)(Fe,{className:"posting-loader"},void 0,(0,d.Z)(Ve.Z,{})))}function Ge(e){return(0,d.Z)(Fe,{className:"posting-message"},void 0,(0,d.Z)("div",{className:"message-body"},void 0,(0,d.Z)("p",{},void 0,Ye||(Ye=(0,d.Z)("span",{className:"material-icon"},void 0,"error_outline")),e.message),(0,d.Z)("button",{type:"button",className:"btn btn-default",onClick:ft.close},void 0,gettext("Dismiss"))))}function We(e){if(!e.showOptions)return null;var t=e.columns,n="col-xs-12 xs-margin-top";n+=1===t?" col-sm-2":" sm-margin-top",n+=3===t?" col-md-3":" col-md-2",n+=" posting-options";var a="col-xs-"+12/t,s="btn-text";return s+=3===t?" visible-sm-inline-block":2===t?" hidden-md hidden-lg":" hidden-sm",(0,d.Z)("div",{className:n},void 0,(0,d.Z)("div",{className:"row"},void 0,(0,d.Z)(Qe,{className:a,disabled:e.disabled,onPinGlobally:e.onPinGlobally,onPinLocally:e.onPinLocally,onUnpin:e.onUnpin,pin:e.pin,show:e.options.pin,textClassName:s}),(0,d.Z)(Je,{className:a,disabled:e.disabled,hide:e.hide,onHide:e.onHide,onUnhide:e.onUnhide,show:e.options.hide,textClassName:s}),(0,d.Z)(Ke,{className:a,close:e.close,disabled:e.disabled,onClose:e.onClose,onOpen:e.onOpen,show:e.options.close,textClassName:s})))}function Ke(e){if(!e.show)return null;var t=e.close?gettext("Closed"):gettext("Open");return(0,d.Z)("div",{className:e.className},void 0,(0,d.Z)("button",{className:"btn btn-default btn-block",disabled:e.disabled,onClick:e.close?e.onOpen:e.onClose,title:t,type:"button"},void 0,(0,d.Z)("span",{className:"material-icon"},void 0,e.close?"lock":"lock_outline"),(0,d.Z)("span",{className:e.textClassName},void 0,t)))}function Je(e){if(!e.show)return null;var t=e.hide?gettext("Hidden"):gettext("Not hidden");return(0,d.Z)("div",{className:e.className},void 0,(0,d.Z)("button",{className:"btn btn-default btn-block",disabled:e.disabled,onClick:e.hide?e.onUnhide:e.onHide,title:t,type:"button"},void 0,(0,d.Z)("span",{className:"material-icon"},void 0,e.hide?"visibility_off":"visibility"),(0,d.Z)("span",{className:e.textClassName},void 0,t)))}function Qe(e){if(!e.show)return null;var t=null,n=null,a=null;switch(e.pin){case 0:t="radio_button_unchecked",n=e.onPinLocally,a=gettext("Unpinned");break;case 1:t="bookmark_outline",n=e.onPinGlobally,a=gettext("Pinned locally"),n=2==e.show?e.onPinGlobally:e.onUnpin;break;case 2:t="bookmark",n=e.onUnpin,a=gettext("Pinned globally")}return(0,d.Z)("div",{className:e.className},void 0,(0,d.Z)("button",{className:"btn btn-default btn-block",disabled:e.disabled,onClick:n,title:a,type:"button"},void 0,(0,d.Z)("span",{className:"material-icon"},void 0,t),(0,d.Z)("span",{className:e.textClassName},void 0,a)))}function Xe(e){var t=e.filter((function(e){return e.id&&!e.isRemoved}));return t.map((function(e){return e.id}))}function et(e){return e.map((function(e){return Object.assign({},e,{uploaded_on:be()(e.uploaded_on)})}))}var tt,nt=n(12891);var at=function(e){(0,h.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function r(e){var t;return(0,a.Z)(this,r),t=o.call(this,e),(0,i.Z)((0,p.Z)(t),"loadSuccess",(function(e){var n=null,a=!1,s=null,i=e.map((function(e){return!1===e.post||n&&e.id!=t.state.category||(n=e.id,s=e.post),e.post&&(e.post.close||e.post.hide||e.post.pin)&&(a=!0),Object.assign(e,{disabled:!1===e.post,label:e.name,value:e.id})}));t.setState({isReady:!0,showOptions:a,categories:i,category:n,categoryOptions:s})})),(0,i.Z)((0,p.Z)(t),"loadError",(function(e){t.setState({isErrored:e.detail})})),(0,i.Z)((0,p.Z)(t),"onCancel",(function(){window.confirm(gettext("Are you sure you want to discard thread?"))&&ft.close()})),(0,i.Z)((0,p.Z)(t),"onTitleChange",(function(e){t.changeValue("title",e.target.value)})),(0,i.Z)((0,p.Z)(t),"onCategoryChange",(function(e){var n=t.state.categories.find((function(t){return e.target.value==t.value})),a=t.state.pin;n.post.pin&&n.post.pin<a&&(a=n.post.pin),t.setState({category:n.id,categoryOptions:n.post,pin:a})})),(0,i.Z)((0,p.Z)(t),"onPostChange",(function(e){t.changeValue("post",e.target.value)})),(0,i.Z)((0,p.Z)(t),"onAttachmentsChange",(function(e){t.setState({attachments:e})})),(0,i.Z)((0,p.Z)(t),"onClose",(function(){t.changeValue("close",!0)})),(0,i.Z)((0,p.Z)(t),"onOpen",(function(){t.changeValue("close",!1)})),(0,i.Z)((0,p.Z)(t),"onPinGlobally",(function(){t.changeValue("pin",2)})),(0,i.Z)((0,p.Z)(t),"onPinLocally",(function(){t.changeValue("pin",1)})),(0,i.Z)((0,p.Z)(t),"onUnpin",(function(){t.changeValue("pin",0)})),(0,i.Z)((0,p.Z)(t),"onHide",(function(){t.changeValue("hide",!0)})),(0,i.Z)((0,p.Z)(t),"onUnhide",(function(){t.changeValue("hide",!1)})),t.state={isReady:!1,isLoading:!1,isErrored:!1,showOptions:!1,categoryOptions:null,title:"",category:e.category||null,categories:[],post:"",attachments:[],close:!1,hide:!1,pin:0,validators:{title:(0,nt.jn)(),post:(0,nt.Jh)()},errors:{}},t}return(0,s.Z)(r,[{key:"componentDidMount",value:function(){ye.Z.get(this.props.config).then(this.loadSuccess,this.loadError)}},{key:"clean",value:function(){if(!this.state.title.trim().length)return _e.Z.error(gettext("You have to enter thread title.")),!1;if(!this.state.post.trim().length)return _e.Z.error(gettext("You have to enter a message.")),!1;var e=this.validate();return e.title?(_e.Z.error(e.title[0]),!1):!e.post||(_e.Z.error(e.post[0]),!1)}},{key:"send",value:function(){return ye.Z.post(this.props.submit,{title:this.state.title,category:this.state.category,post:this.state.post,attachments:Xe(this.state.attachments),close:this.state.close,hide:this.state.hide,pin:this.state.pin})}},{key:"handleSuccess",value:function(e){_e.Z.success(gettext("Your thread has been posted.")),window.location=e.url,this.setState({isLoading:!0})}},{key:"handleError",value:function(e){if(400===e.status){var t=[].concat(e.non_field_errors||[],e.category||[],e.title||[],e.post||[],e.attachments||[]);_e.Z.error(t[0])}else _e.Z.apiError(e)}},{key:"render",value:function(){if(this.state.isErrored)return(0,d.Z)(Ge,{message:this.state.isErrored});if(!this.state.isReady)return tt||(tt=(0,d.Z)($e,{}));var e=0;this.state.categoryOptions.close&&(e+=1),this.state.categoryOptions.hide&&(e+=1),this.state.categoryOptions.pin&&(e+=1);var t=null;return t=1===e?"col-sm-6":"col-sm-8",t+=3===e?" col-md-6":e?" col-md-7":" col-md-9",(0,d.Z)(Fe,{className:"posting-form",withFirstRow:!0},void 0,(0,d.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,d.Z)("div",{className:"row first-row"},void 0,(0,d.Z)("div",{className:t},void 0,(0,d.Z)("input",{className:"form-control",disabled:this.state.isLoading,onChange:this.onTitleChange,placeholder:gettext("Thread title"),type:"text",value:this.state.title})),(0,d.Z)("div",{className:"col-xs-12 col-sm-4 col-md-3 xs-margin-top"},void 0,(0,d.Z)(m.Z,{choices:this.state.categories,disabled:this.state.isLoading,onChange:this.onCategoryChange,value:this.state.category})),(0,d.Z)(We,{close:this.state.close,columns:e,disabled:this.state.isLoading,hide:this.state.hide,onClose:this.onClose,onHide:this.onHide,onOpen:this.onOpen,onPinGlobally:this.onPinGlobally,onPinLocally:this.onPinLocally,onUnhide:this.onUnhide,onUnpin:this.onUnpin,options:this.state.categoryOptions,pin:this.state.pin,showOptions:this.state.showOptions})),(0,d.Z)("div",{className:"row"},void 0,(0,d.Z)("div",{className:"col-md-12"},void 0,(0,d.Z)(Me,{attachments:this.state.attachments,loading:this.state.isLoading,onAttachmentsChange:this.onAttachmentsChange,onCancel:this.onCancel,onChange:this.onPostChange,submitLabel:gettext("Post thread"),value:this.state.post})))))}}]),r}(He.Z);function st(e){var t=e.split(",").map((function(e){return e.trim().toLowerCase()})).filter((function(e){return e.length>0}));return t.filter((function(e,n){return t.indexOf(e)==n}))}var it,ot=function(e){(0,h.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function r(e){var t;(0,a.Z)(this,r),t=o.call(this,e),(0,i.Z)((0,p.Z)(t),"onCancel",(function(){window.confirm(gettext("Are you sure you want to discard private thread?"))&&ft.close()})),(0,i.Z)((0,p.Z)(t),"onToChange",(function(e){t.changeValue("to",e.target.value)})),(0,i.Z)((0,p.Z)(t),"onTitleChange",(function(e){t.changeValue("title",e.target.value)})),(0,i.Z)((0,p.Z)(t),"onPostChange",(function(e){t.changeValue("post",e.target.value)})),(0,i.Z)((0,p.Z)(t),"onAttachmentsChange",(function(e){t.setState({attachments:e})}));var n=(e.to||[]).map((function(e){return e.username})).join(", ");return t.state={isLoading:!1,to:n,title:"",post:"",attachments:[],validators:{title:(0,nt.jn)(),post:(0,nt.Jh)()},errors:{}},t}return(0,s.Z)(r,[{key:"clean",value:function(){if(!st(this.state.to).length)return _e.Z.error(gettext("You have to enter at least one recipient.")),!1;if(!this.state.title.trim().length)return _e.Z.error(gettext("You have to enter thread title.")),!1;if(!this.state.post.trim().length)return _e.Z.error(gettext("You have to enter a message.")),!1;var e=this.validate();return e.title?(_e.Z.error(e.title[0]),!1):!e.post||(_e.Z.error(e.post[0]),!1)}},{key:"send",value:function(){return ye.Z.post(this.props.submit,{to:st(this.state.to),title:this.state.title,post:this.state.post,attachments:Xe(this.state.attachments)})}},{key:"handleSuccess",value:function(e){_e.Z.success(gettext("Your thread has been posted.")),window.location=e.url,this.setState({isLoading:!0})}},{key:"handleError",value:function(e){if(400===e.status){var t=[].concat(e.non_field_errors||[],e.to||[],e.title||[],e.post||[],e.attachments||[]);_e.Z.error(t[0])}else _e.Z.apiError(e)}},{key:"render",value:function(){return(0,d.Z)(Fe,{className:"posting-form",withFirstRow:!0},void 0,(0,d.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,d.Z)("div",{className:"row first-row"},void 0,(0,d.Z)("div",{className:"col-xs-12"},void 0,(0,d.Z)("input",{className:"form-control",disabled:this.state.isLoading,onChange:this.onToChange,placeholder:gettext("Comma separated list of user names, eg.: Danny, Lisa"),type:"text",value:this.state.to}))),(0,d.Z)("div",{className:"row first-row"},void 0,(0,d.Z)("div",{className:"col-xs-12"},void 0,(0,d.Z)("input",{className:"form-control",disabled:this.state.isLoading,onChange:this.onTitleChange,placeholder:gettext("Thread title"),type:"text",value:this.state.title}))),(0,d.Z)("div",{className:"row"},void 0,(0,d.Z)("div",{className:"col-xs-12"},void 0,(0,d.Z)(Me,{attachments:this.state.attachments,loading:this.state.isLoading,onAttachmentsChange:this.onAttachmentsChange,onCancel:this.onCancel,onChange:this.onPostChange,submitLabel:gettext("Post thread"),value:this.state.post})))))}}]),r}(He.Z);var rt,lt=function(e){(0,h.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function r(e){var t;return(0,a.Z)(this,r),t=o.call(this,e),(0,i.Z)((0,p.Z)(t),"loadSuccess",(function(e){t.setState({isReady:!0,post:e.post?'[quote="@'+e.poster+'"]\n'+e.post+"\n[/quote]":""})})),(0,i.Z)((0,p.Z)(t),"loadError",(function(e){t.setState({isErrored:e.detail})})),(0,i.Z)((0,p.Z)(t),"appendData",(function(e){var n=e.post?'[quote="@'+e.poster+'"]\n'+e.post+"\n[/quote]\n\n":"";t.setState((function(e,t){return e.post.length>0?{post:e.post+"\n\n"+n}:{post:n}}))})),(0,i.Z)((0,p.Z)(t),"onCancel",(function(){window.confirm(gettext("Are you sure you want to discard your reply?"))&&ft.close()})),(0,i.Z)((0,p.Z)(t),"onPostChange",(function(e){t.changeValue("post",e.target.value)})),(0,i.Z)((0,p.Z)(t),"onAttachmentsChange",(function(e){t.setState({attachments:e})})),t.state={isReady:!1,isLoading:!1,isErrored:!1,post:"",attachments:[],validators:{post:(0,nt.Jh)()},errors:{}},t}return(0,s.Z)(r,[{key:"componentDidMount",value:function(){ye.Z.get(this.props.config,this.props.context||null).then(this.loadSuccess,this.loadError)}},{key:"componentWillReceiveProps",value:function(e){var t=this.props.context,n=e.context;t&&n&&t.reply===n.reply||ye.Z.get(e.config,e.context||null).then(this.appendData,_e.Z.apiError)}},{key:"clean",value:function(){if(!this.state.post.trim().length)return _e.Z.error(gettext("You have to enter a message.")),!1;var e=this.validate();return!e.post||(_e.Z.error(e.post[0]),!1)}},{key:"send",value:function(){return ye.Z.post(this.props.submit,{post:this.state.post,attachments:Xe(this.state.attachments)})}},{key:"handleSuccess",value:function(e){_e.Z.success(gettext("Your reply has been posted.")),window.location=e.url.index,this.setState({isLoading:!0})}},{key:"handleError",value:function(e){if(400===e.status){var t=[].concat(e.non_field_errors||[],e.post||[],e.attachments||[]);_e.Z.error(t[0])}else _e.Z.apiError(e)}},{key:"render",value:function(){return this.state.isReady?(0,d.Z)(Fe,{className:"posting-form"},void 0,(0,d.Z)("form",{onSubmit:this.handleSubmit,method:"POST"},void 0,(0,d.Z)("div",{className:"row"},void 0,(0,d.Z)("div",{className:"col-md-12"},void 0,(0,d.Z)(Me,{attachments:this.state.attachments,loading:this.state.isLoading,onAttachmentsChange:this.onAttachmentsChange,onCancel:this.onCancel,onChange:this.onPostChange,submitLabel:gettext("Post reply"),value:this.state.post}))))):this.state.isErrored?(0,d.Z)(Ge,{message:this.state.isErrored}):it||(it=(0,d.Z)($e,{}))}}]),r}(He.Z);var ct=function(e){(0,h.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function r(e){var t;return(0,a.Z)(this,r),t=o.call(this,e),(0,i.Z)((0,p.Z)(t),"loadSuccess",(function(e){t.setState({isReady:!0,post:e.post,attachments:et(e.attachments),protect:e.is_protected,canProtect:e.can_protect})})),(0,i.Z)((0,p.Z)(t),"loadError",(function(e){t.setState({isErrored:e.detail})})),(0,i.Z)((0,p.Z)(t),"onCancel",(function(){window.confirm(gettext("Are you sure you want to discard changes?"))&&ft.close()})),(0,i.Z)((0,p.Z)(t),"onProtect",(function(){t.setState({protect:!0})})),(0,i.Z)((0,p.Z)(t),"onUnprotect",(function(){t.setState({protect:!1})})),(0,i.Z)((0,p.Z)(t),"onPostChange",(function(e){t.changeValue("post",e.target.value)})),(0,i.Z)((0,p.Z)(t),"onAttachmentsChange",(function(e){t.setState({attachments:e})})),t.state={isReady:!1,isLoading:!1,isErrored:!1,post:"",attachments:[],protect:!1,canProtect:!1,validators:{post:(0,nt.Jh)()},errors:{}},t}return(0,s.Z)(r,[{key:"componentDidMount",value:function(){ye.Z.get(this.props.config).then(this.loadSuccess,this.loadError)}},{key:"clean",value:function(){if(!this.state.post.trim().length)return _e.Z.error(gettext("You have to enter a message.")),!1;var e=this.validate();return!e.post||(_e.Z.error(e.post[0]),!1)}},{key:"send",value:function(){return ye.Z.put(this.props.submit,{post:this.state.post,attachments:Xe(this.state.attachments),protect:this.state.protect})}},{key:"handleSuccess",value:function(e){_e.Z.success(gettext("Reply has been edited.")),window.location=e.url.index,this.setState({isLoading:!0})}},{key:"handleError",value:function(e){if(400===e.status){var t=[].concat(e.non_field_errors||[],e.category||[],e.title||[],e.post||[],e.attachments||[]);_e.Z.error(t[0])}else _e.Z.apiError(e)}},{key:"render",value:function(){return this.state.isReady?(0,d.Z)(Fe,{className:"posting-form"},void 0,(0,d.Z)("form",{onSubmit:this.handleSubmit,method:"POST"},void 0,(0,d.Z)("div",{className:"row"},void 0,(0,d.Z)("div",{className:"col-md-12"},void 0,(0,d.Z)(Me,{attachments:this.state.attachments,canProtect:this.state.canProtect,loading:this.state.isLoading,onAttachmentsChange:this.onAttachmentsChange,onCancel:this.onCancel,onChange:this.onPostChange,onProtect:this.onProtect,onUnprotect:this.onUnprotect,protect:this.state.protect,submitLabel:gettext("Edit reply"),value:this.state.post}))))):this.state.isErrored?(0,d.Z)(Ge,{message:this.state.isErrored}):rt||(rt=(0,d.Z)($e,{}))}}]),r}(He.Z);function ut(e){return"START"===e.mode?r().createElement(at,e):"START_PRIVATE"===e.mode?r().createElement(ot,e):"REPLY"===e.mode?r().createElement(lt,e):"EDIT"===e.mode?r().createElement(ct,e):null}var dt=n(4869),pt=n(19755),ht=function(){function e(){var t=this;(0,a.Z)(this,e),(0,i.Z)(this,"close",(function(){t._isOpen&&!t._isClosing&&(t._isClosing=!0,t._placeholder.removeClass("slide-in"),window.setTimeout((function(){c().unmountComponentAtNode(document.getElementById("posting-mount")),t._isClosing=!1,t._isOpen=!1}),300))}))}return(0,s.Z)(e,[{key:"init",value:function(e,t,n){this._ajax=e,this._snackbar=t,this._placeholder=pt(n),this._mode=null,this._isOpen=!1,this._isClosing=!1}},{key:"open",value:function(e){if(!1===this._isOpen)this._mode=e.mode,this._isOpen=e.submit,this._realOpen(e);else if(this._isOpen!==e.submit){var t=gettext("You are already working on other message. Do you want to discard it?");"POLL"==this._mode&&(t=gettext("You are already working on a poll. Do you want to discard it?")),window.confirm(t)&&(this._mode=e.mode,this._isOpen=e.submit,this._realOpen(e))}else"REPLY"==this._mode&&"REPLY"==e.mode&&this._realOpen(e)}},{key:"_realOpen",value:function(e){"POLL"==e.mode?(0,dt.Z)(r().createElement(u.y,e),"posting-mount"):(0,dt.Z)(r().createElement(ut,e),"posting-mount"),this._placeholder.addClass("slide-in"),pt("html, body").animate({scrollTop:this._placeholder.offset().top},1e3)}}]),e}(),ft=new ht},53904:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=n(27346),o=function(){function e(){(0,a.Z)(this,e)}return(0,s.Z)(e,[{key:"init",value:function(e){this._store=e,this._timeout=null}},{key:"alert",value:function(e,t){var n=this;this._timeout?(window.clearTimeout(this._timeout),this._store.dispatch((0,i.p2)()),this._timeout=window.setTimeout((function(){n._timeout=null,n.alert(e,t)}),300)):(this._store.dispatch((0,i.OV)(e,t)),this._timeout=window.setTimeout((function(){n._store.dispatch((0,i.p2)()),n._timeout=null}),5e3))}},{key:"info",value:function(e){this.alert(e,"info")}},{key:"success",value:function(e){this.alert(e,"success")}},{key:"warning",value:function(e){this.alert(e,"warning")}},{key:"error",value:function(e){this.alert(e,"error")}},{key:"apiError",value:function(e){var t=e.detail;t||(t=404===e.status?gettext("Action link is invalid."):gettext("Unknown error has occured.")),403===e.status&&"Permission denied"===t&&(t=gettext("You don't have permission to perform this action.")),this.error(t)}}]),e}();t.Z=new o},90287:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=n(41438),o=function(){function e(){(0,a.Z)(this,e),this._store=null,this._reducers={},this._initialState={}}return(0,s.Z)(e,[{key:"addReducer",value:function(e,t,n){this._reducers[e]=t,this._initialState[e]=n}},{key:"init",value:function(){this._store=(0,i.createStore)((0,i.combineReducers)(this._reducers),this._initialState)}},{key:"getStore",value:function(){return this._store}},{key:"getState",value:function(){return this._store.getState()}},{key:"dispatch",value:function(e){return this._store.dispatch(e)}}]),e}();t.Z=new o},59940:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=function(){function e(){(0,a.Z)(this,e)}return(0,s.Z)(e,[{key:"init",value:function(e){this._include=e,this._isLoaded=!1}},{key:"scorePassword",value:function(e,t){return this._isLoaded?zxcvbn(e,t).score:0}},{key:"load",value:function(){return this._isLoaded?this._loadedPromise():(this._include.include("misago/js/zxcvbn.js"),this._loadingPromise())}},{key:"_loadingPromise",value:function(){var e=this;return new Promise((function(t,n){!function a(){var s=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;(s+=1)>200?n():"undefined"==typeof zxcvbn?window.setTimeout((function(){a(s)}),200):(e._isLoaded=!0,t())}()}))}},{key:"_loadedPromise",value:function(){return new Promise((function(e){e()}))}}]),e}();t.Z=new i},93051:function(e,t,n){"use strict";n.d(t,{Z:function(){return _}});var a,s=n(22928),i=n(30381),o=n.n(i),r=n(57588),l=n.n(r),c=n(73935),u=n.n(c),d=n(37424),p=n(15671),h=n(43144),f=n(79340),v=n(6215),m=n(61120);var Z=function(e){(0,f.Z)(r,e);var t,n,i=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,m.Z)(t);if(n){var s=(0,m.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,v.Z)(this,e)});function r(){return(0,p.Z)(this,r),i.apply(this,arguments)}return(0,h.Z)(r,[{key:"getReasonMessage",value:function(){return this.props.message.html?(0,s.Z)("div",{className:"lead",dangerouslySetInnerHTML:{__html:this.props.message.html}}):(0,s.Z)("p",{className:"lead"},void 0,this.props.message.plain)}},{key:"getExpirationMessage",value:function(){if(this.props.expires){if(this.props.expires.isAfter(o()())){var e=interpolate(gettext("This ban expires on %(expires_on)s."),{expires_on:this.props.expires.format("LL, LT")},!0),t=interpolate(gettext("This ban expires %(expires_on)s."),{expires_on:this.props.expires.fromNow()},!0);return(0,s.Z)("abbr",{title:e},void 0,t)}return gettext("This ban has expired.")}return gettext("This ban is permanent.")}},{key:"render",value:function(){return(0,s.Z)("div",{className:"page page-error page-error-banned"},void 0,(0,s.Z)("div",{className:"container"},void 0,(0,s.Z)("div",{className:"message-panel"},void 0,a||(a=(0,s.Z)("div",{className:"message-icon"},void 0,(0,s.Z)("span",{className:"material-icon"},void 0,"highlight_off"))),(0,s.Z)("div",{className:"message-body"},void 0,this.getReasonMessage(),(0,s.Z)("p",{className:"message-footnote"},void 0,this.getExpirationMessage())))))}}]),r}(l().Component),g=n(32233),b=n(90287),y=(0,d.$j)((function(e){return e.tick}))(Z);function _(e,t){if(u().render((0,s.Z)(d.zt,{store:b.Z.getStore()},void 0,(0,s.Z)(y,{message:e.message,expires:e.expires_on?o()(e.expires_on):null})),document.getElementById("page-mount")),void 0===t||t){var n=g.Z.get("SETTINGS").forum_name;document.title=gettext("You are banned")+" | "+n,window.history.pushState({},"",g.Z.get("BANNED_URL"))}}},69130:function(e,t,n){"use strict";function a(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=[],s=[];if(e.forEach((function(e){s.push(e),s.length===t&&(a.push(s),s=[])})),!1!==n&&s.length>0&&s.length<t)for(var i=s.length;i<t;i++)s.push(n);return s.length&&a.push(s),a}n.d(t,{Z:function(){return a}})},89759:function(e,t,n){"use strict";function a(e,t){var n=[];return e.concat(t).filter((function(e){return-1===n.indexOf(e.id)&&(n.push(e.id),!0)}))}n.d(t,{Z:function(){return a}})},89627:function(e,t,n){"use strict";n.d(t,{Z:function(){return s}});var a={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function s(e){return e.replace(/[&<>"']/g,(function(e){return a[e]}))}},48772:function(e,t,n){"use strict";function a(e){return e>1073741824?s(e/1073741824)+" GB":e>1048576?s(e/1048576)+" MB":e>1024?s(e/1024)+" KB":s(e)+" B"}function s(e){return e.toFixed(1)}n.d(t,{Z:function(){return a}})},4869:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var a=n(22928),s=(n(57588),n(73935)),i=n.n(s),o=n(37424),r=n(90287);function l(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=document.getElementById(t),l=e.props?e:(0,a.Z)(e,{});s&&(n?i().render((0,a.Z)(o.zt,{store:r.Z.getStore()},void 0,l),s):i().render(l,s))}},44039:function(e,t,n){"use strict";function a(e,t){return Math.floor(Math.random()*(t-e+1))+e}n.d(t,{e:function(){return a}})},39633:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var a=n(22928),s=(n(57588),n(73935)),i=n.n(s),o=n(37424),r=n(69987),l=n(90287),c=document.getElementById("page-mount");function u(e){var t={component:e.component||null,childRoutes:[]};e.root?t.childRoutes=[{path:e.root,onEnter:function(t,n){n(null,e.paths[0].path)}}].concat(e.paths):t.childRoutes=e.paths,i().render((0,a.Z)(o.zt,{store:l.Z.getStore()},void 0,(0,a.Z)(r.F0,{routes:t,history:r.mW})),c)}},20370:function(e,t,n){"use strict";function a(e,t){if(-1===e.indexOf(t)){var n=e.slice();return n.push(t),n}return e.filter((function(e){return e!==t}))}n.d(t,{ZN:function(){return a}})},55210:function(e,t,n){"use strict";n.d(t,{BS:function(){return d},C1:function(){return o},Do:function(){return c},Ei:function(){return u},HR:function(){return p},Vb:function(){return v},fT:function(){return r},gS:function(){return h},jA:function(){return l},lG:function(){return f}});var a=n(19755),s=/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i,i=new RegExp("^[0-9a-z]+$","i");function o(e){return function(t){if(!1===t||null===t||0===a.trim(t).length)return e||gettext("This field is required.")}}function r(e){var t=gettext("You have to accept the terms of service.");return o(e||t)}function l(e){var t=gettext("You have to accept the privacy policy.");return o(e||t)}function c(e){return function(t){if(!s.test(t))return e||gettext("Enter a valid email address.")}}function u(e,t){return function(n){var s="",i=a.trim(n).length;if(i<e)return s=t?t(e,i):ngettext("Ensure this value has at least %(limit_value)s character (it has %(show_value)s).","Ensure this value has at least %(limit_value)s characters (it has %(show_value)s).",e),interpolate(s,{limit_value:e,show_value:i},!0)}}function d(e,t){return function(n){var s="",i=a.trim(n).length;if(i>e)return s=t?t(e,i):ngettext("Ensure this value has at most %(limit_value)s character (it has %(show_value)s).","Ensure this value has at most %(limit_value)s characters (it has %(show_value)s).",e),interpolate(s,{limit_value:e,show_value:i},!0)}}function p(e){return u(e,(function(e){return ngettext("Username must be at least %(limit_value)s character long.","Username must be at least %(limit_value)s characters long.",e)}))}function h(e){return d(e,(function(e){return ngettext("Username cannot be longer than %(limit_value)s character.","Username cannot be longer than %(limit_value)s characters.",e)}))}function f(){return function(e){if(!i.test(a.trim(e)))return gettext("Username can only contain latin alphabet letters and digits.")}}function v(e){return function(t){var n=t.length;if(n<e){var a=ngettext("Valid password must be at least %(limit_value)s character long.","Valid password must be at least %(limit_value)s characters long.",e);return interpolate(a,{limit_value:e,show_value:n},!0)}}}},46700:function(e,t,n){var a={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":30094,"./hi.js":30094,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function s(e){var t=i(e);return n(t)}function i(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}s.keys=function(){return Object.keys(a)},s.resolve=i,e.exports=s,s.id=46700}},n={};function a(e){var s=n[e];if(void 0!==s)return s.exports;var i=n[e]={id:e,loaded:!1,exports:{}};return t[e].call(i.exports,i,i.exports,a),i.loaded=!0,i.exports}a.m=t,e=[],a.O=function(t,n,s,i){if(!n){var o=1/0;for(u=0;u<e.length;u++){n=e[u][0],s=e[u][1],i=e[u][2];for(var r=!0,l=0;l<n.length;l++)(!1&i||o>=i)&&Object.keys(a.O).every((function(e){return a.O[e](n[l])}))?n.splice(l--,1):(r=!1,i<o&&(o=i));if(r){e.splice(u--,1);var c=s();void 0!==c&&(t=c)}}return t}i=i||0;for(var u=e.length;u>0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[n,s,i]},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,{a:t}),t},a.d=function(e,t){for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.hmd=function(e){return(e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:function(){throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},function(){var e={174:0};a.O.j=function(t){return 0===e[t]};var t=function(t,n){var s,i,o=n[0],r=n[1],l=n[2],c=0;if(o.some((function(t){return 0!==e[t]}))){for(s in r)a.o(r,s)&&(a.m[s]=r[s]);if(l)var u=l(a)}for(t&&t(n);c<o.length;c++)i=o[c],a.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return a.O(u)},n=self.webpackChunkmisago=self.webpackChunkmisago||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))}(),a.O(void 0,[736],(function(){return a(32233)})),a.O(void 0,[736],(function(){return a(58339)})),a.O(void 0,[736],(function(){return a(64109)})),a.O(void 0,[736],(function(){return a(46226)})),a.O(void 0,[736],(function(){return a(93240)})),a.O(void 0,[736],(function(){return a(75147)})),a.O(void 0,[736],(function(){return a(4894)})),a.O(void 0,[736],(function(){return a(29223)})),a.O(void 0,[736],(function(){return a(3026)})),a.O(void 0,[736],(function(){return a(94795)})),a.O(void 0,[736],(function(){return a(95563)})),a.O(void 0,[736],(function(){return a(32488)})),a.O(void 0,[736],(function(){return a(11768)})),a.O(void 0,[736],(function(){return a(61323)})),a.O(void 0,[736],(function(){return a(15049)})),a.O(void 0,[736],(function(){return a(61814)})),a.O(void 0,[736],(function(){return a(95920)})),a.O(void 0,[736],(function(){return a(59203)})),a.O(void 0,[736],(function(){return a(72168)})),a.O(void 0,[736],(function(){return a(47806)})),a.O(void 0,[736],(function(){return a(77031)})),a.O(void 0,[736],(function(){return a(97751)})),a.O(void 0,[736],(function(){return a(76093)})),a.O(void 0,[736],(function(){return a(19764)})),a.O(void 0,[736],(function(){return a(47549)})),a.O(void 0,[736],(function(){return a(22331)})),a.O(void 0,[736],(function(){return a(21513)})),a.O(void 0,[736],(function(){return a(98749)})),a.O(void 0,[736],(function(){return a(98251)})),a.O(void 0,[736],(function(){return a(6720)})),a.O(void 0,[736],(function(){return a(10846)})),a.O(void 0,[736],(function(){return a(18255)})),a.O(void 0,[736],(function(){return a(14113)})),a.O(void 0,[736],(function(){return a(24444)})),a.O(void 0,[736],(function(){return a(1764)})),a.O(void 0,[736],(function(){return a(68351)})),a.O(void 0,[736],(function(){return a(81521)})),a.O(void 0,[736],(function(){return a(19984)})),a.O(void 0,[736],(function(){return a(41229)})),a.O(void 0,[736],(function(){return a(43589)})),a.O(void 0,[736],(function(){return a(24108)})),a.O(void 0,[736],(function(){return a(33934)})),a.O(void 0,[736],(function(){return a(85577)})),a.O(void 0,[736],(function(){return a(83526)})),a.O(void 0,[736],(function(){return a(43060)})),a.O(void 0,[736],(function(){return a(92292)})),a.O(void 0,[736],(function(){return a(33409)}));var s=a.O(void 0,[736],(function(){return a(31341)}));s=a.O(s)}();
+!function(){var e,t={54116:function(e,t){var n,a;(a="object"==typeof window&&window||"object"==typeof self&&self)&&(a.hljs=function(e){function t(e){return e.replace(/[&<>]/gm,(function(e){return x[e]}))}function n(e){return e.nodeName.toLowerCase()}function a(e,t){var n=e&&e.exec(t);return n&&0===n.index}function s(e){return b.test(e)}function i(e,t){var n,a={};for(n in e)a[n]=e[n];if(t)for(n in t)a[n]=t[n];return a}function o(e){var t=[];return function e(a,s){for(var i=a.firstChild;i;i=i.nextSibling)3===i.nodeType?s+=i.nodeValue.length:1===i.nodeType&&(t.push({event:"start",offset:s,node:i}),s=e(i,s),n(i).match(/br|hr|img|input/)||t.push({event:"stop",offset:s,node:i}));return s}(e,0),t}function r(e,a,s){function i(){return e.length&&a.length?e[0].offset!==a[0].offset?e[0].offset<a[0].offset?e:a:"start"===a[0].event?e:a:e.length?e:a}function o(e){u+="<"+n(e)+v.map.call(e.attributes,(function(e){return" "+e.nodeName+'="'+t(e.value)+'"'})).join("")+">"}function r(e){u+="</"+n(e)+">"}function l(e){("start"===e.event?o:r)(e.node)}for(var c=0,u="",d=[];e.length||a.length;){var p=i();if(u+=t(s.substring(c,p[0].offset)),c=p[0].offset,p===e){d.reverse().forEach(r);do{l(p.splice(0,1)[0]),p=i()}while(p===e&&p.length&&p[0].offset===c);d.reverse().forEach(o)}else"start"===p[0].event?d.push(p[0].node):d.pop(),l(p.splice(0,1)[0])}return u+t(s.substr(c))}function l(e){function t(e){return e&&e.source||e}function n(n,a){return new RegExp(t(n),"m"+(e.cI?"i":"")+(a?"g":""))}!function a(s,o){if(!s.compiled){if(s.compiled=!0,s.k=s.k||s.bK,s.k){var r={},l=function(t,n){e.cI&&(n=n.toLowerCase()),n.split(" ").forEach((function(e){var n=e.split("|");r[n[0]]=[t,n[1]?Number(n[1]):1]}))};"string"==typeof s.k?l("keyword",s.k):m(s.k).forEach((function(e){l(e,s.k[e])})),s.k=r}s.lR=n(s.l||/\w+/,!0),o&&(s.bK&&(s.b="\\b("+s.bK.split(" ").join("|")+")\\b"),s.b||(s.b=/\B|\b/),s.bR=n(s.b),s.e||s.eW||(s.e=/\B|\b/),s.e&&(s.eR=n(s.e)),s.tE=t(s.e)||"",s.eW&&o.tE&&(s.tE+=(s.e?"|":"")+o.tE)),s.i&&(s.iR=n(s.i)),null==s.r&&(s.r=1),s.c||(s.c=[]);var c=[];s.c.forEach((function(e){e.v?e.v.forEach((function(t){c.push(i(e,t))})):c.push("self"===e?s:e)})),s.c=c,s.c.forEach((function(e){a(e,s)})),s.starts&&a(s.starts,o);var u=s.c.map((function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b})).concat([s.tE,s.i]).map(t).filter(Boolean);s.t=u.length?n(u.join("|"),!0):{exec:function(){return null}}}}(e)}function c(e,n,s,i){function o(e,t){var n,s;for(n=0,s=t.c.length;s>n;n++)if(a(t.c[n].bR,e))return t.c[n]}function r(e,t){if(a(e.eR,t)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?r(e.parent,t):void 0}function d(e,t){return!s&&a(t.iR,e)}function p(e,t){var n=b.cI?t[0].toLowerCase():t[0];return e.k.hasOwnProperty(n)&&e.k[n]}function h(e,t,n,a){var s='<span class="'+(a?"":k.classPrefix);return(s+=e+'">')+t+(n?"":N)}function v(){w+=null!=_.sL?function(){var e="string"==typeof _.sL;if(e&&!Z[_.sL])return t(R);var n=e?c(_.sL,R,!0,x[_.sL]):u(R,_.sL.length?_.sL:void 0);return _.r>0&&(C+=n.r),e&&(x[_.sL]=n.top),h(n.language,n.value,!1,!0)}():function(){var e,n,a,s;if(!_.k)return t(R);for(s="",n=0,_.lR.lastIndex=0,a=_.lR.exec(R);a;)s+=t(R.substring(n,a.index)),(e=p(_,a))?(C+=e[1],s+=h(e[0],t(a[0]))):s+=t(a[0]),n=_.lR.lastIndex,a=_.lR.exec(R);return s+t(R.substr(n))}(),R=""}function m(e){w+=e.cN?h(e.cN,"",!0):"",_=Object.create(e,{parent:{value:_}})}function g(e,t){if(R+=e,null==t)return v(),0;var n=o(t,_);if(n)return n.skip?R+=t:(n.eB&&(R+=t),v(),n.rB||n.eB||(R=t)),m(n),n.rB?0:t.length;var a=r(_,t);if(a){var s=_;s.skip?R+=t:(s.rE||s.eE||(R+=t),v(),s.eE&&(R=t));do{_.cN&&(w+=N),_.skip||(C+=_.r),_=_.parent}while(_!==a.parent);return a.starts&&m(a.starts),s.rE?0:t.length}if(d(t,_))throw new Error('Illegal lexeme "'+t+'" for mode "'+(_.cN||"<unnamed>")+'"');return R+=t,t.length||1}var b=f(e);if(!b)throw new Error('Unknown language: "'+e+'"');l(b);var y,_=i||b,x={},w="";for(y=_;y!==b;y=y.parent)y.cN&&(w=h(y.cN,"",!0)+w);var R="",C=0;try{for(var S,E,L=0;_.t.lastIndex=L,S=_.t.exec(n);)E=g(n.substring(L,S.index),S[0]),L=S.index+E;for(g(n.substr(L)),y=_;y.parent;y=y.parent)y.cN&&(w+=N);return{r:C,value:w,language:e,top:_}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{r:0,value:t(n)};throw e}}function u(e,n){n=n||k.languages||m(Z);var a={r:0,value:t(e)},s=a;return n.filter(f).forEach((function(t){var n=c(t,e,!1);n.language=t,n.r>s.r&&(s=n),n.r>a.r&&(s=a,a=n)})),s.language&&(a.second_best=s),a}function d(e){return k.tabReplace||k.useBR?e.replace(_,(function(e,t){return k.useBR&&"\n"===e?"<br>":k.tabReplace?t.replace(/\t/g,k.tabReplace):void 0})):e}function p(e){var t,n,a,i,l,p=function(e){var t,n,a,i,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",n=y.exec(o))return f(n[1])?n[1]:"no-highlight";for(t=0,a=(o=o.split(/\s+/)).length;a>t;t++)if(s(i=o[t])||f(i))return i}(e);s(p)||(k.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n"):t=e,l=t.textContent,a=p?c(p,l,!0):u(l),(n=o(t)).length&&((i=document.createElementNS("http://www.w3.org/1999/xhtml","div")).innerHTML=a.value,a.value=r(n,o(i),l)),a.value=d(a.value),e.innerHTML=a.value,e.className=function(e,t,n){var a=t?g[t]:n,s=[e.trim()];return e.match(/\bhljs\b/)||s.push("hljs"),-1===e.indexOf(a)&&s.push(a),s.join(" ").trim()}(e.className,p,a.language),e.result={language:a.language,re:a.r},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.r}))}function h(){if(!h.called){h.called=!0;var e=document.querySelectorAll("pre code");v.forEach.call(e,p)}}function f(e){return e=(e||"").toLowerCase(),Z[e]||Z[g[e]]}var v=[],m=Object.keys,Z={},g={},b=/^(no-?highlight|plain|text)$/i,y=/\blang(?:uage)?-([\w-]+)\b/i,_=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,N="</span>",k={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},x={"&":"&amp;","<":"&lt;",">":"&gt;"};return e.highlight=c,e.highlightAuto=u,e.fixMarkup=d,e.highlightBlock=p,e.configure=function(e){k=i(k,e)},e.initHighlighting=h,e.initHighlightingOnLoad=function(){addEventListener("DOMContentLoaded",h,!1),addEventListener("load",h,!1)},e.registerLanguage=function(t,n){var a=Z[t]=n(e);a.aliases&&a.aliases.forEach((function(e){g[e]=t}))},e.listLanguages=function(){return m(Z)},e.getLanguage=f,e.inherit=i,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\b/},e.C=function(t,n,a){var s=e.inherit({cN:"comment",b:t,e:n,c:[]},a||{});return s.c.push(e.PWM),s.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),s},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e}({}),void 0===(n=function(){return a.hljs}.apply(t,[]))||(e.exports=n)),hljs.registerLanguage("xml",(function(e){var t={eW:!0,i:/</,r:0,c:[{cN:"attr",b:"[A-Za-z0-9\\._:-]+",r:0},{b:/=\s*/,r:0,c:[{cN:"string",endsParent:!0,v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},e.C("\x3c!--","--\x3e",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0}]},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{name:"style"},c:[t],starts:{e:"</style>",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{name:"script"},c:[t],starts:{e:"<\/script>",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}})),hljs.registerLanguage("markdown",(function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}|\t)",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}})),hljs.registerLanguage("ini",(function(e){var t={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"section",b:/^\s*\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_-]+\s*=\s*/,e:"$",rB:!0,c:[{cN:"attr",b:/[a-z0-9\[\]_-]+/},{b:/=/,eW:!0,r:0,c:[{cN:"literal",b:/\bon|off|true|false|yes|no\b/},{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},t,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM]}]}]}})),hljs.registerLanguage("python",(function(e){var t={cN:"meta",b:/^(>>>|\.\.\.) /},n={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[t],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[t],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},e.ASM,e.QSM]},a={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},s={cN:"params",b:/\(/,e:/\)/,c:["self",t,a,n]};return{aliases:["py","gyp"],k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},i:/(<\/|->|\?)|=>/,c:[t,a,n,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,s,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}})),hljs.registerLanguage("css",(function(e){var t={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:"[a-zA-Z-][a-zA-Z0-9_-]*",r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,t]}]}})),hljs.registerLanguage("less",(function(e){var t="[\\w-]+",n="("+t+"|@{"+t+"})",a=[],s=[],i=function(e){return{cN:"string",b:"~?"+e+".*?"+e}},o=function(e,t,n){return{cN:e,b:t,r:n}},r={b:"\\(",e:"\\)",c:s,r:0};s.push(e.CLCM,e.CBCM,i("'"),i('"'),e.CSSNM,{b:"(url|data-uri)\\(",starts:{cN:"string",e:"[\\)\\n]",eE:!0}},o("number","#[0-9A-Fa-f]+\\b"),r,o("variable","@@?"+t,10),o("variable","@{"+t+"}"),o("built_in","~?`[^`]*?`"),{cN:"attribute",b:t+"\\s*:",e:":",rB:!0,eE:!0},{cN:"meta",b:"!important"});var l=s.concat({b:"{",e:"}",c:a}),c={bK:"when",eW:!0,c:[{bK:"and not"}].concat(s)},u={b:n+"\\s*:",rB:!0,e:"[;}]",r:0,c:[{cN:"attribute",b:n,e:":",eE:!0,starts:{eW:!0,i:"[<=$]",r:0,c:s}}]},d={cN:"keyword",b:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{e:"[;{}]",rE:!0,c:s,r:0}},p={cN:"variable",v:[{b:"@"+t+"\\s*:",r:15},{b:"@"+t}],starts:{e:"[;}]",rE:!0,c:l}},h={v:[{b:"[\\.#:&\\[>]",e:"[;{}]"},{b:n,e:"{"}],rB:!0,rE:!0,i:"[<='$\"]",r:0,c:[e.CLCM,e.CBCM,c,o("keyword","all\\b"),o("variable","@{"+t+"}"),o("selector-tag",n+"%?",0),o("selector-id","#"+n),o("selector-class","\\."+n,0),o("selector-tag","&",0),{cN:"selector-attr",b:"\\[",e:"\\]"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"\\(",e:"\\)",c:l},{b:"!important"}]};return a.push(e.CLCM,e.CBCM,d,p,u,h),{cI:!0,i:"[=>'/<($\"]",c:a}})),hljs.registerLanguage("scss",(function(e){var t={cN:"variable",b:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},n={cN:"number",b:"#[0-9A-Fa-f]+"};return e.CSSNM,e.QSM,e.ASM,e.CBCM,{cI:!0,i:"[=/|']",c:[e.CLCM,e.CBCM,{cN:"selector-id",b:"\\#[A-Za-z0-9_-]+",r:0},{cN:"selector-class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"selector-attr",b:"\\[",e:"\\]",i:"$"},{cN:"selector-tag",b:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",r:0},{b:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{b:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},t,{cN:"attribute",b:"\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",i:"[^\\s]"},{b:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{b:":",e:";",c:[t,n,e.CSSNM,e.QSM,e.ASM,{cN:"meta",b:"!important"}]},{b:"@",e:"[{;]",k:"mixin include extend for if else each while charset import debug media page content font-face namespace warn",c:[t,e.QSM,e.ASM,n,e.CSSNM,{b:"\\s[A-Za-z0-9_.-]+",r:0}]}]}})),hljs.registerLanguage("json",(function(e){var t={literal:"true false null"},n=[e.QSM,e.CNM],a={e:",",eW:!0,eE:!0,c:n,k:t},s={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(a,{b:/:/})],i:"\\S"},i={b:"\\[",e:"\\]",c:[e.inherit(a)],i:"\\S"};return n.splice(n.length,0,s,i),{c:n,k:t,i:"\\S"}})),hljs.registerLanguage("javascript",(function(e){var t="[A-Za-z$_][0-9A-Za-z$_]*",n={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},s={cN:"subst",b:"\\$\\{",e:"\\}",k:n,c:[]},i={cN:"string",b:"`",e:"`",c:[e.BE,s]};s.c=[e.ASM,e.QSM,i,a,e.RM];var o=s.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:n,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,i,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:t+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:t,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+t+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:t},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:n,c:o}]}]},{b:/</,e:/(\/\w+|\w+\/)>/,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:t}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:o}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}})),hljs.registerLanguage("bash",(function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},n={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]};return{aliases:["sh","zsh"],l:/-?[a-z\._]+/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,n,{cN:"string",b:/'/,e:/'/},t]}}))},98936:function(e,t,n){"use strict";n.d(t,{gq:function(){return o},Z6:function(){return r},kw:function(){return l}});var a=n(22928),s=n(94184),i=n.n(s),o=(n(57588),function(e){var t=e.children,n=e.className;return(0,a.Z)("div",{className:i()("flex-row",n)},void 0,t)}),r=function(e){var t=e.children,n=e.className,s=e.shrink;return(0,a.Z)("div",{className:i()("flex-row-col",n,{"flex-row-col-shrink":s})},void 0,t)},l=function(e){var t=e.auto,n=e.children,s=e.className;return(0,a.Z)("div",{className:i()("flex-row-section",{"flex-row-section-auto":t},s)},void 0,n)}},59131:function(e,t,n){"use strict";var a=n(22928);n(57588),t.Z=function(e){var t=e.children;return(0,a.Z)("div",{className:"container page-container"},void 0,t)}},99755:function(e,t,n){"use strict";n.d(t,{mr:function(){return r},gC:function(){return l},sP:function(){return c},eA:function(){return u},Ql:function(){return d},bM:function(){return p},Iv:function(){return h}});var a,s=n(22928),i=n(94184),o=n.n(i),r=(n(57588),function(e){var t=e.children,n=e.className,i=e.styleName;return(0,s.Z)("div",{className:o()("page-header",n,i&&"page-header-"+i)},void 0,(0,s.Z)("div",{className:"page-header-bg-image"},void 0,(0,s.Z)("div",{className:"page-header-bg-overlay"},void 0,a||(a=(0,s.Z)("div",{className:"page-header-image"})),t)))}),l=function(e){var t=e.children,n=e.className,a=e.styleName;return(0,s.Z)("div",{className:o()("page-header-banner",n,a&&"page-header-banner-"+a)},void 0,(0,s.Z)("div",{className:"page-header-banner-bg-image"},void 0,(0,s.Z)("div",{className:"page-header-banner-bg-overlay"},void 0,t)))},c=function(e){var t=e.children;return(0,s.Z)("div",{className:"container page-header-container"},void 0,t)},u=function(e){var t=e.children,n=e.className;return(0,s.Z)("div",{className:o()("page-header-details",n)},void 0,t)},d=function(e){var t=e.className,n=e.message;return(0,s.Z)("div",{className:o()("page-header-message",t),dangerouslySetInnerHTML:{__html:n}})},p=function(e){var t=e.children,n=e.className;return(0,s.Z)("div",{className:o()("page-header-message",n)},void 0,t)},h=function(e){var t=e.styleName,n=e.header,a=e.message;return(0,s.Z)(c,{},void 0,(0,s.Z)(r,{styleName:t},void 0,(0,s.Z)(l,{styleName:t},void 0,(0,s.Z)("h1",{},void 0,n)),a&&(0,s.Z)(u,{styleName:t},void 0,a)))}},26106:function(e,t,n){"use strict";var a=n(22928),s=(n(57588),n(32233)),i=n(89627),o=function(e){var t=e.agreement,n=e.checked,s=e.errors,o=e.url,r=e.value,l=e.onChange;if(!o)return null;var c=interpolate('<a href="%(url)s" target="_blank">%(agreement)s</a>',{agreement:(0,i.Z)(t),url:(0,i.Z)(o)},!0),u=interpolate(gettext("I have read and accept %(agreement)s."),{agreement:c},!0);return(0,a.Z)("div",{className:"checkbox legal-footnote"},void 0,(0,a.Z)("label",{},void 0,(0,a.Z)("input",{checked:n,type:"checkbox",value:r,onChange:l}),(0,a.Z)("span",{dangerouslySetInnerHTML:{__html:u}})),s&&s.map((function(e,t){return(0,a.Z)("div",{className:"help-block errors"},t,e)})))};t.Z=function(e){var t=e.errors,n=e.privacyPolicy,i=e.termsOfService,r=e.onPrivacyPolicyChange,l=e.onTermsOfServiceChange,c=s.Z.get("TERMS_OF_SERVICE_ID"),u=s.Z.get("TERMS_OF_SERVICE_URL"),d=s.Z.get("PRIVACY_POLICY_ID"),p=s.Z.get("PRIVACY_POLICY_URL");return c||d?(0,a.Z)("div",{},void 0,(0,a.Z)(o,{agreement:gettext("the terms of service"),checked:null!==i,errors:t.termsOfService,url:u,value:c,onChange:l}),(0,a.Z)(o,{agreement:gettext("the privacy policy"),checked:null!==n,errors:t.privacyPolicy,url:p,value:d,onChange:r})):null}},47235:function(e,t,n){"use strict";var a,s=n(22928),i=(n(57588),n(32233)),o=function(e){var t=e.className,n=e.text;return n?(0,s.Z)("h5",{className:t||""},void 0,n):null};t.Z=function(e){var t=e.buttonClassName,n=e.buttonLabel,r=e.formLabel,l=e.header,c=e.labelClassName,u=i.Z.get("SOCIAL_AUTH");return 0===u.length?null:(0,s.Z)("div",{className:"form-group form-social-auth"},void 0,(0,s.Z)(o,{className:c,text:l}),(0,s.Z)("div",{className:"row"},void 0,u.map((function(e){var a=e.id,i=e.name,o=e.button_text,r=e.button_color,l=e.url,c="btn btn-block btn-default btn-social-"+a,u=r?{color:r}:null,d=o||interpolate(n,{site:i},!0);return(0,s.Z)("div",{className:t||"col-xs-12"},a,(0,s.Z)("a",{className:c,style:u,href:l},void 0,d))}))),a||(a=(0,s.Z)("hr",{})),(0,s.Z)(o,{className:c,text:r}))}},50366:function(e,t,n){"use strict";var a,s,i,o,r,l,c,u=n(22928);n(57588),t.Z=function(e){var t=e.thread;return(0,u.Z)("ul",{className:"thread-flags"},void 0,2==t.weight&&(0,u.Z)("li",{className:"thread-flag-pinned-globally",title:gettext("Pinned globally")},void 0,a||(a=(0,u.Z)("span",{className:"material-icon"},void 0,"bookmark"))),1==t.weight&&(0,u.Z)("li",{className:"thread-flag-pinned-locally",title:gettext("Pinned in category")},void 0,s||(s=(0,u.Z)("span",{className:"material-icon"},void 0,"bookmark_outline"))),t.best_answer&&(0,u.Z)("li",{className:"thread-flag-answered",title:gettext("Answered")},void 0,i||(i=(0,u.Z)("span",{className:"material-icon"},void 0,"check_circle"))),t.has_poll&&(0,u.Z)("li",{className:"thread-flag-poll",title:gettext("Poll")},void 0,o||(o=(0,u.Z)("span",{className:"material-icon"},void 0,"poll"))),(t.is_unapproved||t.has_unapproved_posts)&&(0,u.Z)("li",{className:"thread-flag-unapproved",title:t.is_unapproved?gettext("Awaiting approval"):gettext("Has unapproved posts")},void 0,r||(r=(0,u.Z)("span",{className:"material-icon"},void 0,"visibility"))),t.is_closed&&(0,u.Z)("li",{className:"thread-flag-closed",title:gettext("Closed")},void 0,l||(l=(0,u.Z)("span",{className:"material-icon"},void 0,"lock"))),t.is_hidden&&(0,u.Z)("li",{className:"thread-flag-hidden",title:gettext("Hidden")},void 0,c||(c=(0,u.Z)("span",{className:"material-icon"},void 0,"visibility_off"))))}},16768:function(e,t,n){"use strict";var a,s=n(22928);n(57588),t.Z=function(e){var t=e.thread;return(0,s.Z)("span",{className:"threads-replies",title:interpolate(ngettext("%(replies)s reply","%(replies)s replies",t.replies),{replies:t.replies},!0)},void 0,a||(a=(0,s.Z)("span",{className:"material-icon"},void 0,"chat_bubble_outline")),t.replies>980?Math.round(t.replies/1e3)+"K":t.replies)}},92490:function(e,t,n){"use strict";n.d(t,{o8:function(){return s},Eg:function(){return r},Z2:function(){return l},tw:function(){return c}});var a=n(22928),s=(n(57588),function(e){var t=e.children;return(0,a.Z)("nav",{className:"toolbar"},void 0,t)}),i=n(94184),o=n.n(i),r=function(e){var t=e.children,n=e.className,s=e.shrink;return(0,a.Z)("div",{className:o()("toolbar-item",n,{"toolbar-item-shrink":s})},void 0,t)},l=function(e){var t=e.auto,n=e.children,s=e.className;return(0,a.Z)("div",{className:o()("toolbar-section",{"toolbar-section-auto":t},s)},void 0,n)},c=function(e){var t=e.className;return(0,a.Z)("div",{className:o()("toolbar-spacer",t)})}},19605:function(e,t,n){"use strict";n.d(t,{ZP:function(){return i}});var a=n(22928),s=(n(57588),n(32233));function i(e){var t=e.size||100,n=e.size2x||t;return(0,a.Z)("img",{alt:"",className:e.className||"user-avatar",src:o(e.user,t),srcSet:o(e.user,n),width:t,height:t})}function o(e,t){return e&&e.id?function(e,t){var n=e[0];return e.forEach((function(e){e.size>=t&&(n=e)})),n}(e.avatars,t).url:s.Z.get("BLANK_AVATAR_URL")}},82211:function(e,t,n){"use strict";n.d(t,{Z:function(){return h}});var a,s=n(22928),i=n(15671),o=n(43144),r=n(79340),l=n(6215),c=n(61120),u=n(57588),d=n.n(u),p=n(37848);var h=function(e){(0,r.Z)(d,e);var t,n,u=(t=d,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function d(){return(0,i.Z)(this,d),u.apply(this,arguments)}return(0,o.Z)(d,[{key:"render",value:function(){var e="btn "+this.props.className,t=this.props.disabled;return this.props.loading&&(e+=" btn-loading",t=!0),(0,s.Z)("button",{className:e,disabled:t,onClick:this.props.onClick,type:this.props.onClick?"button":"submit"},void 0,this.props.children,this.props.loading?a||(a=(0,s.Z)(p.Z,{})):null)}}]),d}(d().Component);h.defaultProps={className:"btn-default",type:"submit",loading:!1,disabled:!1,onClick:null}},57026:function(e,t,n){"use strict";n.d(t,{Z:function(){return s}});var a=n(22928);function s(e){return(0,a.Z)("select",{className:e.className||"form-control",disabled:e.disabled||!1,id:e.id||null,onChange:e.onChange,value:e.value},void 0,e.choices.map((function(e){return(0,a.Z)("option",{disabled:e.disabled||!1,value:e.value},e.value,"- - ".repeat(e.level)+e.label)})))}n(57588)},21688:function(e,t,n){"use strict";n.d(t,{Z:function(){return S}});var a=n(22928),s=n(15671),i=n(43144),o=n(79340),r=n(6215),l=n(61120),c=n(57588),u=n.n(c),d=n(33556);function p(e){return e.display?(0,a.Z)(d.Z,{helpText:gettext("No profile details are editable at this time."),message:gettext("This option is currently unavailable.")}):null}var h,f=n(37848);function v(e){return e.display?h||(h=(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)(f.Z,{}))):null}var m=n(97326),Z=n(4942),g=n(60471);var b=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){var e;(0,s.Z)(this,u);for(var t=arguments.length,n=new Array(t),a=0;a<t;a++)n[a]=arguments[a];return e=c.call.apply(c,[this].concat(n)),(0,Z.Z)((0,m.Z)(e),"onChange",(function(t){var n=e.props,a=n.field;(0,n.onChange)(a.fieldname,t.target.value)})),e}return(0,i.Z)(u,[{key:"render",value:function(){var e=this.props,t=e.disabled,n=e.field,s=e.value,i=n.input;return"select"===i.type?(0,a.Z)(g.Z,{choices:i.choices,disabled:t,id:"id_"+n.fieldname,onChange:this.onChange,value:s}):"textarea"===i.type?(0,a.Z)("textarea",{className:"form-control",disabled:t,id:"id_"+n.fieldname,onChange:this.onChange,rows:"4",type:"text",value:s}):"text"===i.type?(0,a.Z)("input",{className:"form-control",disabled:t,id:"id_"+n.fieldname,onChange:this.onChange,type:"text",value:s}):null}}]),u}(u().Component),y=n(96359);function _(e){var t=e.disabled,n=e.errors,s=e.fields,i=e.name,o=e.onChange,r=e.value;return(0,a.Z)("fieldset",{},void 0,(0,a.Z)("legend",{},void 0,i),s.map((function(e){return(0,a.Z)(y.Z,{for:"id_"+e.fieldname,helpText:e.help_text,label:e.label,validation:n[e.fieldname]},e.fieldname,(0,a.Z)(b,{disabled:t,field:e,onChange:o,value:r[e.fieldname]}))})))}var N=n(82211),k=n(43345),x=n(78657),w=n(53904);var R=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(e){var t;(0,s.Z)(this,u),t=c.call(this,e),(0,Z.Z)((0,m.Z)(t),"onChange",(function(e,n){t.setState((0,Z.Z)({},e,n))})),t.state={isLoading:!1,errors:{}};for(var n=e.groups.length,a=0;a<n;a++)for(var i=e.groups[a],o=i.fields.length,r=0;r<o;r++){var l=i.fields[r].fieldname,d=i.fields[r].initial;t.state[l]=d}return t}return(0,i.Z)(u,[{key:"send",value:function(){var e=Object.assign({},this.state,{errors:null,isLoading:null});return x.Z.post(this.props.api,e)}},{key:"handleSuccess",value:function(e){this.props.onSuccess(e)}},{key:"handleError",value:function(e){400===e.status?(w.Z.error(gettext("Form contains errors.")),this.setState({errors:e})):w.Z.apiError(e)}},{key:"render",value:function(){var e=this;return(0,a.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,a.Z)("div",{className:"panel-body"},void 0,this.props.groups.map((function(t,n){return(0,a.Z)(_,{disabled:e.state.isLoading,errors:e.state.errors,fields:t.fields,name:t.name,onChange:e.onChange,value:e.state},n)}))),(0,a.Z)("div",{className:"panel-footer text-right"},void 0,(0,a.Z)(C,{disabled:this.state.isLoading,onCancel:this.props.onCancel})," ",(0,a.Z)(N.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Save changes"))))}}]),u}(k.Z);function C(e){var t=e.onCancel,n=e.disabled;return t?(0,a.Z)("button",{className:"btn btn-default",disabled:n,onClick:t,type:"button"},void 0,gettext("Cancel")):null}var S=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(e){var t;return(0,s.Z)(this,u),(t=c.call(this,e)).state={loading:!0,groups:null},t}return(0,i.Z)(u,[{key:"componentDidMount",value:function(){var e=this;x.Z.get(this.props.api).then((function(t){e.setState({loading:!1,groups:t})}),(function(t){w.Z.apiError(t),e.props.cancel&&e.props.cancel()}))}},{key:"render",value:function(){var e=this.state,t=e.groups,n=e.loading;return(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Edit details"))),(0,a.Z)(v,{display:n}),(0,a.Z)(p,{display:!n&&!t.length}),(0,a.Z)(E,{api:this.props.api,display:!n&&t.length,groups:t,onCancel:this.props.onCancel,onSuccess:this.props.onSuccess}))}}]),u}(u().Component);function E(e){var t=e.api,n=e.display,s=e.groups,i=e.onCancel,o=e.onSuccess;return n?(0,a.Z)(R,{api:t,groups:s,onCancel:i,onSuccess:o}):null}},96359:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var a=n(22928),s=n(15671),i=n(43144),o=n(79340),r=n(6215),l=n(61120),c=n(57588);var u=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"isValidated",value:function(){return void 0!==this.props.validation}},{key:"getClassName",value:function(){var e="form-group";return this.isValidated()&&(e+=" has-feedback",null===this.props.validation?e+=" has-success":e+=" has-error"),e}},{key:"getFeedback",value:function(){var e=this;return this.props.validation?(0,a.Z)("div",{className:"help-block errors"},void 0,this.props.validation.map((function(t,n){return(0,a.Z)("p",{},e.props.for+"FeedbackItem"+n,t)}))):null}},{key:"getFeedbackDescription",value:function(){return this.isValidated()?(0,a.Z)("span",{id:this.props.for+"_status",className:"sr-only"},void 0,this.props.validation?gettext("(error)"):gettext("(success)")):null}},{key:"getHelpText",value:function(){return this.props.helpText?(0,a.Z)("p",{className:"help-block"},void 0,this.props.helpText):null}},{key:"render",value:function(){return(0,a.Z)("div",{className:this.getClassName()},void 0,(0,a.Z)("label",{className:"control-label "+(this.props.labelClass||""),htmlFor:this.props.for||""},void 0,this.props.label+":"),(0,a.Z)("div",{className:this.props.controlClass||""},void 0,this.props.children,this.getFeedbackDescription(),this.getFeedback(),this.getHelpText(),this.props.extra||null))}}]),u}(n.n(c)().Component)},43345:function(e,t,n){"use strict";n.d(t,{Z:function(){return v}});var a=n(15671),s=n(43144),i=n(97326),o=n(79340),r=n(6215),l=n(61120),c=n(4942),u=n(57588),d=n.n(u),p=n(55210),h=n(53904);var f=(0,p.C1)(),v=function(e){(0,o.Z)(d,e);var t,n,u=(t=d,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function d(){var e;(0,a.Z)(this,d);for(var t=arguments.length,n=new Array(t),s=0;s<t;s++)n[s]=arguments[s];return e=u.call.apply(u,[this].concat(n)),(0,c.Z)((0,i.Z)(e),"bindInput",(function(t){return function(n){e.changeValue(t,n.target.value)}})),(0,c.Z)((0,i.Z)(e),"changeValue",(function(t,n){var a=(0,c.Z)({},t,n),s=e.state.errors||{};s[t]=e.validateField(t,a[t]),a.errors=s,e.setState(a)})),(0,c.Z)((0,i.Z)(e),"handleSubmit",(function(t){if(t&&t.preventDefault(),!e.state.isLoading&&e.clean()){e.setState({isLoading:!0});var n=e.send();n?n.then((function(t){e.setState({isLoading:!1}),e.handleSuccess(t)}),(function(t){e.setState({isLoading:!1}),e.handleError(t)})):e.setState({isLoading:!1})}})),e}return(0,s.Z)(d,[{key:"validate",value:function(){var e={};if(!this.state.validators)return e;var t={required:this.state.validators.required||this.state.validators,optional:this.state.validators.optional||{}},n=[];for(var a in t.required)t.required.hasOwnProperty(a)&&t.required[a]&&n.push(a);for(var s in t.optional)t.optional.hasOwnProperty(s)&&t.optional[s]&&n.push(s);for(var i in n){var o=n[i],r=this.validateField(o,this.state[o]);null===r?e[o]=null:r&&(e[o]=r)}return e}},{key:"isValid",value:function(){var e=this.validate();for(var t in e)if(e.hasOwnProperty(t)&&null!==e[t])return!1;return!0}},{key:"validateField",value:function(e,t){var n=[];if(!this.state.validators)return n;var a={required:(this.state.validators.required||this.state.validators)[e],optional:(this.state.validators.optional||{})[e]},s=f(t)||!1;if(a.required){if(s)n=[s];else for(var i in a.required){var o=a.required[i](t);o&&n.push(o)}return n.length?n:null}if(!1===s&&a.optional){for(var r in a.optional){var l=a.optional[r](t);l&&n.push(l)}return n.length?n:null}return!1}},{key:"clean",value:function(){return!0}},{key:"send",value:function(){return null}},{key:"handleSuccess",value:function(e){}},{key:"handleError",value:function(e){h.Z.apiError(e)}}]),d}(d().Component)},94417:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var a=n(22928),s=n(15671),i=n(43144),o=n(79340),r=n(6215),l=n(61120),c=n(57588);var u=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"isActive",value:function(){return this.props.isControlled?this.props.isActive:!!this.props.path&&0===document.location.pathname.indexOf(this.props.path)}},{key:"getClassName",value:function(){return this.isActive()?(this.props.className||"")+" "+(this.props.activeClassName||"active"):this.props.className||""}},{key:"render",value:function(){return(0,a.Z)("li",{className:this.getClassName()},void 0,this.props.children)}}]),u}(n.n(c)().Component)},37848:function(e,t,n){"use strict";n.d(t,{Z:function(){return i}});var a,s=n(22928);function i(e){return(0,s.Z)("div",{className:e.className||"loader"},void 0,a||(a=(0,s.Z)("div",{className:"loader-spinning-wheel"})))}n(57588)},52753:function(e,t,n){"use strict";n.d(t,{ZP:function(){return Z}});var a,s=n(22928),i=n(15671),o=n(43144),r=n(97326),l=n(79340),c=n(6215),u=n(61120),d=n(4942),p=(n(57588),n(82211)),h=n(43345),f=n(96359),v=n(78657),m=n(59801);var Z=function(e){(0,l.Z)(f,e);var t,n,h=(t=f,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function f(e){var t;return(0,i.Z)(this,f),t=h.call(this,e),(0,d.Z)((0,r.Z)(t),"handleSuccess",(function(e){t.props.onSuccess(e),m.Z.hide()})),(0,d.Z)((0,r.Z)(t),"handleError",(function(e){t.props.onError(e)})),(0,d.Z)((0,r.Z)(t),"onBestAnswerChange",(function(e){t.changeValue("bestAnswer",e.target.value)})),(0,d.Z)((0,r.Z)(t),"onPollChange",(function(e){t.changeValue("poll",e.target.value)})),t.state={isLoading:!1,bestAnswer:"0",poll:"0"},t}return(0,o.Z)(f,[{key:"clean",value:function(){return!this.props.polls||"0"!==this.state.poll||window.confirm(gettext("Are you sure you want to delete all polls?"))}},{key:"send",value:function(){var e=Object.assign({},this.props.data,{best_answer:this.state.bestAnswer,poll:this.state.poll});return v.Z.post(this.props.api,e)}},{key:"render",value:function(){return(0,s.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,s.Z)("div",{className:"modal-content"},void 0,(0,s.Z)("div",{className:"modal-header"},void 0,(0,s.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,a||(a=(0,s.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,s.Z)("h4",{className:"modal-title"},void 0,gettext("Merge threads"))),(0,s.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,s.Z)("div",{className:"modal-body"},void 0,(0,s.Z)(g,{choices:this.props.bestAnswers,onChange:this.onBestAnswerChange,value:this.state.bestAnswer}),(0,s.Z)(b,{choices:this.props.polls,onChange:this.onPollChange,value:this.state.poll})),(0,s.Z)("div",{className:"modal-footer"},void 0,(0,s.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,s.Z)(p.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Merge threads"))))))}}]),f}(h.Z);function g(e){var t=e.choices,n=e.onChange,a=e.value;return t?(0,s.Z)(f.Z,{label:gettext("Best answer"),helpText:gettext("Please select the best answer for your newly merged thread. No posts will be deleted during the merge."),for:"id_best_answer"},void 0,(0,s.Z)("select",{className:"form-control",id:"id_best_answer",onChange:n,value:a},void 0,t.map((function(e){return(0,s.Z)("option",{value:e[0]},e[0],e[1])})))):null}function b(e){var t=e.choices,n=e.onChange,a=e.value;return t?(0,s.Z)(f.Z,{label:gettext("Poll"),helpText:gettext("Please select the poll for your newly merged thread. Rejected polls will be permanently deleted and cannot be recovered."),for:"id_poll"},void 0,(0,s.Z)("select",{className:"form-control",id:"id_poll",onChange:n,value:a},void 0,t.map((function(e){return(0,s.Z)("option",{value:e[0]},e[0],e[1])})))):null}},69092:function(e,t,n){"use strict";n.d(t,{Z:function(){return m}});var a=n(15671),s=n(43144),i=n(79340),o=n(6215),r=n(61120),l=n(57588),c=n.n(l),u=n(4942),d=n(19755),p=new RegExp("^.*(?:(?:youtu.be/|v/|vi/|u/w/|embed/)|(?:(?:watch)??v(?:i)?=|&v(?:i)?=))([^#&?]*).*"),h=new(function(){function e(){var t=this;(0,a.Z)(this,e),(0,u.Z)(this,"render",(function(e){e&&(t.highlightCode(e),t.embedYoutubePlayers(e))})),this._youtube={}}return(0,s.Z)(e,[{key:"highlightCode",value:function(e){for(var t=e.querySelectorAll("pre>code"),n=0;n<t.length;n++){var a=t[n];hljs.highlightBlock(a)}}},{key:"embedYoutubePlayers",value:function(e){for(var t=e.querySelectorAll("p>a"),n=0;n<t.length;n++){var a=t[n],s=1===a.parentNode.childNodes.length;this._youtube[a.href]||(this._youtube[a.href]=f(a.href));var i=this._youtube[a.href];s&&i&&!1!==i.data&&this.swapYoutubePlayer(a,i)}}},{key:"swapYoutubePlayer",value:function(e,t){var n="https://www.youtube.com/embed/";n+=t.video,n+="?rel=0",t.start&&(n+="&start="+t.start);var a=d('<iframe class="embed-responsive-item" src="'+n+'" allowfullscreen></iframe>');d(e).replaceWith(a),a.wrap('<div class="embed-responsive embed-responsive-16by9"></div>')}}]),e}());function f(e){var t=function(e){var t=e;return"https://"===e.substr(0,8)?t=t.substr(8):"http://"===e.substr(0,7)&&(t=t.substr(7)),"www."===t.substr(0,4)&&(t=t.substr(4)),t}(e),n=function(e){if(-1===e.indexOf("youtu"))return null;var t=e.match(p);return t?t[1]:null}(t);if(!n)return null;var a=0;if(t.indexOf("?")>0){var s=t.substr(t.indexOf("?")+1).split("&").filter((function(e){return"t="===e.substr(0,2)}))[0];if(s){var i=s.substr(2).split("m");"s"===i[0].substr(-1)?a+=parseInt(i[0].substr(0,i[0].length-1)):(a+=60*parseInt(i[0]),i[1]&&"s"===i[1].substr(-1)&&(a+=parseInt(i[1].substr(0,i[1].length-1))))}}return{start:a,video:n}}var v=n(19755);var m=function(e){(0,i.Z)(u,e);var t,n,l=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,r.Z)(t);if(n){var s=(0,r.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,o.Z)(this,e)});function u(){return(0,a.Z)(this,u),l.apply(this,arguments)}return(0,s.Z)(u,[{key:"componentDidMount",value:function(){h.render(this.documentNode),v(this.documentNode).find(".spoiler-reveal").click(Z)}},{key:"componentDidUpdate",value:function(e,t){h.render(this.documentNode),v(this.documentNode).find(".spoiler-reveal").click(Z)}},{key:"shouldComponentUpdate",value:function(e,t){return e.markup!==this.props.markup}},{key:"render",value:function(){var e=this;return c().createElement("article",{className:"misago-markup",dangerouslySetInnerHTML:{__html:this.props.markup},ref:function(t){e.documentNode=t}})}}]),u}(c().Component);function Z(e){var t=e.target;v(t).parent().parent().addClass("revealed")}},3784:function(e,t,n){"use strict";n.d(t,{Z:function(){return h}});var a,s=n(22928),i=n(15671),o=n(43144),r=n(79340),l=n(6215),c=n(61120),u=n(57588),d=n.n(u),p=n(37848);var h=function(e){(0,r.Z)(d,e);var t,n,u=(t=d,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function d(){return(0,i.Z)(this,d),u.apply(this,arguments)}return(0,o.Z)(d,[{key:"render",value:function(){return a||(a=(0,s.Z)("div",{className:"modal-body modal-loader"},void 0,(0,s.Z)(p.Z,{})))}}]),d}(d().Component)},30337:function(e,t,n){"use strict";n.d(t,{Z:function(){return c}});var a=n(22928),s=n(15671),i=n(43144),o=n(79340),r=n(6215),l=n(61120);n(57588);var c=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"getHelpText",value:function(){return this.props.helpText?(0,a.Z)("p",{className:"help-block"},void 0,this.props.helpText):null}},{key:"render",value:function(){return(0,a.Z)("div",{className:"modal-body"},void 0,(0,a.Z)("div",{className:"message-icon"},void 0,(0,a.Z)("span",{className:"material-icon"},void 0,this.props.icon||"info_outline")),(0,a.Z)("div",{className:"message-body"},void 0,(0,a.Z)("p",{className:"lead"},void 0,this.props.message),this.getHelpText(),(0,a.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,gettext("Ok"))))}}]),u}(n(33556).Z)},95187:function(e,t,n){"use strict";n.d(t,{Z:function(){return h}});var a,s=n(22928),i=n(15671),o=n(43144),r=n(79340),l=n(6215),c=n(61120),u=n(57588),d=n.n(u),p=n(37848);var h=function(e){(0,r.Z)(d,e);var t,n,u=(t=d,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function d(){return(0,i.Z)(this,d),u.apply(this,arguments)}return(0,o.Z)(d,[{key:"render",value:function(){return a||(a=(0,s.Z)("div",{className:"panel-body panel-body-loading"},void 0,(0,s.Z)(p.Z,{className:"loader loader-spaced"})))}}]),d}(d().Component)},33556:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var a=n(22928),s=n(15671),i=n(43144),o=n(79340),r=n(6215),l=n(61120),c=n(57588);var u=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"getHelpText",value:function(){return this.props.helpText?(0,a.Z)("p",{className:"help-block"},void 0,this.props.helpText):null}},{key:"render",value:function(){return(0,a.Z)("div",{className:"panel-body panel-message-body"},void 0,(0,a.Z)("div",{className:"message-icon"},void 0,(0,a.Z)("span",{className:"material-icon"},void 0,this.props.icon||"info_outline")),(0,a.Z)("div",{className:"message-body"},void 0,(0,a.Z)("p",{className:"lead"},void 0,this.props.message),this.getHelpText()))}}]),u}(n.n(c)().Component)},91876:function(e,t,n){"use strict";n.d(t,{n:function(){return me},y:function(){return ke}});var a,s=n(87462),i=n(15671),o=n(43144),r=n(97326),l=n(79340),c=n(6215),u=n(61120),d=n(4942),p=n(57588),h=n.n(p),f=n(30381),v=n.n(f),m=n(22928);function Z(e){return(0,m.Z)("div",{className:"poll-choices-bars"},void 0,e.poll.choices.map((function(t){return(0,m.Z)(g,{choice:t,poll:e.poll},t.hash)})))}function g(e){var t=0;return e.choice.votes&&e.poll.votes&&(t=Math.ceil(100*e.choice.votes/e.poll.votes)),(0,m.Z)("dl",{className:"dl-horizontal"},void 0,(0,m.Z)("dt",{},void 0,e.choice.label),(0,m.Z)("dd",{},void 0,(0,m.Z)("div",{className:"progress"},void 0,(0,m.Z)("div",{className:"progress-bar",role:"progressbar","aria-valuenow":t,"aria-valuemin":"0","aria-valuemax":"100",style:{width:t+"%"}},void 0,(0,m.Z)("span",{className:"sr-only"},void 0,y(e.votes,e.proc)))),(0,m.Z)("ul",{className:"list-unstyled list-inline poll-chart"},void 0,(0,m.Z)(b,{proc:t,votes:e.choice.votes}),(0,m.Z)(_,{selected:e.choice.selected}))))}function b(e){return(0,m.Z)("li",{className:"poll-chart-votes"},void 0,y(e.votes,e.proc))}function y(e,t){var n=ngettext("%(votes)s vote, %(proc)s% of total.","%(votes)s votes, %(proc)s% of total.",e);return interpolate(n,{votes:e,proc:t},!0)}function _(e){return e.selected?(0,m.Z)("li",{className:"poll-chart-selected"},void 0,a||(a=(0,m.Z)("span",{className:"material-icon"},void 0,"check_box")),gettext("Your choice.")):null}var N,k,x,w=n(30337),R=n(3784),C=n(78657);var S=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(e){var t;return(0,i.Z)(this,s),(t=a.call(this,e)).state={isLoading:!0,error:null,data:[]},t}return(0,o.Z)(s,[{key:"componentDidMount",value:function(){var e=this;C.Z.get(this.props.poll.api.votes).then((function(t){var n=t.map((function(e){return Object.assign({},e,{voters:e.voters.map((function(e){return Object.assign({},e,{voted_on:v()(e.voted_on)})}))})}));e.setState({isLoading:!1,data:n})}),(function(t){e.setState({isLoading:!1,error:t.detail})}))}},{key:"render",value:function(){return(0,m.Z)("div",{className:"modal-dialog"+(this.state.error?" modal-message":" modal-sm"),role:"document"},void 0,(0,m.Z)("div",{className:"modal-content"},void 0,(0,m.Z)("div",{className:"modal-header"},void 0,(0,m.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},void 0,N||(N=(0,m.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,m.Z)("h4",{className:"modal-title"},void 0,gettext("Poll votes"))),(0,m.Z)(E,{data:this.state.data,error:this.state.error,isLoading:this.state.isLoading})))}}]),s}(h().Component);function E(e){return e.isLoading?k||(k=(0,m.Z)(R.Z,{})):e.error?(0,m.Z)(w.Z,{icon:"error_outline",message:e.error}):(0,m.Z)(L,{data:e.data})}function L(e){return(0,m.Z)("div",{className:"modal-body modal-poll-votes"},void 0,(0,m.Z)("ul",{className:"list-unstyled votes-details"},void 0,e.data.map((function(e){return h().createElement(P,(0,s.Z)({key:e.hash},e))}))))}function P(e){return(0,m.Z)("li",{},void 0,(0,m.Z)("h4",{},void 0,e.label),(0,m.Z)(O,{votes:e.votes}),(0,m.Z)(T,{voters:e.voters}),x||(x=(0,m.Z)("hr",{})))}function O(e){var t=ngettext("%(votes)s user has voted for this choice.","%(votes)s users have voted for this choice.",e.votes),n=interpolate(t,{votes:e.votes},!0);return(0,m.Z)("p",{},void 0,n)}function T(e){return e.voters.length?(0,m.Z)("ul",{className:"list-unstyled"},void 0,e.voters.map((function(e){return h().createElement(A,(0,s.Z)({key:e.username},e))}))):null}function A(e){return e.url?(0,m.Z)("li",{},void 0,(0,m.Z)("a",{className:"item-title",href:e.url},void 0,e.username)," ",(0,m.Z)(B,{voted_on:e.voted_on})):(0,m.Z)("li",{},void 0,(0,m.Z)("strong",{},void 0,e.username)," ",(0,m.Z)(B,{voted_on:e.voted_on}))}function B(e){return(0,m.Z)("abbr",{className:"text-muted",title:e.voted_on.format("LLL")},void 0,e.voted_on.fromNow())}var I=n(59752),j=n(7738),D=n(59801),U=n(27950),M=n(53904),z=n(90287);function H(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,u.Z)(e);if(t){var s=(0,u.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,c.Z)(this,n)}}function F(e){var t=e.isPollOver,n=e.poll,a=e.showVoting,s=e.thread;if(!function(e,t,n){return n.is_public||t.can_delete||t.can_edit||t.can_see_votes||t.can_vote&&!e&&(!n.hasSelectedChoices||n.allow_revotes)}(t,n.acl,n))return null;var i=[],o=n.acl.can_vote,r=!n.hasSelectedChoices||n.allow_revotes;return o&&r&&i.push(0),(n.is_public||n.acl.can_see_votes)&&i.push(1),n.acl.can_edit&&i.push(2),n.acl.can_delete&&i.push(3),(0,m.Z)("div",{className:"row poll-options"},void 0,(0,m.Z)(Y,{controls:i,isPollOver:t,poll:n,showVoting:a}),(0,m.Z)(V,{controls:i,poll:n}),(0,m.Z)($,{controls:i,poll:n,thread:s}),(0,m.Z)(G,{controls:i,poll:n}))}function q(e,t){var n="col-xs-6";return 1===e.length&&(n="col-xs-12"),3===e.length&&e[0]===t&&(n="col-xs-12"),n+" col-sm-3 col-md-2"}function Y(e){var t=e.poll.acl.can_vote,n=!e.poll.hasSelectedChoices||e.poll.allow_revotes;return t&&n?(0,m.Z)("div",{className:q(e.controls,0)},void 0,(0,m.Z)("button",{className:"btn btn-default btn-block btn-sm",disabled:e.poll.isBusy,onClick:e.showVoting,type:"button"},void 0,gettext("Vote"))):null}var V=function(e){(0,l.Z)(n,e);var t=H(n);function n(){var e;(0,i.Z)(this,n);for(var a=arguments.length,s=new Array(a),o=0;o<a;o++)s[o]=arguments[o];return e=t.call.apply(t,[this].concat(s)),(0,d.Z)((0,r.Z)(e),"onClick",(function(){D.Z.show((0,m.Z)(S,{poll:e.props.poll}))})),e}return(0,o.Z)(n,[{key:"render",value:function(){return this.props.poll.is_public||this.props.poll.acl.can_see_votes?(0,m.Z)("div",{className:q(this.props.controls,1)},void 0,(0,m.Z)("button",{className:"btn btn-default btn-block btn-sm",disabled:this.props.poll.isBusy,onClick:this.onClick,type:"button"},void 0,gettext("See votes"))):null}}]),n}(h().Component),$=function(e){(0,l.Z)(n,e);var t=H(n);function n(){var e;(0,i.Z)(this,n);for(var a=arguments.length,s=new Array(a),o=0;o<a;o++)s[o]=arguments[o];return e=t.call.apply(t,[this].concat(s)),(0,d.Z)((0,r.Z)(e),"onClick",(function(){U.Z.open({submit:e.props.poll.api.index,thread:e.props.thread,poll:e.props.poll,mode:"POLL"})})),e}return(0,o.Z)(n,[{key:"render",value:function(){return this.props.poll.acl.can_edit?(0,m.Z)("div",{className:q(this.props.controls,2)},void 0,(0,m.Z)("button",{className:"btn btn-default btn-block btn-sm",disabled:this.props.poll.isBusy,onClick:this.onClick,type:"button"},void 0,gettext("Edit"))):null}}]),n}(h().Component),G=function(e){(0,l.Z)(n,e);var t=H(n);function n(){var e;(0,i.Z)(this,n);for(var a=arguments.length,s=new Array(a),o=0;o<a;o++)s[o]=arguments[o];return e=t.call.apply(t,[this].concat(s)),(0,d.Z)((0,r.Z)(e),"onClick",(function(){if(!window.confirm(gettext("Are you sure you want to delete this poll? This action is not reversible.")))return!1;z.Z.dispatch(I.n6()),C.Z.delete(e.props.poll.api.index).then(e.handleSuccess,e.handleError)})),(0,d.Z)((0,r.Z)(e),"handleSuccess",(function(e){M.Z.success("Poll has been deleted"),z.Z.dispatch(I.Od()),z.Z.dispatch(j.y8(e))})),(0,d.Z)((0,r.Z)(e),"handleError",(function(e){M.Z.apiError(e),z.Z.dispatch(I.Ar())})),e}return(0,o.Z)(n,[{key:"render",value:function(){return this.props.poll.acl.can_delete?(0,m.Z)("div",{className:q(this.props.controls,3)},void 0,(0,m.Z)("button",{className:"btn btn-default btn-block btn-sm",disabled:this.props.poll.isBusy,onClick:this.onClick,type:"button"},void 0,gettext("Delete"))):null}}]),n}(h().Component),W=n(89627),K='<abbr title="%(absolute)s">%(relative)s</abbr>';function J(e){return(0,m.Z)("ul",{className:"list-unstyled list-inline poll-details"},void 0,(0,m.Z)(ae,{votes:e.poll.votes}),(0,m.Z)(te,{poll:e.poll}),(0,m.Z)(se,{poll:e.poll}),(0,m.Z)(Q,{poll:e.poll}))}function Q(e){var t=interpolate((0,W.Z)(gettext("Posted by %(poster)s %(posted_on)s.")),{poster:X(e.poll),posted_on:ee(e.poll)},!0);return(0,m.Z)("li",{className:"poll-info-creation",dangerouslySetInnerHTML:{__html:t}})}function X(e){return e.url.poster?interpolate('<a href="%(url)s" class="item-title">%(user)s</a>',{url:(0,W.Z)(e.url.poster),user:(0,W.Z)(e.poster_name)},!0):interpolate('<span class="item-title">%(user)s</span>',{user:(0,W.Z)(e.poster_name)},!0)}function ee(e){return interpolate(K,{absolute:(0,W.Z)(e.posted_on.format("LLL")),relative:(0,W.Z)(e.posted_on.fromNow())},!0)}function te(e){if(!e.poll.length)return null;var t=interpolate((0,W.Z)(gettext("Voting ends %(ends_on)s.")),{ends_on:ne(e.poll)},!0);return(0,m.Z)("li",{className:"poll-info-ends-on",dangerouslySetInnerHTML:{__html:t}})}function ne(e){return interpolate(K,{absolute:(0,W.Z)(e.endsOn.format("LLL")),relative:(0,W.Z)(e.endsOn.fromNow())},!0)}function ae(e){var t=ngettext("%(votes)s vote.","%(votes)s votes.",e.votes),n=interpolate(t,{votes:e.votes},!0);return(0,m.Z)("li",{className:"poll-info-votes"},void 0,n)}function se(e){return e.poll.is_public?(0,m.Z)("li",{className:"poll-info-public"},void 0,gettext("Votes are public.")):null}function ie(e){return(0,m.Z)("div",{className:"panel panel-default panel-poll"},void 0,(0,m.Z)("div",{className:"panel-body"},void 0,(0,m.Z)("h2",{},void 0,e.poll.question),(0,m.Z)(J,{poll:e.poll}),(0,m.Z)(Z,{poll:e.poll}),(0,m.Z)(F,{isPollOver:e.isPollOver,poll:e.poll,showVoting:e.showVoting,thread:e.thread})))}function oe(e){return(0,m.Z)("ul",{className:"list-unstyled list-inline poll-help"},void 0,(0,m.Z)(re,{choicesLeft:e.choicesLeft}),(0,m.Z)(le,{poll:e.poll}))}function re(e){var t=e.choicesLeft;if(0===t)return(0,m.Z)("li",{className:"poll-help-choices-left"},void 0,gettext("You can't select any more choices."));var n=ngettext("You can select %(choices)s more choice.","You can select %(choices)s more choices.",t),a=interpolate(n,{choices:t},!0);return(0,m.Z)("li",{className:"poll-help-choices-left"},void 0,a)}function le(e){return e.poll.allow_revotes?(0,m.Z)("li",{className:"poll-help-allow-revotes"},void 0,gettext("You can change your vote later.")):(0,m.Z)("li",{className:"poll-help-no-revotes"},void 0,gettext("Votes are final."))}function ce(e){return(0,m.Z)("ul",{className:"list-unstyled poll-select-choices"},void 0,e.choices.map((function(t){return(0,m.Z)(ue,{choice:t,toggleChoice:e.toggleChoice},t.hash)})))}var ue=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(){var e;(0,i.Z)(this,s);for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return e=a.call.apply(a,[this].concat(n)),(0,d.Z)((0,r.Z)(e),"onClick",(function(){e.props.toggleChoice(e.props.choice.hash)})),e}return(0,o.Z)(s,[{key:"render",value:function(){return(0,m.Z)("li",{className:"poll-select-choice"},void 0,(0,m.Z)("button",{className:this.props.choice.selected?"btn btn-selected":"btn",onClick:this.onClick,type:"button"},void 0,(0,m.Z)("span",{className:"material-icon"},void 0,this.props.choice.selected?"check_box":"check_box_outline_blank"),(0,m.Z)("strong",{},void 0,this.props.choice.label)))}}]),s}(h().Component);function de(e,t){var n=[];for(var a in t){var s=t[a];s.selected&&n.push(s)}return e.allowed_choices-n.length}var pe=n(82211),he=n(43345);var fe=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(e){var t;return(0,i.Z)(this,s),t=a.call(this,e),(0,d.Z)((0,r.Z)(t),"toggleChoice",(function(e){var n,a=function(e,t){for(var n in e){var a=e[n];if(a.hash===t)return a}return null}(t.state.choices,e);n=a.selected?t.deselectChoice(a,e):t.selectChoice(a,e),t.setState({choices:n,choicesLeft:de(t.props.poll,n)})})),(0,d.Z)((0,r.Z)(t),"selectChoice",(function(e,n){if(!de(t.props.poll,t.state.choices))for(var a in t.state.choices.slice()){var s=t.state.choices[a];if(s.selected&&s.hash!=n){s.selected=!1;break}}return t.state.choices.map((function(e){return Object.assign({},e,{selected:e.hash==n||e.selected})}))})),(0,d.Z)((0,r.Z)(t),"deselectChoice",(function(e,n){return t.state.choices.map((function(e){return Object.assign({},e,{selected:e.hash!=n&&e.selected})}))})),t.state={isLoading:!1,choices:e.poll.choices,choicesLeft:de(e.poll,e.poll.choices)},t}return(0,o.Z)(s,[{key:"clean",value:function(){return this.state.choicesLeft!==this.props.poll.allowed_choices||(M.Z.error(gettext("You need to select at least one choice")),!1)}},{key:"send",value:function(){var e=[];for(var t in this.state.choices.slice()){var n=this.state.choices[t];n.selected&&e.push(n.hash)}return C.Z.post(this.props.poll.api.votes,e)}},{key:"handleSuccess",value:function(e){z.Z.dispatch(I.gx(e)),M.Z.success(gettext("Your vote has been saved.")),this.props.showResults()}},{key:"handleError",value:function(e){400===e.status?M.Z.error(e.detail):M.Z.apiError(e)}},{key:"render",value:function(){var e=[];return this.props.poll.acl.can_vote&&e.push(0),(this.props.poll.is_public||this.props.poll.acl.can_see_votes)&&e.push(1),this.props.poll.acl.can_edit&&e.push(2),this.props.poll.acl.can_delete&&e.push(3),(0,m.Z)("div",{className:"panel panel-default panel-poll"},void 0,(0,m.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,m.Z)("div",{className:"panel-body"},void 0,(0,m.Z)("h2",{},void 0,this.props.poll.question),(0,m.Z)(J,{poll:this.props.poll}),(0,m.Z)(ce,{choices:this.state.choices,toggleChoice:this.toggleChoice}),(0,m.Z)(oe,{choicesLeft:this.state.choicesLeft,poll:this.props.poll})),(0,m.Z)("div",{className:"panel-footer"},void 0,(0,m.Z)("div",{className:"row"},void 0,(0,m.Z)("div",{className:q(e,0)},void 0,(0,m.Z)(pe.Z,{className:"btn-primary btn-block btn-sm",loading:this.state.isLoading},void 0,gettext("Save your vote"))),(0,m.Z)("div",{className:q(e,1)},void 0,(0,m.Z)("button",{className:"btn btn-default btn-block btn-sm",disabled:this.state.isLoading,onClick:this.props.showResults,type:"button"},void 0,gettext("See results"))),(0,m.Z)($,{controls:e,poll:this.props.poll,thread:this.props.thread}),(0,m.Z)(G,{controls:e,poll:this.props.poll})))))}}]),s}(he.Z);var ve,me=function(e){(0,l.Z)(p,e);var t,n,a=(t=p,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function p(e){var t;(0,i.Z)(this,p),t=a.call(this,e),(0,d.Z)((0,r.Z)(t),"showResults",(function(){t.setState({showResults:!0})})),(0,d.Z)((0,r.Z)(t),"showVoting",(function(){t.setState({showResults:!1})}));var n=!0;return e.user.id&&!e.poll.hasSelectedChoices&&(n=!1),t.state={showResults:n},t}return(0,o.Z)(p,[{key:"render",value:function(){if(!this.props.thread.poll)return null;var e=function(e){return!!e.length&&v()().isAfter(e.endsOn)}(this.props.poll);return e||!this.props.poll.acl.can_vote||this.state.showResults?h().createElement(ie,(0,s.Z)({isPollOver:e,showVoting:this.showVoting},this.props)):h().createElement(fe,(0,s.Z)({showResults:this.showResults},this.props))}}]),p}(h().Component);function Ze(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,u.Z)(e);if(t){var s=(0,u.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,c.Z)(this,n)}}var ge=function(e){(0,l.Z)(n,e);var t=Ze(n);function n(){var e;(0,i.Z)(this,n);for(var a=arguments.length,s=new Array(a),o=0;o<a;o++)s[o]=arguments[o];return e=t.call.apply(t,[this].concat(s)),(0,d.Z)((0,r.Z)(e),"onAdd",(function(){var t=e.props.choices.slice();t.push({hash:ye(),label:""}),e.props.setChoices(t)})),(0,d.Z)((0,r.Z)(e),"onChange",(function(t,n){var a=e.props.choices.map((function(e){return e.hash===t&&(e.label=n),e}));e.props.setChoices(a)})),(0,d.Z)((0,r.Z)(e),"onDelete",(function(t){var n=e.props.choices.filter((function(e){return e.hash!==t}));e.props.setChoices(n)})),e}return(0,o.Z)(n,[{key:"render",value:function(){var e=this;return(0,m.Z)("div",{className:"poll-choices-control"},void 0,(0,m.Z)("ul",{className:"list-group"},void 0,this.props.choices.map((function(t){return(0,m.Z)(be,{canDelete:e.props.choices.length>2,choice:t,disabled:e.props.disabled,onChange:e.onChange,onDelete:e.onDelete},t.hash)}))),(0,m.Z)("button",{className:"btn btn-default btn-sm",disabled:this.props.disabled,onClick:this.onAdd,type:"button"},void 0,gettext("Add choice")))}}]),n}(h().Component),be=function(e){(0,l.Z)(n,e);var t=Ze(n);function n(){var e;(0,i.Z)(this,n);for(var a=arguments.length,s=new Array(a),o=0;o<a;o++)s[o]=arguments[o];return e=t.call.apply(t,[this].concat(s)),(0,d.Z)((0,r.Z)(e),"onChange",(function(t){e.props.onChange(e.props.choice.hash,t.target.value)})),(0,d.Z)((0,r.Z)(e),"onDelete",(function(){window.confirm(gettext("Are you sure you want to delete this choice?"))&&e.props.onDelete(e.props.choice.hash)})),e}return(0,o.Z)(n,[{key:"render",value:function(){return(0,m.Z)("li",{className:"list-group-item"},void 0,(0,m.Z)("button",{className:"btn",disabled:!this.props.canDelete||this.props.disabled,onClick:this.onDelete,title:gettext("Delete this choice"),type:"button"},void 0,ve||(ve=(0,m.Z)("span",{className:"material-icon"},void 0,"close"))),(0,m.Z)("input",{disabled:this.props.disabled,maxLength:"255",placeholder:gettext("choice label"),type:"text",onChange:this.onChange,value:this.props.choice.label}))}}]),n}(h().Component);function ye(){for(var e="";12!=e.length;)e=Math.random().toString(36).replace(/[^a-zA-Z0-9]+/g,"").substr(1,12);return e}var _e=n(96359),Ne=n(7227);var ke=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(e){var t;(0,i.Z)(this,s),t=a.call(this,e),(0,d.Z)((0,r.Z)(t),"setChoices",(function(e){var n=Object.assign({},n,{choices:null});t.setState({choices:e,errors:n})})),(0,d.Z)((0,r.Z)(t),"onCancel",(function(){window.confirm(gettext("Are you sure you want to discard poll?"))&&U.Z.close()}));var n=e.poll||{question:"",choices:[{hash:"choice-10000",label:""},{hash:"choice-20000",label:""}],length:0,allowed_choices:1,allow_revotes:0,is_public:0};return t.state={isLoading:!1,isEdit:!!n.question,question:n.question,choices:n.choices,length:n.length,allowed_choices:n.allowed_choices,allow_revotes:n.allow_revotes,is_public:n.is_public,validators:{question:[],choices:[],length:[],allowed_choices:[]},errors:{}},t}return(0,o.Z)(s,[{key:"send",value:function(){var e={question:this.state.question,choices:this.state.choices,length:this.state.length,allowed_choices:this.state.allowed_choices,allow_revotes:this.state.allow_revotes,is_public:this.state.is_public};return this.state.isEdit?C.Z.put(this.props.poll.api.index,e):C.Z.post(this.props.thread.api.poll,e)}},{key:"handleSuccess",value:function(e){z.Z.dispatch(I.gx(e)),this.state.isEdit?M.Z.success(gettext("Poll has been edited.")):M.Z.success(gettext("Poll has been posted.")),U.Z.close()}},{key:"handleError",value:function(e){400===e.status?(e.non_field_errors&&(e.allowed_choices=e.non_field_errors),this.setState({errors:Object.assign({},e)}),M.Z.error(gettext("Form contains errors."))):M.Z.apiError(e)}},{key:"render",value:function(){return(0,m.Z)("div",{className:"poll-form"},void 0,(0,m.Z)("div",{className:"container"},void 0,(0,m.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,m.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,m.Z)("div",{className:"panel-body"},void 0,(0,m.Z)("fieldset",{},void 0,(0,m.Z)("legend",{},void 0,gettext("Question and choices")),(0,m.Z)(_e.Z,{label:gettext("Poll question"),for:"id_questions",validation:this.state.errors.question},void 0,(0,m.Z)("input",{className:"form-control",disabled:this.state.isLoading,id:"id_questions",onChange:this.bindInput("question"),type:"text",maxLength:"255",value:this.state.question})),(0,m.Z)(_e.Z,{label:gettext("Available choices"),validation:this.state.errors.choices},void 0,(0,m.Z)(ge,{choices:this.state.choices,disabled:this.state.isLoading,setChoices:this.setChoices}))),(0,m.Z)("fieldset",{},void 0,(0,m.Z)("legend",{},void 0,gettext("Voting")),(0,m.Z)("div",{className:"row"},void 0,(0,m.Z)("div",{className:"col-xs-12 col-sm-6"},void 0,(0,m.Z)(_e.Z,{label:gettext("Poll length"),helpText:gettext("Enter number of days for which voting in this poll should be possible or zero to run this poll indefinitely."),for:"id_length",validation:this.state.errors.length},void 0,(0,m.Z)("input",{className:"form-control",disabled:this.state.isLoading,id:"id_length",onChange:this.bindInput("length"),type:"text",value:this.state.length}))),(0,m.Z)("div",{className:"col-xs-12 col-sm-6"},void 0,(0,m.Z)(_e.Z,{label:gettext("Allowed choices"),for:"id_allowed_choices",validation:this.state.errors.allowed_choices},void 0,(0,m.Z)("input",{className:"form-control",disabled:this.state.isLoading,id:"id_allowed_choices",onChange:this.bindInput("allowed_choices"),type:"text",maxLength:"255",value:this.state.allowed_choices})))),(0,m.Z)("div",{className:"row"},void 0,(0,m.Z)(xe,{bindInput:this.bindInput,disabled:this.state.isLoading,isEdit:this.state.isEdit,value:this.state.is_public}),(0,m.Z)("div",{className:"col-xs-12 col-sm-6"},void 0,(0,m.Z)(_e.Z,{label:gettext("Allow vote changes"),for:"id_allow_revotes"},void 0,(0,m.Z)(Ne.Z,{id:"id_allow_revotes",disabled:this.state.isLoading,iconOn:"check",iconOff:"close",labelOn:gettext("Allow participants to change their vote"),labelOff:gettext("Don't allow participants to change their vote"),onChange:this.bindInput("allow_revotes"),value:this.state.allow_revotes})))))),(0,m.Z)("div",{className:"panel-footer text-right"},void 0,(0,m.Z)("button",{className:"btn btn-default",disabled:this.state.isLoading,onClick:this.onCancel,type:"button"},void 0,gettext("Cancel"))," ",(0,m.Z)(pe.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,this.state.isEdit?gettext("Save changes"):gettext("Post poll")))))))}}]),s}(he.Z);function xe(e){return e.isEdit?null:(0,m.Z)("div",{className:"col-xs-12 col-sm-6"},void 0,(0,m.Z)(_e.Z,{label:gettext("Make voting public"),helpText:gettext("Making voting public will allow everyone to access detailed list of votes, showing which users voted for which choices and at which times. This option can't be changed after poll's creation. Moderators may see voting details for all polls."),for:"id_is_public"},void 0,(0,m.Z)(Ne.Z,{id:"id_is_public",disabled:e.disabled,iconOn:"visibility",iconOff:"visibility_off",labelOn:gettext("Votes are public"),labelOff:gettext("Votes are hidden"),onChange:e.bindInput("is_public"),value:e.value})))}},11005:function(e,t,n){"use strict";n.d(t,{Z:function(){return x}});var a=n(22928),s=n(57588),i=n.n(s),o=n(69092);function r(e){return e.post.content?i().createElement(l,e):i().createElement(c,e)}function l(e){return(0,a.Z)("div",{className:"post-body"},void 0,(0,a.Z)(o.Z,{markup:e.post.content}))}function c(e){return(0,a.Z)("div",{className:"post-body post-body-invalid"},void 0,(0,a.Z)("p",{className:"lead"},void 0,gettext("This post's contents cannot be displayed.")),(0,a.Z)("p",{className:"text-muted"},void 0,gettext("This error is caused by invalid post content manipulation.")))}function u(e){var t=e.post,n=t.category,s=t.thread,i=interpolate(gettext("posted %(posted_on)s"),{posted_on:t.posted_on.format("LL, LT")},!0);return(0,a.Z)("div",{className:"post-heading"},void 0,(0,a.Z)("a",{className:"btn btn-link item-title",href:s.url},void 0,s.title),(0,a.Z)("a",{className:"btn btn-link post-category",href:n.url.index},void 0,n.name),(0,a.Z)("a",{href:t.url.index,className:"btn btn-link posted-on",title:i},void 0,t.posted_on.fromNow()))}var d,p,h=n(19605);function f(e){var t=e.post;return(0,a.Z)("a",{className:"btn btn-default btn-icon pull-right",href:t.url.index},void 0,(0,a.Z)("span",{className:"btn-text-left hidden-xs"},void 0,gettext("See post")),d||(d=(0,a.Z)("span",{className:"material-icon"},void 0,"chevron_right")))}function v(e){var t=e.post;return(0,a.Z)("div",{className:"post-side post-side-anonymous"},void 0,(0,a.Z)(f,{post:t}),(0,a.Z)("div",{className:"media"},void 0,p||(p=(0,a.Z)("div",{className:"media-left"},void 0,(0,a.Z)("span",{},void 0,(0,a.Z)(h.ZP,{className:"poster-avatar",size:50})))),(0,a.Z)("div",{className:"media-body"},void 0,(0,a.Z)("div",{className:"media-heading"},void 0,(0,a.Z)("span",{className:"item-title"},void 0,t.poster_name)),(0,a.Z)("span",{className:"user-title user-title-anonymous"},void 0,gettext("Removed user")))))}function m(e){var t=e.rank,n=e.title||t.title||t.name,s="user-title";return t.css_class&&(s+=" user-title-"+t.css_class),t.is_tab?(0,a.Z)("a",{className:s,href:t.url},void 0,n):(0,a.Z)("span",{className:s},void 0,n)}function Z(e){var t=e.post,n=e.poster;return(0,a.Z)("div",{className:"post-side post-side-registered"},void 0,(0,a.Z)(f,{post:t}),(0,a.Z)("div",{className:"media"},void 0,(0,a.Z)("div",{className:"media-left"},void 0,(0,a.Z)("a",{href:n.url},void 0,(0,a.Z)(h.ZP,{className:"poster-avatar",size:50,user:n}))),(0,a.Z)("div",{className:"media-body"},void 0,(0,a.Z)("div",{className:"media-heading"},void 0,(0,a.Z)("a",{className:"item-title",href:n.url},void 0,n.username)),(0,a.Z)(m,{title:n.title,rank:n.rank}))))}function g(e){var t=e.post,n=e.poster;return n&&n.id?(0,a.Z)(Z,{post:t,poster:n}):(0,a.Z)(v,{post:t})}function b(e){var t=e.post,n=e.poster||t.poster,s="post";return n&&n.rank.css_class&&(s+=" post-"+n.rank.css_class),(0,a.Z)("li",{className:s,id:"post-"+t.id},void 0,(0,a.Z)("div",{className:"panel panel-default panel-post"},void 0,(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)("div",{className:"panel-content"},void 0,(0,a.Z)(g,{post:t,poster:n}),(0,a.Z)(u,{post:t}),(0,a.Z)(r,{post:t})))))}var y,_,N=n(44039);function k(){return(0,a.Z)("ul",{className:"posts-list post-feed ui-preview"},void 0,(0,a.Z)("li",{className:"post"},void 0,(0,a.Z)("div",{className:"panel panel-default panel-post"},void 0,(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)("div",{className:"post-side post-side-anonymous"},void 0,(0,a.Z)("div",{className:"media"},void 0,y||(y=(0,a.Z)("div",{className:"media-left"},void 0,(0,a.Z)("span",{},void 0,(0,a.Z)(h.ZP,{className:"poster-avatar",size:50})))),(0,a.Z)("div",{className:"media-body"},void 0,(0,a.Z)("div",{className:"media-heading"},void 0,(0,a.Z)("span",{className:"item-title"},void 0,(0,a.Z)("span",{className:"ui-preview-text",style:{width:N.e(30,200)+"px"}},void 0," "))),(0,a.Z)("span",{className:"user-title user-title-anonymous"},void 0,(0,a.Z)("span",{className:"ui-preview-text",style:{width:N.e(30,200)+"px"}},void 0," "))))),(0,a.Z)("div",{className:"post-heading"},void 0,(0,a.Z)("span",{className:"ui-preview-text",style:{width:N.e(30,200)+"px"}},void 0," ")),(0,a.Z)("div",{className:"post-body"},void 0,(0,a.Z)("article",{className:"misago-markup"},void 0,(0,a.Z)("p",{},void 0,(0,a.Z)("span",{className:"ui-preview-text",style:{width:N.e(30,200)+"px"}},void 0," ")," ",(0,a.Z)("span",{className:"ui-preview-text",style:{width:N.e(30,200)+"px"}},void 0," ")," ",(0,a.Z)("span",{className:"ui-preview-text",style:{width:N.e(30,200)+"px"}},void 0," "))))))))}function x(e){var t=e.isReady,n=e.posts,s=e.poster;return t?(0,a.Z)("ul",{className:"posts-list post-feed ui-ready"},void 0,n.map((function(e){return(0,a.Z)(b,{post:e,poster:s},e.id)}))):_||(_=(0,a.Z)(k,{}))}},12891:function(e,t,n){"use strict";n.d(t,{Jh:function(){return o},jn:function(){return i}});var a=n(55210),s=n(32233);function i(){return[(0,a.Ei)(s.Z.get("SETTINGS").thread_title_length_min,(function(e,t){var n=ngettext("Thread title should be at least %(limit_value)s character long (it has %(show_value)s).","Thread title should be at least %(limit_value)s characters long (it has %(show_value)s).",e);return interpolate(n,{limit_value:e,show_value:t},!0)})),(0,a.BS)(s.Z.get("SETTINGS").thread_title_length_max,(function(e,t){var n=ngettext("Thread title cannot be longer than %(limit_value)s character (it has %(show_value)s).","Thread title cannot be longer than %(limit_value)s characters (it has %(show_value)s).",e);return interpolate(n,{limit_value:e,show_value:t},!0)}))]}function o(){return s.Z.get("SETTINGS").post_length_max?[r(),(0,a.BS)(s.Z.get("SETTINGS").post_length_max||1e6,(function(e,t){var n=ngettext("Posted message cannot be longer than %(limit_value)s character (it has %(show_value)s).","Posted message cannot be longer than %(limit_value)s characters (it has %(show_value)s).",e);return interpolate(n,{limit_value:e,show_value:t},!0)}))]:[r()]}function r(){return(0,a.Ei)(s.Z.get("SETTINGS").post_length_min,(function(e,t){var n=ngettext("Posted message should be at least %(limit_value)s character long (it has %(show_value)s).","Posted message should be at least %(limit_value)s characters long (it has %(show_value)s).",e);return interpolate(n,{limit_value:e,show_value:t},!0)}))}},60471:function(e,t,n){"use strict";n.d(t,{Z:function(){return p}});var a=n(22928),s=n(15671),i=n(43144),o=n(97326),r=n(79340),l=n(6215),c=n(61120),u=n(4942),d=n(57588);var p=function(e){(0,r.Z)(p,e);var t,n,d=(t=p,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function p(){var e;(0,s.Z)(this,p);for(var t=arguments.length,n=new Array(t),a=0;a<t;a++)n[a]=arguments[a];return e=d.call.apply(d,[this].concat(n)),(0,u.Z)((0,o.Z)(e),"change",(function(t){return function(){e.props.onChange({target:{value:t}})}})),e}return(0,i.Z)(p,[{key:"getChoice",value:function(){var e=this,t=null;return this.props.choices.map((function(n){n.value===e.props.value&&(t=n)})),t}},{key:"getIcon",value:function(){return this.getChoice().icon}},{key:"getLabel",value:function(){return this.getChoice().label}},{key:"render",value:function(){var e=this;return(0,a.Z)("div",{className:"btn-group btn-select-group"},void 0,(0,a.Z)("button",{type:"button",className:"btn btn-select dropdown-toggle",id:this.props.id||null,"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-describedby":this.props["aria-describedby"]||null,disabled:this.props.disabled||!1},void 0,(0,a.Z)(h,{icon:this.getIcon()}),this.getLabel()),(0,a.Z)("ul",{className:"dropdown-menu"},void 0,this.props.choices.map((function(t,n){return(0,a.Z)("li",{},n,(0,a.Z)("button",{type:"button",className:"btn-link",onClick:e.change(t.value)},void 0,(0,a.Z)(h,{icon:t.icon}),t.label))}))))}}]),p}(n.n(d)().Component);function h(e){var t=e.icon;return t?(0,a.Z)("span",{className:"material-icon"},void 0,t):null}},14467:function(e,t,n){"use strict";n.d(t,{Z:function(){return b}});var a,s=n(22928),i=n(15671),o=n(43144),r=n(79340),l=n(6215),c=n(61120),u=(n(57588),n(32233)),d=n(82211),p=n(43345),h=n(47235),f=n(78657),v=n(59801),m=n(53904),Z=n(93051),g=n(19755);var b=function(e){(0,r.Z)(b,e);var t,n,p=(t=b,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function b(e){var t;return(0,i.Z)(this,b),(t=p.call(this,e)).state={isLoading:!1,showActivation:!1,username:"",password:"",validators:{username:[],password:[]}},t}return(0,o.Z)(b,[{key:"clean",value:function(){return!!this.isValid()||(m.Z.error(gettext("Fill out both fields.")),!1)}},{key:"send",value:function(){return f.Z.post(u.Z.get("AUTH_API"),{username:this.state.username,password:this.state.password})}},{key:"handleSuccess",value:function(){var e=g("#hidden-login-form");e.append('<input type="text" name="username" />'),e.append('<input type="password" name="password" />'),e.find('input[type="hidden"]').val(f.Z.getCsrfToken()),e.find('input[name="redirect_to"]').val(window.location.pathname),e.find('input[name="username"]').val(this.state.username),e.find('input[name="password"]').val(this.state.password),e.submit(),this.setState({isLoading:!0})}},{key:"handleError",value:function(e){400===e.status?"inactive_admin"===e.code?m.Z.info(e.detail):"inactive_user"===e.code?(m.Z.info(e.detail),this.setState({showActivation:!0})):"banned"===e.code?((0,Z.Z)(e.detail),v.Z.hide()):m.Z.error(e.detail):403===e.status&&e.ban?((0,Z.Z)(e.ban),v.Z.hide()):m.Z.apiError(e)}},{key:"getActivationButton",value:function(){return this.state.showActivation?(0,s.Z)("a",{className:"btn btn-success btn-block",href:u.Z.get("REQUEST_ACTIVATION_URL")},void 0,gettext("Activate account")):null}},{key:"render",value:function(){return(0,s.Z)("div",{className:"modal-dialog modal-sm modal-sign-in",role:"document"},void 0,(0,s.Z)("div",{className:"modal-content"},void 0,(0,s.Z)("div",{className:"modal-header"},void 0,(0,s.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,a||(a=(0,s.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,s.Z)("h4",{className:"modal-title"},void 0,gettext("Sign in"))),(0,s.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,s.Z)("div",{className:"modal-body"},void 0,(0,s.Z)(h.Z,{buttonLabel:gettext("Sign in with %(site)s"),formLabel:gettext("Or use your forum account:"),labelClassName:"text-center"}),(0,s.Z)("div",{className:"form-group"},void 0,(0,s.Z)("div",{className:"control-input"},void 0,(0,s.Z)("input",{className:"form-control input-lg",disabled:this.state.isLoading,id:"id_username",onChange:this.bindInput("username"),placeholder:gettext("Username or e-mail"),type:"text",value:this.state.username}))),(0,s.Z)("div",{className:"form-group"},void 0,(0,s.Z)("div",{className:"control-input"},void 0,(0,s.Z)("input",{className:"form-control input-lg",disabled:this.state.isLoading,id:"id_password",onChange:this.bindInput("password"),placeholder:gettext("Password"),type:"password",value:this.state.password})))),(0,s.Z)("div",{className:"modal-footer"},void 0,this.getActivationButton(),(0,s.Z)(d.Z,{className:"btn-primary btn-block",loading:this.state.isLoading},void 0,gettext("Sign in")),(0,s.Z)("a",{className:"btn btn-default btn-block",href:u.Z.get("FORGOTTEN_PASSWORD_URL")},void 0,gettext("Forgot password?"))))))}}]),b}(p.Z)},24678:function(e,t,n){"use strict";n.d(t,{Jj:function(){return h},ZP:function(){return p},pg:function(){return f}});var a=n(22928),s=n(15671),i=n(43144),o=n(79340),r=n(6215),l=n(61120),c=n(57588),u=n.n(c);function d(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,l.Z)(e);if(t){var s=(0,l.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,r.Z)(this,n)}}var p=function(e){(0,o.Z)(n,e);var t=d(n);function n(){return(0,s.Z)(this,n),t.apply(this,arguments)}return(0,i.Z)(n,[{key:"getClass",value:function(){return e=this.props.status,t="",e.is_banned?t="banned":e.is_hidden?t="offline":e.is_online_hidden?t="online":e.is_offline_hidden?t="offline":e.is_online?t="online":e.is_offline&&(t="offline"),"user-status user-"+t;var e,t}},{key:"render",value:function(){return(0,a.Z)("span",{className:this.getClass()},void 0,this.props.children)}}]),n}(u().Component),h=function(e){(0,o.Z)(n,e);var t=d(n);function n(){return(0,s.Z)(this,n),t.apply(this,arguments)}return(0,i.Z)(n,[{key:"getIcon",value:function(){return this.props.status.is_banned?"remove_circle_outline":this.props.status.is_hidden?"help_outline":this.props.status.is_online_hidden?"label":this.props.status.is_offline_hidden?"label_outline":this.props.status.is_online?"lens":this.props.status.is_offline?"panorama_fish_eye":void 0}},{key:"render",value:function(){return(0,a.Z)("span",{className:"material-icon status-icon"},void 0,this.getIcon())}}]),n}(u().Component),f=function(e){(0,o.Z)(n,e);var t=d(n);function n(){return(0,s.Z)(this,n),t.apply(this,arguments)}return(0,i.Z)(n,[{key:"getHelp",value:function(){return e=this.props.user,(t=this.props.status).is_banned?t.banned_until?interpolate(gettext("%(username)s is banned until %(ban_expires)s"),{username:e.username,ban_expires:t.banned_until.format("LL, LT")},!0):interpolate(gettext("%(username)s is banned"),{username:e.username},!0):t.is_hidden?interpolate(gettext("%(username)s is hiding presence"),{username:e.username},!0):t.is_online_hidden?interpolate(gettext("%(username)s is online (hidden)"),{username:e.username},!0):t.is_offline_hidden?interpolate(gettext("%(username)s was last seen %(last_click)s (hidden)"),{username:e.username,last_click:t.last_click.fromNow()},!0):t.is_online?interpolate(gettext("%(username)s is online"),{username:e.username},!0):t.is_offline?interpolate(gettext("%(username)s was last seen %(last_click)s"),{username:e.username,last_click:t.last_click.fromNow()},!0):void 0;var e,t}},{key:"getLabel",value:function(){return this.props.status.is_banned?gettext("Banned"):this.props.status.is_hidden?gettext("Hidden"):this.props.status.is_online_hidden?gettext("Online (hidden)"):this.props.status.is_offline_hidden?gettext("Offline (hidden)"):this.props.status.is_online?gettext("Online"):this.props.status.is_offline?gettext("Offline"):void 0}},{key:"render",value:function(){return(0,a.Z)("span",{className:this.props.className||"status-label",title:this.getHelp()},void 0,this.getLabel())}}]),n}(u().Component)},7850:function(e,t,n){"use strict";n.d(t,{Z:function(){return k}});var a=n(22928),s=n(15671),i=n(43144),o=n(79340),r=n(6215),l=n(61120),c=n(57588),u=n.n(c);var d,p,h=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"getEmptyMessage",value:function(){return this.props.emptyMessage?this.props.emptyMessage:gettext("No name changes have been recorded for your account.")}},{key:"render",value:function(){return(0,a.Z)("div",{className:"username-history ui-ready"},void 0,(0,a.Z)("ul",{className:"list-group"},void 0,(0,a.Z)("li",{className:"list-group-item empty-message"},void 0,this.getEmptyMessage())))}}]),u}(u().Component),f=n(19605);var v=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"renderUserAvatar",value:function(){return this.props.change.changed_by?(0,a.Z)("a",{href:this.props.change.changed_by.url,className:"user-avatar-wrapper"},void 0,(0,a.Z)(f.ZP,{user:this.props.change.changed_by,size:"100"})):d||(d=(0,a.Z)("span",{className:"user-avatar-wrapper"},void 0,(0,a.Z)(f.ZP,{size:"100"})))}},{key:"renderUsername",value:function(){return this.props.change.changed_by?(0,a.Z)("a",{href:this.props.change.changed_by.url,className:"item-title"},void 0,this.props.change.changed_by.username):(0,a.Z)("span",{className:"item-title"},void 0,this.props.change.changed_by_username)}},{key:"render",value:function(){return(0,a.Z)("li",{className:"list-group-item"},this.props.change.id,(0,a.Z)("div",{className:"change-avatar"},void 0,this.renderUserAvatar()),(0,a.Z)("div",{className:"change-author"},void 0,this.renderUsername()),(0,a.Z)("div",{className:"change"},void 0,(0,a.Z)("span",{className:"old-username"},void 0,this.props.change.old_username),p||(p=(0,a.Z)("span",{className:"material-icon"},void 0,"arrow_forward")),(0,a.Z)("span",{className:"new-username"},void 0,this.props.change.new_username)),(0,a.Z)("div",{className:"change-date"},void 0,(0,a.Z)("abbr",{title:this.props.change.changed_on.format("LLL")},void 0,this.props.change.changed_on.fromNow())))}}]),u}(u().Component);var m,Z,g=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"render",value:function(){return(0,a.Z)("div",{className:"username-history ui-ready"},void 0,(0,a.Z)("ul",{className:"list-group"},void 0,this.props.changes.map((function(e){return(0,a.Z)(v,{change:e},e.id)}))))}}]),u}(u().Component),b=n(44039);var y=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"shouldComponentUpdate",value:function(){return!1}},{key:"getClassName",value:function(){return this.props.hiddenOnMobile?"list-group-item hidden-xs hidden-sm":"list-group-item"}},{key:"render",value:function(){return(0,a.Z)("li",{className:this.getClassName()},void 0,m||(m=(0,a.Z)("div",{className:"change-avatar"},void 0,(0,a.Z)("span",{className:"user-avatar"},void 0,(0,a.Z)(f.ZP,{size:"100"})))),(0,a.Z)("div",{className:"change-author"},void 0,(0,a.Z)("span",{className:"ui-preview-text",style:{width:b.e(30,100)+"px"}},void 0," ")),(0,a.Z)("div",{className:"change"},void 0,(0,a.Z)("span",{className:"ui-preview-text",style:{width:b.e(30,70)+"px"}},void 0," "),Z||(Z=(0,a.Z)("span",{className:"material-icon"},void 0,"arrow_forward")),(0,a.Z)("span",{className:"ui-preview-text",style:{width:b.e(30,70)+"px"}},void 0," ")),(0,a.Z)("div",{className:"change-date"},void 0,(0,a.Z)("span",{className:"ui-preview-text",style:{width:b.e(80,140)+"px"}},void 0," ")))}}]),u}(u().Component);var _,N=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"shouldComponentUpdate",value:function(){return!1}},{key:"render",value:function(){return(0,a.Z)("div",{className:"username-history ui-preview"},void 0,(0,a.Z)("ul",{className:"list-group"},void 0,[0,1,2].map((function(e){return(0,a.Z)(y,{hiddenOnMobile:e>0},e)}))))}}]),u}(u().Component);var k=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"render",value:function(){return this.props.isLoaded?this.props.changes.length?(0,a.Z)(g,{changes:this.props.changes}):(0,a.Z)(h,{emptyMessage:this.props.emptyMessage}):_||(_=(0,a.Z)(N,{}))}}]),u}(u().Component)},40429:function(e,t,n){"use strict";n.d(t,{Z:function(){return L}});var a,s=n(22928),i=n(57588),o=n.n(i),r=n(19605),l=n(24678);function c(e){var t=e.showStatus,n=e.user;return(0,s.Z)("ul",{className:"list-unstyled"},void 0,(0,s.Z)(u,{showStatus:t,user:n}),(0,s.Z)(d,{user:n}),a||(a=(0,s.Z)("li",{className:"user-stat-divider"})),(0,s.Z)(p,{user:n}),(0,s.Z)(h,{user:n}),(0,s.Z)(f,{user:n}))}function u(e){var t=e.showStatus,n=e.user;return t?(0,s.Z)("li",{className:"user-stat-status"},void 0,(0,s.Z)(l.ZP,{status:n.status},void 0,(0,s.Z)(l.pg,{status:n.status,user:n}))):null}function d(e){var t=e.user.joined_on,n=interpolate(gettext("Joined on %(joined_on)s"),{joined_on:t.format("LL, LT")},!0),a=interpolate(gettext("Joined %(joined_on)s"),{joined_on:t.fromNow()},!0);return(0,s.Z)("li",{className:"user-stat-join-date"},void 0,(0,s.Z)("abbr",{title:n},void 0,a))}function p(e){var t=e.user,n=v("user-stat-posts",t.posts),a=ngettext("%(posts)s post","%(posts)s posts",t.posts);return(0,s.Z)("li",{className:n},void 0,interpolate(a,{posts:t.posts},!0))}function h(e){var t=e.user,n=v("user-stat-threads",t.threads),a=ngettext("%(threads)s thread","%(threads)s threads",t.threads);return(0,s.Z)("li",{className:n},void 0,interpolate(a,{threads:t.threads},!0))}function f(e){var t=e.user,n=v("user-stat-followers",t.followers),a=ngettext("%(followers)s follower","%(followers)s followers",t.followers);return(0,s.Z)("li",{className:n},void 0,interpolate(a,{followers:t.followers},!0))}function v(e,t){return 0===t?e+" user-stat-empty":e}function m(e){var t=e.rank,n=e.title||t.title||t.name,a="user-title";return t.css_class&&(a+=" user-title-"+t.css_class),t.is_tab?(0,s.Z)("a",{className:a,href:t.url},void 0,n):(0,s.Z)("span",{className:a},void 0,n)}function Z(e){var t=e.showStatus,n=e.user,a=n.rank,i="panel user-card";return a.css_class&&(i+=" user-card-"+a.css_class),(0,s.Z)("div",{className:i},void 0,(0,s.Z)("div",{className:"panel-body"},void 0,(0,s.Z)("div",{className:"row"},void 0,(0,s.Z)("div",{className:"col-xs-3 user-card-left"},void 0,(0,s.Z)("div",{className:"user-card-small-avatar"},void 0,(0,s.Z)("a",{href:n.url},void 0,(0,s.Z)(r.ZP,{size:"50",size2x:"80",user:n})))),(0,s.Z)("div",{className:"col-xs-9 col-sm-12 user-card-body"},void 0,(0,s.Z)("div",{className:"user-card-avatar"},void 0,(0,s.Z)("a",{href:n.url},void 0,(0,s.Z)(r.ZP,{size:"150",size2x:"200",user:n}))),(0,s.Z)("div",{className:"user-card-username"},void 0,(0,s.Z)("a",{href:n.url},void 0,n.username)),(0,s.Z)("div",{className:"user-card-title"},void 0,(0,s.Z)(m,{rank:a,title:n.title})),(0,s.Z)("div",{className:"user-card-stats"},void 0,(0,s.Z)(c,{showStatus:t,user:n}))))))}var g,b,y,_=n(15671),N=n(43144),k=n(79340),x=n(6215),w=n(61120),R=n(44039);var C,S=function(e){(0,k.Z)(i,e);var t,n,a=(t=i,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,w.Z)(t);if(n){var s=(0,w.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,x.Z)(this,e)});function i(){return(0,_.Z)(this,i),a.apply(this,arguments)}return(0,N.Z)(i,[{key:"shouldComponentUpdate",value:function(){return!1}},{key:"render",value:function(){return(0,s.Z)("div",{className:"panel user-card user-card-preview"},void 0,(0,s.Z)("div",{className:"panel-body"},void 0,(0,s.Z)("div",{className:"row"},void 0,g||(g=(0,s.Z)("div",{className:"col-xs-3 user-card-left"},void 0,(0,s.Z)("div",{className:"user-card-small-avatar"},void 0,(0,s.Z)("span",{},void 0,(0,s.Z)(r.ZP,{size:"50",size2x:"80"}))))),(0,s.Z)("div",{className:"col-xs-9 col-sm-12 user-card-body"},void 0,b||(b=(0,s.Z)("div",{className:"user-card-avatar"},void 0,(0,s.Z)("span",{},void 0,(0,s.Z)(r.ZP,{size:"150",size2x:"200"})))),(0,s.Z)("div",{className:"user-card-username"},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:R.e(60,150)+"px"}},void 0," ")),(0,s.Z)("div",{className:"user-card-title"},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:R.e(60,150)+"px"}},void 0," ")),(0,s.Z)("div",{className:"user-card-stats"},void 0,(0,s.Z)("ul",{className:"list-unstyled"},void 0,(0,s.Z)("li",{},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:R.e(30,70)+"px"}},void 0," ")),(0,s.Z)("li",{},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:R.e(30,70)+"px"}},void 0," ")),y||(y=(0,s.Z)("li",{className:"user-stat-divider"})),(0,s.Z)("li",{},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:R.e(30,70)+"px"}},void 0," ")),(0,s.Z)("li",{},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:R.e(30,70)+"px"}},void 0," "))))))))}}]),i}(o().Component);function E(e){var t=e.colClassName,n=e.cols,a=Array.apply(null,{length:n}).map(Number.call,Number);return(0,s.Z)("div",{className:"users-cards-list ui-preview"},void 0,(0,s.Z)("div",{className:"row"},void 0,a.map((function(e){var n=t;return 0!==e&&(n+=" hidden-xs"),3===e&&(n+=" hidden-sm"),(0,s.Z)("div",{className:n},e,C||(C=(0,s.Z)(S,{})))}))))}function L(e){var t=e.cols,n=e.isReady,a=e.showStatus,i=e.users,o="col-xs-12 col-sm-4";return 4===t&&(o+=" col-md-3"),n?(0,s.Z)("div",{className:"users-cards-list ui-ready"},void 0,(0,s.Z)("div",{className:"row"},void 0,i.map((function(e){return(0,s.Z)("div",{className:o},e.id,(0,s.Z)(Z,{showStatus:a,user:e}))})))):(0,s.Z)(E,{colClassName:o,cols:t})}},82125:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var a=n(15671),s=n(43144),i=n(97326),o=n(79340),r=n(6215),l=n(61120),c=n(4942),u=n(57588);var d=function(e){(0,o.Z)(d,e);var t,n,u=(t=d,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function d(e){var t;return(0,a.Z)(this,d),t=u.call(this,e),(0,c.Z)((0,i.Z)(t),"toggleNav",(function(){t.setState({dropdown:!t.state.dropdown})})),(0,c.Z)((0,i.Z)(t),"hideNav",(function(){t.setState({dropdown:!1})})),t.state={dropdown:!1},t}return(0,s.Z)(d,[{key:"getCompactNavClassName",value:function(){return this.state.dropdown?"compact-nav open":"compact-nav"}}]),d}(n.n(u)().Component)},7227:function(e,t,n){"use strict";n.d(t,{Z:function(){return p}});var a=n(22928),s=n(15671),i=n(43144),o=n(97326),r=n(79340),l=n(6215),c=n(61120),u=n(4942),d=n(57588);var p=function(e){(0,r.Z)(p,e);var t,n,d=(t=p,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function p(){var e;(0,s.Z)(this,p);for(var t=arguments.length,n=new Array(t),a=0;a<t;a++)n[a]=arguments[a];return e=d.call.apply(d,[this].concat(n)),(0,u.Z)((0,o.Z)(e),"toggle",(function(){e.props.onChange({target:{value:!e.props.value}})})),e}return(0,i.Z)(p,[{key:"getClassName",value:function(){return this.props.value?"btn btn-yes-no btn-yes-no-on":"btn btn-yes-no btn-yes-no-off"}},{key:"getIcon",value:function(){return this.props.value?this.props.iconOn||"check_box":this.props.iconOff||"check_box_outline_blank"}},{key:"getLabel",value:function(){return this.props.value?this.props.labelOn||gettext("yes"):this.props.labelOff||gettext("no")}},{key:"render",value:function(){return(0,a.Z)("button",{type:"button",onClick:this.toggle,className:this.getClassName(),id:this.props.id||null,"aria-describedby":this.props["aria-describedby"]||null,disabled:this.props.disabled||!1},void 0,(0,a.Z)("span",{className:"material-icon"},void 0,this.getIcon()),(0,a.Z)("span",{className:"btn-text"},void 0,this.getLabel()))}}]),p}(n.n(d)().Component)},32233:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});var a=n(15671),s=n(43144),i=(n(58294),n(95377),n(68852),n(39737),n(14316),n(43204),n(43511),n(7023),n(54116),function(){function e(t){(0,a.Z)(this,e),this.isOrdered=!1,this._items=t||[]}return(0,s.Z)(e,[{key:"add",value:function(e,t,n){this._items.push({key:e,item:t,after:n&&n.after||null,before:n&&n.before||null})}},{key:"get",value:function(e,t){for(var n=0;n<this._items.length;n++)if(this._items[n].key===e)return this._items[n].item;return t}},{key:"has",value:function(e){return void 0!==this.get(e)}},{key:"values",value:function(){for(var e=[],t=0;t<this._items.length;t++)e.push(this._items[t].item);return e}},{key:"order",value:function(e){return this.isOrdered||(this._items=this._order(this._items),this.isOrdered=!0),e||void 0===e?this.values():this._items}},{key:"orderedValues",value:function(){return this.order(!0)}},{key:"_order",value:function(e){var t=[];e.forEach((function(e){t.push(e.key)}));var n=[],a=[];function s(e){var t=-1;-1===a.indexOf(e.key)&&(e.after?-1!==(t=a.indexOf(e.after))&&(t+=1):e.before&&(t=a.indexOf(e.before)),-1!==t&&(n.splice(t,0,e),a.splice(t,0,e.key)))}e.forEach((function(e){e.after||e.before||(n.push(e),a.push(e.key))})),e.forEach((function(e){"_end"===e.before&&(n.push(e),a.push(e.key))}));for(var i=200;i>0&&t.length!==a.length;)i-=1,e.forEach(s);return n}}]),e}()),o=new(function(){function e(){(0,a.Z)(this,e),this._initializers=[],this._context={}}return(0,s.Z)(e,[{key:"addInitializer",value:function(e){this._initializers.push({key:e.name,item:e.initializer,after:e.after,before:e.before})}},{key:"init",value:function(e){var t=this;this._context=e,new i(this._initializers).orderedValues().forEach((function(e){e(t)}))}},{key:"has",value:function(e){return!!this._context[e]}},{key:"get",value:function(e,t){return this.has(e)?this._context[e]:t||void 0}},{key:"pop",value:function(e){if(this.has(e)){var t=this._context[e];return this._context[e]=null,t}}}]),e}());window.misago=o;var r=o},58339:function(e,t,n){"use strict";var a=n(32233),s=n(78657);a.Z.addInitializer({name:"ajax",initializer:function(){s.Z.init(a.Z.get("CSRF_COOKIE_NAME"))}})},64109:function(e,t,n){"use strict";var a=n(32233),s=n(35486),i=n(78657),o=n(53904),r=n(90287);a.Z.addInitializer({name:"auth-sync",initializer:function(e){e.get("isAuthenticated")&&window.setInterval((function(){i.Z.get(e.get("AUTH_API")).then((function(e){r.Z.dispatch((0,s.r$)(e))}),(function(e){o.Z.apiError(e)}))}),45e3)},after:"auth"})},46226:function(e,t,n){"use strict";var a=n(32233),s=n(98274),i=n(59801),o=n(90287),r=n(62833);a.Z.addInitializer({name:"auth",initializer:function(){s.Z.init(o.Z,r.Z,i.Z)},after:"store"})},93240:function(e,t,n){"use strict";var a=n(32233),s=n(78657),i=n(93825),o=n(96142),r=n(53904);a.Z.addInitializer({name:"captcha",initializer:function(e){i.ZP.init(e,s.Z,o.Z,r.Z)}})},75147:function(e,t,n){"use strict";var a=n(22928),s=n(57588),i=n.n(s),o=n(32233),r=n(15671),l=n(43144),c=n(97326),u=n(79340),d=n(6215),p=n(61120),h=n(4942),f=n(78657);var v=function(e){(0,u.Z)(i,e);var t,n,s=(t=i,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function i(e){var t;return(0,r.Z)(this,i),t=s.call(this,e),(0,h.Z)((0,c.Z)(t),"handleDecline",(function(){t.state.submiting||window.confirm(gettext("Declining will result in immediate deactivation and deletion of your account. This action is not reversible."))&&(t.setState({submiting:!0}),f.Z.post(t.props.api,{accept:!1}).then((function(){window.location.reload(!0)})))})),(0,h.Z)((0,c.Z)(t),"handleAccept",(function(){t.state.submiting||(t.setState({submiting:!0}),f.Z.post(t.props.api,{accept:!0}).then((function(){window.location.reload(!0)})))})),t.state={submiting:!1},t}return(0,l.Z)(i,[{key:"render",value:function(){return(0,a.Z)("div",{},void 0,(0,a.Z)("button",{className:"btn btn-default",disabled:this.state.submiting,type:"buton",onClick:this.handleDecline},void 0,gettext("Decline")),(0,a.Z)("button",{className:"btn btn-primary",disabled:this.state.submiting,type:"buton",onClick:this.handleAccept},void 0,gettext("Accept and continue")))}}]),i}(i().Component),m=n(4869);o.Z.addInitializer({name:"component:accept-agreement",initializer:function(e){document.getElementById("required-agreement-mount")&&(0,m.Z)((0,a.Z)(v,{api:e.get("REQUIRED_AGREEMENT_API")}),"required-agreement-mount",!1)},after:"store"})},4894:function(e,t,n){"use strict";var a=n(37424),s=n(32233),i=n(22928),o=n(15671),r=n(43144),l=n(79340),c=n(6215),u=n(61120),d=n(57588);var p=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(){return(0,o.Z)(this,s),a.apply(this,arguments)}return(0,r.Z)(s,[{key:"refresh",value:function(){window.location.reload()}},{key:"getMessage",value:function(){return this.props.signedIn?interpolate(gettext("You have signed in as %(username)s. Please refresh the page before continuing."),{username:this.props.signedIn.username},!0):this.props.signedOut?interpolate(gettext("%(username)s, you have been signed out. Please refresh the page before continuing."),{username:this.props.user.username},!0):void 0}},{key:"render",value:function(){var e="auth-message";return(this.props.signedIn||this.props.signedOut)&&(e+=" show"),(0,i.Z)("div",{className:e},void 0,(0,i.Z)("div",{className:"container"},void 0,(0,i.Z)("p",{className:"lead"},void 0,this.getMessage()),(0,i.Z)("p",{},void 0,(0,i.Z)("button",{className:"btn btn-default",type:"button",onClick:this.refresh},void 0,gettext("Reload page")),(0,i.Z)("span",{className:"hidden-xs hidden-sm"},void 0," "+gettext("or press F5 key.")))))}}]),s}(n.n(d)().Component);function h(e){return{user:e.auth.user,signedIn:e.auth.signedIn,signedOut:e.auth.signedOut}}var f=n(4869);s.Z.addInitializer({name:"component:auth-message",initializer:function(){(0,f.Z)((0,a.$j)(h)(p),"auth-message-mount")},after:"store"})},29223:function(e,t,n){"use strict";var a=n(32233),s=n(93051);a.Z.addInitializer({name:"component:banmed-page",initializer:function(e){e.has("BAN_MESSAGE")&&(0,s.Z)(e.get("BAN_MESSAGE"),!1)},after:"store"})},3026:function(e,t,n){"use strict";var a=n(37424),s=n(22928),i=n(15671),o=n(43144),r=n(97326),l=n(79340),c=n(6215),u=n(61120),d=n(4942),p=n(30381),h=n.n(p),f=n(57588),v=n.n(f);function m(e){return(0,s.Z)("div",{className:"categories-list"},void 0,(0,s.Z)("ul",{className:"list-group"},void 0,(0,s.Z)("li",{className:"list-group-item empty-message"},void 0,(0,s.Z)("p",{className:"lead"},void 0,gettext("No categories exist or you don't have permission to see them.")))))}function Z(e){var t=e.category;return t.description?(0,s.Z)("div",{className:"category-description",dangerouslySetInnerHTML:{__html:t.description.html}}):null}function g(e){var t=e.category;return(0,s.Z)("div",{className:b(t),title:y(t)},void 0,(0,s.Z)("span",{className:"material-icon"},void 0,function(e){return e.is_closed?e.is_read?"lock_outline":"lock":e.is_read?"chat_bubble_outline":"chat_bubble"}(t)))}function b(e){return e.is_read?"read-status item-read":"read-status item-new"}function y(e){return e.is_closed?e.is_read?gettext("This category has no new posts. (closed)"):gettext("This category has new posts. (closed)"):e.is_read?gettext("This category has no new posts."):gettext("This category has new posts.")}function _(e){var t=e.category;return(0,s.Z)("div",{className:"col-xs-12 col-sm-6 col-md-6 category-main"},void 0,(0,s.Z)("div",{className:"media"},void 0,(0,s.Z)("div",{className:"media-left"},void 0,(0,s.Z)(g,{category:t})),(0,s.Z)("div",{className:"media-body"},void 0,(0,s.Z)("h4",{className:"media-heading"},void 0,(0,s.Z)("a",{href:t.url.index},void 0,t.name)),(0,s.Z)(Z,{category:t}))))}var N,k,x,w=n(19605);function R(e){var t=e.category;return(0,s.Z)("div",{className:"col-xs-12 col-sm-6 col-md-4 category-last-thread"},void 0,(0,s.Z)(C,{category:t}),(0,s.Z)(L,{category:t}),(0,s.Z)(P,{category:t}),(0,s.Z)(O,{category:t}))}function C(e){var t=e.category;return t.acl.can_browse&&t.acl.can_see_all_threads&&t.last_thread_title?(0,s.Z)("div",{className:"media"},void 0,(0,s.Z)("div",{className:"media-left hidden-xs"},void 0,(0,s.Z)(S,{category:t})),(0,s.Z)("div",{className:"media-body"},void 0,(0,s.Z)("div",{className:"media-heading"},void 0,(0,s.Z)("a",{className:"item-title thread-title",href:t.url.last_thread_new,title:t.last_thread_title},void 0,t.last_thread_title)),(0,s.Z)("ul",{className:"list-inline"},void 0,(0,s.Z)("li",{className:"category-last-thread-poster"},void 0,(0,s.Z)(E,{category:t})),N||(N=(0,s.Z)("li",{className:"divider"},void 0,"—")),(0,s.Z)("li",{className:"category-last-thread-date"},void 0,(0,s.Z)("a",{href:t.url.last_post},void 0,t.last_post_on.fromNow()))))):null}function S(e){var t=e.category;return t.last_poster?(0,s.Z)("a",{className:"last-poster-avatar",href:t.last_poster.url,title:t.last_poster_name},void 0,(0,s.Z)(w.ZP,{className:"media-object",size:40,user:t.last_poster})):(0,s.Z)("span",{className:"last-poster-avatar",title:t.last_poster_name},void 0,k||(k=(0,s.Z)(w.ZP,{className:"media-object",size:40})))}function E(e){var t=e.category;return t.last_poster?(0,s.Z)("a",{className:"item-title",href:t.last_poster.url},void 0,t.last_poster_name):(0,s.Z)("span",{className:"item-title"},void 0,t.last_poster_name)}function L(e){var t=e.category;return t.acl.can_browse&&t.acl.can_see_all_threads?t.last_thread_title?null:(0,s.Z)(T,{message:gettext("This category is empty. No threads were posted within it so far.")}):null}function P(e){var t=e.category;return t.acl.can_browse?t.acl.can_see_all_threads?null:(0,s.Z)(T,{message:gettext("This category is private. You can see only your own threads within it.")}):null}function O(e){return e.category.acl.can_browse?null:(0,s.Z)(T,{message:gettext("This category is protected. You can't browse its contents.")})}function T(e){var t=e.message;return(0,s.Z)("div",{className:"media category-thread-message"},void 0,x||(x=(0,s.Z)("div",{className:"media-left"},void 0,(0,s.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,s.Z)("div",{className:"media-body"},void 0,(0,s.Z)("p",{},void 0,t)))}function A(e){var t=e.category;return(0,s.Z)("div",{className:"col-md-2 hidden-xs hidden-sm"},void 0,(0,s.Z)("ul",{className:"list-unstyled category-stats"},void 0,(0,s.Z)(B,{threads:t.threads}),(0,s.Z)(I,{posts:t.posts})))}function B(e){var t=e.threads,n=ngettext("%(threads)s thread","%(threads)s threads",t);return(0,s.Z)("li",{className:"category-stat-threads"},void 0,interpolate(n,{threads:t},!0))}function I(e){var t=e.posts,n=ngettext("%(posts)s post","%(posts)s posts",t);return(0,s.Z)("li",{className:"category-stat-posts"},void 0,interpolate(n,{posts:t},!0))}function j(e){var t=e.category,n="btn btn-default btn-block btn-sm btn-subcategory";return t.is_read||(n+=" btn-subcategory-new"),(0,s.Z)("div",{className:"col-xs-12 col-sm-4 col-md-3"},void 0,(0,s.Z)("a",{className:n,href:t.url.index},void 0,(0,s.Z)("span",{className:"material-icon"},void 0,function(e){return e.is_closed?e.is_read?"lock_outline":"lock":e.is_read?"chat_bubble_outline":"chat_bubble"}(t)),(0,s.Z)("span",{className:"icon-text"},void 0,t.name)))}function D(e){var t=e.category;return e.isFirst||0===t.subcategories.length?null:(0,s.Z)("div",{className:"row subcategories-list"},void 0,t.subcategories.map((function(e){return(0,s.Z)(j,{category:e},e.id)})))}function U(e){var t=e.category,n=e.isFirst,a="list-group-item";return t.description?a+=" list-group-category-has-description":a+=" list-group-category-no-description",n&&(a+=" list-group-item-first"),t.css_class&&(a+=" list-group-category-has-flavor",a+=" list-group-item-category-"+t.css_class),(0,s.Z)("li",{className:a},void 0,(0,s.Z)("div",{className:"row"},void 0,(0,s.Z)(_,{category:t}),(0,s.Z)(A,{category:t}),(0,s.Z)(R,{category:t})),(0,s.Z)(D,{category:t,isFirst:n}))}function M(e){var t=e.category,n="list-group list-group-category";return t.css_class&&(n+=" list-group-category-has-flavor",n+=" list-group-category-"+t.css_class),(0,s.Z)("ul",{className:n},void 0,(0,s.Z)(U,{category:t,isFirst:!0}),t.subcategories.map((function(e){return(0,s.Z)(U,{category:e,isFirst:!1},e.id)})))}function z(e){var t=e.categories;return(0,s.Z)("div",{className:"categories-list"},void 0,t.map((function(e){return(0,s.Z)(M,{category:e},e.id)})))}var H,F=n(32233),q=n(55547);var Y=function e(t){return Object.assign({},t,{last_post_on:t.last_post_on?h()(t.last_post_on):null,subcategories:t.subcategories.map(e)})},V=function(e){(0,l.Z)(p,e);var t,n,a=(t=p,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function p(e){var t;return(0,i.Z)(this,p),t=a.call(this,e),(0,d.Z)((0,r.Z)(t),"update",(function(e){t.setState({categories:e.map(Y)})})),t.state={categories:F.Z.get("CATEGORIES").map(Y)},t.startPolling(F.Z.get("CATEGORIES_API")),t}return(0,o.Z)(p,[{key:"startPolling",value:function(e){q.Z.start({poll:"categories",url:e,frequency:18e4,update:this.update})}},{key:"render",value:function(){var e=this.state.categories;return 0===e.length?H||(H=(0,s.Z)(m,{})):(0,s.Z)(z,{categories:e})}}]),p}(v().Component);function $(e){return{tick:e.tick.tick}}var G=n(4869);F.Z.addInitializer({name:"component:categories",initializer:function(){document.getElementById("categories-mount")&&(0,G.Z)((0,a.$j)($)(V),"categories-mount")},after:"store"})},94795:function(e,t,n){"use strict";var a=n(22928),s=n(15671),i=n(43144),o=n(79340),r=n(6215),l=n(61120),c=n(57588),u=n.n(c),d=n(37424),p=n(69987),h=n(94417);function f(e){return(0,a.Z)("div",{className:"list-group nav-side"},void 0,e.options.map((function(t){return(0,a.Z)(p.rU,{to:e.baseUrl+t.component+"/",className:"list-group-item",activeClassName:"active"},t.component,(0,a.Z)("span",{className:"material-icon"},void 0,t.icon),t.name)})))}function v(e){return(0,a.Z)("ul",{className:e.className||"dropdown-menu",role:"menu"},void 0,e.options.map((function(t){return(0,a.Z)(h.Z,{path:e.baseUrl+t.component+"/"},t.component,(0,a.Z)(p.rU,{to:e.baseUrl+t.component+"/",onClick:e.hideNav},void 0,(0,a.Z)("span",{className:"material-icon hidden-sm"},void 0,t.icon),t.name))})))}var m,Z=n(97326),g=n(4942),b=n(82211),y=n(78657),_=n(53328),N=n(53904),k=n(90287),x=n(32233);var w=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(e){var t;return(0,s.Z)(this,u),t=c.call(this,e),(0,g.Z)((0,Z.Z)(t),"onPasswordChange",(function(e){t.setState({password:e.target.value})})),(0,g.Z)((0,Z.Z)(t),"handleSubmit",(function(e){e.preventDefault();var n=t.state,a=n.isLoading,s=n.password,i=t.props.user;return 0==s.length?(N.Z.error(gettext("Enter your password to confirm account deletion.")),!1):!a&&(t.setState({isLoading:!0}),void y.Z.post(i.api.delete,{password:s}).then((function(e){window.location.href=x.Z.get("MISAGO_PATH")}),(function(e){t.setState({isLoading:!1}),e.password?N.Z.error(e.password[0]):N.Z.apiError(e)})))})),t.state={isLoading:!1,password:""},t}return(0,i.Z)(u,[{key:"componentDidMount",value:function(){_.Z.set({title:gettext("Delete account"),parent:gettext("Change your options")})}},{key:"render",value:function(){return(0,a.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,a.Z)("div",{className:"panel panel-danger panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Delete account"))),(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)("p",{className:"lead"},void 0,gettext("You are going to delete your account. This action is nonreversible, and will result in following data being deleted:")),(0,a.Z)("p",{},void 0,"-"," ",gettext("Stored IP addresses associated with content that you have posted will be deleted.")),(0,a.Z)("p",{},void 0,"-"," ",gettext("Your username will become available for other user to rename to or for new user to register their account with.")),(0,a.Z)("p",{},void 0,"-"," ",gettext("Your e-mail will become available for use in new account registration.")),m||(m=(0,a.Z)("hr",{})),(0,a.Z)("p",{},void 0,gettext("All your posted content will NOT be deleted, but username associated with it will be changed to one shared by all deleted accounts."))),(0,a.Z)("div",{className:"panel-footer"},void 0,(0,a.Z)("div",{className:"input-group"},void 0,(0,a.Z)("input",{className:"form-control",disabled:this.state.isLoading,name:"password-confirmation",type:"password",placeholder:gettext("Enter your password to confirm account deletion."),value:this.state.password,onChange:this.onPasswordChange}),(0,a.Z)("span",{className:"input-group-btn"},void 0,(0,a.Z)(b.Z,{className:"btn-danger",loading:this.state.isLoading},void 0,gettext("Delete my account")))))))}}]),u}(u().Component),R=n(21688);var C=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){var e;(0,s.Z)(this,u);for(var t=arguments.length,n=new Array(t),a=0;a<t;a++)n[a]=arguments[a];return e=c.call.apply(c,[this].concat(n)),(0,g.Z)((0,Z.Z)(e),"onSuccess",(function(){N.Z.info(gettext("Your details have been updated."))})),e}return(0,i.Z)(u,[{key:"componentDidMount",value:function(){_.Z.set({title:gettext("Edit details"),parent:gettext("Change your options")})}},{key:"render",value:function(){return(0,a.Z)(R.Z,{api:this.props.user.api.edit_details,onSuccess:this.onSuccess})}}]),u}(u().Component),S=n(30381),E=n.n(S);var L=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(e){var t;return(0,s.Z)(this,u),t=c.call(this,e),(0,g.Z)((0,Z.Z)(t),"handleLoadDownloads",(function(){y.Z.get(t.props.user.api.data_downloads).then((function(e){t.setState({isLoading:!1,downloads:e})}),(function(e){N.Z.apiError(e)}))})),(0,g.Z)((0,Z.Z)(t),"handleRequestDataDownload",(function(){t.setState({isSubmiting:!0}),y.Z.post(t.props.user.api.request_data_download).then((function(){t.handleLoadDownloads(),N.Z.success(gettext("Your request for data download has been registered.")),t.setState({isSubmiting:!1})}),(function(e){N.Z.apiError(e),t.setState({isSubmiting:!1})}))})),t.state={isLoading:!1,isSubmiting:!1,downloads:[]},t}return(0,i.Z)(u,[{key:"componentDidMount",value:function(){_.Z.set({title:gettext("Download your data"),parent:gettext("Change your options")}),this.handleLoadDownloads()}},{key:"render",value:function(){return(0,a.Z)("div",{},void 0,(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Download your data"))),(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)("p",{},void 0,gettext('To download your data from the site, click the "Request data download" button. Depending on amount of data to be archived and number of users wanting to download their data at same time it may take up to few days for your download to be prepared. An e-mail with notification will be sent to you when your data is ready to be downloaded.')),(0,a.Z)("p",{},void 0,gettext("The download will only be available for limited amount of time, after which it will be deleted from the site and marked as expired."))),(0,a.Z)("table",{className:"table"},void 0,(0,a.Z)("thead",{},void 0,(0,a.Z)("tr",{},void 0,(0,a.Z)("th",{},void 0,gettext("Requested on")),(0,a.Z)("th",{className:"col-md-4"},void 0,gettext("Download")))),(0,a.Z)("tbody",{},void 0,this.state.downloads.map((function(e){return(0,a.Z)("tr",{},e.id,(0,a.Z)("td",{style:P},void 0,E()(e.requested_on).fromNow()),(0,a.Z)("td",{},void 0,(0,a.Z)(O,{exportFile:e.file,status:e.status})))})),0==this.state.downloads.length?(0,a.Z)("tr",{},void 0,(0,a.Z)("td",{colSpan:"2"},void 0,gettext("You have no data downloads."))):null)),(0,a.Z)("div",{className:"panel-footer text-right"},void 0,(0,a.Z)(b.Z,{className:"btn-primary",loading:this.state.isSubmiting,type:"button",onClick:this.handleRequestDataDownload},void 0,gettext("Request data download")))))}}]),u}(u().Component),P={verticalAlign:"middle"},O=function(e){var t=e.exportFile,n=e.status;return 0===n||1===n?(0,a.Z)(b.Z,{className:"btn-info btn-sm btn-block",disabled:!0,type:"button"},void 0,gettext("Download is being prepared")):t?(0,a.Z)("a",{className:"btn btn-success btn-sm btn-block",href:t},void 0,gettext("Download your data")):(0,a.Z)(b.Z,{className:"btn-default btn-sm btn-block",disabled:!0,type:"button"},void 0,gettext("Download is expired"))},T=n(43345),A=n(96359),B=n(60471),I=n(7227),j=n(35486);var D,U=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(e){var t;return(0,s.Z)(this,u),(t=c.call(this,e)).state={isLoading:!1,is_hiding_presence:e.user.is_hiding_presence,limits_private_thread_invites_to:e.user.limits_private_thread_invites_to,subscribe_to_started_threads:e.user.subscribe_to_started_threads,subscribe_to_replied_threads:e.user.subscribe_to_replied_threads,errors:{}},t.privateThreadInvitesChoices=[{value:0,icon:"help_outline",label:gettext("Everybody")},{value:1,icon:"done_all",label:gettext("Users I follow")},{value:2,icon:"highlight_off",label:gettext("Nobody")}],t.subscribeToChoices=[{value:0,icon:"star_border",label:gettext("No")},{value:1,icon:"star_half",label:gettext("Notify")},{value:2,icon:"star",label:gettext("Notify with e-mail")}],t}return(0,i.Z)(u,[{key:"send",value:function(){return y.Z.post(this.props.user.api.options,{is_hiding_presence:this.state.is_hiding_presence,limits_private_thread_invites_to:this.state.limits_private_thread_invites_to,subscribe_to_started_threads:this.state.subscribe_to_started_threads,subscribe_to_replied_threads:this.state.subscribe_to_replied_threads})}},{key:"handleSuccess",value:function(){k.Z.dispatch((0,j.r$)({is_hiding_presence:this.state.is_hiding_presence,limits_private_thread_invites_to:this.state.limits_private_thread_invites_to,subscribe_to_started_threads:this.state.subscribe_to_started_threads,subscribe_to_replied_threads:this.state.subscribe_to_replied_threads})),N.Z.success(gettext("Your forum options have been changed."))}},{key:"handleError",value:function(e){400===e.status?N.Z.error(gettext("Please reload page and try again.")):N.Z.apiError(e)}},{key:"componentDidMount",value:function(){_.Z.set({title:gettext("Forum options"),parent:gettext("Change your options")})}},{key:"render",value:function(){return(0,a.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Change forum options"))),(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)("fieldset",{},void 0,(0,a.Z)("legend",{},void 0,gettext("Privacy settings")),(0,a.Z)(A.Z,{label:gettext("Hide my presence"),helpText:gettext("If you hide your presence, only members with permission to see hidden users will see when you are online."),for:"id_is_hiding_presence"},void 0,(0,a.Z)(I.Z,{id:"id_is_hiding_presence",disabled:this.state.isLoading,iconOn:"visibility_off",iconOff:"visibility",labelOn:gettext("Hide my presence from other users"),labelOff:gettext("Show my presence to other users"),onChange:this.bindInput("is_hiding_presence"),value:this.state.is_hiding_presence})),(0,a.Z)(A.Z,{label:gettext("Private thread invitations"),for:"id_limits_private_thread_invites_to"},void 0,(0,a.Z)(B.Z,{id:"id_limits_private_thread_invites_to",disabled:this.state.isLoading,onChange:this.bindInput("limits_private_thread_invites_to"),value:this.state.limits_private_thread_invites_to,choices:this.privateThreadInvitesChoices}))),(0,a.Z)("fieldset",{},void 0,(0,a.Z)("legend",{},void 0,gettext("Automatic subscriptions")),(0,a.Z)(A.Z,{label:gettext("Threads I start"),for:"id_subscribe_to_started_threads"},void 0,(0,a.Z)(B.Z,{id:"id_subscribe_to_started_threads",disabled:this.state.isLoading,onChange:this.bindInput("subscribe_to_started_threads"),value:this.state.subscribe_to_started_threads,choices:this.subscribeToChoices})),(0,a.Z)(A.Z,{label:gettext("Threads I reply to"),for:"id_subscribe_to_replied_threads"},void 0,(0,a.Z)(B.Z,{id:"id_subscribe_to_replied_threads",disabled:this.state.isLoading,onChange:this.bindInput("subscribe_to_replied_threads"),value:this.state.subscribe_to_replied_threads,choices:this.subscribeToChoices})))),(0,a.Z)("div",{className:"panel-footer"},void 0,(0,a.Z)(b.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Save changes")))))}}]),u}(T.Z),M=n(95187);function z(){return(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Change username"))),D||(D=(0,a.Z)(M.Z,{})))}var H=n(33556);var F=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"getHelpText",value:function(){return this.props.options.next_on?interpolate(gettext("You will be able to change your username %(next_change)s."),{next_change:this.props.options.next_on.fromNow()},!0):gettext("You have used up available name changes.")}},{key:"render",value:function(){return(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Change username"))),(0,a.Z)(H.Z,{helpText:this.getHelpText(),message:gettext("You can't change your username at the moment.")}))}}]),u}(u().Component),q=n(55210);var Y,V=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(e){var t;return(0,s.Z)(this,u),(t=c.call(this,e)).state={username:"",validators:{username:[q.lG(),q.HR(e.options.length_min),q.gS(e.options.length_max)]},isLoading:!1},t}return(0,i.Z)(u,[{key:"getHelpText",value:function(){var e=[];if(this.props.options.changes_left>0){var t=ngettext("You can change your username %(changes_left)s more time.","You can change your username %(changes_left)s more times.",this.props.options.changes_left);e.push(interpolate(t,{changes_left:this.props.options.changes_left},!0))}if(this.props.user.acl.name_changes_expire>0){var n=ngettext("Used changes become available again after %(name_changes_expire)s day.","Used changes become available again after %(name_changes_expire)s days.",this.props.user.acl.name_changes_expire);e.push(interpolate(n,{name_changes_expire:this.props.user.acl.name_changes_expire},!0))}return e.length?e.join(" "):null}},{key:"clean",value:function(){var e=this.validate();return e.username?(N.Z.error(e.username[0]),!1):this.state.username.trim()!==this.props.user.username||(N.Z.info(gettext("Your new username is same as current one.")),!1)}},{key:"send",value:function(){return y.Z.post(this.props.user.api.username,{username:this.state.username})}},{key:"handleSuccess",value:function(e){this.setState({username:""}),this.props.complete(e.username,e.slug,e.options)}},{key:"handleError",value:function(e){N.Z.apiError(e)}},{key:"render",value:function(){return(0,a.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Change username"))),(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)(A.Z,{label:gettext("New username"),for:"id_username",helpText:this.getHelpText()},void 0,(0,a.Z)("input",{type:"text",id:"id_username",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("username"),value:this.state.username}))),(0,a.Z)("div",{className:"panel-footer"},void 0,(0,a.Z)(b.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Change username")))))}}]),u}(T.Z),$=n(7850),G=n(48927),W=n(6935);var K,J=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(e){var t;return(0,s.Z)(this,u),t=c.call(this,e),(0,g.Z)((0,Z.Z)(t),"onComplete",(function(e,n,a){t.setState({options:a}),k.Z.dispatch((0,G.KP)({username:e,slug:n},t.props.user,t.props.user)),k.Z.dispatch((0,W._S)(t.props.user,e,n)),N.Z.success(gettext("Your username has been changed successfully."))})),t.state={isLoaded:!1,options:null},t}return(0,i.Z)(u,[{key:"componentDidMount",value:function(){var e=this;_.Z.set({title:gettext("Change username"),parent:gettext("Change your options")}),Promise.all([y.Z.get(this.props.user.api.username),y.Z.get(x.Z.get("USERNAME_CHANGES_API"),{user:this.props.user.id})]).then((function(t){k.Z.dispatch((0,G.ZB)(t[1].results)),e.setState({isLoaded:!0,options:{changes_left:t[0].changes_left,length_min:t[0].length_min,length_max:t[0].length_max,next_on:t[0].next_on?E()(t[0].next_on):null}})}))}},{key:"getChangeForm",value:function(){return this.state.isLoaded?0===this.state.options.changes_left?(0,a.Z)(F,{options:this.state.options}):(0,a.Z)(V,{complete:this.onComplete,options:this.state.options,user:this.props.user}):Y||(Y=(0,a.Z)(z,{}))}},{key:"render",value:function(){return(0,a.Z)("div",{},void 0,this.getChangeForm(),(0,a.Z)($.Z,{changes:this.props["username-history"],isLoaded:this.state.isLoaded}))}}]),u}(u().Component);var Q,X=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(e){var t;return(0,s.Z)(this,u),(t=c.call(this,e)).state={new_email:"",password:"",validators:{new_email:[q.Do()],password:[]},isLoading:!1},t}return(0,i.Z)(u,[{key:"clean",value:function(){var e=this.validate();return-1!==[this.state.new_email.trim().length,this.state.password.trim().length].indexOf(0)?(N.Z.error(gettext("Fill out all fields.")),!1):!e.new_email||(N.Z.error(e.new_email[0]),!1)}},{key:"send",value:function(){return y.Z.post(this.props.user.api.change_email,{new_email:this.state.new_email,password:this.state.password})}},{key:"handleSuccess",value:function(e){this.setState({new_email:"",password:""}),N.Z.success(e.detail)}},{key:"handleError",value:function(e){400===e.status?e.new_email?N.Z.error(e.new_email):N.Z.error(e.password):N.Z.apiError(e)}},{key:"render",value:function(){return(0,a.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,a.Z)("input",{type:"type",style:{display:"none"}}),(0,a.Z)("input",{type:"password",style:{display:"none"}}),(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Change e-mail address"))),(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)(A.Z,{label:gettext("New e-mail"),for:"id_new_email"},void 0,(0,a.Z)("input",{type:"text",id:"id_new_email",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("new_email"),value:this.state.new_email})),K||(K=(0,a.Z)("hr",{})),(0,a.Z)(A.Z,{label:gettext("Your current password"),for:"id_confirm_email"},void 0,(0,a.Z)("input",{type:"password",id:"id_confirm_email",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),(0,a.Z)("div",{className:"panel-footer"},void 0,(0,a.Z)(b.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Change e-mail")))))}}]),u}(T.Z);var ee,te,ne,ae=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(e){var t;return(0,s.Z)(this,u),(t=c.call(this,e)).state={new_password:"",repeat_password:"",password:"",validators:{new_password:[],repeat_password:[],password:[]},isLoading:!1},t}return(0,i.Z)(u,[{key:"clean",value:function(){var e=this.validate();return-1!==[this.state.new_password.trim().length,this.state.repeat_password.trim().length,this.state.password.trim().length].indexOf(0)?(N.Z.error(gettext("Fill out all fields.")),!1):e.new_password?(N.Z.error(e.new_password[0]),!1):this.state.new_password===this.state.repeat_password||(N.Z.error(gettext("New passwords are different.")),!1)}},{key:"send",value:function(){return y.Z.post(this.props.user.api.change_password,{new_password:this.state.new_password,password:this.state.password})}},{key:"handleSuccess",value:function(e){this.setState({new_password:"",repeat_password:"",password:""}),N.Z.success(e.detail)}},{key:"handleError",value:function(e){400===e.status?e.new_password?N.Z.error(e.new_password):N.Z.error(e.password):N.Z.apiError(e)}},{key:"render",value:function(){return(0,a.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,a.Z)("input",{type:"type",style:{display:"none"}}),(0,a.Z)("input",{type:"password",style:{display:"none"}}),(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Change password"))),(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)(A.Z,{label:gettext("New password"),for:"id_new_password"},void 0,(0,a.Z)("input",{type:"password",id:"id_new_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("new_password"),value:this.state.new_password})),(0,a.Z)(A.Z,{label:gettext("Repeat password"),for:"id_repeat_password"},void 0,(0,a.Z)("input",{type:"password",id:"id_repeat_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("repeat_password"),value:this.state.repeat_password})),Q||(Q=(0,a.Z)("hr",{})),(0,a.Z)(A.Z,{label:gettext("Your current password"),for:"id_confirm_password"},void 0,(0,a.Z)("input",{type:"password",id:"id_confirm_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),(0,a.Z)("div",{className:"panel-footer"},void 0,(0,a.Z)(b.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Change password")))))}}]),u}(T.Z),se=function(){return(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,gettext("Change email or password"))),(0,a.Z)("div",{className:"panel-body panel-message-body"},void 0,ee||(ee=(0,a.Z)("div",{className:"message-icon"},void 0,(0,a.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,a.Z)("div",{className:"message-body"},void 0,(0,a.Z)("p",{className:"lead"},void 0,gettext("You need to set a password for your account to be able to change your username or email.")),(0,a.Z)("p",{className:"help-block"},void 0,(0,a.Z)("a",{className:"btn btn-primary",href:x.Z.get("FORGOTTEN_PASSWORD_URL")},void 0,gettext("Set password"))))))};var ie,oe=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"componentDidMount",value:function(){_.Z.set({title:gettext("Change email or password"),parent:gettext("Change your options")})}},{key:"render",value:function(){return this.props.user.has_usable_password?(0,a.Z)("div",{},void 0,(0,a.Z)(X,{user:this.props.user}),(0,a.Z)(ae,{user:this.props.user}),(0,a.Z)("p",{className:"message-line"},void 0,ne||(ne=(0,a.Z)("span",{className:"material-icon"},void 0,"warning")),(0,a.Z)("a",{href:x.Z.get("FORGOTTEN_PASSWORD_URL")},void 0,gettext("Change forgotten password")))):te||(te=(0,a.Z)(se,{}))}}]),u}(u().Component),re=n(82125),le=n(98936),ce=n(59131),ue=n(99755);var de=function(e){(0,o.Z)(u,e);var t,n,c=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,l.Z)(t);if(n){var s=(0,l.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,r.Z)(this,e)});function u(){return(0,s.Z)(this,u),c.apply(this,arguments)}return(0,i.Z)(u,[{key:"render",value:function(){var e=this,t=x.Z.get("USER_OPTIONS").filter((function(t){var n=x.Z.get("USERCP_URL")+t.component+"/";return e.props.location.pathname.substr(0,n.length)===n}))[0];return(0,a.Z)("div",{className:"page page-options"},void 0,(0,a.Z)(ue.sP,{},void 0,(0,a.Z)(ue.mr,{styleName:"options"},void 0,(0,a.Z)(ue.gC,{styleName:"options"},void 0,(0,a.Z)(le.gq,{},void 0,(0,a.Z)(le.kw,{auto:!0},void 0,(0,a.Z)(le.Z6,{auto:!0},void 0,(0,a.Z)("h1",{},void 0,gettext("Change your options"))),(0,a.Z)(le.Z6,{className:"hidden-xs hidden-md hidden-lg",shrink:!0},void 0,(0,a.Z)("div",{className:"dropdown"},void 0,(0,a.Z)("button",{type:"button",className:"btn btn-default btn-outline btn-icon dropdown-toggle",title:gettext("Menu"),"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,ie||(ie=(0,a.Z)("span",{className:"material-icon"},void 0,"menu"))),(0,a.Z)(v,{className:"dropdown-menu dropdown-menu-right",baseUrl:x.Z.get("USERCP_URL"),options:x.Z.get("USER_OPTIONS")})))),(0,a.Z)(le.kw,{className:"hidden-sm hidden-md hidden-lg"},void 0,(0,a.Z)(le.Z6,{},void 0,(0,a.Z)("div",{className:"dropdown"},void 0,(0,a.Z)("button",{type:"button",className:"btn btn-default btn-outline btn-block dropdown-toggle","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,(0,a.Z)("span",{className:"material-icon"},void 0,t.icon),t.name),(0,a.Z)(v,{className:"dropdown-menu",baseUrl:x.Z.get("USERCP_URL"),options:x.Z.get("USER_OPTIONS")})))))))),(0,a.Z)(ce.Z,{},void 0,(0,a.Z)("div",{className:"row"},void 0,(0,a.Z)("div",{className:"col-md-3 hidden-xs hidden-sm"},void 0,(0,a.Z)(f,{baseUrl:x.Z.get("USERCP_URL"),options:x.Z.get("USER_OPTIONS")})),(0,a.Z)("div",{className:"col-md-9"},void 0,this.props.children))))}}]),u}(re.Z);function pe(e){return{tick:e.tick.tick,user:e.auth.user,"username-history":e["username-history"]}}function he(){var e=[{path:x.Z.get("USERCP_URL")+"forum-options/",component:(0,d.$j)(pe)(U)},{path:x.Z.get("USERCP_URL")+"edit-details/",component:(0,d.$j)(pe)(C)}],t=x.Z.get("SETTINGS").DELEGATE_AUTH;return t||(e.push({path:x.Z.get("USERCP_URL")+"change-username/",component:(0,d.$j)(pe)(J)}),e.push({path:x.Z.get("USERCP_URL")+"sign-in-credentials/",component:(0,d.$j)(pe)(oe)})),x.Z.get("ENABLE_DOWNLOAD_OWN_DATA")&&e.push({path:x.Z.get("USERCP_URL")+"download-data/",component:(0,d.$j)(pe)(L)}),!t&&x.Z.get("ENABLE_DELETE_OWN_ACCOUNT")&&e.push({path:x.Z.get("USERCP_URL")+"delete-account/",component:(0,d.$j)(pe)(w)}),e}var fe=n(39633);x.Z.addInitializer({name:"component:options",initializer:function(e){e.has("USER_OPTIONS")&&(0,fe.Z)({root:x.Z.get("USERCP_URL"),component:de,paths:he()})},after:"store"})},95563:function(e,t,n){"use strict";var a,s=n(37424),i=n(22928),o=n(15671),r=n(43144),l=n(97326),c=n(79340),u=n(6215),d=n(61120),p=n(4942),h=n(57588),f=n.n(h),v=n(30381),m=n.n(v),Z=n(95187),g=n(33556),b=n(32233),y=n(55547),_=n(53328);var N=function(e){(0,c.Z)(h,e);var t,n,s=(t=h,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function h(e){var t;return(0,o.Z)(this,h),t=s.call(this,e),(0,p.Z)((0,l.Z)(t),"update",(function(e){e.expires_on&&(e.expires_on=m()(e.expires_on)),t.setState({isLoaded:!0,error:null,ban:e})})),(0,p.Z)((0,l.Z)(t),"error",(function(e){t.setState({isLoaded:!0,error:e.detail,ban:null})})),b.Z.has("PROFILE_BAN")?t.initWithPreloadedData(b.Z.pop("PROFILE_BAN")):t.initWithoutPreloadedData(),t.startPolling(e.profile.api.ban),t}return(0,r.Z)(h,[{key:"initWithPreloadedData",value:function(e){e.expires_on&&(e.expires_on=m()(e.expires_on)),this.state={isLoaded:!0,ban:e}}},{key:"initWithoutPreloadedData",value:function(){this.state={isLoaded:!1}}},{key:"startPolling",value:function(e){y.Z.start({poll:"ban-details",url:e,frequency:9e4,update:this.update,error:this.error})}},{key:"componentDidMount",value:function(){_.Z.set({title:gettext("Ban details"),parent:this.props.profile.username})}},{key:"componentWillUnmount",value:function(){y.Z.stop("ban-details")}},{key:"getUserMessage",value:function(){return this.state.ban.user_message?(0,i.Z)("div",{className:"panel-body ban-message ban-user-message"},void 0,(0,i.Z)("h4",{},void 0,gettext("User-shown ban message")),(0,i.Z)("div",{className:"lead",dangerouslySetInnerHTML:{__html:this.state.ban.user_message.html}})):null}},{key:"getStaffMessage",value:function(){return this.state.ban.staff_message?(0,i.Z)("div",{className:"panel-body ban-message ban-staff-message"},void 0,(0,i.Z)("h4",{},void 0,gettext("Team-shown ban message")),(0,i.Z)("div",{className:"lead",dangerouslySetInnerHTML:{__html:this.state.ban.staff_message.html}})):null}},{key:"getExpirationMessage",value:function(){if(this.state.ban.expires_on){if(this.state.ban.expires_on.isAfter(m()())){var e=interpolate(gettext("This ban expires on %(expires_on)s."),{expires_on:this.state.ban.expires_on.format("LL, LT")},!0),t=interpolate(gettext("This ban expires %(expires_on)s."),{expires_on:this.state.ban.expires_on.fromNow()},!0);return(0,i.Z)("abbr",{title:e},void 0,t)}return gettext("This ban has expired.")}return interpolate(gettext("%(username)s's ban is permanent."),{username:this.props.profile.username},!0)}},{key:"getPanelBody",value:function(){return this.state.ban?Object.keys(this.state.ban).length?(0,i.Z)("div",{},void 0,this.getUserMessage(),this.getStaffMessage(),(0,i.Z)("div",{className:"panel-body ban-expires"},void 0,(0,i.Z)("h4",{},void 0,gettext("Ban expiration")),(0,i.Z)("p",{className:"lead"},void 0,this.getExpirationMessage()))):(0,i.Z)("div",{},void 0,(0,i.Z)(g.Z,{message:gettext("No ban is active at the moment.")})):this.state.error?(0,i.Z)("div",{},void 0,(0,i.Z)(g.Z,{icon:"error_outline",message:this.state.error})):a||(a=(0,i.Z)("div",{},void 0,(0,i.Z)(Z.Z,{})))}},{key:"render",value:function(){return(0,i.Z)("div",{className:"profile-ban-details"},void 0,(0,i.Z)("div",{className:"panel panel-default"},void 0,(0,i.Z)("div",{className:"panel-heading"},void 0,(0,i.Z)("h3",{className:"panel-title"},void 0,gettext("Ban details"))),this.getPanelBody()))}}]),h}(f().Component),k=n(21688);function x(e){var t=e.api,n=e.display,a=e.onCancel,s=e.onSuccess;return n?(0,i.Z)(k.Z,{api:t,onCancel:a,onSuccess:s}):null}function w(e){var t,n=e.isAuthenticated,a=e.profile;return t=n?gettext("You are not sharing any details with others."):interpolate(gettext("%(username)s is not sharing any details with others."),{username:a.username},!0),(0,i.Z)("div",{className:"panel panel-default"},void 0,(0,i.Z)("div",{className:"panel-body text-center lead"},void 0,t))}function R(e){var t=e.html,n=e.text,a=e.url;return t?(0,i.Z)("div",{className:"form-control-static col-md-9",dangerouslySetInnerHTML:{__html:t}}):(0,i.Z)("div",{className:"form-control-static col-md-9"},void 0,(0,i.Z)(C,{text:n,url:a}))}function C(e){var t=e.text,n=e.url;return n?(0,i.Z)("p",{},void 0,(0,i.Z)("a",{href:n,target:"_blank",rel:"nofollow"},void 0,t||n)):t?(0,i.Z)("p",{},void 0,t):null}function S(e){return(0,i.Z)("div",{className:"form-group"},void 0,(0,i.Z)("strong",{className:"control-label col-md-3"},void 0,e.name,":"),f().createElement(R,e))}function E(e){var t=e.fields,n=e.name;return(0,i.Z)("div",{className:"panel panel-default panel-profile-details-group"},void 0,(0,i.Z)("div",{className:"panel-heading"},void 0,(0,i.Z)("h3",{className:"panel-title"},void 0,n)),(0,i.Z)("div",{className:"panel-body"},void 0,(0,i.Z)("div",{className:"form-horizontal"},void 0,t.map((function(e){var t=e.fieldname,n=e.html,a=e.name,s=e.text,o=e.url;return(0,i.Z)(S,{name:a,html:n,text:s,url:o},t)})))))}var L,P=n(37848);function O(e){var t=e.display,n=e.groups,a=e.isAuthenticated,s=e.loading,o=e.profile;return t?s?L||(L=(0,i.Z)(P.Z,{})):n.length?(0,i.Z)("div",{},void 0,n.map((function(e,t){return(0,i.Z)(E,{fields:e.fields,name:e.name},t)}))):(0,i.Z)(w,{isAuthenticated:a,profile:o}):null}var T=n(92490),A=function(e){var t=e.onEdit,n=e.showEditButton;return(0,i.Z)(T.o8,{},void 0,(0,i.Z)(T.Z2,{auto:!0},void 0,(0,i.Z)(T.Eg,{auto:!0},void 0,(0,i.Z)("h3",{},void 0,gettext("Details")))),n&&(0,i.Z)(T.Z2,{},void 0,(0,i.Z)(T.Eg,{},void 0,(0,i.Z)("button",{className:"btn btn-default btn-outline btn-block",onClick:t,type:"button"},void 0,gettext("Edit")))))},B=n(58598),I=n(78657),j=n(53904);var D=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(){return(0,o.Z)(this,s),a.apply(this,arguments)}return(0,r.Z)(s,[{key:"componentDidMount",value:function(){var e=this.props,t=e.data,n=e.dispatch,a=e.user;t&&t.id===a.id||I.Z.get(this.props.user.api.details).then((function(e){n((0,B.zD)(e))}),(function(e){j.Z.apiError(e)}))}},{key:"render",value:function(){return this.props.children}}]),s}(f().Component);var U=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,p.Z)((0,l.Z)(t),"onCancel",(function(){t.setState({editing:!1})})),(0,p.Z)((0,l.Z)(t),"onEdit",(function(){t.setState({editing:!0})})),(0,p.Z)((0,l.Z)(t),"onSuccess",(function(e){var n,a=t.props,s=a.dispatch,i=a.isAuthenticated,o=a.profile;n=i?gettext("Your details have been updated."):interpolate(gettext("%(username)s's details have been updated."),{username:o.username},!0),j.Z.info(n),s((0,B.zD)(e)),t.setState({editing:!1})})),t.state={editing:!1},t}return(0,r.Z)(s,[{key:"componentDidMount",value:function(){_.Z.set({title:gettext("Details"),parent:this.props.profile.username})}},{key:"render",value:function(){var e=this.props,t=e.dispatch,n=e.isAuthenticated,a=e.profile,s=e.profileDetails,o=s.id!==a.id;return(0,i.Z)(D,{data:s,dispatch:t,user:a},void 0,(0,i.Z)("div",{className:"profile-details"},void 0,(0,i.Z)(A,{onEdit:this.onEdit,showEditButton:!!s.edit&&!this.state.editing}),(0,i.Z)(O,{display:!this.state.editing,groups:s.groups,isAuthenticated:n,loading:o,profile:a}),(0,i.Z)(x,{api:a.api.edit_details,dispatch:t,display:this.state.editing,onCancel:this.onCancel,onSuccess:this.onSuccess})))}}]),s}(f().Component),M=n(87462),z=n(11005),H=n(82211),F=n(21981),q=n(90287);var Y,V=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,p.Z)((0,l.Z)(t),"loadMore",(function(){t.setState({isLoading:!0}),t.loadItems(t.props.posts.next)})),t.state={isLoading:!1},t}return(0,r.Z)(s,[{key:"loadItems",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;I.Z.get(this.props.api,{start:t||0}).then((function(n){0===t?q.Z.dispatch(F.zD(n)):q.Z.dispatch(F.R3(n)),e.setState({isLoading:!1})}),(function(t){e.setState({isLoading:!1}),j.Z.apiError(t)}))}},{key:"componentDidMount",value:function(){_.Z.set({title:this.props.title,parent:this.props.profile.username}),this.loadItems()}},{key:"render",value:function(){return(0,i.Z)("div",{className:"profile-feed"},void 0,(0,i.Z)(T.o8,{},void 0,(0,i.Z)(T.Z2,{auto:!0},void 0,(0,i.Z)(T.Eg,{auto:!0},void 0,(0,i.Z)("h3",{},void 0,this.props.header)))),f().createElement($,(0,M.Z)({isLoading:this.state.isLoading,loadMore:this.loadMore},this.props)))}}]),s}(f().Component);function $(e){return e.posts.isLoaded&&!e.posts.results.length?(0,i.Z)("p",{className:"lead"},void 0,e.emptyMessage):(0,i.Z)("div",{},void 0,(0,i.Z)(z.Z,{isReady:e.posts.isLoaded,posts:e.posts.results,poster:e.profile}),(0,i.Z)(G,{isLoading:e.isLoading,loadMore:e.loadMore,next:e.posts.next}))}function G(e){return e.next?(0,i.Z)("div",{className:"pager-more"},void 0,(0,i.Z)(H.Z,{className:"btn btn-default btn-outline",loading:e.isLoading,onClick:e.loadMore},void 0,gettext("Show older activity"))):null}var W=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(){return(0,o.Z)(this,s),a.apply(this,arguments)}return(0,r.Z)(s,[{key:"getClassName",value:function(){return this.props.className?"form-search "+this.props.className:"form-search"}},{key:"render",value:function(){return(0,i.Z)("div",{className:this.getClassName()},void 0,(0,i.Z)("input",{type:"text",className:"form-control",value:this.props.value,onChange:this.props.onChange,placeholder:this.props.placeholder||gettext("Search...")}),Y||(Y=(0,i.Z)("span",{className:"material-icon"},void 0,"search")))}}]),s}(f().Component),K=n(40429),J=n(6935);var Q=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,p.Z)((0,l.Z)(t),"loadMore",(function(){t.setState({isBusy:!0}),t.loadUsers(t.state.page+1,t.state.search)})),(0,p.Z)((0,l.Z)(t),"search",(function(e){t.setState({isLoaded:!1,isBusy:!0,search:e.target.value,count:0,more:0,page:1,pages:1}),t.loadUsers(1,e.target.value)})),t.setSpecialProps(),b.Z.has(t.PRELOADED_DATA_KEY)?t.initWithPreloadedData(b.Z.pop(t.PRELOADED_DATA_KEY)):t.initWithoutPreloadedData(),t}return(0,r.Z)(s,[{key:"setSpecialProps",value:function(){this.PRELOADED_DATA_KEY="PROFILE_FOLLOWERS",this.TITLE=gettext("Followers"),this.API_FILTER="followers"}},{key:"initWithPreloadedData",value:function(e){this.state={isLoaded:!0,isBusy:!1,search:"",count:e.count,more:e.more,page:e.page,pages:e.pages},q.Z.dispatch((0,J.ZB)(e.results))}},{key:"initWithoutPreloadedData",value:function(){this.state={isLoaded:!1,isBusy:!1,search:"",count:0,more:0,page:1,pages:1},this.loadUsers()}},{key:"loadUsers",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,a=this.props.profile.api[this.API_FILTER];I.Z.get(a,{search:n,page:t||1},"user-"+this.API_FILTER).then((function(n){1===t?q.Z.dispatch((0,J.ZB)(n.results)):q.Z.dispatch((0,J.R3)(n.results)),e.setState({isLoaded:!0,isBusy:!1,count:n.count,more:n.more,page:n.page,pages:n.pages})}),(function(e){j.Z.apiError(e)}))}},{key:"componentDidMount",value:function(){_.Z.set({title:this.TITLE,parent:this.props.profile.username})}},{key:"getLabel",value:function(){if(this.state.isLoaded){if(this.state.search){var e=ngettext("Found %(users)s user.","Found %(users)s users.",this.state.count);return interpolate(e,{users:this.state.count},!0)}if(this.props.profile.id===this.props.user.id){var t=ngettext("You have %(users)s follower.","You have %(users)s followers.",this.state.count);return interpolate(t,{users:this.state.count},!0)}var n=ngettext("%(username)s has %(users)s follower.","%(username)s has %(users)s followers.",this.state.count);return interpolate(n,{username:this.props.profile.username,users:this.state.count},!0)}return gettext("Loading...")}},{key:"getEmptyMessage",value:function(){return this.state.search?gettext("Search returned no users matching specified criteria."):this.props.user.id===this.props.profile.id?gettext("You have no followers."):interpolate(gettext("%(username)s has no followers."),{username:this.props.profile.username},!0)}},{key:"getMoreButton",value:function(){return this.state.more?(0,i.Z)("div",{className:"pager-more"},void 0,(0,i.Z)(H.Z,{className:"btn btn-default btn-outline",loading:this.state.isBusy,onClick:this.loadMore},void 0,interpolate(gettext("Show more (%(more)s)"),{more:this.state.more},!0))):null}},{key:"getListBody",value:function(){return this.state.isLoaded&&0===this.state.count?(0,i.Z)("p",{className:"lead"},void 0,this.getEmptyMessage()):(0,i.Z)("div",{},void 0,(0,i.Z)(K.Z,{cols:3,isReady:this.state.isLoaded,users:this.props.users}),this.getMoreButton())}},{key:"getClassName",value:function(){return"profile-"+this.API_FILTER}},{key:"render",value:function(){return(0,i.Z)("div",{className:this.getClassName()},void 0,(0,i.Z)(T.o8,{},void 0,(0,i.Z)(T.Z2,{auto:!0},void 0,(0,i.Z)(T.Eg,{auto:!0},void 0,(0,i.Z)("h3",{},void 0,this.getLabel()))),(0,i.Z)(T.Z2,{},void 0,(0,i.Z)(T.Eg,{},void 0,(0,i.Z)(W,{value:this.state.search,onChange:this.search,placeholder:gettext("Search users...")})))),this.getListBody())}}]),s}(f().Component);var X=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(){return(0,o.Z)(this,s),a.apply(this,arguments)}return(0,r.Z)(s,[{key:"setSpecialProps",value:function(){this.PRELOADED_DATA_KEY="PROFILE_FOLLOWS",this.TITLE=gettext("Follows"),this.API_FILTER="follows"}},{key:"getLabel",value:function(){if(this.state.isLoaded){if(this.state.search){var e=ngettext("Found %(users)s user.","Found %(users)s users.",this.state.count);return interpolate(e,{users:this.state.count},!0)}if(this.props.profile.id===this.props.user.id){var t=ngettext("You are following %(users)s user.","You are following %(users)s users.",this.state.count);return interpolate(t,{users:this.state.count},!0)}var n=ngettext("%(username)s is following %(users)s user.","%(username)s is following %(users)s users.",this.state.count);return interpolate(n,{username:this.props.profile.username,users:this.state.count},!0)}return gettext("Loading...")}},{key:"getEmptyMessage",value:function(){return this.state.search?gettext("Search returned no users matching specified criteria."):this.props.user.id===this.props.profile.id?gettext("You are not following any users."):interpolate(gettext("%(username)s is not following any users."),{username:this.props.profile.username},!0)}}]),s}(Q),ee=n(7850),te=n(48927);var ne=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,p.Z)((0,l.Z)(t),"loadMore",(function(){t.setState({isBusy:!0}),t.loadChanges(t.state.page+1,t.state.search)})),(0,p.Z)((0,l.Z)(t),"search",(function(e){t.setState({isLoaded:!1,isBusy:!0,search:e.target.value,count:0,more:0,page:1,pages:1}),t.loadChanges(1,e.target.value)})),b.Z.has("PROFILE_NAME_HISTORY")?t.initWithPreloadedData(b.Z.pop("PROFILE_NAME_HISTORY")):t.initWithoutPreloadedData(),t}return(0,r.Z)(s,[{key:"initWithPreloadedData",value:function(e){this.state={isLoaded:!0,isBusy:!1,search:"",count:e.count,more:e.more,page:e.page,pages:e.pages},q.Z.dispatch((0,te.ZB)(e.results))}},{key:"initWithoutPreloadedData",value:function(){this.state={isLoaded:!1,isBusy:!1,search:"",count:0,more:0,page:1,pages:1},this.loadChanges()}},{key:"loadChanges",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;I.Z.get(b.Z.get("USERNAME_CHANGES_API"),{user:this.props.profile.id,search:n,page:t||1},"search-username-history").then((function(n){1===t?q.Z.dispatch((0,te.ZB)(n.results)):q.Z.dispatch((0,te.R3)(n.results)),e.setState({isLoaded:!0,isBusy:!1,count:n.count,more:n.more,page:n.page,pages:n.pages})}),(function(e){j.Z.apiError(e)}))}},{key:"componentDidMount",value:function(){_.Z.set({title:gettext("Username history"),parent:this.props.profile.username})}},{key:"getLabel",value:function(){if(this.state.isLoaded){if(this.state.search){var e=ngettext("Found %(changes)s username change.","Found %(changes)s username changes.",this.state.count);return interpolate(e,{changes:this.state.count},!0)}if(this.props.profile.id===this.props.user.id){var t=ngettext("Your username was changed %(changes)s time.","Your username was changed %(changes)s times.",this.state.count);return interpolate(t,{changes:this.state.count},!0)}var n=ngettext("%(username)s's username was changed %(changes)s time.","%(username)s's username was changed %(changes)s times.",this.state.count);return interpolate(n,{username:this.props.profile.username,changes:this.state.count},!0)}return gettext("Loading...")}},{key:"getEmptyMessage",value:function(){return this.state.search?gettext("Search returned no username changes matching specified criteria."):this.props.user.id===this.props.profile.id?gettext("No name changes have been recorded for your account."):interpolate(gettext("%(username)s's username was never changed."),{username:this.props.profile.username},!0)}},{key:"getMoreButton",value:function(){return this.state.more?(0,i.Z)("div",{className:"pager-more"},void 0,(0,i.Z)(H.Z,{className:"btn btn-default btn-outline",loading:this.state.isBusy,onClick:this.loadMore},void 0,interpolate(gettext("Show older (%(more)s)"),{more:this.state.more},!0))):null}},{key:"render",value:function(){return(0,i.Z)("div",{className:"profile-username-history"},void 0,(0,i.Z)(T.o8,{},void 0,(0,i.Z)(T.Z2,{auto:!0},void 0,(0,i.Z)(T.Eg,{auto:!0},void 0,(0,i.Z)("h3",{},void 0,this.getLabel()))),(0,i.Z)(T.Z2,{},void 0,(0,i.Z)(T.Eg,{},void 0,(0,i.Z)(W,{value:this.state.search,onChange:this.search,placeholder:gettext("Search history...")})))),(0,i.Z)(ee.Z,{isLoaded:this.state.isLoaded,emptyMessage:this.getEmptyMessage(),changes:this.props["username-history"]}),this.getMoreButton())}}]),s}(f().Component),ae=n(82125),se=n(27519),ie=n(59131),oe=n(19605),re=n(98936),le=n(99755);var ce,ue=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,p.Z)((0,l.Z)(t),"action",(function(){t.setState({isLoading:!0}),t.props.profile.is_followed?q.Z.dispatch((0,se.r$)({is_followed:!1,followers:t.props.profile.followers-1})):q.Z.dispatch((0,se.r$)({is_followed:!0,followers:t.props.profile.followers+1})),I.Z.post(t.props.profile.api.follow).then((function(e){t.setState({isLoading:!1}),q.Z.dispatch((0,se.r$)(e))}),(function(e){t.setState({isLoading:!1}),j.Z.apiError(e)}))})),t.state={isLoading:!1},t}return(0,r.Z)(s,[{key:"getClassName",value:function(){return this.props.profile.is_followed?this.props.className+" btn-default btn-following":this.props.className+" btn-default btn-follow"}},{key:"getIcon",value:function(){return this.props.profile.is_followed?"favorite":"favorite_border"}},{key:"getLabel",value:function(){return this.props.profile.is_followed?gettext("Following"):gettext("Follow")}},{key:"render",value:function(){return(0,i.Z)(H.Z,{className:this.getClassName(),disabled:this.state.isLoading,onClick:this.action},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,this.getIcon()),this.getLabel())}}]),s}(f().Component),de=n(27950);var pe,he,fe=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(){var e;(0,o.Z)(this,s);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return e=a.call.apply(a,[this].concat(n)),(0,p.Z)((0,l.Z)(e),"onClick",(function(){de.Z.open({mode:"START_PRIVATE",submit:b.Z.get("PRIVATE_THREADS_API"),to:[e.props.profile]})})),e}return(0,r.Z)(s,[{key:"render",value:function(){var e=this.props.user.acl.can_start_private_threads,t=this.props.user.id===this.props.profile.id;return!e||t?null:(0,i.Z)("button",{className:this.props.className,onClick:this.onClick,type:"button"},void 0,ce||(ce=(0,i.Z)("span",{className:"material-icon"},void 0,"comment")),gettext("Message"))}}]),s}(f().Component),ve=n(43345),me=n(96359),Ze=n(3784),ge=n(7227),be=n(30337);var ye,_e,Ne=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),(t=a.call(this,e)).state={isLoaded:!1,isLoading:!1,error:null,is_avatar_locked:"",avatar_lock_user_message:"",avatar_lock_staff_message:""},t}return(0,r.Z)(s,[{key:"componentDidMount",value:function(){var e=this;I.Z.get(this.props.profile.api.moderate_avatar).then((function(t){e.setState({isLoaded:!0,is_avatar_locked:t.is_avatar_locked,avatar_lock_user_message:t.avatar_lock_user_message||"",avatar_lock_staff_message:t.avatar_lock_staff_message||""})}),(function(t){e.setState({isLoaded:!0,error:t.detail})}))}},{key:"clean",value:function(){return!!this.isValid()||(j.Z.error(this.validate().username[0]),!1)}},{key:"send",value:function(){return I.Z.post(this.props.profile.api.moderate_avatar,{is_avatar_locked:this.state.is_avatar_locked,avatar_lock_user_message:this.state.avatar_lock_user_message,avatar_lock_staff_message:this.state.avatar_lock_staff_message})}},{key:"handleSuccess",value:function(e){q.Z.dispatch((0,J.n1)(this.props.profile,e.avatar_hash)),j.Z.success(gettext("Avatar controls have been changed."))}},{key:"getFormBody",value:function(){return(0,i.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,i.Z)("div",{className:"modal-body"},void 0,(0,i.Z)(me.Z,{label:gettext("Lock avatar"),helpText:gettext("Locking user avatar will prohibit user from changing his avatar and will reset his/her avatar to default one."),for:"id_is_avatar_locked"},void 0,(0,i.Z)(ge.Z,{id:"id_is_avatar_locked",disabled:this.state.isLoading,iconOn:"lock_outline",iconOff:"lock_open",labelOn:gettext("Disallow user from changing avatar"),labelOff:gettext("Allow user to change avatar"),onChange:this.bindInput("is_avatar_locked"),value:this.state.is_avatar_locked})),(0,i.Z)(me.Z,{label:gettext("User message"),helpText:gettext("Optional message for user explaining why he/she is prohibited form changing avatar."),for:"id_avatar_lock_user_message"},void 0,(0,i.Z)("textarea",{id:"id_avatar_lock_user_message",className:"form-control",rows:"4",disabled:this.state.isLoading,onChange:this.bindInput("avatar_lock_user_message"),value:this.state.avatar_lock_user_message})),(0,i.Z)(me.Z,{label:gettext("Staff message"),helpText:gettext("Optional message for forum team members explaining why user is prohibited form changing avatar."),for:"id_avatar_lock_staff_message"},void 0,(0,i.Z)("textarea",{id:"id_avatar_lock_staff_message",className:"form-control",rows:"4",disabled:this.state.isLoading,onChange:this.bindInput("avatar_lock_staff_message"),value:this.state.avatar_lock_staff_message}))),(0,i.Z)("div",{className:"modal-footer"},void 0,(0,i.Z)("button",{type:"button",className:"btn btn-default","data-dismiss":"modal"},void 0,gettext("Close")),(0,i.Z)(H.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Save changes"))))}},{key:"getModalBody",value:function(){return this.state.error?(0,i.Z)(be.Z,{icon:"remove_circle_outline",message:this.state.error}):this.state.isLoaded?this.getFormBody():pe||(pe=(0,i.Z)(Ze.Z,{}))}},{key:"getClassName",value:function(){return this.state.error?"modal-dialog modal-message modal-avatar-controls":"modal-dialog modal-avatar-controls"}},{key:"render",value:function(){return(0,i.Z)("div",{className:this.getClassName(),role:"document"},void 0,(0,i.Z)("div",{className:"modal-content"},void 0,(0,i.Z)("div",{className:"modal-header"},void 0,(0,i.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},void 0,he||(he=(0,i.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,i.Z)("h4",{className:"modal-title"},void 0,gettext("Avatar controls"))),this.getModalBody()))}}]),s}(ve.Z),ke=n(55210);var xe,we,Re,Ce=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),(t=a.call(this,e)).state={isLoaded:!1,isLoading:!1,error:null,username:"",validators:{username:[ke.lG()]}},t}return(0,r.Z)(s,[{key:"componentDidMount",value:function(){var e=this;I.Z.get(this.props.profile.api.moderate_username).then((function(){e.setState({isLoaded:!0})}),(function(t){e.setState({isLoaded:!0,error:t.detail})}))}},{key:"clean",value:function(){return!!this.isValid()||(j.Z.error(this.validate().username[0]),!1)}},{key:"send",value:function(){return I.Z.post(this.props.profile.api.moderate_username,{username:this.state.username})}},{key:"handleSuccess",value:function(e){this.setState({username:""}),q.Z.dispatch((0,te.KP)(e,this.props.profile,this.props.user)),q.Z.dispatch((0,J._S)(this.props.profile,e.username,e.slug)),j.Z.success(gettext("Username has been changed."))}},{key:"getFormBody",value:function(){return(0,i.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,i.Z)("div",{className:"modal-body"},void 0,(0,i.Z)(me.Z,{label:gettext("New username"),for:"id_username"},void 0,(0,i.Z)("input",{type:"text",id:"id_username",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("username"),value:this.state.username}))),(0,i.Z)("div",{className:"modal-footer"},void 0,(0,i.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,i.Z)(H.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Change username"))))}},{key:"getModalBody",value:function(){return this.state.error?(0,i.Z)(be.Z,{icon:"remove_circle_outline",message:this.state.error}):this.state.isLoaded?this.getFormBody():ye||(ye=(0,i.Z)(Ze.Z,{}))}},{key:"getClassName",value:function(){return this.state.error?"modal-dialog modal-message modal-rename-user":"modal-dialog modal-rename-user"}},{key:"render",value:function(){return(0,i.Z)("div",{className:this.getClassName(),role:"document"},void 0,(0,i.Z)("div",{className:"modal-content"},void 0,(0,i.Z)("div",{className:"modal-header"},void 0,(0,i.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},void 0,_e||(_e=(0,i.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,i.Z)("h4",{className:"modal-title"},void 0,gettext("Change username"))),this.getModalBody()))}}]),s}(ve.Z);var Se,Ee,Le,Pe=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,p.Z)((0,l.Z)(t),"countdown",(function(){window.setTimeout((function(){t.state.countdown>1?(t.setState({countdown:t.state.countdown-1}),t.countdown()):t.state.confirm||t.setState({confirm:!0})}),1e3)})),t.state={isLoaded:!1,isLoading:!1,isDeleted:!1,error:null,countdown:5,confirm:!1,with_content:!1},t}return(0,r.Z)(s,[{key:"componentDidMount",value:function(){var e=this;I.Z.get(this.props.profile.api.delete).then((function(){e.setState({isLoaded:!0}),e.countdown()}),(function(t){e.setState({isLoaded:!0,error:t.detail})}))}},{key:"send",value:function(){return I.Z.post(this.props.profile.api.delete,{with_content:this.state.with_content})}},{key:"handleSuccess",value:function(){y.Z.stop("user-profile"),this.state.with_content?this.setState({isDeleted:interpolate(gettext("%(username)s's account, threads, posts and other content has been deleted."),{username:this.props.profile.username},!0)}):this.setState({isDeleted:interpolate(gettext("%(username)s's account has been deleted and other content has been hidden."),{username:this.props.profile.username},!0)})}},{key:"getButtonLabel",value:function(){return this.state.confirm?interpolate(gettext("Delete %(username)s"),{username:this.props.profile.username},!0):interpolate(gettext("Please wait... (%(countdown)ss)"),{countdown:this.state.countdown},!0)}},{key:"getForm",value:function(){return(0,i.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,i.Z)("div",{className:"modal-body"},void 0,(0,i.Z)(me.Z,{label:gettext("User content"),for:"id_with_content"},void 0,(0,i.Z)(ge.Z,{id:"id_with_content",disabled:this.state.isLoading,labelOn:gettext("Delete together with user's account"),labelOff:gettext("Hide after deleting user's account"),onChange:this.bindInput("with_content"),value:this.state.with_content}))),(0,i.Z)("div",{className:"modal-footer"},void 0,(0,i.Z)("button",{type:"button",className:"btn btn-default","data-dismiss":"modal"},void 0,gettext("Cancel")),(0,i.Z)(H.Z,{className:"btn-danger",loading:this.state.isLoading,disabled:!this.state.confirm},void 0,this.getButtonLabel())))}},{key:"getDeletedBody",value:function(){return(0,i.Z)("div",{className:"modal-body"},void 0,xe||(xe=(0,i.Z)("div",{className:"message-icon"},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,i.Z)("div",{className:"message-body"},void 0,(0,i.Z)("p",{className:"lead"},void 0,this.state.isDeleted),(0,i.Z)("p",{},void 0,(0,i.Z)("a",{href:b.Z.get("USERS_LIST_URL")},void 0,gettext("Return to users list")))))}},{key:"getModalBody",value:function(){return this.state.error?(0,i.Z)(be.Z,{icon:"remove_circle_outline",message:this.state.error}):this.state.isLoaded?this.state.isDeleted?this.getDeletedBody():this.getForm():we||(we=(0,i.Z)(Ze.Z,{}))}},{key:"getClassName",value:function(){return this.state.error||this.state.isDeleted?"modal-dialog modal-message modal-delete-account":"modal-dialog modal-delete-account"}},{key:"render",value:function(){return(0,i.Z)("div",{className:this.getClassName(),role:"document"},void 0,(0,i.Z)("div",{className:"modal-content"},void 0,(0,i.Z)("div",{className:"modal-header"},void 0,(0,i.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},void 0,Re||(Re=(0,i.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,i.Z)("h4",{className:"modal-title"},void 0,gettext("Delete user account"))),this.getModalBody()))}}]),s}(ve.Z),Oe=n(59801);var Te,Ae,Be,Ie,je,De=function(e){return{tick:e.tick,user:e.auth,profile:e.profile}},Ue=function(e){(0,c.Z)(h,e);var t,n,a=(t=h,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function h(){var e;(0,o.Z)(this,h);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return e=a.call.apply(a,[this].concat(n)),(0,p.Z)((0,l.Z)(e),"showAvatarDialog",(function(){Oe.Z.show((0,s.$j)(De)(Ne))})),(0,p.Z)((0,l.Z)(e),"showRenameDialog",(function(){Oe.Z.show((0,s.$j)(De)(Ce))})),(0,p.Z)((0,l.Z)(e),"showDeleteDialog",(function(){Oe.Z.show((0,s.$j)(De)(Pe))})),e}return(0,r.Z)(h,[{key:"render",value:function(){var e=this.props.moderation;return(0,i.Z)("ul",{className:"dropdown-menu dropdown-menu-right",role:"menu"},void 0,!!e.avatar&&(0,i.Z)("li",{},void 0,(0,i.Z)("button",{type:"button",className:"btn btn-link",onClick:this.showAvatarDialog},void 0,Se||(Se=(0,i.Z)("span",{className:"material-icon"},void 0,"portrait")),gettext("Avatar controls"))),!!e.rename&&(0,i.Z)("li",{},void 0,(0,i.Z)("button",{type:"button",className:"btn btn-link",onClick:this.showRenameDialog},void 0,Ee||(Ee=(0,i.Z)("span",{className:"material-icon"},void 0,"credit_card")),gettext("Change username"))),!!e.delete&&(0,i.Z)("li",{},void 0,(0,i.Z)("button",{type:"button",className:"btn btn-link",onClick:this.showDeleteDialog},void 0,Le||(Le=(0,i.Z)("span",{className:"material-icon"},void 0,"clear")),gettext("Delete account"))))}}]),h}(f().Component),Me=n(24678),ze=function(e){var t=e.profile;return(0,i.Z)("ul",{className:"profile-data-list"},void 0,!1===t.is_active&&(0,i.Z)("li",{className:"user-account-disabled"},void 0,(0,i.Z)("abbr",{title:gettext("This user's account has been disabled by administrator.")},void 0,gettext("Account disabled"))),(0,i.Z)("li",{className:"user-status-display"},void 0,(0,i.Z)(Me.ZP,{user:t,status:t.status},void 0,(0,i.Z)(Me.Jj,{user:t,status:t.status}),(0,i.Z)(Me.pg,{user:t,status:t.status,className:"status-label"}))),t.rank.is_tab?(0,i.Z)("li",{className:"user-rank"},void 0,(0,i.Z)("a",{href:t.rank.url,className:"item-title"},void 0,t.rank.name)):(0,i.Z)("li",{className:"user-rank"},void 0,(0,i.Z)("span",{className:"item-title"},void 0,t.rank.name)),(t.title||t.rank.title)&&(0,i.Z)("li",{className:"user-title"},void 0,t.title||t.rank.title),(0,i.Z)("li",{className:"user-joined-on"},void 0,(0,i.Z)("abbr",{title:interpolate(gettext("Joined on %(joined_on)s"),{joined_on:t.joined_on.format("LL, LT")},!0)},void 0,interpolate(gettext("Joined %(joined_on)s"),{joined_on:t.joined_on.fromNow()},!0))),t.email&&(0,i.Z)("li",{className:"user-email"},void 0,(0,i.Z)("a",{href:"mailto:"+t.email,className:"item-title"},void 0,t.email)))},He=function(){return(0,i.Z)("button",{className:"btn btn-default btn-icon btn-outline dropdown-toggle",type:"button",title:gettext("Options"),"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,je||(je=(0,i.Z)("span",{className:"material-icon"},void 0,"settings")))},Fe=function(e){var t=e.profile,n=e.user,a=e.moderation,s=e.message,o=e.follow;return(0,i.Z)(le.sP,{},void 0,(0,i.Z)(le.mr,{styleName:t.rank.css_class?"rank-"+t.rank.css_class:"profile"},void 0,(0,i.Z)(le.gC,{styleName:t.rank.css_class?"rank-"+t.rank.css_class:"profile"},void 0,(0,i.Z)("div",{className:"profile-page-header"},void 0,(0,i.Z)("div",{className:"profile-page-header-avatar"},void 0,(0,i.Z)(oe.ZP,{className:"user-avatar hidden-sm hidden-md hidden-lg",user:t,size:200,size2x:400}),(0,i.Z)(oe.ZP,{className:"user-avatar hidden-xs hidden-md hidden-lg",user:t,size:64,size2x:128}),(0,i.Z)(oe.ZP,{className:"user-avatar hidden-xs hidden-sm",user:t,size:128,size2x:256})),(0,i.Z)("h1",{},void 0,t.username))),(0,i.Z)(le.eA,{className:"profile-page-header-details"},void 0,(0,i.Z)(re.gq,{},void 0,(0,i.Z)(re.kw,{auto:!0},void 0,(0,i.Z)(re.Z6,{},void 0,(0,i.Z)(ze,{profile:t}))),s&&(0,i.Z)(re.kw,{},void 0,(0,i.Z)(re.Z6,{},void 0,(0,i.Z)(fe,{className:"btn btn-default btn-block btn-outline",profile:t,user:n})),a.available&&!o&&(0,i.Z)(re.Z6,{shrink:!0},void 0,(0,i.Z)("div",{className:"dropdown"},void 0,Te||(Te=(0,i.Z)(He,{})),(0,i.Z)(Ue,{profile:t,moderation:a})))),o&&(0,i.Z)(re.kw,{},void 0,(0,i.Z)(re.Z6,{},void 0,(0,i.Z)(ue,{className:"btn btn-block btn-outline",profile:t})),a.available&&(0,i.Z)(re.Z6,{shrink:!0},void 0,(0,i.Z)("div",{className:"dropdown"},void 0,Ae||(Ae=(0,i.Z)(He,{})),(0,i.Z)(Ue,{profile:t,moderation:a})))),a.available&&!o&&!s&&(0,i.Z)(re.kw,{},void 0,(0,i.Z)(re.Z6,{className:"hidden-xs",shrink:!0},void 0,(0,i.Z)("div",{className:"dropdown"},void 0,Be||(Be=(0,i.Z)(He,{})),(0,i.Z)(Ue,{profile:t,moderation:a}))),(0,i.Z)(re.Z6,{className:"hidden-sm hidden-md hidden-lg"},void 0,(0,i.Z)("div",{className:"dropdown"},void 0,(0,i.Z)("button",{className:"btn btn-default btn-block btn-outline dropdown-toggle",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,Ie||(Ie=(0,i.Z)("span",{className:"material-icon"},void 0,"settings")),gettext("Options")),(0,i.Z)(Ue,{profile:t,moderation:a}))))))))},qe=n(69987),Ye=n(94417),Ve=function(e){var t=e.baseUrl,n=e.page,a=e.pages;return(0,i.Z)("div",{className:"nav-container"},void 0,(0,i.Z)("div",{className:"dropdown hidden-sm hidden-md hidden-lg"},void 0,(0,i.Z)("button",{className:"btn btn-default btn-block btn-outline dropdown-toggle",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,n.icon),n.name),(0,i.Z)("ul",{className:"dropdown-menu stick-to-bottom"},void 0,a.map((function(e){return(0,i.Z)("li",{},e.component,(0,i.Z)(qe.rU,{to:t+e.component+"/"},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,e.icon),e.name))})))),(0,i.Z)("ul",{className:"nav nav-pills hidden-xs",role:"menu"},void 0,a.map((function(e){return(0,i.Z)(Ye.Z,{path:t+e.component+"/"},e.component,(0,i.Z)(qe.rU,{to:t+e.component+"/"},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,e.icon),e.name))}))))};var $e=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,p.Z)((0,l.Z)(t),"update",(function(e){q.Z.dispatch((0,se.ZB)(e))})),t.startPolling(e.profile.api.index),t}return(0,r.Z)(s,[{key:"startPolling",value:function(e){y.Z.start({poll:"user-profile",url:e,frequency:9e4,update:this.update})}},{key:"render",value:function(){var e=this,t=b.Z.get("PROFILE").url,n=b.Z.get("PROFILE_PAGES"),a=n.filter((function(n){var a=t+n.component+"/";return e.props.location.pathname===a}))[0],s=this.props,o=s.profile,r=s.user,l=Ge(o,r),c=r.acl.can_start_private_threads&&o.id!==r.id,u=o.acl.can_follow&&o.id!==r.id;return(0,i.Z)("div",{className:"page page-user-profile"},void 0,(0,i.Z)(Fe,{profile:this.props.profile,user:this.props.user,moderation:l,message:c,follow:u}),(0,i.Z)(ie.Z,{},void 0,(0,i.Z)(Ve,{baseUrl:t,page:a,pages:n}),this.props.children))}}]),s}(ae.Z),Ge=function(e,t){var n={available:!1,rename:!1,avatar:!1,delete:!1};return t.is_anonymouse||(n.rename=e.acl.can_rename,n.avatar=e.acl.can_moderate_avatar,n.delete=e.acl.can_delete,n.available=n.rename||n.avatar||n.delete),n};function We(e){return{isAuthenticated:e.auth.user.id===e.profile.id,tick:e.tick.tick,user:e.auth.user,users:e.users,posts:e.posts,profile:e.profile,profileDetails:e["profile-details"],"username-history":e["username-history"]}}var Ke={posts:function(e){var t;t=e.user.id===e.profile.id?gettext("You have posted no messages."):interpolate(gettext("%(username)s posted no messages."),{username:e.profile.username},!0);var n=null;if(e.posts.isLoaded)if(e.profile.id===e.user.id){var a=ngettext("You have posted %(posts)s message.","You have posted %(posts)s messages.",e.profile.posts);n=interpolate(a,{posts:e.profile.posts},!0)}else{var s=ngettext("%(username)s has posted %(posts)s message.","%(username)s has posted %(posts)s messages.",e.profile.posts);n=interpolate(s,{username:e.profile.username,posts:e.profile.posts},!0)}else n=gettext("Loading...");return f().createElement(V,(0,M.Z)({api:e.profile.api.posts,emptyMessage:t,header:n,title:gettext("Posts")},e))},threads:function(e){var t;t=e.user.id===e.profile.id?gettext("You have no started threads."):interpolate(gettext("%(username)s started no threads."),{username:e.profile.username},!0);var n=null;if(e.posts.isLoaded)if(e.profile.id===e.user.id){var a=ngettext("You have started %(threads)s thread.","You have started %(threads)s threads.",e.profile.threads);n=interpolate(a,{threads:e.profile.threads},!0)}else{var s=ngettext("%(username)s has started %(threads)s thread.","%(username)s has started %(threads)s threads.",e.profile.threads);n=interpolate(s,{username:e.profile.username,threads:e.profile.threads},!0)}else n=gettext("Loading...");return f().createElement(V,(0,M.Z)({api:e.profile.api.threads,emptyMessage:t,header:n,title:gettext("Threads")},e))},followers:Q,follows:X,details:U,"username-history":ne,"ban-details":N};function Je(){var e=[];return b.Z.get("PROFILE_PAGES").forEach((function(t){e.push(Object.assign({},t,{path:b.Z.get("PROFILE").url+t.component+"/",component:(0,s.$j)(We)(Ke[t.component])}))})),e}var Qe=n(39633);b.Z.addInitializer({name:"component:profile",initializer:function(e){e.has("PROFILE")&&e.has("PROFILE_PAGES")&&(0,Qe.Z)({root:b.Z.get("PROFILE").url,component:(0,s.$j)(We)($e),paths:Je()})},after:"reducer:profile-hydrate"})},32488:function(e,t,n){"use strict";var a,s=n(32233),i=n(97326),o=n(4942),r=n(22928),l=n(15671),c=n(43144),u=n(79340),d=n(6215),p=n(61120),h=n(57588),f=n.n(h),v=n(82211),m=n(43345),Z=n(78657),g=n(53904),b=n(55210),y=n(93051);function _(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,p.Z)(e);if(t){var s=(0,p.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,d.Z)(this,n)}}var N=function(e){(0,u.Z)(n,e);var t=_(n);function n(e){var a;return(0,l.Z)(this,n),(a=t.call(this,e)).state={isLoading:!1,email:"",validators:{email:[b.Do()]}},a}return(0,c.Z)(n,[{key:"clean",value:function(){return!!this.isValid()||(g.Z.error(gettext("Enter a valid email address.")),!1)}},{key:"send",value:function(){return Z.Z.post(s.Z.get("SEND_ACTIVATION_API"),{email:this.state.email})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){["already_active","inactive_admin"].indexOf(e.code)>-1?g.Z.info(e.detail):403===e.status&&e.ban?(0,y.Z)(e.ban):g.Z.apiError(e)}},{key:"render",value:function(){return(0,r.Z)("div",{className:"well well-form well-form-request-activation-link"},void 0,(0,r.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,r.Z)("div",{className:"form-group"},void 0,(0,r.Z)("div",{className:"control-input"},void 0,(0,r.Z)("input",{type:"text",className:"form-control",placeholder:gettext("Your e-mail address"),disabled:this.state.isLoading,onChange:this.bindInput("email"),value:this.state.email}))),(0,r.Z)(v.Z,{className:"btn-primary btn-block",loading:this.state.isLoading},void 0,gettext("Send link"))))}}]),n}(m.Z),k=function(e){(0,u.Z)(n,e);var t=_(n);function n(){return(0,l.Z)(this,n),t.apply(this,arguments)}return(0,c.Z)(n,[{key:"getMessage",value:function(){return interpolate(gettext("Activation link was sent to %(email)s"),{email:this.props.user.email},!0)}},{key:"render",value:function(){return(0,r.Z)("div",{className:"well well-form well-form-request-activation-link well-done"},void 0,(0,r.Z)("div",{className:"done-message"},void 0,a||(a=(0,r.Z)("div",{className:"message-icon"},void 0,(0,r.Z)("span",{className:"material-icon"},void 0,"check"))),(0,r.Z)("div",{className:"message-body"},void 0,(0,r.Z)("p",{},void 0,this.getMessage())),(0,r.Z)("button",{className:"btn btn-primary btn-block",type:"button",onClick:this.props.callback},void 0,gettext("Request another link"))))}}]),n}(f().Component),x=function(e){(0,u.Z)(n,e);var t=_(n);function n(e){var a;return(0,l.Z)(this,n),a=t.call(this,e),(0,o.Z)((0,i.Z)(a),"complete",(function(e){a.setState({complete:e})})),(0,o.Z)((0,i.Z)(a),"reset",(function(){a.setState({complete:!1})})),a.state={complete:!1},a}return(0,c.Z)(n,[{key:"render",value:function(){return this.state.complete?(0,r.Z)(k,{user:this.state.complete,callback:this.reset}):(0,r.Z)(N,{callback:this.complete})}}]),n}(f().Component),w=n(4869);s.Z.addInitializer({name:"component:request-activation-link",initializer:function(){document.getElementById("request-activation-link-mount")&&(0,w.Z)(x,"request-activation-link-mount",!1)},after:"store"})},11768:function(e,t,n){"use strict";var a,s,i=n(32233),o=n(97326),r=n(4942),l=n(22928),c=n(15671),u=n(43144),d=n(79340),p=n(6215),h=n(61120),f=n(57588),v=n.n(f),m=n(73935),Z=n.n(m),g=n(82211),b=n(43345),y=n(78657),_=n(53904),N=n(55210),k=n(93051);function x(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,h.Z)(e);if(t){var s=(0,h.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,p.Z)(this,n)}}var w=function(e){(0,d.Z)(n,e);var t=x(n);function n(e){var a;return(0,c.Z)(this,n),(a=t.call(this,e)).state={isLoading:!1,email:"",validators:{email:[N.Do()]}},a}return(0,u.Z)(n,[{key:"clean",value:function(){return!!this.isValid()||(_.Z.error(gettext("Enter a valid email address.")),!1)}},{key:"send",value:function(){return y.Z.post(i.Z.get("SEND_PASSWORD_RESET_API"),{email:this.state.email})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){["inactive_user","inactive_admin"].indexOf(e.code)>-1?this.props.showInactivePage(e):403===e.status&&e.ban?(0,k.Z)(e.ban):_.Z.apiError(e)}},{key:"render",value:function(){return(0,l.Z)("div",{className:"well well-form well-form-request-password-reset"},void 0,(0,l.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,l.Z)("div",{className:"form-group"},void 0,(0,l.Z)("div",{className:"control-input"},void 0,(0,l.Z)("input",{type:"text",className:"form-control",placeholder:gettext("Your e-mail address"),disabled:this.state.isLoading,onChange:this.bindInput("email"),value:this.state.email}))),(0,l.Z)(g.Z,{className:"btn-primary btn-block",loading:this.state.isLoading},void 0,gettext("Send link"))))}}]),n}(b.Z),R=function(e){(0,d.Z)(n,e);var t=x(n);function n(){return(0,c.Z)(this,n),t.apply(this,arguments)}return(0,u.Z)(n,[{key:"getMessage",value:function(){return interpolate(gettext("Reset password link was sent to %(email)s"),{email:this.props.user.email},!0)}},{key:"render",value:function(){return(0,l.Z)("div",{className:"well well-form well-form-request-password-reset well-done"},void 0,(0,l.Z)("div",{className:"done-message"},void 0,a||(a=(0,l.Z)("div",{className:"message-icon"},void 0,(0,l.Z)("span",{className:"material-icon"},void 0,"check"))),(0,l.Z)("div",{className:"message-body"},void 0,(0,l.Z)("p",{},void 0,this.getMessage())),(0,l.Z)("button",{type:"button",className:"btn btn-primary btn-block",onClick:this.props.callback},void 0,gettext("Request another link"))))}}]),n}(v().Component),C=function(e){(0,d.Z)(n,e);var t=x(n);function n(){return(0,c.Z)(this,n),t.apply(this,arguments)}return(0,u.Z)(n,[{key:"getActivateButton",value:function(){return"inactive_user"===this.props.activation?(0,l.Z)("p",{},void 0,(0,l.Z)("a",{href:i.Z.get("REQUEST_ACTIVATION_URL")},void 0,gettext("Activate your account."))):null}},{key:"render",value:function(){return(0,l.Z)("div",{className:"page page-message page-message-info page-forgotten-password-inactive"},void 0,(0,l.Z)("div",{className:"container"},void 0,(0,l.Z)("div",{className:"message-panel"},void 0,s||(s=(0,l.Z)("div",{className:"message-icon"},void 0,(0,l.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,l.Z)("div",{className:"message-body"},void 0,(0,l.Z)("p",{className:"lead"},void 0,gettext("Your account is inactive.")),(0,l.Z)("p",{},void 0,this.props.message),this.getActivateButton()))))}}]),n}(v().Component),S=function(e){(0,d.Z)(n,e);var t=x(n);function n(e){var a;return(0,c.Z)(this,n),a=t.call(this,e),(0,r.Z)((0,o.Z)(a),"complete",(function(e){a.setState({complete:e})})),(0,r.Z)((0,o.Z)(a),"reset",(function(){a.setState({complete:!1})})),a.state={complete:!1},a}return(0,u.Z)(n,[{key:"showInactivePage",value:function(e){Z().render((0,l.Z)(C,{activation:e.code,message:e.detail}),document.getElementById("page-mount"))}},{key:"render",value:function(){return this.state.complete?(0,l.Z)(R,{callback:this.reset,user:this.state.complete}):(0,l.Z)(w,{callback:this.complete,showInactivePage:this.showInactivePage})}}]),n}(v().Component),E=n(4869);i.Z.addInitializer({name:"component:request-password-reset",initializer:function(){document.getElementById("request-password-reset-mount")&&(0,E.Z)(S,"request-password-reset-mount",!1)},after:"store"})},61323:function(e,t,n){"use strict";var a,s=n(32233),i=n(97326),o=n(4942),r=n(22928),l=n(15671),c=n(43144),u=n(79340),d=n(6215),p=n(61120),h=n(57588),f=n.n(h),v=n(73935),m=n.n(v),Z=n(82211),g=n(43345),b=n(14467),y=n(78657),_=n(98274),N=n(59801),k=n(53904),x=n(93051),w=n(19755);function R(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,p.Z)(e);if(t){var s=(0,p.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,d.Z)(this,n)}}var C=function(e){(0,u.Z)(n,e);var t=R(n);function n(e){var a;return(0,l.Z)(this,n),(a=t.call(this,e)).state={isLoading:!1,password:""},a}return(0,c.Z)(n,[{key:"clean",value:function(){return!!this.state.password.trim().length||(k.Z.error(gettext("Enter new password.")),!1)}},{key:"send",value:function(){return y.Z.post(s.Z.get("CHANGE_PASSWORD_API"),{password:this.state.password})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){403===e.status&&e.ban?(0,x.Z)(e.ban):k.Z.apiError(e)}},{key:"render",value:function(){return(0,r.Z)("div",{className:"well well-form well-form-reset-password"},void 0,(0,r.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,r.Z)("div",{className:"form-group"},void 0,(0,r.Z)("div",{className:"control-input"},void 0,(0,r.Z)("input",{type:"password",className:"form-control",placeholder:gettext("Enter new password"),disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),(0,r.Z)(Z.Z,{className:"btn-primary btn-block",loading:this.state.isLoading},void 0,gettext("Change password"))))}}]),n}(g.Z),S=function(e){(0,u.Z)(n,e);var t=R(n);function n(){return(0,l.Z)(this,n),t.apply(this,arguments)}return(0,c.Z)(n,[{key:"getMessage",value:function(){return interpolate(gettext("%(username)s, your password has been changed successfully."),{username:this.props.user.username},!0)}},{key:"showSignIn",value:function(){N.Z.show(b.Z)}},{key:"render",value:function(){return(0,r.Z)("div",{className:"page page-message page-message-success page-forgotten-password-changed"},void 0,(0,r.Z)("div",{className:"container"},void 0,(0,r.Z)("div",{className:"message-panel"},void 0,a||(a=(0,r.Z)("div",{className:"message-icon"},void 0,(0,r.Z)("span",{className:"material-icon"},void 0,"check"))),(0,r.Z)("div",{className:"message-body"},void 0,(0,r.Z)("p",{className:"lead"},void 0,this.getMessage()),(0,r.Z)("p",{},void 0,gettext("You will have to sign in using new password before continuing.")),(0,r.Z)("p",{},void 0,(0,r.Z)("button",{type:"button",className:"btn btn-primary",onClick:this.showSignIn},void 0,gettext("Sign in")))))))}}]),n}(f().Component),E=function(e){(0,u.Z)(n,e);var t=R(n);function n(){var e;(0,l.Z)(this,n);for(var a=arguments.length,s=new Array(a),c=0;c<a;c++)s[c]=arguments[c];return e=t.call.apply(t,[this].concat(s)),(0,o.Z)((0,i.Z)(e),"complete",(function(e){_.Z.softSignOut(),w('#hidden-login-form input[name="redirect_to"]').remove(),m().render((0,r.Z)(S,{user:e}),document.getElementById("page-mount"))})),e}return(0,c.Z)(n,[{key:"render",value:function(){return(0,r.Z)(C,{callback:this.complete})}}]),n}(f().Component),L=n(4869);s.Z.addInitializer({name:"component:reset-password-form",initializer:function(){document.getElementById("reset-password-form-mount")&&(0,L.Z)(E,"reset-password-form-mount",!1)},after:"store"})},15049:function(e,t,n){"use strict";var a,s=n(37424),i=n(22928),o=n(87462),r=n(57588),l=n.n(r),c=n(59131),u=n(15671),d=n(43144),p=n(97326),h=n(79340),f=n(6215),v=n(61120),m=n(4942),Z=n(32233),g=n(43345),b=n(21981),y=n(16427),_=n(6935),N=n(78657),k=n(53904),x=n(90287),w=n(98936),R=n(99755);var C=function(e){(0,h.Z)(o,e);var t,n,s=(t=o,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function o(e){var t;return(0,u.Z)(this,o),t=s.call(this,e),(0,m.Z)((0,p.Z)(t),"onQueryChange",(function(e){t.changeValue("query",e.target.value)})),t.state={isLoading:!1,query:e.search.query},t}return(0,d.Z)(o,[{key:"componentDidMount",value:function(){this.state.query.length&&this.handleSubmit()}},{key:"clean",value:function(){return!!this.state.query.trim().length||(k.Z.error(gettext("You have to enter search query.")),!1)}},{key:"send",value:function(){x.Z.dispatch((0,y.Vx)({isLoading:!0}));var e=this.state.query.trim(),t=window.location.href,n=t.indexOf("?q=");return n>0&&(t=t.substring(0,n+3)),window.history.pushState({},"",t+encodeURIComponent(e)),N.Z.get(Z.Z.get("SEARCH_API"),{q:e})}},{key:"handleSuccess",value:function(e){x.Z.dispatch((0,y.Vx)({query:this.state.query.trim(),isLoading:!1,providers:e})),e.forEach((function(e){"users"===e.id?x.Z.dispatch((0,_.ZB)(e.results.results)):"threads"===e.id&&x.Z.dispatch((0,b.zD)(e.results))}))}},{key:"handleError",value:function(e){k.Z.apiError(e),x.Z.dispatch((0,y.Vx)({isLoading:!1}))}},{key:"render",value:function(){return(0,i.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,i.Z)(R.sP,{},void 0,(0,i.Z)(R.mr,{styleName:"site-search"},void 0,(0,i.Z)(R.gC,{styleName:"site-search"},void 0,(0,i.Z)("h1",{},void 0,gettext("Search"))),(0,i.Z)(R.eA,{className:"page-header-search-form"},void 0,(0,i.Z)(w.gq,{},void 0,(0,i.Z)(w.kw,{auto:!0},void 0,(0,i.Z)(w.Z6,{},void 0,(0,i.Z)("input",{className:"form-control",disabled:this.state.isLoading,type:"text",value:this.state.query,placeholder:gettext("Search"),onChange:this.onQueryChange})),(0,i.Z)(w.Z6,{shrink:!0},void 0,(0,i.Z)("button",{className:"btn btn-secondary btn-icon btn-outline",disabled:this.state.isLoading},void 0,a||(a=(0,i.Z)("span",{className:"material-icon"},void 0,"search"))))))))))}}]),o}(g.Z),S=n(69987);function E(e){return(0,i.Z)("div",{className:"list-group nav-side"},void 0,e.providers.map((function(e){return(0,i.Z)(S.rU,{activeClassName:"active",className:"list-group-item",to:e.url},e.id,(0,i.Z)("span",{className:"material-icon"},void 0,e.icon),e.name,(0,i.Z)(L,{results:e.results}))})))}function L(e){if(!e.results)return null;var t=e.results.count;return t>1e6?t=Math.ceil(t/1e6)+"KK":t>1e3&&(t=Math.ceil(t/1e3)+"K"),(0,i.Z)("span",{className:"badge"},void 0,t)}function P(e){return(0,i.Z)("div",{className:"page page-search"},void 0,(0,i.Z)(C,{provider:e.provider,search:e.search}),(0,i.Z)(c.Z,{},void 0,(0,i.Z)("div",{className:"row"},void 0,(0,i.Z)("div",{className:"col-md-3"},void 0,(0,i.Z)(E,{providers:e.search.providers})),(0,i.Z)("div",{className:"col-md-9"},void 0,e.children,(0,i.Z)(O,{provider:e.provider,search:e.search})))))}function O(e){var t=null;if(e.search.providers.forEach((function(n){n.id===e.provider.id&&(t=n.time)})),null===t)return null;var n=gettext("Search took %(time)s s to complete");return(0,i.Z)("footer",{className:"search-footer"},void 0,(0,i.Z)("p",{},void 0,interpolate(n,{time:t},!0)))}var T=n(11005),A=n(82211);function B(e){return(0,i.Z)("div",{},void 0,(0,i.Z)(T.Z,{isReady:!0,posts:e.results}),l().createElement(I,e))}n(69092);var I=function(e){(0,h.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function s(){var e;(0,u.Z)(this,s);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return e=a.call.apply(a,[this].concat(n)),(0,m.Z)((0,p.Z)(e),"onClick",(function(){x.Z.dispatch((0,b.Vx)({isBusy:!0})),N.Z.get(e.props.provider.api,{q:e.props.query,page:e.props.next}).then((function(e){e.forEach((function(e){"threads"===e.id&&(x.Z.dispatch((0,b.R3)(e.results)),x.Z.dispatch((0,y.P0)(e)))})),x.Z.dispatch((0,b.Vx)({isBusy:!1}))}),(function(e){k.Z.apiError(e),x.Z.dispatch((0,b.Vx)({isBusy:!1}))}))})),e}return(0,d.Z)(s,[{key:"render",value:function(){return this.props.more?(0,i.Z)("div",{className:"pager-more"},void 0,(0,i.Z)(A.Z,{className:"btn btn-default btn-outline",loading:this.props.isBusy,onClick:this.onClick},void 0,gettext("Show more"))):null}}]),s}(l().Component);function j(e){var t=e.children,n=e.loading,a=e.posts,s=e.query;return a&&a.count?t:s.length?(0,i.Z)("p",{className:"lead"},void 0,n?gettext("Loading results..."):gettext("No threads matching search query have been found.")):(0,i.Z)("p",{className:"lead"},void 0,gettext("Enter at least two characters to search threads."))}var D=n(40429);function U(e){var t=e.children,n=e.loading,a=e.query;return e.users.length?t:a.length?(0,i.Z)("p",{className:"lead"},void 0,n?gettext("Loading results..."):gettext("No users matching search query have been found.")):(0,i.Z)("p",{className:"lead"},void 0,gettext("Enter at least two characters to search users."))}var M={threads:function(e){return(0,i.Z)(P,{provider:e.route.provider,search:e.search},void 0,(0,i.Z)(j,{loading:e.search.isLoading,query:e.search.query,posts:e.posts},void 0,l().createElement(B,(0,o.Z)({provider:e.route.provider,query:e.search.query},e.posts))))},users:function(e){return(0,i.Z)(P,{provider:e.route.provider,search:e.search},void 0,(0,i.Z)(U,{loading:e.search.isLoading,query:e.search.query,users:e.users},void 0,(0,i.Z)(D.Z,{cols:3,isReady:!e.search.isLoading,users:e.users})))}};function z(e){return{posts:e.posts,search:e.search,tick:e.tick.tick,user:e.auth.user,users:e.users}}var H=n(39633);Z.Z.addInitializer({name:"component:search",initializer:function(e){var t;"misago:search"===e.get("CURRENT_LINK")&&(0,H.Z)({paths:(t=Z.Z.get("SEARCH_PROVIDERS"),t.map((function(e){return{path:e.url,component:(0,s.$j)(z)(M[e.id]),provider:e}})))})},after:"store"})},61814:function(e,t,n){"use strict";var a=n(37424),s=n(32233),i=n(22928),o=n(15671),r=n(43144),l=n(79340),c=n(6215),u=n(61120),d=n(57588);var p={info:"alert-info",success:"alert-success",warning:"alert-warning",error:"alert-danger"},h=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(){return(0,o.Z)(this,s),a.apply(this,arguments)}return(0,r.Z)(s,[{key:"getSnackbarClass",value:function(){var e="alerts-snackbar";return this.props.isVisible?e+=" in":e+=" out",e}},{key:"render",value:function(){return(0,i.Z)("div",{className:this.getSnackbarClass()},void 0,(0,i.Z)("p",{className:"alert "+p[this.props.type]},void 0,this.props.message))}}]),s}(n.n(d)().Component);function f(e){return e.snackbar}var v=n(4869);s.Z.addInitializer({name:"component:snackbar",initializer:function(){(0,v.Z)((0,a.$j)(f)(h),"snackbar-mount")},after:"snackbar"})},95920:function(e,t,n){"use strict";var a=n(57588),s=n.n(a),i=n(22928),o=n(15671),r=n(43144),l=n(97326),c=n(79340),u=n(6215),d=n(61120),p=n(4942),h=n(32233),f=n(26106),v=n(82211),m=n(43345),Z=n(96359),g=n(78657),b=n(53904),y=n(55210),_=function(e){var t=e.backendName,n=gettext("Sign in with %(backend)s"),a=interpolate(n,{backend:t},!0);return(0,i.Z)("div",{className:"page-header-bg"},void 0,(0,i.Z)("div",{className:"page-header"},void 0,(0,i.Z)("div",{className:"container"},void 0,(0,i.Z)("h1",{},void 0,a))))};function N(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function k(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?N(Object(n),!0).forEach((function(t){(0,p.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):N(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var x=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;(0,o.Z)(this,s),t=a.call(this,e),(0,p.Z)((0,l.Z)(t),"handlePrivacyPolicyChange",(function(e){var n=e.target.value;t.handleToggleAgreement("privacyPolicy",n)})),(0,p.Z)((0,l.Z)(t),"handleTermsOfServiceChange",(function(e){var n=e.target.value;t.handleToggleAgreement("termsOfService",n)})),(0,p.Z)((0,l.Z)(t),"handleToggleAgreement",(function(e,n){t.setState((function(a,s){if(null===a[e]){var i=k(k({},a.errors),{},(0,p.Z)({},e,null));return(0,p.Z)({errors:i},e,n)}var o=t.state.validators[e][0],r=k(k({},a.errors),{},(0,p.Z)({},e,[o(null)]));return(0,p.Z)({errors:r},e,null)}))}));var n={email:[y.Do()],username:[y.lG()]};return h.Z.get("TERMS_OF_SERVICE_ID")&&(n.termsOfService=[y.fT()]),h.Z.get("PRIVACY_POLICY_ID")&&(n.privacyPolicy=[y.jA()]),t.state={email:e.email||"",emailProtected:!!e.email,username:e.username||"",termsOfService:null,privacyPolicy:null,validators:n,errors:{},isLoading:!1},t}return(0,r.Z)(s,[{key:"clean",value:function(){if(this.validate(),-1!==[this.state.email.trim().length,this.state.username.trim().length].indexOf(0))return b.Z.error(gettext("Fill out all fields.")),!1;var e=this.state.validators;return h.Z.get("TERMS_OF_SERVICE_ID")&&null===this.state.termsOfService?(b.Z.error(e.termsOfService[0](null)),!1):!h.Z.get("PRIVACY_POLICY_ID")||null!==this.state.privacyPolicy||(b.Z.error(e.privacyPolicy[0](null)),b.Z.error(gettext("You need to accept the privacy policy.")),!1)}},{key:"send",value:function(){return g.Z.post(this.props.url,{email:this.state.email,username:this.state.username,terms_of_service:this.state.termsOfService,privacy_policy:this.state.privacyPolicy})}},{key:"handleSuccess",value:function(e){(0,this.props.onRegistrationComplete)(e)}},{key:"handleError",value:function(e){if(200===e.status)(0,this.props.onRegistrationComplete)({activation:"active",step:"done",username:this.state.username});else if(400===e.status){var t={errors:e};e.email&&(t.emailProtected=!1),this.setState(t)}else b.Z.apiError(e)}},{key:"render",value:function(){var e=this.props.backend_name,t=this.state,n=t.email,a=t.emailProtected,s=t.username,o=t.isLoading,r=null;if(a){var l=gettext("Your e-mail address has been verified by %(backend)s.");r=interpolate(l,{backend:e},!0)}return(0,i.Z)("div",{className:"page page-social-auth page-social-sauth-register"},void 0,(0,i.Z)(_,{backendName:e}),(0,i.Z)("div",{className:"container"},void 0,(0,i.Z)("div",{className:"row"},void 0,(0,i.Z)("div",{className:"col-md-6 col-md-offset-3"},void 0,(0,i.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,i.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,i.Z)("div",{className:"panel-heading"},void 0,(0,i.Z)("h3",{className:"panel-title"},void 0,gettext("Complete your details"))),(0,i.Z)("div",{className:"panel-body"},void 0,(0,i.Z)(Z.Z,{for:"id_username",label:gettext("Username"),validation:this.state.errors.username},void 0,(0,i.Z)("input",{type:"text",id:"id_username",className:"form-control",disabled:o,onChange:this.bindInput("username"),value:s})),(0,i.Z)(Z.Z,{for:"id_email",label:gettext("E-mail address"),helpText:r,validation:a?null:this.state.errors.email},void 0,(0,i.Z)("input",{type:"email",id:"id_email",className:"form-control",disabled:o||a,onChange:this.bindInput("email"),value:n})),(0,i.Z)(f.Z,{errors:this.state.errors,privacyPolicy:this.state.privacyPolicy,termsOfService:this.state.termsOfService,onPrivacyPolicyChange:this.handlePrivacyPolicyChange,onTermsOfServiceChange:this.handleTermsOfServiceChange})),(0,i.Z)("div",{className:"panel-footer"},void 0,(0,i.Z)(v.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Sign in")))))))))}}]),s}(m.Z),w=function(e){var t,n,a=e.activation,s=e.backend_name,o=e.username;return n="user"===a?gettext("%(username)s, your account has been created but you need to activate it before you will be able to sign in."):"admin"===a?gettext("%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in."):gettext("%(username)s, your account has been created and you have been signed in to it."),t="active"===a?"check":"info_outline",(0,i.Z)("div",{className:"page page-social-auth page-social-sauth-register"},void 0,(0,i.Z)(_,{backendName:s}),(0,i.Z)("div",{className:"container"},void 0,(0,i.Z)("div",{className:"row"},void 0,(0,i.Z)("div",{className:"col-md-6 col-md-offset-3"},void 0,(0,i.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,i.Z)("div",{className:"panel-heading"},void 0,(0,i.Z)("h3",{className:"panel-title"},void 0,gettext("Registration completed!"))),(0,i.Z)("div",{className:"panel-body panel-message-body"},void 0,(0,i.Z)("div",{className:"message-icon"},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,t)),(0,i.Z)("div",{className:"message-body"},void 0,(0,i.Z)("p",{className:"lead"},void 0,interpolate(n,{username:o},!0)),(0,i.Z)("p",{className:"help-block"},void 0,(0,i.Z)("a",{className:"btn btn-default",href:h.Z.get("MISAGO_PATH")},void 0,gettext("Return to forum index"))))))))))};var R=function(e){(0,c.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,d.Z)(t);if(n){var s=(0,d.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,u.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,p.Z)((0,l.Z)(t),"handleRegistrationComplete",(function(e){var n=e.activation,a=e.email,s=e.step,i=e.username;t.setState({activation:n,email:a,step:s,username:i})})),t.state={step:e.step,activation:e.activation||"",email:e.email||"",username:e.username||""},t}return(0,r.Z)(s,[{key:"render",value:function(){var e=this.props,t=e.backend_name,n=e.url,a=this.state,s=a.activation,o=a.email,r=a.step,l=a.username;return"register"===r?(0,i.Z)(x,{backend_name:t,email:o,url:n,username:l,onRegistrationComplete:this.handleRegistrationComplete}):(0,i.Z)(w,{activation:s,backend_name:t,email:o,url:n,username:l})}}]),s}(s().Component),C=n(4869);h.Z.addInitializer({name:"component:social-auth",initializer:function(e){if("misago:social-complete"===e.get("CURRENT_LINK")){var t=e.get("SOCIAL_AUTH_FORM");(0,C.Z)(s().createElement(R,t),"page-mount")}},after:"store"})},59203:function(e,t,n){"use strict";var a,s,i=n(37424),o=n(22928),r=n(15671),l=n(43144),c=n(97326),u=n(79340),d=n(6215),p=n(61120),h=n(4942),f=n(57588),v=n.n(f),m=n(87462),Z=n(43345),g=n(96359),b=n(8154),y=n(7738),_=n(78657),N=n(59801),k=n(53904),x=n(90287);var w,R=function(e){(0,u.Z)(i,e);var t,n,s=(t=i,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function i(e){var t;return(0,r.Z)(this,i),t=s.call(this,e),(0,h.Z)((0,c.Z)(t),"onUsernameChange",(function(e){t.changeValue("username",e.target.value)})),t.state={isLoading:!1,username:""},t}return(0,l.Z)(i,[{key:"clean",value:function(){return!!this.state.username.trim().length||(k.Z.error(gettext("You have to enter user name.")),!1)}},{key:"send",value:function(){return _.Z.patch(this.props.thread.api.index,[{op:"add",path:"participants",value:this.state.username},{op:"add",path:"acl",value:1}])}},{key:"handleSuccess",value:function(e){x.Z.dispatch((0,y.y8)(e)),x.Z.dispatch(b.gx(e.participants)),k.Z.success(gettext("New participant has been added to thread.")),N.Z.hide()}},{key:"render",value:function(){return(0,o.Z)("div",{className:"modal-dialog modal-sm",role:"document"},void 0,(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,a||(a=(0,o.Z)(C,{})),(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(g.Z,{for:"id_username",label:gettext("User to add")},void 0,(0,o.Z)("input",{id:"id_username",className:"form-control",disabled:this.state.isLoading,onChange:this.onUsernameChange,type:"text",value:this.state.username}))),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)("button",{className:"btn btn-block btn-primary",disabled:this.state.isLoading},void 0,gettext("Add participant")),(0,o.Z)("button",{className:"btn btn-block btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel"))))))}}]),i}(Z.Z);function C(e){return(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,s||(s=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Add participant")))}var S=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(){var e;(0,r.Z)(this,s);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return e=a.call.apply(a,[this].concat(n)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){N.Z.show((0,o.Z)(R,{thread:e.props.thread}))})),e}return(0,l.Z)(s,[{key:"render",value:function(){return this.props.thread.acl.can_add_participants?(0,o.Z)("div",{className:"col-xs-12 col-sm-3"},void 0,(0,o.Z)("button",{className:"btn btn-default btn-block",onClick:this.onClick,type:"button"},void 0,w||(w=(0,o.Z)("span",{className:"material-icon"},void 0,"person_add")),gettext("Add participant"))):null}}]),s}(v().Component),E=n(32233);var L=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(e){var t;return(0,r.Z)(this,s),t=a.call(this,e),(0,h.Z)((0,c.Z)(t),"onClick",(function(){var e,n,a=!1;if(t.isUser)a=window.confirm(gettext("Are you sure you want to take over this thread?"));else{var s=gettext("Are you sure you want to change thread owner to %(user)s?");a=window.confirm(interpolate(s,{user:t.props.participant.username},!0))}a&&(e=t.props.thread,n=t.props.participant,_.Z.patch(e.api.index,[{op:"replace",path:"owner",value:n.id},{op:"add",path:"acl",value:1}]).then((function(e){x.Z.dispatch((0,y.y8)(e)),x.Z.dispatch(b.gx(e.participants));var t=gettext("%(user)s has been made new thread owner.");k.Z.success(interpolate(t,{user:n.username},!0))}),(function(e){k.Z.apiError(e)})))})),t.isUser=e.participant.id===e.user.id,t}return(0,l.Z)(s,[{key:"render",value:function(){return this.props.participant.is_owner?null:this.props.thread.acl.can_change_owner?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,gettext("Make owner"))):null}}]),s}(v().Component);var P,O,T,A=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(e){var t;return(0,r.Z)(this,s),t=a.call(this,e),(0,h.Z)((0,c.Z)(t),"onClick",(function(){var e,n,a=!1;if(t.isUser)a=window.confirm(gettext("Are you sure you want to leave this thread?"));else{var s=gettext("Are you sure you want to remove %(user)s from this thread?");a=window.confirm(interpolate(s,{user:t.props.participant.username},!0))}a&&(t.isUser?(e=t.props.thread,n=t.props.participant,_.Z.patch(e.api.index,[{op:"remove",path:"participants",value:n.id}]).then((function(){k.Z.success(gettext("You have left this thread.")),window.setTimeout((function(){window.location=E.Z.get("PRIVATE_THREADS_URL")}),3e3)}),(function(e){k.Z.apiError(e)}))):function(e,t){_.Z.patch(e.api.index,[{op:"remove",path:"participants",value:t.id},{op:"add",path:"acl",value:1}]).then((function(e){x.Z.dispatch((0,y.y8)(e)),x.Z.dispatch(b.gx(e.participants));var n=gettext("%(user)s has been removed from this thread.");k.Z.success(interpolate(n,{user:t.username},!0))}),(function(e){k.Z.apiError(e)}))}(t.props.thread,t.props.participant))})),t.isUser=e.participant.id===e.user.id,t}return(0,l.Z)(s,[{key:"render",value:function(){var e=this.props.user.acl.can_moderate_private_threads;return this.props.userIsOwner||this.isUser||e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,this.isUser?gettext("Leave thread"):gettext("Remove"))):null}}]),s}(v().Component),B=n(19605);function I(e){var t=e.participant,n="btn btn-default";return t.is_owner&&(n="btn btn-primary"),n+=" btn-user btn-block",(0,o.Z)("div",{className:"col-xs-12 col-sm-3 col-md-2 participant-card"},void 0,(0,o.Z)("div",{className:"dropdown"},void 0,(0,o.Z)("button",{"aria-haspopup":"true","aria-expanded":"false",className:n,"data-toggle":"dropdown",type:"button"},void 0,(0,o.Z)(B.ZP,{size:"34",user:t}),(0,o.Z)("span",{className:"btn-text"},void 0,t.username)),(0,o.Z)("ul",{className:"dropdown-menu stick-to-bottom"},void 0,(0,o.Z)(j,{isOwner:t.is_owner}),P||(P=(0,o.Z)("li",{className:"dropdown-header"})),(0,o.Z)("li",{},void 0,(0,o.Z)("a",{href:t.url},void 0,gettext("See profile"))),O||(O=(0,o.Z)("li",{role:"separator",className:"divider"})),v().createElement(L,e),v().createElement(A,e))))}function j(e){return e.isOwner?(0,o.Z)("li",{className:"dropdown-header dropdown-header-owner"},void 0,T||(T=(0,o.Z)("span",{className:"material-icon"},void 0,"start")),(0,o.Z)("span",{className:"icon-text"},void 0,gettext("Thread owner"))):null}function D(e){var t=e.participants,n=e.thread,a=e.user,s=e.userIsOwner;return(0,o.Z)("div",{className:"participants-cards"},void 0,(0,o.Z)("div",{className:"row"},void 0,t.map((function(e){return(0,o.Z)(I,{participant:e,thread:n,user:a,userIsOwner:s},e.id)}))))}function U(e){return e.participants.length?(0,o.Z)("div",{className:"panel panel-default panel-participants"},void 0,(0,o.Z)("div",{className:"panel-body"},void 0,v().createElement(D,(0,m.Z)({userIsOwner:M(e.user,e.participants)},e)),(0,o.Z)("div",{className:"row"},void 0,(0,o.Z)(S,{thread:e.thread}),(0,o.Z)("div",{className:"col-xs-12 col-sm-9"},void 0,(0,o.Z)("p",{},void 0,function(e){var t=e.length,n=ngettext("This thread has %(users)s participant.","This thread has %(users)s participants.",t);return interpolate(n,{users:t},!0)}(e.participants)))))):null}function M(e,t){return t[0].id===e.id}var z=n(91876),H={changed_title:"edit",pinned_globally:"bookmark",pinned_locally:"bookmark_border",unpinned:"panorama_fish_eye",moved:"arrow_forward",merged:"call_merge",approved:"done",opened:"lock_open",closed:"lock_outline",unhid:"visibility",hid:"visibility_off",changed_owner:"grade",tookover:"grade",added_participant:"person_add",owner_left:"person_outline",participant_left:"person_outline",removed_participant:"remove_circle_outline"},F=function(e){return(0,o.Z)("span",{className:"event-icon-bg"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,H[e.post.event_type]))},q=n(89627),Y=n(30381),V=n.n(Y),$=n(92747);function G(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,p.Z)(e);if(t){var s=(0,p.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,d.Z)(this,n)}}function W(e){return e.post.acl.can_hide?(0,o.Z)("li",{className:"event-controls"},void 0,v().createElement(K,e),v().createElement(J,e),v().createElement(Q,e)):null}var K=function(e){(0,u.Z)(n,e);var t=G(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){x.Z.dispatch($.r$(e.props.post,{is_hidden:!0,hidden_on:V()(),hidden_by_name:e.props.user.username,url:Object.assign(e.props.post.url,{hidden_by:e.props.user.url})})),_.Z.patch(e.props.post.api.index,[{op:"replace",path:"is-hidden",value:!0}]).then((function(t){x.Z.dispatch($.r$(e.props.post,t))}),(function(t){400===t.status?k.Z.error(t.detail[0]):k.Z.apiError(t),x.Z.dispatch($.r$(e.props.post,{is_hidden:!1}))}))})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.is_hidden?null:(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,gettext("Hide"))}}]),n}(v().Component),J=function(e){(0,u.Z)(n,e);var t=G(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){x.Z.dispatch($.r$(e.props.post,{is_hidden:!1})),_.Z.patch(e.props.post.api.index,[{op:"replace",path:"is-hidden",value:!1}]).then((function(t){x.Z.dispatch($.r$(e.props.post,t))}),(function(t){400===t.status?k.Z.error(t.detail[0]):k.Z.apiError(t),x.Z.dispatch($.r$(e.props.post,{is_hidden:!0}))}))})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.is_hidden?(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,gettext("Unhide")):null}}]),n}(v().Component),Q=function(e){(0,u.Z)(n,e);var t=G(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){window.confirm(gettext("Are you sure you wish to delete this event? This action is not reversible!"))&&e.delete()})),(0,h.Z)((0,c.Z)(e),"delete",(function(){x.Z.dispatch($.r$(e.props.post,{isDeleted:!0})),_.Z.delete(e.props.post.api.index).then((function(){k.Z.success(gettext("Event has been deleted."))}),(function(t){400===t.status?k.Z.error(t.detail[0]):k.Z.apiError(t),x.Z.dispatch($.r$(e.props.post,{isDeleted:!1}))}))})),e}return(0,l.Z)(n,[{key:"render",value:function(){return(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,gettext("Delete"))}}]),n}(v().Component),X='<span class="item-title">%(user)s</span>',ee='<a href="%(url)s" class="item-title">%(user)s</a>';function te(e){return(0,o.Z)("ul",{className:"list-inline event-info"},void 0,v().createElement(ne,e),v().createElement(ae,e),v().createElement(W,e))}function ne(e){if(e.post.is_hidden){var t;t=e.post.url.hidden_by?interpolate(ee,{url:(0,q.Z)(e.post.url.hidden_by),user:(0,q.Z)(e.post.hidden_by_name)},!0):interpolate(X,{user:(0,q.Z)(e.post.hidden_by_name)},!0);var n=interpolate('<abbr title="%(absolute)s">%(relative)s</abbr>',{absolute:(0,q.Z)(e.post.hidden_on.format("LLL")),relative:(0,q.Z)(e.post.hidden_on.fromNow())},!0),a=interpolate((0,q.Z)(gettext("Hidden by %(event_by)s %(event_on)s.")),{event_by:t,event_on:n},!0);return(0,o.Z)("li",{className:"event-hidden-message",dangerouslySetInnerHTML:{__html:a}})}return null}function ae(e){var t;t=e.post.poster?interpolate(ee,{url:(0,q.Z)(e.post.poster.url),user:(0,q.Z)(e.post.poster_name)},!0):interpolate(X,{user:(0,q.Z)(e.post.poster_name)},!0);var n=interpolate('<a href="%(url)s" title="%(absolute)s">%(relative)s</a>',{url:(0,q.Z)(e.post.url.index),absolute:(0,q.Z)(e.post.posted_on.format("LLL")),relative:(0,q.Z)(e.post.posted_on.fromNow())},!0),a=interpolate((0,q.Z)(gettext("By %(event_by)s %(event_on)s.")),{event_by:t,event_on:n},!0);return(0,o.Z)("li",{className:"event-posters",dangerouslySetInnerHTML:{__html:a}})}var se={pinned_globally:gettext("Thread has been pinned globally."),pinned_locally:gettext("Thread has been pinned locally."),unpinned:gettext("Thread has been unpinned."),approved:gettext("Thread has been approved."),opened:gettext("Thread has been opened."),closed:gettext("Thread has been closed."),unhid:gettext("Thread has been revealed."),hid:gettext("Thread has been made hidden."),tookover:gettext("Took thread over."),owner_left:gettext("Owner has left thread. This thread is now closed."),participant_left:gettext("Participant has left thread.")},ie='<a href="%(url)s" class="item-title">%(name)s</a>',oe='<span class="item-title">%(name)s</span>';function re(e){return se[e.post.event_type]?(0,o.Z)("p",{className:"event-message"},void 0,se[e.post.event_type]):"changed_title"===e.post.event_type?v().createElement(le,e):"moved"===e.post.event_type?v().createElement(ce,e):"merged"===e.post.event_type?v().createElement(ue,e):"changed_owner"===e.post.event_type?v().createElement(de,e):"added_participant"===e.post.event_type?v().createElement(pe,e):"removed_participant"===e.post.event_type?v().createElement(he,e):null}function le(e){var t=(0,q.Z)(gettext("Thread title has been changed from %(old_title)s.")),n=interpolate(oe,{name:(0,q.Z)(e.post.event_context.old_title)},!0),a=interpolate(t,{old_title:n},!0);return(0,o.Z)("p",{className:"event-message",dangerouslySetInnerHTML:{__html:a}})}function ce(e){var t=(0,q.Z)(gettext("Thread has been moved from %(from_category)s.")),n=interpolate(ie,{url:(0,q.Z)(e.post.event_context.from_category.url),name:(0,q.Z)(e.post.event_context.from_category.name)},!0),a=interpolate(t,{from_category:n},!0);return(0,o.Z)("p",{className:"event-message",dangerouslySetInnerHTML:{__html:a}})}function ue(e){var t=(0,q.Z)(gettext("The %(merged_thread)s thread has been merged into this thread.")),n=interpolate(oe,{name:(0,q.Z)(e.post.event_context.merged_thread)},!0),a=interpolate(t,{merged_thread:n},!0);return(0,o.Z)("p",{className:"event-message",dangerouslySetInnerHTML:{__html:a}})}function de(e){var t=(0,q.Z)(gettext("Changed thread owner to %(user)s.")),n=interpolate(ie,{url:(0,q.Z)(e.post.event_context.user.url),name:(0,q.Z)(e.post.event_context.user.username)},!0),a=interpolate(t,{user:n},!0);return(0,o.Z)("p",{className:"event-message",dangerouslySetInnerHTML:{__html:a}})}function pe(e){var t=(0,q.Z)(gettext("Added %(user)s to thread.")),n=interpolate(ie,{url:(0,q.Z)(e.post.event_context.user.url),name:(0,q.Z)(e.post.event_context.user.username)},!0),a=interpolate(t,{user:n},!0);return(0,o.Z)("p",{className:"event-message",dangerouslySetInnerHTML:{__html:a}})}function he(e){var t=(0,q.Z)(gettext("Removed %(user)s from thread.")),n=interpolate(ie,{url:(0,q.Z)(e.post.event_context.user.url),name:(0,q.Z)(e.post.event_context.user.username)},!0),a=interpolate(t,{user:n},!0);return(0,o.Z)("p",{className:"event-message",dangerouslySetInnerHTML:{__html:a}})}function fe(e){return e.post.is_read?null:(0,o.Z)("div",{className:"event-label"},void 0,(0,o.Z)("span",{className:"label label-unread"},void 0,gettext("New event")))}var ve=n(19755);var me=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(){return(0,r.Z)(this,s),a.apply(this,arguments)}return(0,l.Z)(s,[{key:"componentDidMount",value:function(){var e=this;this.props.post.is_read||ve(this.element).waypoint({handler:function(t){"down"!==t||e.props.post.is_read||window.setTimeout((function(){var t=e.element.getBoundingClientRect(),n=t.height+t.top,a=document.documentElement.clientHeight;n<5||n>a||(x.Z.dispatch($.r$(e.props.post,{is_read:!0})),_.Z.post(e.props.post.api.read).then((function(t){x.Z.dispatch(y.Vx(e.props.thread,{is_read:t.thread_is_read}))}),(function(e){k.Z.apiError(e)})))}),1e3)},offset:"bottom-in-view"})}},{key:"render",value:function(){var e=this;return v().createElement("div",{className:this.props.className,ref:function(t){t&&(e.element=t)}},this.props.children)}}]),s}(v().Component);function Ze(e){var t="event";return e.post.isDeleted?t="hide":e.post.is_hidden&&(t="event post-hidden"),(0,o.Z)("li",{id:"post-"+e.post.id,className:t},void 0,(0,o.Z)(fe,{post:e.post}),(0,o.Z)("div",{className:"event-body"},void 0,(0,o.Z)("div",{className:"event-icon"},void 0,v().createElement(F,e)),(0,o.Z)(me,{className:"event-content",post:e.post},void 0,v().createElement(re,e),v().createElement(te,e))))}var ge=n(69130),be=n(48772);function ye(e){return(0,o.Z)("div",{className:"col-xs-12 col-md-6"},void 0,v().createElement(_e,e),(0,o.Z)("div",{className:"post-attachment"},void 0,(0,o.Z)("a",{href:e.attachment.url.index,className:"attachment-name item-title"},void 0,e.attachment.filename),v().createElement(xe,e)))}function _e(e){return e.attachment.is_image?(0,o.Z)("div",{className:"post-attachment-preview"},void 0,v().createElement(ke,e)):(0,o.Z)("div",{className:"post-attachment-preview"},void 0,v().createElement(Ne,e))}function Ne(e){return(0,o.Z)("a",{href:e.attachment.url.index,className:"material-icon"},void 0,"insert_drive_file")}function ke(e){var t=e.attachment.url.thumb||e.attachment.url.index;return(0,o.Z)("a",{className:"post-thumbnail",href:e.attachment.url.index,style:{backgroundImage:'url("'+(0,q.Z)(t)+'")'}})}function xe(e){var t;t=e.attachment.url.uploader?interpolate('<a href="%(url)s" class="item-title">%(user)s</a>',{url:(0,q.Z)(e.attachment.url.uploader),user:(0,q.Z)(e.attachment.uploader_name)},!0):interpolate('<span class="item-title">%(user)s</span>',{user:(0,q.Z)(e.attachment.uploader_name)},!0);var n=interpolate('<abbr title="%(absolute)s">%(relative)s</abbr>',{absolute:(0,q.Z)(e.attachment.uploaded_on.format("LLL")),relative:(0,q.Z)(e.attachment.uploaded_on.fromNow())},!0),a=interpolate((0,q.Z)(gettext("%(filetype)s, %(size)s, uploaded by %(uploader)s %(uploaded_on)s.")),{filetype:e.attachment.filetype,size:(0,be.Z)(e.attachment.size),uploader:t,uploaded_on:n},!0);return(0,o.Z)("p",{className:"post-attachment-description",dangerouslySetInnerHTML:{__html:a}})}function we(e){return function(e){return(!e.is_hidden||e.acl.can_see_hidden)&&e.attachments}(e.post)?(0,o.Z)("div",{className:"post-attachments"},void 0,(0,ge.Z)(e.post.attachments,2).map((function(e){var t=e.map((function(e){return e?e.id:0})).join("_");return(0,o.Z)(Re,{row:e},t)}))):null}function Re(e){return(0,o.Z)("div",{className:"row"},void 0,e.row.map((function(e){return(0,o.Z)(ye,{attachment:e},e?e.id:0)})))}var Ce,Se,Ee,Le,Pe=n(69092);function Oe(e){return e.post.is_hidden&&!e.post.acl.can_see_hidden?v().createElement(Ae,e):e.post.content?v().createElement(Te,e):v().createElement(Be,e)}function Te(e){return(0,o.Z)(me,{className:"post-body",post:e.post},void 0,(0,o.Z)(Pe.Z,{markup:e.post.content}))}function Ae(e){var t;t=e.post.hidden_by?interpolate('<a href="%(url)s" class="item-title">%(user)s</a>',{url:(0,q.Z)(e.post.url.hidden_by),user:(0,q.Z)(e.post.hidden_by_name)},!0):interpolate('<span class="item-title">%(user)s</span>',{user:(0,q.Z)(e.post.hidden_by_name)},!0);var n=interpolate('<abbr class="last-title" title="%(absolute)s">%(relative)s</abbr>',{absolute:(0,q.Z)(e.post.hidden_on.format("LLL")),relative:(0,q.Z)(e.post.hidden_on.fromNow())},!0),a=interpolate((0,q.Z)(gettext("Hidden by %(hidden_by)s %(hidden_on)s.")),{hidden_by:t,hidden_on:n},!0);return(0,o.Z)(me,{className:"post-body post-body-hidden",post:e.post},void 0,(0,o.Z)("p",{className:"lead"},void 0,gettext("This post is hidden. You cannot see its contents.")),(0,o.Z)("p",{className:"text-muted",dangerouslySetInnerHTML:{__html:a}}))}function Be(e){return(0,o.Z)(me,{className:"post-body post-body-invalid",post:e.post},void 0,(0,o.Z)("p",{className:"lead"},void 0,gettext("This post's contents cannot be displayed.")),(0,o.Z)("p",{className:"text-muted"},void 0,gettext("This error is caused by invalid post content manipulation.")))}function Ie(e){var t=e.post,n=e.thread,a=e.user;if(!Me(t)||t.id!==n.best_answer)return null;var s;return s=a.id&&n.best_answer_marked_by===a.id?interpolate(gettext("Marked as best answer by you %(marked_on)s."),{marked_on:n.best_answer_marked_on.fromNow()},!0):interpolate(gettext("Marked as best answer by %(marked_by)s %(marked_on)s."),{marked_by:n.best_answer_marked_by_name,marked_on:n.best_answer_marked_on.fromNow()},!0),(0,o.Z)("div",{className:"post-status-message post-status-best-answer"},void 0,Ce||(Ce=(0,o.Z)("span",{className:"material-icon"},void 0,"check_box")),(0,o.Z)("p",{},void 0,s))}function je(e){return Me(e.post)&&e.post.is_hidden?(0,o.Z)("div",{className:"post-status-message post-status-hidden"},void 0,Se||(Se=(0,o.Z)("span",{className:"material-icon"},void 0,"visibility_off")),(0,o.Z)("p",{},void 0,gettext("This post is hidden. Only users with permission may see its contents."))):null}function De(e){return Me(e.post)&&e.post.is_unapproved?(0,o.Z)("div",{className:"post-status-message post-status-unapproved"},void 0,Ee||(Ee=(0,o.Z)("span",{className:"material-icon"},void 0,"remove_circle_outline")),(0,o.Z)("p",{},void 0,gettext("This post is unapproved. Only users with permission to approve posts and its author may see its contents."))):null}function Ue(e){return Me(e.post)&&e.post.is_protected?(0,o.Z)("div",{className:"post-status-message post-status-protected visible-xs-block"},void 0,Le||(Le=(0,o.Z)("span",{className:"material-icon"},void 0,"lock_outline")),(0,o.Z)("p",{},void 0,gettext("This post is protected. Only moderators may change it."))):null}function Me(e){return!e.is_hidden||e.acl.can_see_hidden}function ze(e){x.Z.dispatch($.r$(e.post,{is_unapproved:!1})),Ge(e,[{op:"replace",path:"is-unapproved",value:!1}],{is_unapproved:e.post.is_unapproved})}function He(e){x.Z.dispatch($.r$(e.post,{is_protected:!0})),Ge(e,[{op:"replace",path:"is-protected",value:!0}],{is_protected:e.post.is_protected})}function Fe(e){x.Z.dispatch($.r$(e.post,{is_protected:!1})),Ge(e,[{op:"replace",path:"is-protected",value:!1}],{is_protected:e.post.is_protected})}function qe(e){x.Z.dispatch($.r$(e.post,{is_hidden:!0,hidden_on:V()(),hidden_by_name:e.user.username,url:Object.assign(e.post.url,{hidden_by:e.user.url})})),Ge(e,[{op:"replace",path:"is-hidden",value:!0}],{is_hidden:e.post.is_hidden,hidden_on:e.post.hidden_on,hidden_by_name:e.post.hidden_by_name,url:e.post.url})}function Ye(e){x.Z.dispatch($.r$(e.post,{is_hidden:!1})),Ge(e,[{op:"replace",path:"is-hidden",value:!1}],{is_hidden:e.post.is_hidden})}function Ve(e){var t=e.post.last_likes||[],n=[e.user].concat(t),a=n.length>3?n.slice(0,-1):n;x.Z.dispatch($.r$(e.post,{is_liked:!0,likes:e.post.likes+1,last_likes:a})),Ge(e,[{op:"replace",path:"is-liked",value:!0}],{is_liked:e.post.is_liked,likes:e.post.likes,last_likes:e.post.last_likes})}function $e(e){x.Z.dispatch($.r$(e.post,{is_liked:!1,likes:e.post.likes-1,last_likes:e.post.last_likes.filter((function(t){return!t.id||t.id!==e.user.id}))}));var t={is_liked:e.post.is_liked,likes:e.post.likes,last_likes:e.post.last_likes};Ge(e,[{op:"replace",path:"is-liked",value:!1}],t)}function Ge(e,t,n){_.Z.patch(e.post.api.index,t).then((function(t){x.Z.dispatch($.r$(e.post,t))}),(function(t){400===t.status?k.Z.error(t.detail[0]):k.Z.apiError(t),x.Z.dispatch($.r$(e.post,n))}))}function We(e){window.confirm(gettext("Are you sure you want to delete this post? This action is not reversible!"))&&(x.Z.dispatch($.r$(e.post,{isDeleted:!0})),_.Z.delete(e.post.api.index).then((function(){k.Z.success(gettext("Post has been deleted."))}),(function(t){400===t.status?k.Z.error(t.detail):k.Z.apiError(t),x.Z.dispatch($.r$(e.post,{isDeleted:!1}))})))}function Ke(e){var t=e.post,n=e.user;x.Z.dispatch(y.Vx({best_answer:t.id,best_answer_is_protected:t.is_protected,best_answer_marked_on:V()(),best_answer_marked_by:n.id,best_answer_marked_by_name:n.username,best_answer_marked_by_slug:n.slug})),Qe(e,[{op:"replace",path:"best-answer",value:t.id},{op:"add",path:"acl",value:!0}],{best_answer:e.thread.best_answer,best_answer_is_protected:e.thread.best_answer_is_protected,best_answer_marked_on:e.thread.best_answer_marked_on,best_answer_marked_by:e.thread.best_answer_marked_by,best_answer_marked_by_name:e.thread.best_answer_marked_by_name,best_answer_marked_by_slug:e.thread.best_answer_marked_by_slug})}function Je(e){var t=e.post;x.Z.dispatch(y.Vx({best_answer:null,best_answer_is_protected:!1,best_answer_marked_on:null,best_answer_marked_by:null,best_answer_marked_by_name:null,best_answer_marked_by_slug:null})),Qe(e,[{op:"remove",path:"best-answer",value:t.id},{op:"add",path:"acl",value:!0}],{best_answer:e.thread.best_answer,best_answer_is_protected:e.thread.best_answer_is_protected,best_answer_marked_on:e.thread.best_answer_marked_on,best_answer_marked_by:e.thread.best_answer_marked_by,best_answer_marked_by_name:e.thread.best_answer_marked_by_name,best_answer_marked_by_slug:e.thread.best_answer_marked_by_slug})}function Qe(e,t,n){_.Z.patch(e.thread.api.index,t).then((function(e){e.best_answer_marked_on&&(e.best_answer_marked_on=V()(e.best_answer_marked_on)),x.Z.dispatch(y.Vx(e))}),(function(e){400===e.status?k.Z.error(e.detail[0]):k.Z.apiError(e),x.Z.dispatch(y.Vx(n))}))}var Xe,et,tt,nt=n(30337),at=n(3784);var st=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(e){var t;return(0,r.Z)(this,s),(t=a.call(this,e)).state={isReady:!1,error:null,likes:[]},t}return(0,l.Z)(s,[{key:"componentDidMount",value:function(){var e=this;_.Z.get(this.props.post.api.likes).then((function(t){e.setState({isReady:!0,likes:t.map(it)})}),(function(t){e.setState({isReady:!0,error:t.detail})}))}},{key:"render",value:function(){return this.state.error?(0,o.Z)(ot,{className:"modal-message"},void 0,(0,o.Z)(nt.Z,{message:this.state.error})):this.state.isReady?this.state.likes.length?(0,o.Z)(ot,{className:"modal-sm",likes:this.state.likes},void 0,(0,o.Z)(rt,{likes:this.state.likes})):(0,o.Z)(ot,{className:"modal-message"},void 0,(0,o.Z)(nt.Z,{message:gettext("No users have liked this post.")})):Xe||(Xe=(0,o.Z)(ot,{className:"modal-sm"},void 0,(0,o.Z)(at.Z,{})))}}]),s}(v().Component);function it(e){return Object.assign({},e,{liked_on:V()(e.liked_on)})}function ot(e){var t=e.className,n=e.children,a=e.likes,s=gettext("Post Likes");if(a){var i=a.length,r=ngettext("%(likes)s like","%(likes)s likes",i);s=interpolate(r,{likes:i},!0)}return(0,o.Z)("div",{className:"modal-dialog "+(t||""),role:"document"},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,et||(et=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,s)),n))}function rt(e){return(0,o.Z)("div",{className:"modal-body modal-post-likers"},void 0,(0,o.Z)("ul",{className:"media-list"},void 0,e.likes.map((function(e){return v().createElement(lt,(0,m.Z)({key:e.id},e))}))))}function lt(e){if(e.url){var t={id:e.liker_id,avatars:e.avatars};return(0,o.Z)("li",{className:"media"},void 0,(0,o.Z)("div",{className:"media-left"},void 0,(0,o.Z)("a",{className:"user-avatar",href:e.url},void 0,(0,o.Z)(B.ZP,{size:"50",user:t}))),(0,o.Z)("div",{className:"media-body"},void 0,(0,o.Z)("a",{className:"item-title",href:e.url},void 0,e.username)," ",(0,o.Z)(ct,{likedOn:e.liked_on})))}return(0,o.Z)("li",{className:"media"},void 0,tt||(tt=(0,o.Z)("div",{className:"media-left"},void 0,(0,o.Z)("span",{className:"user-avatar"},void 0,(0,o.Z)(B.ZP,{size:"50"})))),(0,o.Z)("div",{className:"media-body"},void 0,(0,o.Z)("strong",{},void 0,e.username)," ",(0,o.Z)(ct,{likedOn:e.liked_on})))}function ct(e){return(0,o.Z)("span",{className:"text-muted",title:e.likedOn.format("LLL")},void 0,e.likedOn.fromNow())}var ut,dt,pt,ht,ft=n(27950);function vt(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,p.Z)(e);if(t){var s=(0,p.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,d.Z)(this,n)}}function mt(e){return function(e){return(!e.is_hidden||e.acl.can_see_hidden)&&(e.acl.can_reply||e.acl.can_edit||e.acl.can_see_likes&&(e.last_likes||[]).length||e.acl.can_like)}(e.post)?(0,o.Z)("div",{className:"post-footer"},void 0,v().createElement(Zt,e),v().createElement(gt,e),v().createElement(bt,e),v().createElement(yt,(0,m.Z)({lastLikes:e.post.last_likes,likes:e.post.likes},e)),v().createElement(_t,(0,m.Z)({likes:e.post.likes},e)),v().createElement(wt,e),v().createElement(Rt,e)):null}var Zt=function(e){(0,u.Z)(n,e);var t=vt(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Ke(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.post,n=e.thread;return n.acl.can_mark_best_answer&&t.acl.can_mark_as_best_answer?n.best_answer&&!n.acl.can_change_best_answer?null:(0,o.Z)("button",{className:"hidden-xs btn btn-default btn-sm pull-left",disabled:this.props.post.isBusy||t.id===n.best_answer,onClick:this.onClick,type:"button"},void 0,ut||(ut=(0,o.Z)("span",{className:"material-icon"},void 0,"check_box")),gettext("Best answer")):null}}]),n}(v().Component),gt=function(e){(0,u.Z)(n,e);var t=vt(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Ke(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.post,n=e.thread;return n.acl.can_mark_best_answer&&t.acl.can_mark_as_best_answer?n.best_answer&&!n.acl.can_change_best_answer?null:(0,o.Z)("button",{className:"visible-xs-inline-block btn btn-default btn-sm pull-left",disabled:this.props.post.isBusy||t.id===n.best_answer,onClick:this.onClick,type:"button"},void 0,dt||(dt=(0,o.Z)("span",{className:"material-icon"},void 0,"check_box"))):null}}]),n}(v().Component),bt=function(e){(0,u.Z)(n,e);var t=vt(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){e.props.post.is_liked?$e(e.props):Ve(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){if(!this.props.post.acl.can_like)return null;var e="btn btn-default btn-sm pull-left";return this.props.post.is_liked&&(e="btn btn-success btn-sm pull-left"),(0,o.Z)("button",{className:e,disabled:this.props.post.isBusy,onClick:this.onClick,type:"button"},void 0,this.props.post.is_liked?gettext("Liked"):gettext("Like"))}}]),n}(v().Component),yt=function(e){(0,u.Z)(n,e);var t=vt(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){N.Z.show((0,o.Z)(st,{post:e.props.post}))})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=(this.props.post.last_likes||[]).length>0;return this.props.post.acl.can_see_likes&&e?2===this.props.post.acl.can_see_likes?(0,o.Z)("button",{className:"btn btn-link btn-sm pull-left hidden-xs",onClick:this.onClick,type:"button"},void 0,Nt(this.props.likes,this.props.lastLikes)):(0,o.Z)("p",{className:"pull-left hidden-xs"},void 0,Nt(this.props.likes,this.props.lastLikes)):null}}]),n}(v().Component),_t=function(e){(0,u.Z)(n,e);var t=vt(n);function n(){return(0,r.Z)(this,n),t.apply(this,arguments)}return(0,l.Z)(n,[{key:"render",value:function(){var e=(this.props.post.last_likes||[]).length>0;return this.props.post.acl.can_see_likes&&e?2===this.props.post.acl.can_see_likes?(0,o.Z)("button",{className:"btn btn-link btn-sm likes-compact pull-left visible-xs-block",onClick:this.onClick,type:"button"},void 0,pt||(pt=(0,o.Z)("span",{className:"material-icon"},void 0,"favorite")),this.props.likes):(0,o.Z)("p",{className:"likes-compact pull-left visible-xs-block"},void 0,ht||(ht=(0,o.Z)("span",{className:"material-icon"},void 0,"favorite")),this.props.likes):null}}]),n}(yt);function Nt(e,t){var n=t.slice(0,3).map((function(e){return e.username}));if(1==n.length)return interpolate(gettext("%(user)s likes this."),{user:n[0]},!0);var a=e-n.length,s=n.slice(0,-1).join(", "),i=n.slice(-1)[0],o=interpolate(gettext("%(users)s and %(last_user)s"),{users:s,last_user:i},!0);if(0===a)return interpolate(gettext("%(users)s like this."),{users:o},!0);var r=ngettext("%(users)s and %(likes)s other user like this.","%(users)s and %(likes)s other users like this.",a);return interpolate(r,{users:n.join(", "),likes:a},!0)}var kt,xt,wt=function(e){(0,u.Z)(n,e);var t=vt(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){ft.Z.open({mode:"REPLY",config:e.props.thread.api.editor,submit:e.props.thread.api.posts.index,context:{reply:e.props.post.id}})})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.acl.can_reply?(0,o.Z)("button",{className:"btn btn-primary btn-sm pull-right",type:"button",onClick:this.onClick},void 0,gettext("Reply")):null}}]),n}(v().Component),Rt=function(e){(0,u.Z)(n,e);var t=vt(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){ft.Z.open({mode:"EDIT",config:e.props.post.api.editor,submit:e.props.post.api.index})})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.acl.can_edit?(0,o.Z)("button",{className:"hidden-xs btn btn-default btn-sm pull-right",type:"button",onClick:this.onClick},void 0,gettext("Edit")):null}}]),n}(v().Component),Ct=n(82211);var St=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(e){var t;return(0,r.Z)(this,s),t=a.call(this,e),(0,h.Z)((0,c.Z)(t),"onUrlChange",(function(e){t.changeValue("url",e.target.value)})),t.state={isLoading:!1,url:"",validators:{url:[]},errors:{}},t}return(0,l.Z)(s,[{key:"clean",value:function(){return!!this.state.url.trim().length||(k.Z.error(gettext("You have to enter link to the other thread.")),!1)}},{key:"send",value:function(){return _.Z.post(this.props.thread.api.posts.move,{new_thread:this.state.url,posts:[this.props.post.id]})}},{key:"handleSuccess",value:function(e){x.Z.dispatch($.r$(this.props.post,{isDeleted:!0})),N.Z.hide(),k.Z.success(gettext("Selected post was moved to the other thread."))}},{key:"handleError",value:function(e){400===e.status?k.Z.error(e.detail):k.Z.apiError(e)}},{key:"render",value:function(){return(0,o.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,kt||(kt=(0,o.Z)(Et,{})),(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(g.Z,{for:"id_url",label:gettext("Link to thread you want to move post to")},void 0,(0,o.Z)("input",{className:"form-control",disabled:this.state.isLoading,id:"id_url",onChange:this.onUrlChange,value:this.state.url}))),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)("button",{className:"btn btn-primary",disabled:this.state.isLoading},void 0,gettext("Move post"))))))}}]),s}(Z.Z);function Et(e){return(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,xt||(xt=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Move post")))}function Lt(e){return(0,o.Z)("div",{className:"modal-body post-changelog-diff"},void 0,(0,o.Z)("ul",{className:"list-unstyled"},void 0,e.diff.map((function(e,t){return(0,o.Z)(Pt,{item:e},t)}))))}function Pt(e){return"?"===e.item[0]?null:(0,o.Z)("li",{className:(t=e.item,n="diff-item","-"===t[0]?n+=" diff-item-sub":"+"===t[0]&&(n+=" diff-item-add"),n)},void 0,e.item.substr(2));var t,n}var Ot,Tt,At,Bt=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(){var e;(0,r.Z)(this,s);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return e=a.call.apply(a,[this].concat(n)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){e.props.revertEdit(e.props.edit.id)})),e}return(0,l.Z)(s,[{key:"render",value:function(){return this.props.canRevert?(0,o.Z)("div",{className:"modal-footer visible-xs-block"},void 0,(0,o.Z)(Ct.Z,{className:"btn-default btn-sm btn-block",disabled:this.props.disabled,onClick:this.onClick,title:gettext("Revert post to state from before this edit.")},void 0,gettext("Revert"))):null}}]),s}(v().Component);var It,jt,Dt=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(){var e;(0,r.Z)(this,s);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return e=a.call.apply(a,[this].concat(n)),(0,h.Z)((0,c.Z)(e),"goLast",(function(){e.props.goToEdit()})),(0,h.Z)((0,c.Z)(e),"goForward",(function(){e.props.goToEdit(e.props.edit.next)})),(0,h.Z)((0,c.Z)(e),"goBack",(function(){e.props.goToEdit(e.props.edit.previous)})),(0,h.Z)((0,c.Z)(e),"revertEdit",(function(){e.props.revertEdit(e.props.edit.id)})),e}return(0,l.Z)(s,[{key:"render",value:function(){return(0,o.Z)("div",{className:"modal-toolbar post-changelog-toolbar"},void 0,(0,o.Z)("div",{className:"row"},void 0,(0,o.Z)("div",{className:"col-xs-12 col-sm-4"},void 0,(0,o.Z)("div",{className:"row"},void 0,(0,o.Z)("div",{className:"col-xs-4"},void 0,(0,o.Z)(Ut,{disabled:this.props.disabled,edit:this.props.edit,onClick:this.goBack})),(0,o.Z)("div",{className:"col-xs-4"},void 0,(0,o.Z)(Mt,{disabled:this.props.disabled,edit:this.props.edit,onClick:this.goForward})),(0,o.Z)("div",{className:"col-xs-4"},void 0,(0,o.Z)(zt,{disabled:this.props.disabled,edit:this.props.edit,onClick:this.goLast})))),(0,o.Z)("div",{className:"col-xs-12 col-sm-5 xs-margin-top-half post-change-label"},void 0,(0,o.Z)(Ft,{edit:this.props.edit})),(0,o.Z)(Ht,{canRevert:this.props.canRevert,disabled:this.props.disabled,onClick:this.revertEdit})))}}]),s}(v().Component);function Ut(e){return(0,o.Z)(Ct.Z,{className:"btn-default btn-block btn-icon btn-sm",disabled:e.disabled||!e.edit.previous,onClick:e.onClick,title:gettext("See previous change")},void 0,Ot||(Ot=(0,o.Z)("span",{className:"material-icon"},void 0,"chevron_left")))}function Mt(e){return(0,o.Z)(Ct.Z,{className:"btn-default btn-block btn-icon btn-sm",disabled:e.disabled||!e.edit.next,onClick:e.onClick,title:gettext("See next change")},void 0,Tt||(Tt=(0,o.Z)("span",{className:"material-icon"},void 0,"chevron_right")))}function zt(e){return(0,o.Z)(Ct.Z,{className:"btn-default btn-block btn-icon btn-sm",disabled:e.disabled||!e.edit.next,onClick:e.onClick,title:gettext("See previous change")},void 0,At||(At=(0,o.Z)("span",{className:"material-icon"},void 0,"last_page")))}function Ht(e){return e.canRevert?(0,o.Z)("div",{className:"col-sm-3 hidden-xs"},void 0,(0,o.Z)(Ct.Z,{className:"btn-default btn-sm btn-block",disabled:e.disabled,onClick:e.onClick,title:gettext("Revert post to state from before this edit.")},void 0,gettext("Revert"))):null}function Ft(e){var t;t=e.edit.url.editor?interpolate('<a href="%(url)s" class="item-title">%(user)s</a>',{url:(0,q.Z)(e.edit.url.editor),user:(0,q.Z)(e.edit.editor_name)},!0):interpolate('<span class="item-title">%(user)s</span>',{user:(0,q.Z)(e.edit.editor_name)},!0);var n=interpolate('<abbr title="%(absolute)s">%(relative)s</abbr>',{absolute:(0,q.Z)(e.edit.edited_on.format("LLL")),relative:(0,q.Z)(e.edit.edited_on.fromNow())},!0),a=interpolate((0,q.Z)(gettext("By %(edited_by)s %(edited_on)s.")),{edited_by:t,edited_on:n},!0);return(0,o.Z)("p",{dangerouslySetInnerHTML:{__html:a}})}function qt(e){return Object.assign({},e,{edited_on:V()(e.edited_on)})}var Yt=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(e){var t;return(0,r.Z)(this,s),t=a.call(this,e),(0,h.Z)((0,c.Z)(t),"goToEdit",(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;t.setState({isBusy:!0});var n=t.props.post.api.edits;null!==e&&(n+="?edit="+e),_.Z.get(n).then((function(e){t.setState({isReady:!0,isBusy:!1,edit:qt(e)})}),(function(e){t.setState({isReady:!0,isBusy:!1,error:e.detail})}))})),(0,h.Z)((0,c.Z)(t),"revertEdit",(function(e){if(!t.state.isBusy&&window.confirm(gettext("Are you sure you with to revert this post to the state from before this edit?"))){t.setState({isBusy:!0});var n=t.props.post.api.edits+"?edit="+e;_.Z.post(n).then((function(e){var t=$.ZB(e);x.Z.dispatch($.r$(e,t)),k.Z.success(gettext("Post has been reverted to previous state.")),N.Z.hide()}),(function(e){k.Z.apiError(e),t.setState({isBusy:!1})}))}})),t.state={isReady:!1,isBusy:!0,canRevert:e.post.acl.can_edit,error:null,edit:null},t}return(0,l.Z)(s,[{key:"componentDidMount",value:function(){this.goToEdit()}},{key:"render",value:function(){return this.state.error?(0,o.Z)(Vt,{className:"modal-dialog modal-message"},void 0,(0,o.Z)(nt.Z,{message:this.state.error})):this.state.isReady?(0,o.Z)(Vt,{},void 0,(0,o.Z)(Dt,{canRevert:this.state.canRevert,disabled:this.state.isBusy,edit:this.state.edit,goToEdit:this.goToEdit,revertEdit:this.revertEdit}),(0,o.Z)(Lt,{diff:this.state.edit.diff}),(0,o.Z)(Bt,{canRevert:this.state.canRevert,disabled:this.state.isBusy,edit:this.state.edit,revertEdit:this.revertEdit})):It||(It=(0,o.Z)(Vt,{},void 0,(0,o.Z)(at.Z,{})))}}]),s}(v().Component);function Vt(e){return(0,o.Z)("div",{className:e.className||"modal-dialog",role:"document"},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,jt||(jt=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Post edits history"))),e.children))}var $t,Gt,Wt,Kt,Jt,Qt,Xt=n(57026),en=n(60471),tn=n(55210);function nn(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,p.Z)(e);if(t){var s=(0,p.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,d.Z)(this,n)}}function an(e){return v().createElement(gn,(0,m.Z)({},e,{Form:bn}))}var sn,on,rn,ln,cn,un,dn,pn,hn,fn,vn,mn,Zn,gn=function(e){(0,u.Z)(n,e);var t=nn(n);function n(e){var a;return(0,r.Z)(this,n),(a=t.call(this,e)).state={isLoaded:!1,isError:!1,categories:[]},a}return(0,l.Z)(n,[{key:"componentDidMount",value:function(){var e=this;_.Z.get(misago.get("THREAD_EDITOR_API")).then((function(t){var n=t.map((function(e){return Object.assign(e,{disabled:!1===e.post,label:e.name,value:e.id,post:e.post})}));e.setState({isLoaded:!0,categories:n})}),(function(t){e.setState({isError:t.detail})}))}},{key:"render",value:function(){return this.state.isError?(0,o.Z)(_n,{message:this.state.isError}):this.state.isLoaded?v().createElement(bn,(0,m.Z)({},this.props,{categories:this.state.categories})):$t||($t=(0,o.Z)(yn,{}))}}]),n}(v().Component),bn=function(e){(0,u.Z)(n,e);var t=nn(n);function n(e){var a;return(0,r.Z)(this,n),a=t.call(this,e),(0,h.Z)((0,c.Z)(a),"onCategoryChange",(function(e){var t=e.target.value,n={category:t};a.acl[t].can_pin_threads<n.weight&&(n.weight=0),a.acl[t].can_hide_threads||(n.is_hidden=0),a.acl[t].can_close_threads||(n.is_closed=!1),a.setState(n)})),a.state={isLoading:!1,title:"",category:null,categories:e.categories,weight:0,is_hidden:0,is_closed:!1,validators:{title:[tn.C1()]},errors:{}},a.isHiddenChoices=[{value:0,icon:"visibility",label:gettext("No")},{value:1,icon:"visibility_off",label:gettext("Yes")}],a.isClosedChoices=[{value:!1,icon:"lock_outline",label:gettext("No")},{value:!0,icon:"lock",label:gettext("Yes")}],a.acl={},a.props.categories.forEach((function(e){e.post&&(a.state.category||(a.state.category=e.id),a.acl[e.id]={can_pin_threads:e.post.pin,can_close_threads:e.post.close,can_hide_threads:e.post.hide})})),a}return(0,l.Z)(n,[{key:"clean",value:function(){return!!this.isValid()||(k.Z.error(gettext("Form contains errors.")),this.setState({errors:this.validate()}),!1)}},{key:"send",value:function(){return _.Z.post(this.props.thread.api.posts.split,{title:this.state.title,category:this.state.category,weight:this.state.weight,is_hidden:this.state.is_hidden,is_closed:this.state.is_closed,posts:[this.props.post.id]})}},{key:"handleSuccess",value:function(e){x.Z.dispatch($.r$(this.props.post,{isDeleted:!0})),N.Z.hide(),k.Z.success(gettext("Selected post was split into new thread."))}},{key:"handleError",value:function(e){400===e.status?(this.setState({errors:Object.assign({},this.state.errors,e)}),k.Z.error(gettext("Form contains errors."))):k.Z.apiError(e)}},{key:"getWeightChoices",value:function(){var e=[{value:0,icon:"remove",label:gettext("Not pinned")},{value:1,icon:"bookmark_border",label:gettext("Pinned locally")}];return 2==this.acl[this.state.category].can_pin_threads&&e.push({value:2,icon:"bookmark",label:gettext("Pinned globally")}),e}},{key:"renderWeightField",value:function(){return this.acl[this.state.category].can_pin_threads?(0,o.Z)(g.Z,{label:gettext("Thread weight"),for:"id_weight",labelClass:"col-sm-4",controlClass:"col-sm-8"},void 0,(0,o.Z)(en.Z,{id:"id_weight",onChange:this.bindInput("weight"),value:this.state.weight,choices:this.getWeightChoices()})):null}},{key:"renderHiddenField",value:function(){return this.acl[this.state.category].can_hide_threads?(0,o.Z)(g.Z,{label:gettext("Hide thread"),for:"id_is_hidden",labelClass:"col-sm-4",controlClass:"col-sm-8"},void 0,(0,o.Z)(en.Z,{id:"id_is_closed",onChange:this.bindInput("is_hidden"),value:this.state.is_hidden,choices:this.isHiddenChoices})):null}},{key:"renderClosedField",value:function(){return this.acl[this.state.category].can_close_threads?(0,o.Z)(g.Z,{label:gettext("Close thread"),for:"id_is_closed",labelClass:"col-sm-4",controlClass:"col-sm-8"},void 0,(0,o.Z)(en.Z,{id:"id_is_closed",onChange:this.bindInput("is_closed"),value:this.state.is_closed,choices:this.isClosedChoices})):null}},{key:"render",value:function(){return(0,o.Z)(Nn,{className:"modal-dialog"},void 0,(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(g.Z,{label:gettext("Thread title"),for:"id_title",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.title},void 0,(0,o.Z)("input",{id:"id_title",className:"form-control",type:"text",onChange:this.bindInput("title"),value:this.state.title})),Gt||(Gt=(0,o.Z)("div",{className:"clearfix"})),(0,o.Z)(g.Z,{label:gettext("Category"),for:"id_category",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.category},void 0,(0,o.Z)(Xt.Z,{id:"id_category",onChange:this.onCategoryChange,value:this.state.category,choices:this.state.categories})),Wt||(Wt=(0,o.Z)("div",{className:"clearfix"})),this.renderWeightField(),this.renderHiddenField(),this.renderClosedField()),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)(Ct.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Split post")))))}}]),n}(Z.Z);function yn(){return Kt||(Kt=(0,o.Z)(Nn,{className:"modal-dialog"},void 0,(0,o.Z)(at.Z,{})))}function _n(e){return(0,o.Z)(Nn,{className:"modal-dialog modal-message"},void 0,Jt||(Jt=(0,o.Z)("div",{className:"message-icon"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,o.Z)("div",{className:"message-body"},void 0,(0,o.Z)("p",{className:"lead"},void 0,gettext("You can't move this post at the moment.")),(0,o.Z)("p",{},void 0,e.message)))}function Nn(e){return(0,o.Z)("div",{className:e.className,role:"document"},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,Qt||(Qt=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Split post into new thread"))),e.children))}function kn(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,p.Z)(e);if(t){var s=(0,p.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,d.Z)(this,n)}}function xn(e){return(0,o.Z)("ul",{className:"dropdown-menu dropdown-menu-right stick-to-bottom"},void 0,v().createElement(Rn,e),v().createElement(Cn,e),v().createElement(Sn,e),v().createElement(En,e),v().createElement(Ln,e),v().createElement(Pn,e),v().createElement(On,e),v().createElement(Tn,e),v().createElement(An,e),v().createElement(Bn,e),v().createElement(In,e),v().createElement(jn,e),v().createElement(Dn,e))}var wn,Rn=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){var t=window.location.protocol+"//";t+=window.location.host,t+=e.props.post.url.index,prompt(gettext("Permament link to this post:"),t)})),e}return(0,l.Z)(n,[{key:"render",value:function(){return(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,sn||(sn=(0,o.Z)("span",{className:"material-icon"},void 0,"link")),gettext("Permament link")))}}]),n}(v().Component),Cn=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){ft.Z.open({mode:"EDIT",config:e.props.post.api.editor,submit:e.props.post.api.index})})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.acl.can_edit?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,on||(on=(0,o.Z)("span",{className:"material-icon"},void 0,"edit")),gettext("Edit"))):null}}]),n}(v().Component),Sn=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Ke(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.post,n=e.thread;return n.acl.can_mark_best_answer&&t.acl.can_mark_as_best_answer?t.id===n.best_answer||n.best_answer&&!n.acl.can_change_best_answer?null:(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,rn||(rn=(0,o.Z)("span",{className:"material-icon"},void 0,"check_box")),gettext("Mark as best answer"))):null}}]),n}(v().Component),En=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Je(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.post,n=e.thread;return t.id!==n.best_answer?null:n.acl.can_unmark_best_answer?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,ln||(ln=(0,o.Z)("span",{className:"material-icon"},void 0,"check_box_outline_blank")),gettext("Unmark best answer"))):null}}]),n}(v().Component),Ln=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){N.Z.show((0,o.Z)(Yt,{post:e.props.post}))})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.post.is_hidden&&!this.props.post.acl.can_see_hidden,t=0===this.props.post.edits;if(e||t)return null;var n=ngettext("This post was edited %(edits)s time.","This post was edited %(edits)s times.",this.props.post.edits);return interpolate(n,{edits:this.props.post.edits},!0),(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,cn||(cn=(0,o.Z)("span",{className:"material-icon"},void 0,"edit")),gettext("Changes history")))}}]),n}(v().Component),Pn=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){ze(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.acl.can_approve&&this.props.post.is_unapproved?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,un||(un=(0,o.Z)("span",{className:"material-icon"},void 0,"done")),gettext("Approve"))):null}}]),n}(v().Component),On=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){N.Z.show(v().createElement(St,e.props))})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.acl.can_move?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,dn||(dn=(0,o.Z)("span",{className:"material-icon"},void 0,"arrow_forward")),gettext("Move"))):null}}]),n}(v().Component),Tn=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){N.Z.show(v().createElement(an,e.props))})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.acl.can_move?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,pn||(pn=(0,o.Z)("span",{className:"material-icon"},void 0,"call_split")),gettext("Split"))):null}}]),n}(v().Component),An=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){He(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.acl.can_protect?this.props.post.is_protected?null:(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,hn||(hn=(0,o.Z)("span",{className:"material-icon"},void 0,"lock_outline")),gettext("Protect"))):null}}]),n}(v().Component),Bn=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Fe(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.acl.can_protect&&this.props.post.is_protected?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,fn||(fn=(0,o.Z)("span",{className:"material-icon"},void 0,"lock_open")),gettext("Remove protection"))):null}}]),n}(v().Component),In=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){qe(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.post,n=e.thread;return t.id===n.best_answer?null:t.acl.can_hide?t.is_hidden?null:(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,vn||(vn=(0,o.Z)("span",{className:"material-icon"},void 0,"visibility_off")),gettext("Hide"))):null}}]),n}(v().Component),jn=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Ye(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){return this.props.post.acl.can_unhide&&this.props.post.is_hidden?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,mn||(mn=(0,o.Z)("span",{className:"material-icon"},void 0,"visibility")),gettext("Unhide"))):null}}]),n}(v().Component),Dn=function(e){(0,u.Z)(n,e);var t=kn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){We(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.post,n=e.thread;return t.id===n.best_answer?null:t.acl.can_delete?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,Zn||(Zn=(0,o.Z)("span",{className:"material-icon"},void 0,"clear")),gettext("Delete"))):null}}]),n}(v().Component);function Un(e){return(0,o.Z)("div",{className:"pull-right dropdown"},void 0,wn||(wn=(0,o.Z)("button",{"aria-expanded":"true","aria-haspopup":"true",className:"btn btn-default btn-icon dropdown-toggle","data-toggle":"dropdown",type:"button"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,"expand_more"))),v().createElement(xn,e))}var Mn=n(21981);var zn,Hn=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(){var e;(0,r.Z)(this,s);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return e=a.call.apply(a,[this].concat(n)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){e.props.post.isSelected?x.Z.dispatch(Mn._H(e.props.post)):x.Z.dispatch(Mn.Ys(e.props.post))})),e}return(0,l.Z)(s,[{key:"render",value:function(){return this.props.thread.acl.can_merge_posts||(e=this.props.post.acl).can_approve||e.can_hide||e.can_protect||e.can_unhide||e.can_delete||e.can_move?(0,o.Z)("div",{className:"pull-right"},void 0,(0,o.Z)("button",{className:"btn btn-default btn-icon",onClick:this.onClick,type:"button"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,this.props.post.isSelected?"check_box":"check_box_outline_blank"))):null;var e}}]),s}(v().Component),Fn=n(24678);function qn(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,p.Z)(e);if(t){var s=(0,p.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,d.Z)(this,n)}}function Yn(e){return(0,o.Z)("div",{className:"post-heading"},void 0,v().createElement(Vn,e),v().createElement($n,e),v().createElement(Gn,e),v().createElement(Wn,e),v().createElement(Qn,e),v().createElement(Xn,e),v().createElement(ea,e),v().createElement(Hn,e),v().createElement(Un,e))}function Vn(e){return e.post.is_read?null:(0,o.Z)("span",{className:"label label-unread hidden-xs"},void 0,gettext("New post"))}function $n(e){return e.post.is_read?null:(0,o.Z)("span",{className:"label label-unread visible-xs-inline-block"},void 0,gettext("New"))}function Gn(e){var t=interpolate(gettext("posted %(posted_on)s"),{posted_on:e.post.posted_on.format("LL, LT")},!0);return(0,o.Z)("a",{href:e.post.url.index,className:"btn btn-link posted-on hidden-xs",title:t},void 0,e.post.posted_on.fromNow())}function Wn(e){return(0,o.Z)("a",{href:e.post.url.index,className:"btn btn-link posted-on visible-xs-inline-block"},void 0,e.post.posted_on.fromNow())}var Kn,Jn,Qn=function(e){(0,u.Z)(n,e);var t=qn(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){N.Z.show((0,o.Z)(Yt,{post:e.props.post}))})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.post.is_hidden&&!this.props.post.acl.can_see_hidden,t=0===this.props.post.edits;if(e||t)return null;var n=ngettext("This post was edited %(edits)s time.","This post was edited %(edits)s times.",this.props.post.edits),a=interpolate(n,{edits:this.props.post.edits},!0),s=ngettext("edited %(edits)s time","edited %(edits)s times",this.props.post.edits);return(0,o.Z)("button",{className:"btn btn-link btn-see-edits hidden-xs",onClick:this.onClick,title:a,type:"button"},void 0,interpolate(s,{edits:this.props.post.edits},!0))}}]),n}(v().Component),Xn=function(e){(0,u.Z)(n,e);var t=qn(n);function n(){return(0,r.Z)(this,n),t.apply(this,arguments)}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.post.is_hidden&&!this.props.post.acl.can_see_hidden,t=0===this.props.post.edits;if(e||t)return null;var n=ngettext("%(edits)s edit","%(edits)s edits",this.props.post.edits);return(0,o.Z)("button",{className:"btn btn-link btn-see-edits visible-xs-inline-block",onClick:this.onClick,type:"button"},void 0,interpolate(n,{edits:this.props.post.edits},!0))}}]),n}(Qn);function ea(e){var t=e.post.poster&&e.post.poster.id===e.user.id,n=e.post.acl.can_protect;return e.user.id&&e.post.is_protected&&(t||n)?(0,o.Z)("span",{className:"label label-protected hidden-xs",title:gettext("This post is protected and may not be edited.")},void 0,zn||(zn=(0,o.Z)("span",{className:"material-icon"},void 0,"lock_outline")),gettext("protected")):null}function ta(e){var t=e.post,n=e.thread;return(0,o.Z)("div",{className:"post-side post-side-anonymous"},void 0,(0,o.Z)(Hn,{post:t,thread:n}),(0,o.Z)(Un,{post:t,thread:n}),(0,o.Z)("div",{className:"media"},void 0,Kn||(Kn=(0,o.Z)("div",{className:"media-left"},void 0,(0,o.Z)("span",{},void 0,(0,o.Z)(B.ZP,{className:"poster-avatar",size:100})))),(0,o.Z)("div",{className:"media-body"},void 0,(0,o.Z)("span",{className:"media-heading item-title"},void 0,t.poster_name),(0,o.Z)("span",{className:"user-title user-title-anonymous"},void 0,gettext("Removed user")))))}function na(e){var t=e.title,n=e.rank;return n.is_tab||!!t||!!n.title}function aa(e){var t=e.poster,n=ngettext("%(posts)s post","%(posts)s posts",t.posts),a="user-postcount";return na(t)&&(a+=" hidden-xs hidden-sm"),(0,o.Z)("span",{className:a},void 0,interpolate(n,{posts:t.posts},!0))}function sa(e){var t=e.poster,n="hidden-xs";return na(t)&&(n+=" hidden-sm"),(0,o.Z)("span",{className:n},void 0,(0,o.Z)(Fn.ZP,{status:t.status},void 0,(0,o.Z)(Fn.pg,{status:t.status,user:t})))}function ia(e){var t=e.rank,n=e.title||t.title;if(!n&&t.is_tab&&(n=t.name),!n)return null;var a="user-title";return t.css_class&&(a+=" user-title-"+t.css_class),t.is_tab?(0,o.Z)("div",{className:a},void 0,(0,o.Z)("a",{href:t.url},void 0,n)):(0,o.Z)("div",{className:a},void 0,n)}function oa(e){var t=e.post,n=e.thread,a=t.poster;return(0,o.Z)("div",{className:"post-side post-side-registered"},void 0,(0,o.Z)(Hn,{post:t,thread:n}),(0,o.Z)(Un,{post:t,thread:n}),(0,o.Z)("div",{className:"media"},void 0,(0,o.Z)("div",{className:"media-left"},void 0,(0,o.Z)("a",{href:a.url},void 0,(0,o.Z)(B.ZP,{className:"poster-avatar",size:100,user:a}))),(0,o.Z)("div",{className:"media-body"},void 0,(0,o.Z)("div",{className:"media-heading"},void 0,(0,o.Z)("a",{className:"item-title",href:a.url},void 0,a.username),(0,o.Z)(Fn.ZP,{status:a.status},void 0,(0,o.Z)(Fn.Jj,{status:a.status}))),(0,o.Z)(ia,{rank:a.rank,title:a.title}),(0,o.Z)(sa,{poster:a}),(0,o.Z)(aa,{poster:a}))))}function ra(e){return e.post.poster?v().createElement(oa,e):v().createElement(ta,e)}function la(e){var t="post";return e.post.isDeleted?t="hide":e.post.is_hidden&&!e.post.acl.can_see_hidden&&(t="post post-hidden"),e.post.poster&&e.post.poster.rank.css_class&&(t+=" post-"+e.post.poster.rank.css_class),e.post.is_read||(t+=" post-new"),(0,o.Z)("li",{id:"post-"+e.post.id,className:t},void 0,(0,o.Z)("div",{className:"panel panel-default panel-post"},void 0,(0,o.Z)("div",{className:"panel-body"},void 0,v().createElement(ra,e),(0,o.Z)("div",{className:"panel-content"},void 0,v().createElement(Yn,e),v().createElement(Ie,e),v().createElement(De,e),v().createElement(Ue,e),v().createElement(je,e),v().createElement(Oe,e),v().createElement(we,e),v().createElement(mt,e)))))}var ca,ua=function(){return(0,o.Z)("li",{className:"post"},void 0,(0,o.Z)("div",{className:"panel panel-default panel-post"},void 0,(0,o.Z)("div",{className:"panel-body"},void 0,(0,o.Z)("div",{className:"post-side post-side-registered"},void 0,(0,o.Z)("div",{className:"media"},void 0,Jn||(Jn=(0,o.Z)("div",{className:"media-left"},void 0,(0,o.Z)("span",{},void 0,(0,o.Z)(B.ZP,{className:"poster-avatar",size:"100"})))),(0,o.Z)("div",{className:"media-body"},void 0,(0,o.Z)("span",{className:"media-heading item-title"},void 0,(0,o.Z)("span",{className:"ui-preview-text",style:{width:"80px"}},void 0," ")),(0,o.Z)("span",{className:"user-title user-title-anonymous"},void 0,(0,o.Z)("span",{className:"ui-preview-text",style:{width:"60px"}},void 0," "))))),(0,o.Z)("div",{className:"panel-content"},void 0,(0,o.Z)("div",{className:"post-body"},void 0,(0,o.Z)("article",{className:"misago-markup"},void 0,(0,o.Z)("p",{className:"ui-preview-text",style:{width:"100%"}},void 0," "),(0,o.Z)("p",{className:"ui-preview-text",style:{width:"70%"}},void 0," "),(0,o.Z)("p",{className:"ui-preview-text hidden-xs hidden-sm",style:{width:"85%"}},void 0," ")))))))};function da(e){return e.posts.isLoaded?(0,o.Z)("ul",{className:"posts-list ui-ready"},void 0,e.posts.results.map((function(t){return v().createElement(pa,(0,m.Z)({key:t.id,post:t},e))}))):ca||(ca=(0,o.Z)("ul",{className:"posts-list ui-preview"},void 0,(0,o.Z)(ua,{})))}function pa(e){return e.post.is_event?v().createElement(Ze,e):v().createElement(la,e)}var ha,fa,va,ma=n(59752),Za=n(55547),ga=n(53328),ba=n(59131),ya=n(98936),_a=n(50366),Na=n(16768),ka=function(e){var t=e.thread;return(0,o.Z)("div",{className:"thread-user-card"},void 0,(0,o.Z)("div",{className:"thread-user-card-media"},void 0,t.starter?(0,o.Z)("a",{href:t.url.starter},void 0,(0,o.Z)(B.ZP,{size:40,user:t.starter})):ha||(ha=(0,o.Z)(B.ZP,{size:40}))),(0,o.Z)("div",{className:"thread-user-card-body"},void 0,(0,o.Z)("div",{className:"thread-user-card-header"},void 0,t.starter?(0,o.Z)("a",{className:"item-title",href:t.url.starter,title:gettext("Thread author")},void 0,t.starter.username):(0,o.Z)("span",{className:"item-title",title:gettext("Thread author")},void 0,t.starter_name)),(0,o.Z)("div",{},void 0,(0,o.Z)("span",{className:"text-muted",title:interpolate(gettext("Started on: %(timestamp)s"),{timestamp:t.started_on.format("LLL")},!0)},void 0,t.started_on.fromNow()))))},xa=n(99755),wa=n(12891);var Ra=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(e){var t;return(0,r.Z)(this,s),t=a.call(this,e),(0,h.Z)((0,c.Z)(t),"handleSuccess",(function(e){t.handleSuccessUnmounted(e),t.setState({isLoading:!0}),N.Z.hide()})),(0,h.Z)((0,c.Z)(t),"handleSuccessUnmounted",(function(e){x.Z.dispatch(y.Ar()),x.Z.dispatch(y.Vx(e))})),(0,h.Z)((0,c.Z)(t),"handleError",(function(e){x.Z.dispatch(y.Ar()),400===e.status?k.Z.error(e.detail[0]):k.Z.apiError(e)})),(0,h.Z)((0,c.Z)(t),"onChange",(function(e){t.changeValue("title",e.target.value)})),t.state={isLoading:!1,title:e.thread.title,validators:{title:(0,wa.jn)()},errors:{}},t}return(0,l.Z)(s,[{key:"clean",value:function(){if(!this.state.title.trim().length)return k.Z.error(gettext("You have to enter thread title.")),!1;var e=this.validate();return!e.title||(k.Z.error(e.title[0]),!1)}},{key:"send",value:function(){return x.Z.dispatch(y.n6()),_.Z.patch(this.props.thread.api.index,[{op:"replace",path:"title",value:this.state.title}])}},{key:"render",value:function(){return(0,o.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,fa||(fa=(0,o.Z)(Ca,{})),(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(g.Z,{for:"id_modal_title",label:gettext("Thread title")},void 0,(0,o.Z)("input",{className:"form-control",disabled:this.state.isLoading||this.props.thread.isBusy,id:"id_modal_title",onChange:this.onChange,value:this.state.title}))),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,o.Z)("button",{className:"btn btn-primary",disabled:this.state.isLoading||this.props.thread.isBusy},void 0,gettext("Change title"))))))}}]),s}(Z.Z);function Ca(e){return(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,va||(va=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Change title")))}var Sa,Ea,La=n(52753);var Pa,Oa,Ta,Aa,Ba,Ia,ja=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(e){var t;return(0,r.Z)(this,s),t=a.call(this,e),(0,h.Z)((0,c.Z)(t),"handleSuccess",(function(e){t.handleSuccessUnmounted(e),t.setState({isLoading:!0})})),(0,h.Z)((0,c.Z)(t),"handleSuccessUnmounted",(function(e){k.Z.success(gettext("Thread has been merged with other one.")),window.location=e.url})),(0,h.Z)((0,c.Z)(t),"handleError",(function(e){x.Z.dispatch(y.Ar()),400===e.status?e.best_answers||e.polls?N.Z.show((0,o.Z)(La.ZP,{api:t.props.thread.api.merge,bestAnswers:e.best_answers,data:{other_thread:t.state.url},polls:e.polls,onError:t.handleError,onSuccess:t.handleSuccessUnmounted})):e.best_answer?k.Z.error(e.best_answer[0]):e.poll?k.Z.error(e.poll[0]):k.Z.error(e.detail):k.Z.apiError(e)})),(0,h.Z)((0,c.Z)(t),"onUrlChange",(function(e){t.changeValue("url",e.target.value)})),t.state={isLoading:!1,url:"",validators:{url:[]},errors:{}},t}return(0,l.Z)(s,[{key:"clean",value:function(){return!!this.state.url.trim().length||(k.Z.error(gettext("You have to enter link to the other thread.")),!1)}},{key:"send",value:function(){return x.Z.dispatch(y.n6()),_.Z.post(this.props.thread.api.merge,{other_thread:this.state.url})}},{key:"render",value:function(){return(0,o.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,Sa||(Sa=(0,o.Z)(Da,{})),(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(g.Z,{for:"id_url",label:gettext("Link to thread you want to merge with"),help_text:gettext("Merge will delete current thread and move its contents to the thread specified here.")},void 0,(0,o.Z)("input",{className:"form-control",disabled:this.state.isLoading||this.props.thread.isBusy,id:"id_url",onChange:this.onUrlChange,value:this.state.url}))),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,o.Z)("button",{className:"btn btn-primary",disabled:this.state.isLoading||this.props.thread.isBusy},void 0,gettext("Merge thread"))))))}}]),s}(Z.Z);function Da(e){return(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,Ea||(Ea=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Merge thread")))}var Ua,Ma,za,Ha,Fa,qa,Ya,Va,$a,Ga,Wa,Ka,Ja=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(e){var t;return(0,r.Z)(this,s),t=a.call(this,e),(0,h.Z)((0,c.Z)(t),"onCategoryChange",(function(e){t.changeValue("category",e.target.value)})),t.state={isReady:!1,isLoading:!1,isError:!1,category:null,categories:[]},t}return(0,l.Z)(s,[{key:"componentDidMount",value:function(){var e=this;_.Z.get(E.Z.get("THREAD_EDITOR_API")).then((function(t){var n=null,a=t.map((function(e){return!1===e.post||n||(n=e.id),Object.assign(e,{disabled:!1===e.post,label:e.name,value:e.id})}));e.setState({isReady:!0,category:n,categories:a})}),(function(t){e.setState({isError:t.detail})}))}},{key:"send",value:function(){return x.Z.dispatch(y.n6()),_.Z.patch(this.props.thread.api.index,[{op:"replace",path:"category",value:this.state.category}])}},{key:"handleSuccess",value:function(){_.Z.get(this.props.thread.api.posts.index,{page:this.props.posts.page}).then((function(e){x.Z.dispatch(y.gx(e)),x.Z.dispatch(Mn.zD(e.post_set)),x.Z.dispatch(y.Ar()),k.Z.success(gettext("Thread has been moved.")),N.Z.hide()}),(function(e){x.Z.dispatch(y.Ar()),k.Z.apiError(e)}))}},{key:"handleError",value:function(e){400===e.status?k.Z.error(e.detail[0]):k.Z.apiError(e)}},{key:"render",value:function(){return this.state.isReady?(0,o.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,Pa||(Pa=(0,o.Z)(Qa,{})),(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(g.Z,{for:"id_category",label:gettext("New category")},void 0,(0,o.Z)(Xt.Z,{choices:this.state.categories,disabled:this.state.isLoading||this.props.thread.isBusy,id:"id_category",onChange:this.onCategoryChange,value:this.state.category}))),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,o.Z)("button",{className:"btn btn-primary",disabled:this.state.isLoading||this.props.thread.isBusy},void 0,gettext("Move thread")))))):this.state.isError?(0,o.Z)(es,{message:this.state.isError}):Oa||(Oa=(0,o.Z)(Xa,{}))}}]),s}(Z.Z);function Qa(e){return(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,Ta||(Ta=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Move thread")))}function Xa(e){return Aa||(Aa=(0,o.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,(0,o.Z)(Qa,{}),(0,o.Z)(at.Z,{}))))}function es(e){return(0,o.Z)("div",{className:"modal-dialog modal-message",role:"document"},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,Ba||(Ba=(0,o.Z)(Qa,{})),Ia||(Ia=(0,o.Z)("div",{className:"message-icon"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,o.Z)("div",{className:"message-body"},void 0,(0,o.Z)("p",{className:"lead"},void 0,gettext("You can't move this thread at the moment.")),(0,o.Z)("p",{},void 0,e.message),(0,o.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,gettext("Ok")))))}var ts,ns,as,ss,is=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(){var e;(0,r.Z)(this,s);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return e=a.call.apply(a,[this].concat(n)),(0,h.Z)((0,c.Z)(e),"callApi",(function(t,n){x.Z.dispatch(y.n6()),t.push({op:"add",path:"acl",value:!0}),_.Z.patch(e.props.thread.api.index,t).then((function(e){x.Z.dispatch(y.Vx(e)),x.Z.dispatch(y.Ar()),k.Z.success(n)}),(function(e){x.Z.dispatch(y.Ar()),400===e.status?k.Z.error(e.detail[0]):k.Z.apiError(e)}))})),(0,h.Z)((0,c.Z)(e),"changeTitle",(function(){N.Z.show((0,o.Z)(Ra,{thread:e.props.thread}))})),(0,h.Z)((0,c.Z)(e),"pinGlobally",(function(){e.callApi([{op:"replace",path:"weight",value:2}],gettext("Thread has been pinned globally."))})),(0,h.Z)((0,c.Z)(e),"pinLocally",(function(){e.callApi([{op:"replace",path:"weight",value:1}],gettext("Thread has been pinned locally."))})),(0,h.Z)((0,c.Z)(e),"unpin",(function(){e.callApi([{op:"replace",path:"weight",value:0}],gettext("Thread has been unpinned."))})),(0,h.Z)((0,c.Z)(e),"approve",(function(){e.callApi([{op:"replace",path:"is-unapproved",value:!1}],gettext("Thread has been approved."))})),(0,h.Z)((0,c.Z)(e),"open",(function(){e.callApi([{op:"replace",path:"is-closed",value:!1}],gettext("Thread has been opened."))})),(0,h.Z)((0,c.Z)(e),"close",(function(){e.callApi([{op:"replace",path:"is-closed",value:!0}],gettext("Thread has been closed."))})),(0,h.Z)((0,c.Z)(e),"unhide",(function(){e.callApi([{op:"replace",path:"is-hidden",value:!1}],gettext("Thread has been made visible."))})),(0,h.Z)((0,c.Z)(e),"hide",(function(){e.callApi([{op:"replace",path:"is-hidden",value:!0}],gettext("Thread has been made hidden."))})),(0,h.Z)((0,c.Z)(e),"move",(function(){N.Z.show((0,o.Z)(Ja,{posts:e.props.posts,thread:e.props.thread}))})),(0,h.Z)((0,c.Z)(e),"merge",(function(){N.Z.show((0,o.Z)(ja,{thread:e.props.thread}))})),(0,h.Z)((0,c.Z)(e),"delete",(function(){window.confirm(gettext("Are you sure you want to delete this thread?"))&&(x.Z.dispatch(y.n6()),_.Z.delete(e.props.thread.api.index).then((function(t){k.Z.success(gettext("Thread has been deleted.")),window.location=e.props.thread.category.url.index}),(function(e){x.Z.dispatch(y.Ar()),k.Z.apiError(e)})))})),e}return(0,l.Z)(s,[{key:"render",value:function(){var e=this.props.moderation;return(0,o.Z)("ul",{className:"dropdown-menu dropdown-menu-right stick-to-bottom"},void 0,!!e.edit&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.changeTitle,type:"button"},void 0,Ua||(Ua=(0,o.Z)("span",{className:"material-icon"},void 0,"edit")),gettext("Change title"))),!!e.pinGlobally&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.pinGlobally,type:"button"},void 0,Ma||(Ma=(0,o.Z)("span",{className:"material-icon"},void 0,"bookmark")),gettext("Pin globally"))),!!e.pinLocally&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.pinLocally,type:"button"},void 0,za||(za=(0,o.Z)("span",{className:"material-icon"},void 0,"bookmark_border")),gettext("Pin locally"))),!!e.unpin&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.unpin,type:"button"},void 0,Ha||(Ha=(0,o.Z)("span",{className:"material-icon"},void 0,"panorama_fish_eye")),gettext("Unpin"))),!!e.move&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.move,type:"button"},void 0,Fa||(Fa=(0,o.Z)("span",{className:"material-icon"},void 0,"arrow_forward")),gettext("Move"))),!!e.merge&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.merge,type:"button"},void 0,qa||(qa=(0,o.Z)("span",{className:"material-icon"},void 0,"call_merge")),gettext("Merge"))),!!e.approve&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.approve,type:"button"},void 0,Ya||(Ya=(0,o.Z)("span",{className:"material-icon"},void 0,"done")),gettext("Approve"))),!!e.open&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.open,type:"button"},void 0,Va||(Va=(0,o.Z)("span",{className:"material-icon"},void 0,"lock_open")),gettext("Open"))),!!e.close&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.close,type:"button"},void 0,$a||($a=(0,o.Z)("span",{className:"material-icon"},void 0,"lock_outline")),gettext("Close"))),!!e.unhide&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.unhide,type:"button"},void 0,Ga||(Ga=(0,o.Z)("span",{className:"material-icon"},void 0,"visibility")),gettext("Unhide"))),!!e.hide&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.hide,type:"button"},void 0,Wa||(Wa=(0,o.Z)("span",{className:"material-icon"},void 0,"visibility_off")),gettext("Hide"))),!!e.delete&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:this.delete,type:"button"},void 0,Ka||(Ka=(0,o.Z)("span",{className:"material-icon"},void 0,"clear")),gettext("Delete"))))}}]),s}(v().Component),os=is,rs=function(e){var t=e.thread,n=e.posts,a=e.moderation;return(0,o.Z)("div",{className:"dropdown"},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-default btn-outline btn-icon dropdown-toggle",title:gettext("Thread options"),"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",disabled:t.isBusy},void 0,ts||(ts=(0,o.Z)("span",{className:"material-icon"},void 0,"settings"))),(0,o.Z)(os,{thread:t,posts:n,moderation:a}))},ls=n(94184),cs=n.n(ls);function us(e,t,n){var a={subscription:e.subscription};x.Z.dispatch(y.Vx({subscription:t})),_.Z.patch(e.api.index,[{op:"replace",path:"subscription",value:n}]).then((function(e){x.Z.dispatch(y.Vx(e))}),(function(e){400===e.status?k.Z.error(e.detail[0]):k.Z.apiError(e),x.Z.dispatch(y.Vx(a))}))}var ds,ps,hs,fs,vs,ms,Zs,gs,bs,ys,_s,Ns,ks,xs=function(e){var t,n=e.stickToBottom,a=e.thread;return(0,o.Z)("div",{className:"dropdown"},void 0,(0,o.Z)("button",{className:"btn btn-default btn-outline btn-block","aria-expanded":"true","aria-haspopup":"true","data-toggle":"dropdown",type:"button"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,!0===(t=a.subscription)?"star":!1===t?"star_half":"star_border"),function(e){return!0===e?gettext("E-mail"):!1===e?gettext("Enabled"):gettext("Disabled")}(a.subscription)),(0,o.Z)("ul",{className:cs()("dropdown-menu dropdown-menu-right",{"stick-to-bottom":n})},void 0,(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:function(){return function(e){null!==e.subscription&&us(e,null,"unsubscribe")}(a)}},void 0,ns||(ns=(0,o.Z)("span",{className:"material-icon"},void 0,"star_border")),gettext("Unsubscribe"))),(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:function(){return function(e){!1!==e.subscription&&us(e,!1,"notify")}(a)}},void 0,as||(as=(0,o.Z)("span",{className:"material-icon"},void 0,"star_half")),gettext("Subscribe"))),(0,o.Z)("li",{},void 0,(0,o.Z)("button",{className:"btn btn-link",onClick:function(){return function(e){!0!==e.subscription&&us(e,!0,"email")}(a)}},void 0,ss||(ss=(0,o.Z)("span",{className:"material-icon"},void 0,"star")),gettext("Subscribe with e-mail")))))},ws=function(e){var t=e.children,n=e.className;return(0,o.Z)("ul",{className:cs()("breadcrumbs",n)},void 0,t)},Rs=function(e){var t=e.category,n=e.className;return(0,o.Z)("li",{className:cs()("breadcrumbs-item",n)},void 0,(0,o.Z)("a",{href:t.url.index},void 0,(0,o.Z)("span",{className:"material-icon",style:{color:t.color||"inherit"}},void 0,"label"),!!t.short_name&&(0,o.Z)("span",{className:"breadcrumbs-item-name hidden-sm hidden-md hidden-lg",title:t.name},void 0,t.short_name),!!t.short_name&&(0,o.Z)("span",{className:"breadcrumbs-item-name hidden-xs"},void 0,t.name),!t.short_name&&(0,o.Z)("span",{className:"breadcrumbs-item-name"},void 0,t.name)))},Cs=function(e){var t=e.category,n=e.className;return(0,o.Z)("li",{className:cs()("breadcrumbs-item",n)},void 0,(0,o.Z)("a",{href:t.url.index},void 0,ds||(ds=(0,o.Z)("span",{className:"material-icon"},void 0,"chevron_right")),(0,o.Z)("span",{className:"breadcrumbs-item-name"},void 0,"root_category"===t.special_role?gettext("Threads"):gettext("Private threads"))))},Ss=function(e){var t=e.breadcrumbs;return(0,o.Z)(ws,{},void 0,t.map((function(e){return e.special_role?(0,o.Z)(Cs,{category:e},e.id):(0,o.Z)(Rs,{category:e},e.id)})))},Es=function(e){var t=e.styleName,n=e.thread,a=e.posts,s=e.user,i=e.moderation;return(0,o.Z)(xa.sP,{},void 0,(0,o.Z)(xa.mr,{styleName:t},void 0,(0,o.Z)(xa.gC,{styleName:t},void 0,(0,o.Z)(Ss,{breadcrumbs:n.path}),(0,o.Z)("h1",{},void 0,n.title)),(0,o.Z)(xa.eA,{className:"page-header-thread-details"},void 0,(0,o.Z)(ya.gq,{},void 0,(0,o.Z)(ya.kw,{auto:!0},void 0,(0,o.Z)(ya.Z6,{shrink:!0},void 0,(0,o.Z)(ka,{thread:n})),ps||(ps=(0,o.Z)(ya.Z6,{auto:!0})),n.replies>0&&(0,o.Z)(ya.Z6,{shrink:!0},void 0,(0,o.Z)(Na.Z,{thread:n})),function(e){return e.is_closed||e.is_hidden||e.is_unapproved||e.weight>0||e.best_answer||e.has_poll||e.has_unapproved_posts}(n)&&(0,o.Z)(ya.Z6,{shrink:!0},void 0,(0,o.Z)(_a.Z,{thread:n}))),s.is_authenticated&&(0,o.Z)(ya.kw,{},void 0,(0,o.Z)(ya.Z6,{},void 0,(0,o.Z)(xs,{thread:n})),i.enabled&&(0,o.Z)(ya.Z6,{shrink:!0},void 0,(0,o.Z)(rs,{thread:n,posts:a,moderation:i})))))))},Ls=n(92490),Ps=n(69987),Os=function(e){var t=e.baseUrl,n=e.posts;return(0,o.Z)("div",{className:"misago-pagination"},void 0,n.isLoaded&&n.first?(0,o.Z)(Ps.rU,{className:"btn btn-default btn-outline btn-icon",to:t,title:gettext("Go to first page")},void 0,hs||(hs=(0,o.Z)("span",{className:"material-icon"},void 0,"first_page"))):(0,o.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:gettext("Go to first page"),type:"button",disabled:!0},void 0,fs||(fs=(0,o.Z)("span",{className:"material-icon"},void 0,"first_page"))),n.isLoaded&&n.previous?(0,o.Z)(Ps.rU,{className:"btn btn-default btn-outline btn-icon",to:t+(n.previous>1?n.previous+"/":""),title:gettext("Go to previous page")},void 0,vs||(vs=(0,o.Z)("span",{className:"material-icon"},void 0,"chevron_left"))):(0,o.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:gettext("Go to previous page"),type:"button",disabled:!0},void 0,ms||(ms=(0,o.Z)("span",{className:"material-icon"},void 0,"chevron_left"))),n.isLoaded&&n.next?(0,o.Z)(Ps.rU,{className:"btn btn-default btn-outline btn-icon",to:t+n.next+"/",title:gettext("Go to next page")},void 0,Zs||(Zs=(0,o.Z)("span",{className:"material-icon"},void 0,"chevron_right"))):(0,o.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:gettext("Go to next page"),type:"button",disabled:!0},void 0,gs||(gs=(0,o.Z)("span",{className:"material-icon"},void 0,"chevron_right"))),n.isLoaded&&n.last?(0,o.Z)(Ps.rU,{className:"btn btn-default btn-outline btn-icon",to:t+n.last+"/",title:gettext("Go to last page")},void 0,bs||(bs=(0,o.Z)("span",{className:"material-icon"},void 0,"last_page"))):(0,o.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:gettext("Go to last page"),type:"button",disabled:!0},void 0,ys||(ys=(0,o.Z)("span",{className:"material-icon"},void 0,"last_page"))))},Ts=function(e){var t=e.posts;return t.more?(0,o.Z)("p",{},void 0,interpolate(ngettext("There is %(more)s more post in this thread.","There are %(more)s more posts in this thread.",t.more),{more:t.more},!0)):(0,o.Z)("p",{},void 0,gettext("There are no more posts in this thread."))};function As(e){var t=e.errors,n=e.posts;return(0,o.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,_s||(_s=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Moderation"))),(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)("p",{className:"lead"},void 0,gettext("One or more posts could not be changed:")),(0,o.Z)("ul",{className:"list-unstyled list-errored-items"},void 0,t.map((function(e){return(0,o.Z)(Bs,{errors:e.detail,post:n[e.id]},e.id)}))))))}function Bs(e){var t=e.errors,n=e.post,a=interpolate(gettext("%(username)s on %(posted_on)s"),{posted_on:n.posted_on.format("LL, LT"),username:n.poster_name},!0);return(0,o.Z)("li",{},void 0,(0,o.Z)("h5",{},void 0,a,":"),t.map((function(e,t){return(0,o.Z)("p",{},t,e)})))}function Is(e){var t=e.selection,n=t.map((function(e){return{id:e.id,is_unapproved:!1}})),a=t.map((function(e){return{id:e.id,is_unapproved:e.is_unapproved}}));zs(e,[{op:"replace",path:"is-unapproved",value:!1}],n,a)}function js(e){var t=e.selection,n=t.map((function(e){return{id:e.id,is_protected:!0}})),a=t.map((function(e){return{id:e.id,is_protected:e.is_protected}}));zs(e,[{op:"replace",path:"is-protected",value:!0}],n,a)}function Ds(e){var t=e.selection,n=t.map((function(e){return{id:e.id,is_protected:!1}})),a=t.map((function(e){return{id:e.id,is_protected:e.is_protected}}));zs(e,[{op:"replace",path:"is-protected",value:!1}],n,a)}function Us(e){var t=e.selection,n=t.map((function(t){return{id:t.id,is_hidden:!0,hidden_on:V()(),hidden_by_name:e.user.username,url:Object.assign(t.url,{hidden_by:e.user.url})}})),a=t.map((function(e){return{id:e.id,is_hidden:e.is_hidden,hidden_on:e.hidden_on,hidden_by_name:e.hidden_by_name,url:e.url}}));zs(e,[{op:"replace",path:"is-hidden",value:!0}],n,a)}function Ms(e){var t=e.selection,n=t.map((function(t){return{id:t.id,is_hidden:!1,hidden_on:V()(),hidden_by_name:e.user.username,url:Object.assign(t.url,{hidden_by:e.user.url})}})),a=t.map((function(e){return{id:e.id,is_hidden:e.is_hidden,hidden_on:e.hidden_on,hidden_by_name:e.hidden_by_name,url:e.url}}));zs(e,[{op:"replace",path:"is-hidden",value:!1}],n,a)}function zs(e,t,n,a){var s=e.selection,i=e.thread;n.forEach((function(e){$.r$(e,e)})),x.Z.dispatch(Mn.kR());var r={ops:t,ids:s.map((function(e){return e.id}))};_.Z.patch(i.api.posts.index,r).then((function(e){e.forEach((function(e){x.Z.dispatch($.r$(e,e))}))}),(function(e){if(400!==e.status)return a.forEach((function(e){x.Z.dispatch($.r$(e,e))})),k.Z.apiError(e);var t=[],n=[];e.forEach((function(e){e.detail?(t.push(e),n.push(e.id)):x.Z.dispatch($.r$(e,e)),a.forEach((function(e){-1!==n.indexOf(e)&&x.Z.dispatch($.r$(e,e))}))}));var i={};s.forEach((function(e){i[e.id]=e})),N.Z.show((0,o.Z)(As,{errors:t,posts:i}))}))}function Hs(e){window.confirm(gettext("Are you sure you want to merge selected posts? This action is not reversible!"))&&(e.selection.slice(1).map((function(e){x.Z.dispatch($.r$(e,{isDeleted:!0}))})),_.Z.post(e.thread.api.posts.merge,{posts:e.selection.map((function(e){return e.id}))}).then((function(e){x.Z.dispatch($.r$(e,$.ZB(e)))}),(function(t){400===t.status?k.Z.error(t.detail):k.Z.apiError(t),e.selection.slice(1).map((function(e){x.Z.dispatch($.r$(e,{isDeleted:!1}))}))})),x.Z.dispatch(Mn.kR()))}function Fs(e){if(window.confirm(gettext("Are you sure you want to delete selected posts? This action is not reversible!"))){e.selection.map((function(e){x.Z.dispatch($.r$(e,{isDeleted:!0}))}));var t=e.selection.map((function(e){return e.id}));_.Z.delete(e.thread.api.posts.index,t).then((function(){}),(function(t){400===t.status?k.Z.error(t.detail):k.Z.apiError(t),e.selection.map((function(e){x.Z.dispatch($.r$(e,{isDeleted:!1}))}))})),x.Z.dispatch(Mn.kR())}}var qs,Ys,Vs,$s,Gs,Ws,Ks=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(e){var t;return(0,r.Z)(this,s),t=a.call(this,e),(0,h.Z)((0,c.Z)(t),"onUrlChange",(function(e){t.changeValue("url",e.target.value)})),t.state={isLoading:!1,url:"",validators:{url:[]},errors:{}},t}return(0,l.Z)(s,[{key:"clean",value:function(){return!!this.state.url.trim().length||(k.Z.error(gettext("You have to enter link to the other thread.")),!1)}},{key:"send",value:function(){return _.Z.post(this.props.thread.api.posts.move,{new_thread:this.state.url,posts:this.props.selection.map((function(e){return e.id}))})}},{key:"handleSuccess",value:function(e){this.props.selection.forEach((function(e){x.Z.dispatch($.r$(e,{isDeleted:!0}))})),N.Z.hide(),k.Z.success(gettext("Selected posts were moved to the other thread."))}},{key:"handleError",value:function(e){400===e.status?k.Z.error(e.detail):k.Z.apiError(e)}},{key:"render",value:function(){return(0,o.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,Ns||(Ns=(0,o.Z)(Js,{})),(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(g.Z,{for:"id_url",label:gettext("Link to thread you want to move posts to")},void 0,(0,o.Z)("input",{className:"form-control",disabled:this.state.isLoading,id:"id_url",onChange:this.onUrlChange,value:this.state.url}))),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,o.Z)("button",{className:"btn btn-primary",disabled:this.state.isLoading},void 0,gettext("Move posts"))))))}}]),s}(Z.Z);function Js(e){return(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,ks||(ks=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Move posts")))}function Qs(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,p.Z)(e);if(t){var s=(0,p.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,d.Z)(this,n)}}function Xs(e){return v().createElement(ci,(0,m.Z)({},e,{Form:ui}))}var ei,ti,ni,ai,si,ii,oi,ri,li,ci=function(e){(0,u.Z)(n,e);var t=Qs(n);function n(e){var a;return(0,r.Z)(this,n),(a=t.call(this,e)).state={isLoaded:!1,isError:!1,categories:[]},a}return(0,l.Z)(n,[{key:"componentDidMount",value:function(){var e=this;_.Z.get(misago.get("THREAD_EDITOR_API")).then((function(t){var n=t.map((function(e){return Object.assign(e,{disabled:!1===e.post,label:e.name,value:e.id,post:e.post})}));e.setState({isLoaded:!0,categories:n})}),(function(t){e.setState({isError:t.detail})}))}},{key:"render",value:function(){return this.state.isError?(0,o.Z)(pi,{message:this.state.isError}):this.state.isLoaded?v().createElement(ui,(0,m.Z)({},this.props,{categories:this.state.categories})):qs||(qs=(0,o.Z)(di,{}))}}]),n}(v().Component),ui=function(e){(0,u.Z)(n,e);var t=Qs(n);function n(e){var a;return(0,r.Z)(this,n),a=t.call(this,e),(0,h.Z)((0,c.Z)(a),"onCategoryChange",(function(e){var t=e.target.value,n={category:t};a.acl[t].can_pin_threads<n.weight&&(n.weight=0),a.acl[t].can_hide_threads||(n.is_hidden=0),a.acl[t].can_close_threads||(n.is_closed=!1),a.setState(n)})),a.state={isLoading:!1,title:"",category:null,categories:e.categories,weight:0,is_hidden:0,is_closed:!1,validators:{title:[tn.C1()]},errors:{}},a.isHiddenChoices=[{value:0,icon:"visibility",label:gettext("No")},{value:1,icon:"visibility_off",label:gettext("Yes")}],a.isClosedChoices=[{value:!1,icon:"lock_outline",label:gettext("No")},{value:!0,icon:"lock",label:gettext("Yes")}],a.acl={},a.props.categories.forEach((function(e){e.post&&(a.state.category||(a.state.category=e.id),a.acl[e.id]={can_pin_threads:e.post.pin,can_close_threads:e.post.close,can_hide_threads:e.post.hide})})),a}return(0,l.Z)(n,[{key:"clean",value:function(){return!!this.isValid()||(k.Z.error(gettext("Form contains errors.")),this.setState({errors:this.validate()}),!1)}},{key:"send",value:function(){return _.Z.post(this.props.thread.api.posts.split,{title:this.state.title,category:this.state.category,weight:this.state.weight,is_hidden:this.state.is_hidden,is_closed:this.state.is_closed,posts:this.props.selection.map((function(e){return e.id}))})}},{key:"handleSuccess",value:function(e){this.props.selection.forEach((function(e){x.Z.dispatch($.r$(e,{isDeleted:!0}))})),N.Z.hide(),k.Z.success(gettext("Selected posts were split into new thread."))}},{key:"handleError",value:function(e){400===e.status?(this.setState({errors:Object.assign({},this.state.errors,e)}),k.Z.error(gettext("Form contains errors."))):403===e.status&&Array.isArray(e)?N.Z.show((0,o.Z)(As,{errors:e})):k.Z.apiError(e)}},{key:"getWeightChoices",value:function(){var e=[{value:0,icon:"remove",label:gettext("Not pinned")},{value:1,icon:"bookmark_border",label:gettext("Pinned locally")}];return 2==this.acl[this.state.category].can_pin_threads&&e.push({value:2,icon:"bookmark",label:gettext("Pinned globally")}),e}},{key:"renderWeightField",value:function(){return this.acl[this.state.category].can_pin_threads?(0,o.Z)(g.Z,{label:gettext("Thread weight"),for:"id_weight",labelClass:"col-sm-4",controlClass:"col-sm-8"},void 0,(0,o.Z)(en.Z,{id:"id_weight",onChange:this.bindInput("weight"),value:this.state.weight,choices:this.getWeightChoices()})):null}},{key:"renderHiddenField",value:function(){return this.acl[this.state.category].can_hide_threads?(0,o.Z)(g.Z,{label:gettext("Hide thread"),for:"id_is_hidden",labelClass:"col-sm-4",controlClass:"col-sm-8"},void 0,(0,o.Z)(en.Z,{id:"id_is_closed",onChange:this.bindInput("is_hidden"),value:this.state.is_hidden,choices:this.isHiddenChoices})):null}},{key:"renderClosedField",value:function(){return this.acl[this.state.category].can_close_threads?(0,o.Z)(g.Z,{label:gettext("Close thread"),for:"id_is_closed",labelClass:"col-sm-4",controlClass:"col-sm-8"},void 0,(0,o.Z)(en.Z,{id:"id_is_closed",onChange:this.bindInput("is_closed"),value:this.state.is_closed,choices:this.isClosedChoices})):null}},{key:"render",value:function(){return(0,o.Z)(hi,{className:"modal-dialog"},void 0,(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(g.Z,{label:gettext("Thread title"),for:"id_title",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.title},void 0,(0,o.Z)("input",{id:"id_title",className:"form-control",type:"text",onChange:this.bindInput("title"),value:this.state.title})),Ys||(Ys=(0,o.Z)("div",{className:"clearfix"})),(0,o.Z)(g.Z,{label:gettext("Category"),for:"id_category",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.category},void 0,(0,o.Z)(Xt.Z,{id:"id_category",onChange:this.onCategoryChange,value:this.state.category,choices:this.state.categories})),Vs||(Vs=(0,o.Z)("div",{className:"clearfix"})),this.renderWeightField(),this.renderHiddenField(),this.renderClosedField()),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,o.Z)(Ct.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Split posts")))))}}]),n}(Z.Z);function di(){return $s||($s=(0,o.Z)(hi,{className:"modal-dialog"},void 0,(0,o.Z)(at.Z,{})))}function pi(e){return(0,o.Z)(hi,{className:"modal-dialog modal-message"},void 0,Gs||(Gs=(0,o.Z)("div",{className:"message-icon"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,o.Z)("div",{className:"message-body"},void 0,(0,o.Z)("p",{className:"lead"},void 0,gettext("You can't move selected posts at the moment.")),(0,o.Z)("p",{},void 0,e.message),(0,o.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,gettext("Ok"))))}function hi(e){return(0,o.Z)("div",{className:e.className,role:"document"},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,Ws||(Ws=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,gettext("Split posts into new thread"))),e.children))}function fi(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,p.Z)(e);if(t){var s=(0,p.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,d.Z)(this,n)}}function vi(e){return(0,o.Z)("ul",{className:"dropdown-menu dropdown-menu-right stick-to-bottom"},void 0,v().createElement(Ri,e),v().createElement(Ci,e),v().createElement(Si,e),v().createElement(Ei,e),v().createElement(Li,e),v().createElement(Pi,e),v().createElement(Ti,e),v().createElement(Oi,e),v().createElement(Ai,e))}var mi,Zi,gi,bi,yi,_i,Ni,ki,xi,wi,Ri=function(e){(0,u.Z)(n,e);var t=fi(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Is(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.selection.find((function(e){return e.acl.can_approve&&e.is_unapproved}));return e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,ei||(ei=(0,o.Z)("span",{className:"material-icon"},void 0,"done")),gettext("Approve"))):null}}]),n}(v().Component),Ci=function(e){(0,u.Z)(n,e);var t=fi(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Hs(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.selection.length>1&&this.props.selection.find((function(e){return e.acl.can_merge}));return e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,ti||(ti=(0,o.Z)("span",{className:"material-icon"},void 0,"call_merge")),gettext("Merge"))):null}}]),n}(v().Component),Si=function(e){(0,u.Z)(n,e);var t=fi(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){N.Z.show(v().createElement(Ks,e.props))})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.selection.find((function(e){return e.acl.can_move}));return e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,ni||(ni=(0,o.Z)("span",{className:"material-icon"},void 0,"arrow_forward")),gettext("Move"))):null}}]),n}(v().Component),Ei=function(e){(0,u.Z)(n,e);var t=fi(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){N.Z.show(v().createElement(Xs,e.props))})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.selection.find((function(e){return e.acl.can_move}));return e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,ai||(ai=(0,o.Z)("span",{className:"material-icon"},void 0,"call_split")),gettext("Split"))):null}}]),n}(v().Component),Li=function(e){(0,u.Z)(n,e);var t=fi(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){js(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.selection.find((function(e){return!e.is_protected&&e.acl.can_protect}));return e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,si||(si=(0,o.Z)("span",{className:"material-icon"},void 0,"lock_outline")),gettext("Protect"))):null}}]),n}(v().Component),Pi=function(e){(0,u.Z)(n,e);var t=fi(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Ds(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.selection.find((function(e){return e.is_protected&&e.acl.can_protect}));return e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,ii||(ii=(0,o.Z)("span",{className:"material-icon"},void 0,"lock_open")),gettext("Unprotect"))):null}}]),n}(v().Component),Oi=function(e){(0,u.Z)(n,e);var t=fi(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Us(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.selection.find((function(e){return e.acl.can_hide&&!e.is_hidden}));return e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,oi||(oi=(0,o.Z)("span",{className:"material-icon"},void 0,"visibility_off")),gettext("Hide"))):null}}]),n}(v().Component),Ti=function(e){(0,u.Z)(n,e);var t=fi(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Ms(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.selection.find((function(e){return e.acl.can_unhide&&e.is_hidden}));return e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,ri||(ri=(0,o.Z)("span",{className:"material-icon"},void 0,"visibility")),gettext("Unhide"))):null}}]),n}(v().Component),Ai=function(e){(0,u.Z)(n,e);var t=fi(n);function n(){var e;(0,r.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,h.Z)((0,c.Z)(e),"onClick",(function(){Fs(e.props)})),e}return(0,l.Z)(n,[{key:"render",value:function(){var e=this.props.selection.find((function(e){return e.acl.can_delete}));return e?(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,li||(li=(0,o.Z)("span",{className:"material-icon"},void 0,"clear")),gettext("Delete"))):null}}]),n}(v().Component),Bi=function(e){var t=e.thread,n=e.user,a=e.selection,s=e.dropup;return(0,o.Z)("div",{className:s?"dropup":"dropdown"},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-default btn-outline btn-icon dropdown-toggle",title:gettext("Posts options"),"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",disabled:0===a.length},void 0,mi||(mi=(0,o.Z)("span",{className:"material-icon"},void 0,"settings"))),(0,o.Z)(vi,{thread:t,user:n,selection:a}))},Ii=function(e){var t=e.onClick;return(0,o.Z)("button",{className:"btn btn-primary btn-outline btn-block",type:"button",onClick:t},void 0,Zi||(Zi=(0,o.Z)("span",{className:"material-icon"},void 0,"chat")),gettext("Reply"))},ji=function(e){var t=e.thread,n=e.posts,a=e.user,s=e.selection,i=e.moderation,r=e.onReply;return(0,o.Z)(Ls.o8,{},void 0,(0,o.Z)(Ls.Z2,{},void 0,(0,o.Z)(Ls.Eg,{},void 0,(0,o.Z)(Os,{baseUrl:t.url.index,posts:n})),(0,o.Z)(Ls.Eg,{className:"hidden-sm hidden-md hidden-lg",shrink:!0},void 0,(0,o.Z)(Bi,{thread:t,user:a,selection:s,dropup:!0}))),(0,o.Z)(Ls.Z2,{className:"hidden-xs hidden-sm",auto:!0},void 0,(0,o.Z)(Ls.Eg,{},void 0,(0,o.Z)(Ts,{posts:n}))),gi||(gi=(0,o.Z)(Ls.tw,{className:"hidden-md hidden-lg"})),a.is_authenticated&&(0,o.Z)(Ls.Z2,{},void 0,(0,o.Z)(Ls.Eg,{},void 0,(0,o.Z)(xs,{thread:t})),t.acl.can_reply&&(0,o.Z)(Ls.Eg,{},void 0,(0,o.Z)(Ii,{onClick:r})),i.enabled&&(0,o.Z)(Ls.Eg,{className:"hidden-xs",shrink:!0},void 0,(0,o.Z)(Bi,{thread:t,user:a,selection:s,dropup:!0}))))},Di=function(e){var t=e.compact,n=e.onClick;return(0,o.Z)("button",{className:cs()("btn btn-default btn-outline",{"btn-block":!t,"btn-icon":t}),type:"button",title:t?gettext("Add poll"):null,onClick:n},void 0,bi||(bi=(0,o.Z)("span",{className:"material-icon"},void 0,"poll")),!t&&gettext("Add poll"))},Ui=function(e){var t=e.user,n=e.thread;return(0,o.Z)("div",{className:"dropdown"},void 0,(0,o.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:gettext("Shortcuts"),"aria-expanded":"true","aria-haspopup":"true","data-toggle":"dropdown",type:"button"},void 0,yi||(yi=(0,o.Z)("span",{className:"material-icon"},void 0,"bookmark"))),(0,o.Z)("ul",{className:"dropdown-menu"},void 0,t.is_authenticated&&n.is_new&&(0,o.Z)("li",{},void 0,(0,o.Z)("a",{className:"btn btn-link",href:n.url.new_post},void 0,_i||(_i=(0,o.Z)("span",{className:"material-icon"},void 0,"comment")),gettext("Go to new post"))),n.best_answer&&(0,o.Z)("li",{},void 0,(0,o.Z)("a",{className:"btn btn-link",href:n.url.best_answer},void 0,Ni||(Ni=(0,o.Z)("span",{className:"material-icon"},void 0,"check_circle")),gettext("Go to best answer"))),n.has_unapproved_posts&&n.acl.can_approve&&(0,o.Z)("li",{},void 0,(0,o.Z)("a",{className:"btn btn-link",href:n.url.unapproved_post},void 0,ki||(ki=(0,o.Z)("span",{className:"material-icon"},void 0,"visibility")),gettext("Go to unapproved post"))),(0,o.Z)("li",{},void 0,(0,o.Z)("a",{className:"btn btn-link",href:n.url.last_post},void 0,xi||(xi=(0,o.Z)("span",{className:"material-icon"},void 0,"reply")),gettext("Go to last post")))))},Mi=function(e){var t=e.thread,n=e.posts,a=e.user,s=e.selection,i=e.moderation,r=e.onPoll,l=e.onReply;return(0,o.Z)(Ls.o8,{},void 0,(0,o.Z)(Ls.Z2,{className:"hidden-xs"},void 0,(0,o.Z)(Ls.Eg,{},void 0,(0,o.Z)(Ui,{thread:t,user:a})),(0,o.Z)(Ls.Eg,{className:"hidden-xs hidden-sm"},void 0,(0,o.Z)(Os,{baseUrl:t.url.index,posts:n}))),wi||(wi=(0,o.Z)(Ls.tw,{})),t.acl.can_start_poll&&!t.poll&&(0,o.Z)(Ls.Z2,{className:"hidden-xs"},void 0,(0,o.Z)(Ls.Eg,{},void 0,(0,o.Z)(Di,{onClick:r}))),t.acl.can_reply?(0,o.Z)(Ls.Z2,{},void 0,(0,o.Z)(Ls.Eg,{className:"hidden-sm hidden-md hidden-lg",shrink:!0},void 0,(0,o.Z)(Ui,{thread:t,user:a})),(0,o.Z)(Ls.Eg,{},void 0,(0,o.Z)(Ii,{onClick:l})),t.acl.can_start_poll&&!t.poll&&(0,o.Z)(Ls.Eg,{className:"hidden-sm hidden-md hidden-lg",shrink:!0},void 0,(0,o.Z)(Di,{onClick:r,compact:!0})),i.enabled&&(0,o.Z)(Ls.Eg,{className:"hidden-xs",shrink:!0},void 0,(0,o.Z)(Bi,{thread:t,user:a,selection:s}))):(0,o.Z)(Ls.Z2,{},void 0,(0,o.Z)(Ls.Eg,{className:"hidden-sm hidden-md hidden-lg",shrink:!0},void 0,(0,o.Z)(Ui,{thread:t,user:a})),t.acl.can_start_poll&&!t.poll&&(0,o.Z)(Ls.Eg,{},void 0,(0,o.Z)(Di,{onClick:r})),i.enabled&&(0,o.Z)(Ls.Eg,{shrink:!0},void 0,(0,o.Z)(Bi,{thread:t,user:a,selection:s}))))};var zi=function(e){(0,u.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,p.Z)(t);if(n){var s=(0,p.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,d.Z)(this,e)});function s(){var e;(0,r.Z)(this,s);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return e=a.call.apply(a,[this].concat(n)),(0,h.Z)((0,c.Z)(e),"update",(function(t){x.Z.dispatch(y.gx(t)),x.Z.dispatch(Mn.zD(t.post_set)),t.participants&&x.Z.dispatch(b.gx(t.participants)),t.poll&&x.Z.dispatch(ma.gx(t.poll)),e.setPageTitle()})),(0,h.Z)((0,c.Z)(e),"openPollForm",(function(){ft.Z.open({mode:"POLL",submit:e.props.thread.api.poll,thread:e.props.thread,poll:null})})),(0,h.Z)((0,c.Z)(e),"openReplyForm",(function(){ft.Z.open({mode:"REPLY",config:e.props.thread.api.editor,submit:e.props.thread.api.posts.index})})),e}return(0,l.Z)(s,[{key:"componentDidMount",value:function(){this.shouldFetchData()&&(this.fetchData(),this.setPageTitle()),this.startPollingApi()}},{key:"componentDidUpdate",value:function(){this.shouldFetchData()&&(this.fetchData(),this.startPollingApi(),this.setPageTitle())}},{key:"componentWillUnmount",value:function(){this.stopPollingApi()}},{key:"shouldFetchData",value:function(){return!!this.props.posts.isLoaded&&1*(this.props.params.page||1)!=this.props.posts.page}},{key:"fetchData",value:function(){var e=this;x.Z.dispatch(Mn.Rz()),_.Z.get(this.props.thread.api.posts.index,{page:this.props.params.page||1},"posts").then((function(t){e.update(t)}),(function(e){k.Z.apiError(e)}))}},{key:"startPollingApi",value:function(){Za.Z.start({poll:"thread-posts",url:this.props.thread.api.posts.index,data:{page:this.props.params.page||1},update:this.update,frequency:12e4,delayed:!0})}},{key:"stopPollingApi",value:function(){Za.Z.stop("thread-posts")}},{key:"setPageTitle",value:function(){ga.Z.set({title:this.props.thread.title,parent:this.props.thread.category.name,page:1*(this.props.params.page||1)})}},{key:"render",value:function(){var e=this.props.thread.category,t="page page-thread";e.css_class&&(t+=" page-thread-"+e.css_class);var n="private_threads"===e.special_role?"private-threads":e.css_class||"category-threads",a=Hi(this.props.thread,this.props.user),s=Fi(this.props.posts.results,this.props.user),i=this.props.posts.results.filter((function(e){return e.isSelected}));return(0,o.Z)("div",{className:t},void 0,(0,o.Z)(Es,{styleName:n,thread:this.props.thread,posts:this.props.posts,user:this.props.user,moderation:a}),(0,o.Z)(ba.Z,{},void 0,(0,o.Z)(U,{participants:this.props.participants,thread:this.props.thread,user:this.props.user}),(0,o.Z)(Mi,{thread:this.props.thread,posts:this.props.posts,user:this.props.user,selection:i,moderation:s,onPoll:this.openPollForm,onReply:this.openReplyForm}),(0,o.Z)(z.n,{poll:this.props.poll,thread:this.props.thread,user:this.props.user}),v().createElement(da,this.props),(0,o.Z)(ji,{thread:this.props.thread,posts:this.props.posts,user:this.props.user,selection:i,moderation:s,onReply:this.openReplyForm})))}}]),s}(v().Component),Hi=function(e,t){var n={enabled:!1,edit:!1,approve:!1,close:!1,open:!1,hide:!1,unhide:!1,move:!1,merge:!1,pinGlobally:!1,pinLocally:!1,unpin:!1,delete:!1};return t.is_authenticated?(n.edit=e.acl.can_edit,n.approve=e.acl.can_approve&&e.is_unapproved,n.close=e.acl.can_close&&!e.is_closed,n.open=e.acl.can_close&&e.is_closed,n.hide=e.acl.can_hide&&!e.is_hidden,n.unhide=e.acl.can_unhide&&e.is_hidden,n.move=e.acl.can_move,n.merge=e.acl.can_merge,n.pinGlobally=e.acl.can_pin_globally&&e.weight<2,n.pinLocally=e.acl.can_pin&&1!==e.weight,n.unpin=e.acl.can_pin&&1===e.weight||e.acl.can_pin_globally&&2===e.weight,n.delete=e.acl.can_delete,n.enabled=n.edit||n.approve||n.close||n.open||n.hide||n.unhide||n.move||n.merge||n.pinGlobally||n.pinLocally||n.unpin||n.delete,n):n},Fi=function(e,t){var n={enabled:!1,approve:!1,move:!1,merge:!1,protect:!1,hide:!1,delete:!1};return t.is_authenticated?(e.forEach((function(e){e.is_event||(e.acl.can_approve&&e.is_unapproved&&(n.approve=!0),e.acl.can_move&&(n.move=!0),e.acl.can_merge&&(n.merge=!0),(e.acl.can_protect||e.acl.can_unprotect)&&(n.protect=!0),(e.acl.can_hide||e.acl.can_unhide)&&(n.hide=!0),e.acl.can_delete&&(n.delete=!0),(n.approve||n.move||n.merge||n.protect||n.hide||n.delete)&&(n.enabled=!0))})),n):n};function qi(e){return{participants:e.participants,poll:e.poll,posts:e.posts,thread:e.thread,tick:e.tick.tick,user:e.auth.user}}var Yi=n(39633);E.Z.addInitializer({name:"component:thread",initializer:function(e){var t,n;e.has("THREAD")&&e.has("POSTS")&&(0,Yi.Z)({paths:(t=E.Z.get("THREAD"),n=t.url.index.replace(t.slug+"-"+t.pk,":slug"),[{path:n,component:(0,i.$j)(qi)(zi)},{path:n+":page/",component:(0,i.$j)(qi)(zi)}])})},after:"store"})},72168:function(e,t,n){"use strict";var a=n(37424),s=n(22928),i=n(15671),o=n(43144),r=n(97326),l=n(79340),c=n(6215),u=n(61120),d=n(4942),p=n(57588),h=n.n(p),f=n(82211);function v(e,t){return e.last_post>t.last_post?-1:e.last_post<t.last_post?1:0}function m(e,t){return 2===e.weight&&e.weight>t.weight?-1:2===t.weight&&e.weight<t.weight?1:v(e,t)}function Z(e,t){return e.weight>t.weight?-1:e.weight<t.weight?1:v(e,t)}var g,b,y=n(59131),_=n(27950),N=n(92490),k=n(69987),x=function(e){var t=e.allItems,n=e.parentUrl,a=e.category,i=e.categories,o=e.list;return(0,s.Z)("div",{className:"dropdown threads-category-picker"},void 0,(0,s.Z)("button",{type:"button",className:"btn btn-default btn-outline dropdown-toggle btn-block text-ellipsis","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,a&&(0,s.Z)("span",{className:"material-icon",style:{color:a.color||"inherit"}},void 0,"label"),a&&a.short_name&&(0,s.Z)("span",{className:a.short_name&&"hidden-md hidden-lg"},void 0,a.short_name),a?(0,s.Z)("span",{className:a.short_name&&"hidden-xs hidden-sm"},void 0,a.name):t),(0,s.Z)("ul",{className:"dropdown-menu"},void 0,(0,s.Z)("li",{},void 0,(0,s.Z)(k.rU,{to:n+o.path},void 0,t)),g||(g=(0,s.Z)("li",{role:"separator",className:"divider"})),i.map((function(e){return(0,s.Z)("li",{},e.id,(0,s.Z)(k.rU,{to:e.url.index+o.path},void 0,(0,s.Z)("span",{className:"material-icon",style:{color:e.color||"inherit"}},void 0,"label"),e.name))}))))},w=function(e){var t=e.baseUrl,n=e.list,a=e.lists;return(0,s.Z)("div",{className:"dropdown threads-list-picker"},void 0,(0,s.Z)("button",{type:"button",className:"btn btn-default btn-outline dropdown-toggle btn-block","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,n.longName),(0,s.Z)("ul",{className:"dropdown-menu stick-to-bottom"},void 0,a.map((function(e){return(0,s.Z)("li",{},e.type,(0,s.Z)(k.rU,{to:t+e.path},void 0,e.longName))}))))};var R=function(e){(0,l.Z)(r,e);var t,n,a=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function r(){return(0,i.Z)(this,r),a.apply(this,arguments)}return(0,o.Z)(r,[{key:"render",value:function(){return(0,s.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,s.Z)("div",{className:"modal-content"},void 0,(0,s.Z)("div",{className:"modal-header"},void 0,(0,s.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,b||(b=(0,s.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,s.Z)("h4",{className:"modal-title"},void 0,gettext("Threads moderation"))),(0,s.Z)("div",{className:"modal-body"},void 0,(0,s.Z)("p",{className:"lead"},void 0,gettext("One or more threads could not be deleted:")),(0,s.Z)("ul",{className:"list-unstyled list-errored-items"},void 0,this.props.errors.map((function(e){return(0,s.Z)(C,{errors:e.errors,thread:e.thread},e.thread.id)}))))))}}]),r}(h().Component);function C(e){var t=e.errors,n=e.thread;return(0,s.Z)("li",{},void 0,(0,s.Z)("h5",{},void 0,n.title),t.map((function(e,t){return(0,s.Z)("p",{},void 0,e)})))}var S,E,L,P,O=n(43345),T=n(96359),A=n(57026),B=n(60471),I=n(32233),j=n(61340),D=n(77751),U=n(52753),M=n(78657),z=n(59801),H=n(53904),F=n(90287),q=n(55210);var Y,V,$=function(e){(0,l.Z)(p,e);var t,n,a=(t=p,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function p(e){var t;for(var n in(0,i.Z)(this,p),t=a.call(this,e),(0,d.Z)((0,r.Z)(t),"getFormdata",(function(){return{threads:t.props.threads.map((function(e){return e.id})),title:t.state.title,category:t.state.category,weight:t.state.weight,is_hidden:t.state.is_hidden,is_closed:t.state.is_closed}})),(0,d.Z)((0,r.Z)(t),"handleSuccess",(function(e){t.props.threads.forEach((function(e){t.props.freezeThread(e.id),t.props.deleteThread(e)})),F.Z.dispatch(D.YP()),t.props.addThreads([e]),F.Z.dispatch((0,j.V8)(t.props.route.category,t.props.categoriesMap)),z.Z.hide()})),(0,d.Z)((0,r.Z)(t),"handleError",(function(e){400===e.status?e.best_answers||e.polls?z.Z.show((0,s.Z)(U.ZP,{api:I.Z.get("MERGE_THREADS_API"),bestAnswers:e.best_answers,data:t.getFormdata(),polls:e.polls,onError:t.handleError,onSuccess:t.handleSuccess})):(t.setState({errors:Object.assign({},t.state.errors,e)}),H.Z.error(gettext("Form contains errors."))):403===e.status&&Array.isArray(e)?z.Z.show((0,s.Z)(R,{errors:e})):e.best_answer?H.Z.error(e.best_answer[0]):e.poll?H.Z.error(e.poll[0]):H.Z.apiError(e)})),(0,d.Z)((0,r.Z)(t),"onCategoryChange",(function(e){var n=e.target.value,a={category:n};t.acl[n].can_pin_threads<a.weight&&(a.weight=0),t.acl[n].can_hide_threads||(a.is_hidden=0),t.acl[n].can_close_threads||(a.is_closed=!1),t.setState(a)})),t.state={isLoading:!1,title:"",category:null,weight:0,is_hidden:0,is_closed:!1,validators:{title:[q.C1()]},errors:{}},t.acl={},e.user.acl.categories)if(e.user.acl.categories.hasOwnProperty(n)){var o=e.user.acl.categories[n];t.acl[o.id]=o}return t.categoryChoices=[],e.categories.forEach((function(e){if(e.level>0){var n=t.acl[e.id],a=!n.can_start_threads||e.is_closed&&!n.can_close_threads;t.categoryChoices.push({value:e.id,disabled:a,level:e.level-1,label:e.name}),a||t.state.category||(t.state.category=e.id)}})),t.isHiddenChoices=[{value:0,icon:"visibility",label:gettext("No")},{value:1,icon:"visibility_off",label:gettext("Yes")}],t.isClosedChoices=[{value:!1,icon:"lock_outline",label:gettext("No")},{value:!0,icon:"lock",label:gettext("Yes")}],t}return(0,o.Z)(p,[{key:"clean",value:function(){return!!this.isValid()||(H.Z.error(gettext("Form contains errors.")),this.setState({errors:this.validate()}),!1)}},{key:"send",value:function(){return M.Z.post(I.Z.get("MERGE_THREADS_API"),this.getFormdata())}},{key:"getWeightChoices",value:function(){var e=[{value:0,icon:"remove",label:gettext("Not pinned")},{value:1,icon:"bookmark_border",label:gettext("Pinned locally")}];return 2==this.acl[this.state.category].can_pin_threads&&e.push({value:2,icon:"bookmark",label:gettext("Pinned globally")}),e}},{key:"renderWeightField",value:function(){return this.acl[this.state.category].can_pin_threads?(0,s.Z)(T.Z,{label:gettext("Thread weight"),for:"id_weight"},void 0,(0,s.Z)(B.Z,{id:"id_weight",onChange:this.bindInput("weight"),value:this.state.weight,choices:this.getWeightChoices()})):null}},{key:"renderHiddenField",value:function(){return this.acl[this.state.category].can_hide_threads?(0,s.Z)(T.Z,{label:gettext("Hide thread"),for:"id_is_hidden"},void 0,(0,s.Z)(B.Z,{id:"id_is_closed",onChange:this.bindInput("is_hidden"),value:this.state.is_hidden,choices:this.isHiddenChoices})):null}},{key:"renderClosedField",value:function(){return this.acl[this.state.category].can_close_threads?(0,s.Z)(T.Z,{label:gettext("Close thread"),for:"id_is_closed"},void 0,(0,s.Z)(B.Z,{id:"id_is_closed",onChange:this.bindInput("is_closed"),value:this.state.is_closed,choices:this.isClosedChoices})):null}},{key:"renderForm",value:function(){return(0,s.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,s.Z)("div",{className:"modal-body"},void 0,(0,s.Z)(T.Z,{label:gettext("Thread title"),for:"id_title",validation:this.state.errors.title},void 0,(0,s.Z)("input",{id:"id_title",className:"form-control",type:"text",onChange:this.bindInput("title"),value:this.state.title})),S||(S=(0,s.Z)("div",{className:"clearfix"})),(0,s.Z)(T.Z,{label:gettext("Category"),for:"id_category",validation:this.state.errors.category},void 0,(0,s.Z)(A.Z,{id:"id_category",onChange:this.onCategoryChange,value:this.state.category,choices:this.categoryChoices})),E||(E=(0,s.Z)("div",{className:"clearfix"})),this.renderWeightField(),this.renderHiddenField(),this.renderClosedField()),(0,s.Z)("div",{className:"modal-footer"},void 0,(0,s.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,s.Z)(f.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Merge threads"))))}},{key:"renderCantMergeMessage",value:function(){return(0,s.Z)("div",{className:"modal-body"},void 0,L||(L=(0,s.Z)("div",{className:"message-icon"},void 0,(0,s.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,s.Z)("div",{className:"message-body"},void 0,(0,s.Z)("p",{className:"lead"},void 0,gettext("You can't move threads because there are no categories you are allowed to move them to.")),(0,s.Z)("p",{},void 0,gettext("You need permission to start threads in category to be able to merge threads to it.")),(0,s.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,gettext("Ok"))))}},{key:"getClassName",value:function(){return this.state.category?"modal-dialog":"modal-dialog modal-message"}},{key:"render",value:function(){return(0,s.Z)("div",{className:this.getClassName(),role:"document"},void 0,(0,s.Z)("div",{className:"modal-content"},void 0,(0,s.Z)("div",{className:"modal-header"},void 0,(0,s.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},void 0,P||(P=(0,s.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,s.Z)("h4",{className:"modal-title"},void 0,gettext("Merge threads"))),this.state.category?this.renderForm():this.renderCantMergeMessage()))}}]),p}(O.Z);var G,W,K,J,Q,X,ee,te,ne,ae,se,ie,oe,re,le=function(e){(0,l.Z)(p,e);var t,n,a=(t=p,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function p(e){var t;(0,i.Z)(this,p),t=a.call(this,e),(0,d.Z)((0,r.Z)(t),"handleSubmit",(function(e){e.preventDefault(),z.Z.hide(),t.props.callApi([{op:"replace",path:"category",value:t.state.category},{op:"replace",path:"flatten-categories",value:null},{op:"add",path:"acl",value:!0}],gettext("Selected threads were moved."),(function(){F.Z.dispatch((0,j.V8)(t.props.route.category,t.props.categoriesMap));var e=F.Z.getState(),n=e.threads.map((function(e){return e.id}));F.Z.dispatch(D.$6(e.selection.filter((function(e){return-1!==n.indexOf(e)}))))}))})),t.state={category:null};var n={};for(var s in e.user.acl.categories)if(e.user.acl.categories.hasOwnProperty(s)){var o=e.user.acl.categories[s];n[o.id]=o}return t.categoryChoices=[],e.categories.forEach((function(e){if(e.level>0){var a=n[e.id],s=!a.can_start_threads||e.is_closed&&!a.can_close_threads;t.categoryChoices.push({value:e.id,disabled:s,level:e.level-1,label:e.name}),s||t.state.category||(t.state.category=e.id)}})),t}return(0,o.Z)(p,[{key:"getClassName",value:function(){return this.state.category?"modal-dialog":"modal-dialog modal-message"}},{key:"renderForm",value:function(){return(0,s.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,s.Z)("div",{className:"modal-body"},void 0,(0,s.Z)(T.Z,{label:gettext("New category"),for:"id_new_category"},void 0,(0,s.Z)(A.Z,{id:"id_new_category",onChange:this.bindInput("category"),value:this.state.category,choices:this.categoryChoices}))),(0,s.Z)("div",{className:"modal-footer"},void 0,(0,s.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,s.Z)("button",{className:"btn btn-primary"},void 0,gettext("Move threads"))))}},{key:"renderCantMoveMessage",value:function(){return(0,s.Z)("div",{className:"modal-body"},void 0,Y||(Y=(0,s.Z)("div",{className:"message-icon"},void 0,(0,s.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,s.Z)("div",{className:"message-body"},void 0,(0,s.Z)("p",{className:"lead"},void 0,gettext("You can't move threads because there are no categories you are allowed to move them to.")),(0,s.Z)("p",{},void 0,gettext("You need permission to start threads in category to be able to move threads to it.")),(0,s.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,gettext("Ok"))))}},{key:"render",value:function(){return(0,s.Z)("div",{className:this.getClassName(),role:"document"},void 0,(0,s.Z)("div",{className:"modal-content"},void 0,(0,s.Z)("div",{className:"modal-header"},void 0,(0,s.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},void 0,V||(V=(0,s.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,s.Z)("h4",{className:"modal-title"},void 0,gettext("Move threads"))),this.state.category?this.renderForm():this.renderCantMoveMessage()))}}]),p}(O.Z);var ce,ue,de,pe=function(e){(0,l.Z)(p,e);var t,n,a=(t=p,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function p(){var e;(0,i.Z)(this,p);for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return e=a.call.apply(a,[this].concat(n)),(0,d.Z)((0,r.Z)(e),"callApi",(function(t,n){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;e.props.threads.forEach((function(t){e.props.freezeThread(t.id)}));var i=e.props.threads.map((function(e){return e.id}));t.push({op:"add",path:"acl",value:!0}),M.Z.patch(e.props.api,{ids:i,ops:t}).then((function(t){e.props.threads.forEach((function(t){e.props.freezeThread(t.id)})),t.forEach((function(t){e.props.updateThread(t)})),H.Z.success(n),a&&a()}),(function(t){if(e.props.threads.forEach((function(t){e.props.freezeThread(t.id)})),400!==t.status)return H.Z.apiError(t);var n=[],a={};e.props.threads.forEach((function(e){a[e.id]=e})),t.forEach((function(e){var t=e.id,s=e.detail;void 0!==a[t]&&n.push({errors:s,thread:a[t]})})),z.Z.show((0,s.Z)(R,{errors:n}))}))})),(0,d.Z)((0,r.Z)(e),"pinGlobally",(function(){e.callApi([{op:"replace",path:"weight",value:2}],gettext("Selected threads were pinned globally."))})),(0,d.Z)((0,r.Z)(e),"pinLocally",(function(){e.callApi([{op:"replace",path:"weight",value:1}],gettext("Selected threads were pinned locally."))})),(0,d.Z)((0,r.Z)(e),"unpin",(function(){e.callApi([{op:"replace",path:"weight",value:0}],gettext("Selected threads were unpinned."))})),(0,d.Z)((0,r.Z)(e),"approve",(function(){e.callApi([{op:"replace",path:"is-unapproved",value:!1}],gettext("Selected threads were approved."))})),(0,d.Z)((0,r.Z)(e),"open",(function(){e.callApi([{op:"replace",path:"is-closed",value:!1}],gettext("Selected threads were opened."))})),(0,d.Z)((0,r.Z)(e),"close",(function(){e.callApi([{op:"replace",path:"is-closed",value:!0}],gettext("Selected threads were closed."))})),(0,d.Z)((0,r.Z)(e),"unhide",(function(){e.callApi([{op:"replace",path:"is-hidden",value:!1}],gettext("Selected threads were unhidden."))})),(0,d.Z)((0,r.Z)(e),"hide",(function(){e.callApi([{op:"replace",path:"is-hidden",value:!0}],gettext("Selected threads were hidden."))})),(0,d.Z)((0,r.Z)(e),"move",(function(){z.Z.show((0,s.Z)(le,{callApi:e.callApi,categories:e.props.categories,categoriesMap:e.props.categoriesMap,route:e.props.route,user:e.props.user}))})),(0,d.Z)((0,r.Z)(e),"merge",(function(){var t=[];if(e.props.threads.forEach((function(e){e.acl.can_merge||t.append({id:e.id,title:e.title,errors:[gettext("You don't have permission to merge this thread with others.")]})})),e.props.threads.length<2)H.Z.info(gettext("You have to select at least two threads to merge."));else{if(t.length)return void z.Z.show((0,s.Z)(R,{errors:t}));z.Z.show(h().createElement($,e.props))}})),(0,d.Z)((0,r.Z)(e),"delete",(function(){if(window.confirm(gettext("Are you sure you want to delete selected threads?"))){e.props.threads.map((function(t){e.props.freezeThread(t.id)}));var t=e.props.threads.map((function(e){return e.id}));M.Z.delete(e.props.api,t).then((function(){e.props.threads.map((function(t){e.props.freezeThread(t.id),e.props.deleteThread(t)})),H.Z.success(gettext("Selected threads were deleted."))}),(function(t){if(400===t.status){var n=t.map((function(e){return e.id}));e.props.threads.map((function(t){e.props.freezeThread(t.id),-1===n.indexOf(t.id)&&e.props.deleteThread(t)})),z.Z.show((0,s.Z)(R,{errors:t}))}else H.Z.apiError(t)}))}})),e}return(0,o.Z)(p,[{key:"render",value:function(){var e=this.props,t=e.moderation,n=e.threads,a=0==this.props.selection.length;return(0,s.Z)("ul",{className:"dropdown-menu dropdown-menu-right stick-to-bottom"},void 0,(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",onClick:function(){return F.Z.dispatch(D.$6(n.map((function(e){return e.id}))))}},void 0,G||(G=(0,s.Z)("span",{className:"material-icon"},void 0,"check_box")),gettext("Select all"))),(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:function(){return F.Z.dispatch(D.YP())}},void 0,W||(W=(0,s.Z)("span",{className:"material-icon"},void 0,"check_box_outline_blank")),gettext("Select none"))),K||(K=(0,s.Z)("li",{role:"separator",className:"divider"})),!!t.can_pin_globally&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.pinGlobally},void 0,J||(J=(0,s.Z)("span",{className:"material-icon"},void 0,"bookmark")),gettext("Pin threads globally"))),!!t.can_pin&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.pinLocally},void 0,Q||(Q=(0,s.Z)("span",{className:"material-icon"},void 0,"bookmark_border")),gettext("Pin threads locally"))),!!t.can_pin&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.unpin},void 0,X||(X=(0,s.Z)("span",{className:"material-icon"},void 0,"panorama_fish_eye")),gettext("Unpin threads"))),!!t.can_move&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.move},void 0,ee||(ee=(0,s.Z)("span",{className:"material-icon"},void 0,"arrow_forward")),gettext("Move threads"))),!!t.can_merge&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.merge},void 0,te||(te=(0,s.Z)("span",{className:"material-icon"},void 0,"call_merge")),gettext("Merge threads"))),!!t.can_approve&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.approve},void 0,ne||(ne=(0,s.Z)("span",{className:"material-icon"},void 0,"done")),gettext("Approve threads"))),!!t.can_close&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.open},void 0,ae||(ae=(0,s.Z)("span",{className:"material-icon"},void 0,"lock_open")),gettext("Open threads"))),!!t.can_close&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.close},void 0,se||(se=(0,s.Z)("span",{className:"material-icon"},void 0,"lock_outline")),gettext("Close threads"))),!!t.can_unhide&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.unhide},void 0,ie||(ie=(0,s.Z)("span",{className:"material-icon"},void 0,"visibility")),gettext("Unhide threads"))),!!t.can_hide&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.hide},void 0,oe||(oe=(0,s.Z)("span",{className:"material-icon"},void 0,"visibility_off")),gettext("Hide threads"))),!!t.can_delete&&(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn btn-link",type:"button",disabled:a,onClick:this.delete},void 0,re||(re=(0,s.Z)("span",{className:"material-icon"},void 0,"clear")),gettext("Delete threads"))))}}]),p}(h().Component),he=function(e){var t=e.api,n=e.categoriesMap,a=e.categories,i=e.threads,o=e.addThreads,r=e.freezeThread,l=e.updateThread,c=e.deleteThread,u=e.selection,d=e.moderation,p=e.route,h=e.user,f=e.disabled;return(0,s.Z)("div",{className:"dropdown threads-moderation"},void 0,(0,s.Z)("button",{type:"button",className:"btn btn-default btn-outline btn-icon dropdown-toggle",title:gettext("Moderation"),"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",disabled:f},void 0,ce||(ce=(0,s.Z)("span",{className:"material-icon"},void 0,"settings"))),(0,s.Z)(pe,{api:t,categories:a,categoriesMap:n,threads:i,addThreads:o,freezeThread:r,updateThread:l,deleteThread:c,selection:u,moderation:d,route:p,user:h,disabled:f}))},fe=function(e){var t=e.api,n=e.baseUrl,a=e.category,i=e.categories,o=e.categoriesMap,r=e.topCategory,l=e.topCategories,c=e.subCategory,u=e.subCategories,d=e.list,p=e.lists,h=e.threads,v=e.addThreads,m=e.startThread,Z=e.freezeThread,g=e.updateThread,b=e.deleteThread,y=e.selection,k=e.moderation,R=e.route,C=e.user,S=e.disabled;return(0,s.Z)(N.o8,{},void 0,l.length>0&&(0,s.Z)(N.Z2,{},void 0,(0,s.Z)(N.Eg,{},void 0,(0,s.Z)(x,{allItems:gettext("All categories"),parentUrl:d.path,category:r,categories:l,list:d})),r&&u.length>0&&(0,s.Z)(N.Eg,{},void 0,(0,s.Z)(x,{allItems:gettext("All subcategories"),parentUrl:r.url.index,category:c,categories:u,list:d}))),p.length>1&&(0,s.Z)(N.Z2,{className:"hidden-xs"},void 0,(0,s.Z)(N.Eg,{},void 0,(0,s.Z)(w,{baseUrl:n,list:d,lists:p}))),ue||(ue=(0,s.Z)(N.tw,{})),!!C.id&&(0,s.Z)(N.Z2,{},void 0,(0,s.Z)(N.Eg,{},void 0,(0,s.Z)(f.Z,{className:"btn-primary btn-outline btn-block",disabled:S,onClick:function(){_.Z.open(m||{mode:"START",config:misago.get("THREAD_EDITOR_API"),submit:misago.get("THREADS_API"),category:a.id})}},void 0,de||(de=(0,s.Z)("span",{className:"material-icon"},void 0,"chat")),gettext("Start thread"))),!!k.allow&&(0,s.Z)(N.Eg,{shrink:!0},void 0,(0,s.Z)(he,{api:t,categories:i,categoriesMap:o,threads:h.filter((function(e){return-1!==y.indexOf(e.id)})),addThreads:v,freezeThread:Z,updateThread:g,deleteThread:b,selection:y,moderation:k,route:R,user:C,disabled:S}))))};var ve=function(e){(0,l.Z)(r,e);var t,n,a=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function r(){return(0,i.Z)(this,r),a.apply(this,arguments)}return(0,o.Z)(r,[{key:"render",value:function(){var e=this.props.root,t=this.props.route,n=t.category,a=t.categories,i=t.categoriesMap,o=me(e,n,i);return(0,s.Z)(y.Z,{},void 0,(0,s.Z)(fe,{api:this.props.api,baseUrl:n.url.index,category:n,categories:a,categoriesMap:i,topCategory:o,topCategories:a.filter((function(t){return t.parent===e.id})),subCategories:o?a.filter((function(e){return e.parent===o.id})):[],subCategory:2===n.level?n:null,subcategories:this.props.subcategories,list:this.props.route.list,lists:this.props.route.lists,threads:this.props.threads,addThreads:this.props.addThreads,startThread:this.props.startThread,freezeThread:this.props.freezeThread,deleteThread:this.props.deleteThread,updateThread:this.props.updateThread,selection:this.props.selection,moderation:this.props.moderation,route:this.props.route,user:this.props.user,disabled:!this.props.isLoaded||this.props.isBusy||this.props.busyThreads.length}),this.props.children)}}]),r}(h().Component),me=function(e,t,n){return t.parent?t.parent===e.id?t:n[t.parent]:null};function Ze(e){var t={allow:!1,can_approve:0,can_close:0,can_delete:0,can_hide:0,can_merge:0,can_move:0,can_pin:0,can_pin_globally:0,can_unhide:0};return e.forEach((function(e){e.is_unapproved&&e.acl.can_approve>t.can_approve&&(t.can_approve=e.acl.can_approve),e.acl.can_close>t.can_close&&(t.can_close=e.acl.can_close),e.acl.can_delete>t.can_delete&&(t.can_delete=e.acl.can_delete),e.acl.can_hide>t.can_hide&&(t.can_hide=e.acl.can_hide),e.acl.can_merge>t.can_merge&&(t.can_merge=e.acl.can_merge),e.acl.can_move>t.can_move&&(t.can_move=e.acl.can_move),e.acl.can_pin>t.can_pin&&(t.can_pin=e.acl.can_pin),e.acl.can_pin_globally>t.can_pin_globally&&(t.can_pin_globally=e.acl.can_pin_globally),e.is_hidden&&e.acl.can_unhide>t.can_unhide&&(t.can_unhide=e.acl.can_unhide),t.allow=t.can_approve||t.can_close||t.can_delete||t.can_hide||t.can_merge||t.can_move||t.can_pin||t.can_pin_globally||t.can_unhide})),t}var ge,be,ye,_e,Ne=function(e){var t=e.category,n=e.list,a=e.message;return"all"===n.type?a?(0,s.Z)("li",{className:"list-group-item empty-message"},void 0,(0,s.Z)("p",{className:"lead"},void 0,a),(0,s.Z)("p",{},void 0,gettext("Why not start one yourself?"))):(0,s.Z)("li",{className:"list-group-item empty-message"},void 0,(0,s.Z)("p",{className:"lead"},void 0,t.special_role?gettext("There are no threads on this forum... yet!"):gettext("There are no threads in this category.")),(0,s.Z)("p",{},void 0,gettext("Why not start one yourself?"))):(0,s.Z)("li",{className:"list-group-item empty-message"},void 0,(0,s.Z)("p",{className:"lead"},void 0,gettext("No threads matching specified criteria were found.")))},ke=n(50366),xe=n(16768),we=function(e){var t=e.thread;return(0,s.Z)("a",{href:t.url.last_post,className:"threads-list-item-last-activity",title:interpolate(gettext("Last activity: %(timestamp)s"),{timestamp:t.last_post_on.format("LLL")},!0)},void 0,t.last_post_on.fromNow(!0))},Re=function(e){var t="threads-list-item-category threads-list-category-label";return e.color&&(t+=" threads-list-category-label-color"),t},Ce=function(e){var t=e.parent,n=e.category;return(0,s.Z)("span",{},void 0,t&&(0,s.Z)("a",{href:t.url.index,className:Re(t)+" threads-list-item-parent-category",style:t.color?{"--label-color":t.color}:null,title:t.short_name?t.name:null},void 0,t.short_name||t.name),(0,s.Z)("a",{href:n.url.index,className:Re(n),style:n.color?{"--label-color":n.color}:null,title:n.short_name?n.name:null},void 0,n.short_name||n.name))},Se=function(e){var t=e.checked,n=e.disabled,a=e.thread;return(0,s.Z)("button",{className:"btn btn-default btn-icon",type:"button",disabled:n,onClick:function(){return F.Z.dispatch(D.wc(a.id))}},void 0,(0,s.Z)("span",{className:"material-icon"},void 0,t?"check_box":"check_box_outline_blank"))},Ee=function(e){var t=e.thread,n="threads-list-icon";return t.is_read||(n+=" threads-list-icon-new"),(0,s.Z)("a",{title:t.is_read?gettext("No new posts"):gettext("New posts"),href:t.is_read?t.url.last_post:t.url.new_post,className:n},void 0,(0,s.Z)("span",{className:"material-icon"},void 0,t.is_read?"chat_bubble_outline":"chat_bubble"))},Le=n(19605),Pe=function(e){var t=e.thread;return t.last_poster?(0,s.Z)("a",{href:t.url.last_poster,className:"threads-list-item-last-poster",title:interpolate(gettext("Last post by: %(poster)s"),{poster:t.last_poster.username},!0)},void 0,(0,s.Z)(Le.ZP,{size:32,user:t.last_poster})):(0,s.Z)("span",{className:"threads-list-item-last-poster",title:interpolate(gettext("Last post by: %(poster)s"),{poster:t.last_poster_name},!0)},void 0,ge||(ge=(0,s.Z)(Le.ZP,{size:32})))};var Oe,Te,Ae,Be,Ie,je,De,Ue,Me,ze,He={unsubscribe:null,notify:!1,email:!0},Fe=function(e){(0,l.Z)(p,e);var t,n,a=(t=p,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function p(e){var t;return(0,i.Z)(this,p),t=a.call(this,e),(0,d.Z)((0,r.Z)(t),"update",(function(e){var n=t.props.thread;t.setState({loading:!0}),F.Z.dispatch((0,j.r$)(n,{subscription:He[e]})),M.Z.patch(n.api.index,[{op:"replace",path:"subscription",value:e}]).then((function(){}),(function(e){F.Z.dispatch((0,j.r$)(n,{subscription:He[n.subscription]})),H.Z.apiError(e)})).then((function(){return t.setState({loading:!1})}))})),(0,d.Z)((0,r.Z)(t),"render",(function(){var e=t.state.loading,n=t.props,a=n.disabled,i=n.thread;return(0,s.Z)("ul",{className:"dropdown-menu dropdown-menu-right"},void 0,(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn-link",disabled:a||e||null===i.subscription,onClick:function(){return t.update("unsubscribe")}},void 0,be||(be=(0,s.Z)("span",{className:"material-icon"},void 0,"star_border")),gettext("Unsubscribe"))),(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn-link",disabled:a||e||!1===i.subscription,onClick:function(){return t.update("notify")}},void 0,ye||(ye=(0,s.Z)("span",{className:"material-icon"},void 0,"star_half")),gettext("Subscribe with alert"))),(0,s.Z)("li",{},void 0,(0,s.Z)("button",{className:"btn-link",disabled:a||e||!0===i.subscription,onClick:function(){return t.update("email")}},void 0,_e||(_e=(0,s.Z)("span",{className:"material-icon"},void 0,"star")),gettext("Subscribe with e-mail"))))})),t.state={loading:!1},t}return(0,o.Z)(p)}(h().Component),qe=function(e){var t,n=e.disabled,a=e.thread;return(0,s.Z)("div",{className:"dropdown"},void 0,(0,s.Z)("button",{className:"btn btn-default btn-icon",type:"button",title:(t=a.subscription,!0===t?gettext("Subscribed to e-mails"):!1===t?gettext("Subscribed to alerts"):gettext("Not subscribed")),disabled:n,"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,(0,s.Z)("span",{className:"material-icon"},void 0,function(e){return!0===e?"star":!1===e?"star_half":"star_border"}(a.subscription))),(0,s.Z)(Fe,{disabled:n,thread:a}))},Ye=function(e){var t=e.activeCategory,n=e.categories,a=e.showOptions,i=e.showSubscription,o=e.thread,r=e.isBusy,l=e.isSelected,c=null,u=null;t.id!==o.category&&(u=n[o.category]).parent&&u.parent!==t.id&&n[u.parent]&&!n[u.parent].special_role&&(c=n[u.parent]);var d=o.is_closed||o.is_hidden||o.is_unapproved||o.weight>0||o.best_answer||o.has_poll||o.has_unapproved_posts,p=!a||o.is_new;return(0,s.Z)("li",{className:"list-group-item threads-list-item"+(r?" threads-list-item-is-busy":"")},void 0,(0,s.Z)("div",{className:"threads-list-item-top-row"},void 0,a&&(0,s.Z)("div",{className:"threads-list-item-col-icon"},void 0,(0,s.Z)(Ee,{thread:o})),(0,s.Z)("div",{className:"threads-list-item-col-title"},void 0,(0,s.Z)("a",{href:o.url.index,className:"threads-list-item-title"},void 0,o.title),(0,s.Z)("a",{href:p?o.url.new_post:o.url.index,className:"threads-list-item-title-sm"+(p?" threads-list-item-title-new":"")},void 0,o.title)),a&&o.moderation.length>0&&(0,s.Z)("div",{className:"threads-list-item-col-checkbox-sm"},void 0,(0,s.Z)(Se,{checked:l,disabled:r,thread:o}))),(0,s.Z)("div",{className:"threads-list-item-bottom-row"},void 0,d&&(0,s.Z)("div",{className:"threads-list-item-col-flags"},void 0,(0,s.Z)(ke.Z,{thread:o})),!!u&&(0,s.Z)("div",{className:"threads-list-item-col-category"},void 0,(0,s.Z)(Ce,{parent:c,category:u})),(0,s.Z)("div",{className:"threads-list-item-col-replies"},void 0,(0,s.Z)(xe.Z,{thread:o})),(0,s.Z)("div",{className:"threads-list-item-col-last-poster"},void 0,(0,s.Z)(Pe,{thread:o})),(0,s.Z)("div",{className:"threads-list-item-col-last-activity"},void 0,(0,s.Z)(we,{thread:o})),a&&i&&(0,s.Z)("div",{className:"threads-list-item-col-subscription"},void 0,(0,s.Z)(qe,{disabled:r,thread:o})),a&&o.moderation.length>0&&(0,s.Z)("div",{className:"threads-list-item-col-checkbox"},void 0,(0,s.Z)(Se,{checked:l,disabled:r,thread:o}))))},Ve=function(e){var t=e.width;return(0,s.Z)("span",{className:"ui-preview-text",style:{width:t+"px"}},void 0," ")},$e=function(e){var t=e.showOptions;return(0,s.Z)("div",{className:"threads-list threads-list-loader"},void 0,(0,s.Z)("ul",{className:"list-group"},void 0,(0,s.Z)("li",{className:"list-group-item threads-list-item"},void 0,(0,s.Z)("div",{className:"threads-list-item-top-row"},void 0,t&&(Oe||(Oe=(0,s.Z)("div",{className:"threads-list-item-col-icon"},void 0,(0,s.Z)("span",{className:"threads-list-icon ui-preview-img"})))),Te||(Te=(0,s.Z)("div",{className:"threads-list-item-col-title"},void 0,(0,s.Z)("span",{className:"threads-list-item-title"},void 0,(0,s.Z)(Ve,{width:"90"})," ",(0,s.Z)(Ve,{width:"40"})," ",(0,s.Z)(Ve,{width:"120"})),(0,s.Z)("span",{className:"threads-list-item-title-sm"},void 0,(0,s.Z)(Ve,{width:"90"})," ",(0,s.Z)(Ve,{width:"40"})," ",(0,s.Z)(Ve,{width:"120"}))))),Ae||(Ae=(0,s.Z)("div",{className:"threads-list-item-bottom-row"},void 0,(0,s.Z)("div",{className:"threads-list-item-col-category"},void 0,(0,s.Z)(Ve,{width:"70"})),(0,s.Z)("div",{className:"threads-list-item-col-replies"},void 0,(0,s.Z)(Ve,{width:"50"})),(0,s.Z)("div",{className:"threads-list-item-col-last-poster"},void 0,(0,s.Z)("span",{className:"threads-list-item-last-poster"},void 0,(0,s.Z)(Le.ZP,{size:32}))),(0,s.Z)("div",{className:"threads-list-item-col-last-activity"},void 0,(0,s.Z)("span",{className:"threads-list-item-last-activity"},void 0,(0,s.Z)(Ve,{width:"50"})))))),(0,s.Z)("li",{className:"list-group-item threads-list-item"},void 0,(0,s.Z)("div",{className:"threads-list-item-top-row"},void 0,t&&(Be||(Be=(0,s.Z)("div",{className:"threads-list-item-col-icon"},void 0,(0,s.Z)("span",{className:"threads-list-icon ui-preview-img"})))),Ie||(Ie=(0,s.Z)("div",{className:"threads-list-item-col-title"},void 0,(0,s.Z)("span",{className:"threads-list-item-title"},void 0,(0,s.Z)(Ve,{width:"120"})," ",(0,s.Z)(Ve,{width:"30"})," ",(0,s.Z)(Ve,{width:"60"})),(0,s.Z)("span",{className:"threads-list-item-title-sm"},void 0,(0,s.Z)(Ve,{width:"120"})," ",(0,s.Z)(Ve,{width:"30"})," ",(0,s.Z)(Ve,{width:"60"}))))),je||(je=(0,s.Z)("div",{className:"threads-list-item-bottom-row"},void 0,(0,s.Z)("div",{className:"threads-list-item-col-category"},void 0,(0,s.Z)(Ve,{width:"55"})),(0,s.Z)("div",{className:"threads-list-item-col-replies"},void 0,(0,s.Z)(Ve,{width:"60"})),(0,s.Z)("div",{className:"threads-list-item-col-last-poster"},void 0,(0,s.Z)("span",{className:"threads-list-item-last-poster"},void 0,(0,s.Z)(Le.ZP,{size:32}))),(0,s.Z)("div",{className:"threads-list-item-col-last-activity"},void 0,(0,s.Z)("span",{className:"threads-list-item-last-activity"},void 0,(0,s.Z)(Ve,{width:"70"})))))),(0,s.Z)("li",{className:"list-group-item threads-list-item"},void 0,(0,s.Z)("div",{className:"threads-list-item-top-row"},void 0,t&&(De||(De=(0,s.Z)("div",{className:"threads-list-item-col-icon"},void 0,(0,s.Z)("span",{className:"threads-list-icon ui-preview-img"})))),Ue||(Ue=(0,s.Z)("div",{className:"threads-list-item-col-title"},void 0,(0,s.Z)("span",{className:"threads-list-item-title"},void 0,(0,s.Z)(Ve,{width:"40"})," ",(0,s.Z)(Ve,{width:"120"})," ",(0,s.Z)(Ve,{width:"80"})),(0,s.Z)("span",{className:"threads-list-item-title-sm"},void 0,(0,s.Z)(Ve,{width:"40"})," ",(0,s.Z)(Ve,{width:"120"})," ",(0,s.Z)(Ve,{width:"80"}))))),Me||(Me=(0,s.Z)("div",{className:"threads-list-item-bottom-row"},void 0,(0,s.Z)("div",{className:"threads-list-item-col-category"},void 0,(0,s.Z)(Ve,{width:"75"})),(0,s.Z)("div",{className:"threads-list-item-col-replies"},void 0,(0,s.Z)(Ve,{width:"40"})),(0,s.Z)("div",{className:"threads-list-item-col-last-poster"},void 0,(0,s.Z)("span",{className:"threads-list-item-last-poster"},void 0,(0,s.Z)(Le.ZP,{size:32}))),(0,s.Z)("div",{className:"threads-list-item-col-last-activity"},void 0,(0,s.Z)("span",{className:"threads-list-item-last-activity"},void 0,(0,s.Z)(Ve,{width:"60"}))))))))},Ge=function(e){var t=e.threads,n=e.onClick;return(0,s.Z)("li",{className:"list-group-item threads-list-update-prompt"},void 0,(0,s.Z)("button",{type:"button",className:"btn btn-block threads-list-update-prompt-btn",onClick:n},void 0,ze||(ze=(0,s.Z)("span",{className:"material-icon"},void 0,"cached")),(0,s.Z)("span",{className:"threads-list-update-prompt-message"},void 0,interpolate(ngettext("There is %(threads)s new or updated thread. Click here to show it.","There are %(threads)s new or updated threads. Click here to show them.",t),{threads:t},!0))))},We=function(e){var t=e.list,n=e.categories,a=e.category,i=e.threads,o=e.busyThreads,r=e.selection,l=e.isLoaded,c=e.showOptions,u=e.updatedThreads,d=e.applyUpdate,p=e.emptyMessage;return l?(0,s.Z)("div",{className:"threads-list"},void 0,i.length>0?(0,s.Z)("ul",{className:"list-group"},void 0,u>0&&(0,s.Z)(Ge,{threads:u,onClick:d}),i.map((function(e){return(0,s.Z)(Ye,{activeCategory:a,categories:n,thread:e,showOptions:c,showSubscription:c&&"subscribed"===t.type,isBusy:o.indexOf(e.id)>=0,isSelected:r.indexOf(e.id)>=0},e.id)}))):(0,s.Z)("ul",{className:"list-group"},void 0,u>0&&(0,s.Z)(Ge,{threads:u,onClick:d}),(0,s.Z)(Ne,{category:a,list:t,message:p}))):(0,s.Z)($e,{showOptions:c})},Ke=n(82125),Je=n(55547),Qe=n(53328),Xe=n(20370),et=n(99755);var tt=function(e){(0,l.Z)(p,e);var t,n,a=(t=p,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function p(e){var t;(0,i.Z)(this,p),t=a.call(this,e),(0,d.Z)((0,r.Z)(t),"loadMore",(function(){t.setState({isBusy:!0}),t.loadThreads(t.getCategory(),t.state.next)})),(0,d.Z)((0,r.Z)(t),"pollResponse",(function(e){var n,a,s;t.setState({diff:Object.assign({},e,{results:(n=t.props.threads,a=e.results,s={},n.forEach((function(e){s[e.id]=e})),a.filter((function(e){return!s[e.id]||function(e,t){return[e.title===t.title,e.weight===t.weight,e.category===t.category,e.last_post===t.last_post,e.last_poster_name===t.last_poster_name].indexOf(!1)>=0}(s[e.id],e)})))})})})),(0,d.Z)((0,r.Z)(t),"addThreads",(function(e){F.Z.dispatch((0,j.R3)(e,t.getSorting()))})),(0,d.Z)((0,r.Z)(t),"applyDiff",(function(){t.addThreads(t.state.diff.results),t.setState(Object.assign({},t.state.diff,{moderation:Ze(F.Z.getState().threads),diff:{results:[]}}))})),(0,d.Z)((0,r.Z)(t),"freezeThread",(function(e){t.setState((function(t){return{busyThreads:Xe.ZN(t.busyThreads,e)}}))})),(0,d.Z)((0,r.Z)(t),"updateThread",(function(e){F.Z.dispatch((0,j.r$)(e,e,t.getSorting()))})),(0,d.Z)((0,r.Z)(t),"deleteThread",(function(e){F.Z.dispatch((0,j.l8)(e))})),t.state={isMounted:!0,isLoaded:!1,isBusy:!1,diff:{results:[]},moderation:[],busyThreads:[],dropdown:!1,subcategories:[],next:0};var n=t.getCategory();return I.Z.has("THREADS")?t.initWithPreloadedData(n,I.Z.get("THREADS")):t.initWithoutPreloadedData(n),t}return(0,o.Z)(p,[{key:"getCategory",value:function(){return this.props.route.category.special_role?null:this.props.route.category.id}},{key:"initWithPreloadedData",value:function(e,t){this.state=Object.assign(this.state,{moderation:Ze(t.results),subcategories:t.subcategories,next:t.next}),this.startPolling(e)}},{key:"initWithoutPreloadedData",value:function(e){this.loadThreads(e)}},{key:"loadThreads",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;M.Z.get(this.props.options.api,{category:e,list:this.props.route.list.type,start:n||0},"threads").then((function(a){t.state.isMounted&&(0===n?F.Z.dispatch((0,j.ZB)(a.results)):F.Z.dispatch((0,j.R3)(a.results,t.getSorting())),t.setState({isLoaded:!0,isBusy:!1,moderation:Ze(F.Z.getState().threads),subcategories:a.subcategories,next:a.next}),t.startPolling(e))}),(function(e){H.Z.apiError(e)}))}},{key:"startPolling",value:function(e){Je.Z.start({poll:"threads",url:this.props.options.api,data:{category:e,list:this.props.route.list.type},frequency:12e4,update:this.pollResponse})}},{key:"componentDidMount",value:function(){this.setPageTitle(),I.Z.has("THREADS")&&(F.Z.dispatch((0,j.ZB)(I.Z.pop("THREADS").results)),this.setState({isLoaded:!0})),F.Z.dispatch(D.YP())}},{key:"componentWillUnmount",value:function(){this.state.isMounted=!1,Je.Z.stop("threads")}},{key:"getTitle",value:function(){return this.props.options.title?this.props.options.title:(e=this.props.route).category.level?e.category.name:I.Z.get("THREADS_ON_INDEX")?I.Z.get("SETTINGS").index_header?I.Z.get("SETTINGS").index_header:I.Z.get("SETTINGS").forum_name:gettext("Threads");var e}},{key:"setPageTitle",value:function(){var e;this.props.route.category.level||!I.Z.get("THREADS_ON_INDEX")?Qe.Z.set((e=this.props.route).category.level?e.list.path?{title:e.list.longName,parent:e.category.name}:{title:e.category.name}:I.Z.get("THREADS_ON_INDEX")?e.list.path?{title:e.list.longName}:null:e.list.path?{title:e.list.longName,parent:gettext("Threads")}:{title:gettext("Threads")}):this.props.options.title?Qe.Z.set(this.props.options.title):I.Z.get("SETTINGS").index_title?document.title=I.Z.get("SETTINGS").index_title:document.title=I.Z.get("SETTINGS").forum_name}},{key:"getSorting",value:function(){return this.props.route.category.level?Z:m}},{key:"getMoreButton",value:function(){return this.state.next?(0,s.Z)("div",{className:"pager-more"},void 0,(0,s.Z)(f.Z,{className:"btn btn-default btn-outline",loading:this.state.isBusy||this.state.busyThreads.length,onClick:this.loadMore},void 0,gettext("Show more"))):null}},{key:"getClassName",value:function(){var e,t="page page-threads";return t+=" page-threads-"+this.props.route.list.type,(e=this.props).route.category.level||!I.Z.get("THREADS_ON_INDEX")||e.options.title||(t+=" page-threads-index"),this.props.route.category.css_class&&(t+=" page-threads-"+this.props.route.category.css_class),t}},{key:"render",value:function(){var e=this.props.route.categories[0],t=this.props.route,n=t.category,a=t.list,i=n.special_role;return(0,s.Z)("div",{className:this.getClassName()},void 0,"root_category"==i&&I.Z.get("THREADS_ON_INDEX")&&I.Z.get("SETTINGS").index_header&&(0,s.Z)(et.Iv,{header:I.Z.get("SETTINGS").index_header,message:n.description&&(0,s.Z)(et.Ql,{message:n.description.html}),styleName:"forum-index"}),"root_category"==i&&!I.Z.get("THREADS_ON_INDEX")&&(0,s.Z)(et.Iv,{header:gettext("Threads"),styleName:"threads"}),"private_threads"==i&&(0,s.Z)(et.Iv,{header:this.props.options.title,message:this.props.options.pageLead&&(0,s.Z)(et.bM,{},void 0,(0,s.Z)("p",{},void 0,this.props.options.pageLead)),styleName:"private-threads"}),!i&&(0,s.Z)(et.Iv,{header:n.name,message:n.description&&(0,s.Z)(et.Ql,{message:n.description.html}),styleName:n.css_class||"category-threads"}),(0,s.Z)(ve,{api:this.props.options.api,root:e,route:this.props.route,user:this.props.user,pageLead:this.props.options.pageLead,threads:this.props.threads,threadsCount:this.state.count,moderation:this.state.moderation,selection:this.props.selection,busyThreads:this.state.busyThreads,addThreads:this.addThreads,startThread:this.props.options.startThread,freezeThread:this.freezeThread,deleteThread:this.deleteThread,updateThread:this.updateThread,isLoaded:this.state.isLoaded,isBusy:this.state.isBusy},void 0,(0,s.Z)(We,{category:n,categories:this.props.route.categoriesMap,list:a,selection:this.props.selection,threads:this.props.threads,updatedThreads:this.state.diff.results.length,applyUpdate:this.applyDiff,showOptions:!!this.props.user.id,isLoaded:this.state.isLoaded,busyThreads:this.state.busyThreads,emptyMessage:this.props.options.emptyMessage}),this.getMoreButton()))}}]),p}(Ke.Z);var nt=n(39633),at="misago:private-threads";function st(e){return e.get("CURRENT_LINK").substr(0,at.length)===at?{api:e.get("PRIVATE_THREADS_API"),startThread:{mode:"START_PRIVATE",submit:I.Z.get("PRIVATE_THREADS_API")},title:gettext("Private threads"),pageLead:gettext("Private threads are threads which only those that started them and those they have invited may see and participate in."),emptyMessage:gettext("You aren't participating in any private threads.")}:{api:e.get("THREADS_API")}}I.Z.addInitializer({name:"component:threads",initializer:function(e){var t,n,s,i,o;e.has("THREADS")&&e.has("CATEGORIES")&&(0,nt.Z)({paths:(t=e.get("user"),n=st(e),s=function(e){var t=[{type:"all",path:"",name:gettext("All"),longName:gettext("All threads")}];return e.id&&(t.push({type:"my",path:"my/",name:gettext("My"),longName:gettext("My threads")}),t.push({type:"new",path:"new/",name:gettext("New"),longName:gettext("New threads")}),t.push({type:"unread",path:"unread/",name:gettext("Unread"),longName:gettext("Unread threads")}),t.push({type:"subscribed",path:"subscribed/",name:gettext("Subscribed"),longName:gettext("Subscribed threads")}),e.acl.can_see_unapproved_content_lists&&t.push({type:"unapproved",path:"unapproved/",name:gettext("Unapproved"),longName:gettext("Unapproved content")})),t}(t),i=[],o={},I.Z.get("CATEGORIES").forEach((function(e){s.forEach((function(t){var r;o[e.id]=e,i.push({path:e.url.index+t.path,component:(0,a.$j)((r=n,function(e){return{options:r,selection:e.selection,threads:e.threads,tick:e.tick.tick,user:e.auth.user}}))(tt),categories:I.Z.get("CATEGORIES"),categoriesMap:o,category:e,lists:s,list:t})}))})),i)})},after:"store"})},47806:function(e,t,n){"use strict";var a=n(37424),s=n(32233),i=n(22928),o=n(15671),r=n(43144),l=n(79340),c=n(6215),u=n(61120),d=n(57588),p=n.n(d),h=n(19605),f=n(97326),v=n(4942),m=n(78657),Z=n(53904);function g(e){return e.filter((function(e){return e.results.count>0})).map((function(e){return Object.assign({},e,{count:e.results.count,results:e.results.results.slice(0,5)})}))}var b=n(87462),y="HEADER",_="RESULT",N="FOOTER";function k(e){var t=e.value,n=e.onChange;return(0,i.Z)("input",{"aria-haspopup":"true","aria-expanded":"false","aria-controls":"dropdown-menu dropdown-search-results",autoComplete:"off",className:"form-control",value:t,onChange:n,placeholder:gettext("Search"),role:"combobox",type:"text"})}function x(e){var t=e.children,n=e.onChange,a=e.query;return(0,i.Z)("ul",{className:"dropdown-menu dropdown-search-results",role:"menu"},void 0,(0,i.Z)("li",{className:"form-group"},void 0,(0,i.Z)(k,{value:a,onChange:n})),t)}function w(){return(0,i.Z)("li",{className:"dropdown-search-message"},void 0,gettext("Search returned no results."))}var R,C=n(37848);function S(e){return e.message,R||(R=(0,i.Z)("li",{className:"dropdown-search-loader"},void 0,(0,i.Z)(C.Z,{})))}function E(e){var t=e.provider,n=e.query,a=t.url+"?q="+encodeURI(n),s=ngettext('See full "%(provider)s" results page with %(count)s result.','See full "%(provider)s" results page with %(count)s results.',t.count);return(0,i.Z)("li",{className:"dropdown-search-footer"},void 0,(0,i.Z)("a",{href:a},void 0,interpolate(s,{count:t.count,provider:t.name},!0)))}function L(e){var t=e.provider;return(0,i.Z)("li",{className:"dropdown-search-header"},void 0,t.name)}var P,O,T,A=n(30381),B=n.n(A),I=n(19755);function j(e){var t=e.result,n=(t.poster,t.thread),a=gettext("Posted by %(poster)s on %(posted_on)s in %(category)s.");return(0,i.Z)("li",{},void 0,(0,i.Z)("a",{href:t.url.index,className:"dropdown-search-thread"},void 0,(0,i.Z)("h5",{},void 0,n.title),(0,i.Z)("small",{className:"dropdown-search-post-content"},void 0,I(t.content).text()),(0,i.Z)("small",{className:"dropdown-search-post-footer"},void 0,interpolate(a,{category:t.category.name,posted_on:B()(t.posted_on).format("LL"),poster:t.poster_name},!0))))}function D(e){var t=e.result,n=t.rank,a=gettext("%(title)s, joined on %(joined_on)s"),s=t.title||n.title||n.name;return(0,i.Z)("li",{},void 0,(0,i.Z)("a",{href:t.url,className:"dropdown-search-user"},void 0,(0,i.Z)("div",{className:"media"},void 0,(0,i.Z)("div",{className:"media-left"},void 0,(0,i.Z)(h.ZP,{size:38,user:t})),(0,i.Z)("div",{className:"media-body"},void 0,(0,i.Z)("h5",{className:"media-heading"},void 0,t.username),(0,i.Z)("small",{},void 0,interpolate(a,{title:s,joined_on:B()(t.joined_on).format("LL")},!0))))))}function U(e){var t=e.provider,n=e.result;return"threads"===t.id?(0,i.Z)(j,{result:n}):(0,i.Z)(D,{result:n})}function M(e){var t=e.provider,n=e.result,a=e.type,s=e.query;return a===y?(0,i.Z)(L,{provider:t}):a===N?(0,i.Z)(E,{provider:t,query:s}):(0,i.Z)(U,{provider:t,result:n})}function z(e,t){for(var n=e.results.length,a=0;a<n;a++){var s=e.results[a];t.push({provider:e,result:s,type:_})}t.push({provider:e,type:N})}function H(e){var t=e.isLoading,n=e.onChange,a=e.results,s=e.query;if(!s.trim().length)return(0,i.Z)(x,{onChange:n,query:s});if(a.length){var o=function(e){var t=[];return function(e,t){for(var n=e.length,a=0;a<n;a++){var s=e[a];t.push({provider:s,type:y}),z(s,t)}}(e,t),t}(a);return(0,i.Z)(x,{onChange:n,query:s},void 0,o.map((function(e){var t=e.type,n=e.provider,a=e.result;return t===_?p().createElement(M,(0,b.Z)({key:[n.id,t,a.id].join("_")},e)):p().createElement(M,(0,b.Z)({key:[n.id,t].join("_"),query:s},e))})))}return t?(0,i.Z)(x,{onChange:n,query:s},void 0,P||(P=(0,i.Z)(S,{}))):(0,i.Z)(x,{onChange:n,query:s},void 0,O||(O=(0,i.Z)(w,{})))}var F=function(e){(0,l.Z)(d,e);var t,n,a=(t=d,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function d(){var e;return(0,o.Z)(this,d),e=a.call(this),(0,v.Z)((0,f.Z)(e),"onToggle",(function(t){e.setState((function(t,n){return t.isOpen||window.setTimeout((function(){e.container.querySelector("input").focus()}),100),{isOpen:!t.isOpen}}))})),(0,v.Z)((0,f.Z)(e),"onDocumentMouseDown",(function(t){for(var n=!0,a=t.target;null!==a&&a!==document;){if(a===e.container)return void(n=!1);a=a.parentNode}n&&e.setState({isOpen:!1})})),(0,v.Z)((0,f.Z)(e),"onEscape",(function(t){"Escape"===t.key&&e.setState({isOpen:!1})})),(0,v.Z)((0,f.Z)(e),"onChange",(function(t){var n=t.target.value;e.setState({query:n}),e.loadResults(n.trim())})),e.state={isLoading:!1,isOpen:!1,query:"",results:[]},e.intervalId=null,e}return(0,r.Z)(d,[{key:"componentDidMount",value:function(){document.addEventListener("mousedown",this.onDocumentMouseDown),document.addEventListener("keydown",this.onEscape)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.onDocumentMouseDown),document.removeEventListener("keydown",this.onEscape)}},{key:"loadResults",value:function(e){var t=this;if(e.length){var n=300+300*Math.random();this.intervalId&&window.clearTimeout(this.intervalId),this.setState({isLoading:!0}),this.intervalId=window.setTimeout((function(){m.Z.get(s.Z.get("SEARCH_API"),{q:e}).then((function(e){t.setState({intervalId:null,isLoading:!1,results:g(e)})}),(function(e){Z.Z.apiError(e),t.setState({intervalId:null,isLoading:!1,results:[]})}))}),n)}}},{key:"render",value:function(){var e=this,t="navbar-search dropdown";return this.state.isOpen&&(t+=" open"),p().createElement("div",{className:t,ref:function(t){return e.container=t}},(0,i.Z)("a",{"aria-haspopup":"true","aria-expanded":"false",className:"navbar-icon","data-toggle":"dropdown",href:s.Z.get("SEARCH_URL"),onClick:this.onToggle},void 0,T||(T=(0,i.Z)("i",{className:"material-icon"},void 0,"search"))),(0,i.Z)(H,{isLoading:this.state.isLoading,onChange:this.onChange,results:this.state.results,query:this.state.query}))}}]),d}(p().Component),q=n(82211),Y=n(43345),V=n(96359),$=n(59940);var G,W,K,J=["progress-bar-danger","progress-bar-warning","progress-bar-warning","progress-bar-primary","progress-bar-success"],Q=[gettext("Entered password is very weak."),gettext("Entered password is weak."),gettext("Entered password is average."),gettext("Entered password is strong."),gettext("Entered password is very strong.")],X=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),(t=a.call(this,e))._score=0,t._password=null,t._inputs=[],t.state={loaded:!1},t}return(0,r.Z)(s,[{key:"componentDidMount",value:function(){var e=this;$.Z.load().then((function(){e.setState({loaded:!0})}))}},{key:"getScore",value:function(e,t){var n=this,a=!1;return e!==this._password&&(a=!0),t.length!==this._inputs.length?a=!0:t.map((function(e,t){e.trim()!==n._inputs[t]&&(a=!0)})),a&&(this._score=$.Z.scorePassword(e,t),this._password=e,this._inputs=t.map((function(e){return e.trim()}))),this._score}},{key:"render",value:function(){if(!this.state.loaded)return null;var e=this.getScore(this.props.password,this.props.inputs);return(0,i.Z)("div",{className:"help-block password-strength"},void 0,(0,i.Z)("div",{className:"progress"},void 0,(0,i.Z)("div",{className:"progress-bar "+J[e],style:{width:20+20*e+"%"},role:"progress-bar","aria-valuenow":e,"aria-valuemin":"0","aria-valuemax":"4"},void 0,(0,i.Z)("span",{className:"sr-only"},void 0,Q[e]))),(0,i.Z)("p",{className:"text-small"},void 0,Q[e]))}}]),s}(p().Component),ee=n(26106),te=n(47235),ne=n(98274),ae=n(93825),se=n(59801),ie=n(93051),oe=n(55210);function re(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function le(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?re(Object(n),!0).forEach((function(t){(0,v.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):re(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ce(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,u.Z)(e);if(t){var s=(0,u.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,c.Z)(this,n)}}var ue,de=function(e){(0,l.Z)(n,e);var t=ce(n);function n(e){var a;(0,o.Z)(this,n),a=t.call(this,e),(0,v.Z)((0,f.Z)(a),"handlePrivacyPolicyChange",(function(e){var t=e.target.value;a.handleToggleAgreement("privacyPolicy",t)})),(0,v.Z)((0,f.Z)(a),"handleTermsOfServiceChange",(function(e){var t=e.target.value;a.handleToggleAgreement("termsOfService",t)})),(0,v.Z)((0,f.Z)(a),"handleToggleAgreement",(function(e,t){a.setState((function(n,s){if(null===n[e]){var i=le(le({},n.errors),{},(0,v.Z)({},e,null));return(0,v.Z)({errors:i},e,t)}var o=a.state.validators[e][0],r=le(le({},n.errors),{},(0,v.Z)({},e,[o(null)]));return(0,v.Z)({errors:r},e,null)}))}));var i=a.props.criteria,r=i.username,l=i.password,c=0;l.forEach((function(e){"MinimumLengthValidator"===e.name&&(c=e.min_length)}));var u={username:[oe.lG(),oe.HR(r.min_length),oe.gS(r.max_length)],email:[oe.Do()],password:[oe.Vb(c)],captcha:ae.ZP.validator()};return s.Z.get("TERMS_OF_SERVICE_ID")&&(u.termsOfService=[oe.fT()]),s.Z.get("PRIVACY_POLICY_ID")&&(u.privacyPolicy=[oe.jA()]),a.state={isLoading:!1,username:"",email:"",password:"",captcha:"",termsOfService:null,privacyPolicy:null,validators:u,errors:{}},a}return(0,r.Z)(n,[{key:"clean",value:function(){return!!this.isValid()||(Z.Z.error(gettext("Form contains errors.")),this.setState({errors:this.validate()}),!1)}},{key:"send",value:function(){return m.Z.post(s.Z.get("USERS_API"),{username:this.state.username,email:this.state.email,password:this.state.password,captcha:this.state.captcha,terms_of_service:this.state.termsOfService,privacy_policy:this.state.privacyPolicy})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){400===e.status?(this.setState({errors:Object.assign({},this.state.errors,e)}),e.__all__&&e.__all__.length>0?Z.Z.error(e.__all__[0]):Z.Z.error(gettext("Form contains errors."))):403===e.status&&e.ban?((0,ie.Z)(e.ban),se.Z.hide()):Z.Z.apiError(e)}},{key:"render",value:function(){return(0,i.Z)("div",{className:"modal-dialog modal-register",role:"document"},void 0,(0,i.Z)("div",{className:"modal-content"},void 0,(0,i.Z)("div",{className:"modal-header"},void 0,(0,i.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},void 0,G||(G=(0,i.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,i.Z)("h4",{className:"modal-title"},void 0,gettext("Register"))),(0,i.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,i.Z)("input",{type:"type",style:{display:"none"}}),(0,i.Z)("input",{type:"password",style:{display:"none"}}),(0,i.Z)("div",{className:"modal-body"},void 0,(0,i.Z)(te.Z,{buttonClassName:"col-xs-12 col-sm-6",buttonLabel:gettext("Join with %(site)s"),formLabel:gettext("Or create forum account:")}),(0,i.Z)(V.Z,{label:gettext("Username"),for:"id_username",validation:this.state.errors.username},void 0,(0,i.Z)("input",{type:"text",id:"id_username",className:"form-control","aria-describedby":"id_username_status",disabled:this.state.isLoading,onChange:this.bindInput("username"),value:this.state.username})),(0,i.Z)(V.Z,{label:gettext("E-mail"),for:"id_email",validation:this.state.errors.email},void 0,(0,i.Z)("input",{type:"text",id:"id_email",className:"form-control","aria-describedby":"id_email_status",disabled:this.state.isLoading,onChange:this.bindInput("email"),value:this.state.email})),(0,i.Z)(V.Z,{label:gettext("Password"),for:"id_password",validation:this.state.errors.password,extra:(0,i.Z)(X,{password:this.state.password,inputs:[this.state.username,this.state.email]})},void 0,(0,i.Z)("input",{type:"password",id:"id_password",className:"form-control","aria-describedby":"id_password_status",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password})),ae.ZP.component({form:this}),(0,i.Z)(ee.Z,{errors:this.state.errors,privacyPolicy:this.state.privacyPolicy,termsOfService:this.state.termsOfService,onPrivacyPolicyChange:this.handlePrivacyPolicyChange,onTermsOfServiceChange:this.handleTermsOfServiceChange})),(0,i.Z)("div",{className:"modal-footer"},void 0,(0,i.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,gettext("Cancel")),(0,i.Z)(q.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,gettext("Register account"))))))}}]),n}(Y.Z),pe=function(e){(0,l.Z)(n,e);var t=ce(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"getLead",value:function(){return"user"===this.props.activation?gettext("%(username)s, your account has been created but you need to activate it before you will be able to sign in."):"admin"===this.props.activation?gettext("%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in."):void 0}},{key:"getSubscript",value:function(){return"user"===this.props.activation?gettext("We have sent an e-mail to %(email)s with link that you have to click to activate your account."):"admin"===this.props.activation?gettext("We will send an e-mail to %(email)s when this takes place."):void 0}},{key:"render",value:function(){return(0,i.Z)("div",{className:"modal-dialog modal-message modal-register",role:"document"},void 0,(0,i.Z)("div",{className:"modal-content"},void 0,(0,i.Z)("div",{className:"modal-header"},void 0,(0,i.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},void 0,W||(W=(0,i.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,i.Z)("h4",{className:"modal-title"},void 0,gettext("Registration complete"))),(0,i.Z)("div",{className:"modal-body"},void 0,K||(K=(0,i.Z)("div",{className:"message-icon"},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,i.Z)("div",{className:"message-body"},void 0,(0,i.Z)("p",{className:"lead"},void 0,interpolate(this.getLead(),{username:this.props.username},!0)),(0,i.Z)("p",{},void 0,interpolate(this.getSubscript(),{email:this.props.email},!0)),(0,i.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,gettext("Ok"))))))}}]),n}(p().Component),he=function(e){(0,l.Z)(n,e);var t=ce(n);function n(e){var a;return(0,o.Z)(this,n),a=t.call(this,e),(0,v.Z)((0,f.Z)(a),"completeRegistration",(function(e){"active"===e.activation?(se.Z.hide(),ne.Z.signIn(e)):a.setState({complete:e})})),a.state={complete:!1},a}return(0,r.Z)(n,[{key:"render",value:function(){return this.state.complete?(0,i.Z)(pe,{activation:this.state.complete.activation,email:this.state.complete.email,username:this.state.complete.username}):p().createElement(de,(0,b.Z)({callback:this.completeRegistration},this.props))}}]),n}(p().Component);var fe,ve,me,Ze=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,v.Z)((0,f.Z)(t),"showRegisterForm",(function(){"closed"===misago.get("SETTINGS").account_activation?Z.Z.info(gettext("New registrations are currently disabled.")):t.state.isLoaded?se.Z.show((0,i.Z)(he,{criteria:t.state.criteria})):(t.setState({isLoading:!0}),Promise.all([ae.ZP.load(),m.Z.get(misago.get("AUTH_CRITERIA_API"))]).then((function(e){t.setState({isLoading:!1,isLoaded:!0,criteria:e[1]}),se.Z.show((0,i.Z)(he,{criteria:e[1]}))}),(function(){t.setState({isLoading:!1}),Z.Z.error(gettext("Registration is currently unavailable due to an error."))})))})),t.state={isLoading:!1,isLoaded:!1,criteria:null},t}return(0,r.Z)(s,[{key:"getClassName",value:function(){return this.props.className+(this.state.isLoading?" btn-loading":"")}},{key:"render",value:function(){return(0,i.Z)("button",{className:"btn "+this.getClassName(),disabled:this.state.isLoading,onClick:this.showRegisterForm,type:"button"},void 0,gettext("Register"),this.state.isLoading?ue||(ue=(0,i.Z)(C.Z,{})):null)}}]),s}(p().Component),ge=n(14467),be=n(8621);function ye(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,u.Z)(e);if(t){var s=(0,u.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,c.Z)(this,n)}}var _e,Ne=function(e){(0,l.Z)(n,e);var t=ye(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"showSignInModal",value:function(){se.Z.show(ge.Z)}},{key:"render",value:function(){var e=s.Z.get("SETTINGS").DELEGATE_AUTH;return(0,i.Z)("ul",{className:"dropdown-menu user-dropdown dropdown-menu-right",role:"menu"},void 0,(0,i.Z)("li",{className:"guest-preview"},void 0,(0,i.Z)("h4",{},void 0,gettext("You are browsing as guest.")),(0,i.Z)("p",{},void 0,gettext("Sign in or register to start and participate in discussions.")),e?(0,i.Z)("div",{className:"row"},void 0,(0,i.Z)("div",{className:"col-xs-12"},void 0,(0,i.Z)("a",{className:"btn btn-default btn-sign-in btn-block",href:s.Z.get("SETTINGS").LOGIN_URL},void 0,gettext("Sign in")))):(0,i.Z)("div",{className:"row"},void 0,(0,i.Z)("div",{className:"col-xs-6"},void 0,(0,i.Z)("button",{className:"btn btn-default btn-sign-in btn-block",onClick:this.showSignInModal,type:"button"},void 0,gettext("Sign in"))),(0,i.Z)("div",{className:"col-xs-6"},void 0,(0,i.Z)(Ze,{className:"btn-primary btn-register btn-block"},void 0,gettext("Register"))))))}}]),n}(p().Component),ke=function(e){(0,l.Z)(n,e);var t=ye(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"render",value:function(){return s.Z.get("SETTINGS").DELEGATE_AUTH?(0,i.Z)("div",{className:"nav nav-guest"},void 0,(0,i.Z)("a",{className:"btn navbar-btn btn-default btn-sign-in",href:s.Z.get("SETTINGS").LOGIN_URL},void 0,gettext("Sign in")),fe||(fe=(0,i.Z)("div",{className:"navbar-left"},void 0,(0,i.Z)(F,{})))):(0,i.Z)("div",{className:"nav nav-guest"},void 0,(0,i.Z)("button",{className:"btn navbar-btn btn-default btn-sign-in",onClick:this.showSignInModal,type:"button"},void 0,gettext("Sign in")),(0,i.Z)(Ze,{className:"navbar-btn btn-primary btn-register"},void 0,gettext("Register")),ve||(ve=(0,i.Z)("div",{className:"navbar-left"},void 0,(0,i.Z)(F,{}))))}}]),n}(Ne),xe=function(e){(0,l.Z)(n,e);var t=ye(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"showGuestMenu",value:function(){be.Z.show(Ne)}},{key:"render",value:function(){return(0,i.Z)("button",{type:"button",onClick:this.showGuestMenu},void 0,me||(me=(0,i.Z)(h.ZP,{size:"64"})))}}]),n}(p().Component);var we,Re=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,v.Z)((0,f.Z)(t),"setGravatar",(function(){t.callApi("gravatar")})),(0,v.Z)((0,f.Z)(t),"setGenerated",(function(){t.callApi("generated")})),t.state={isLoading:!1},t}return(0,r.Z)(s,[{key:"callApi",value:function(e){var t=this;if(this.state.isLoading)return!1;this.setState({isLoading:!0}),m.Z.post(this.props.user.api.avatar,{avatar:e}).then((function(e){t.setState({isLoading:!1}),Z.Z.success(e.detail),t.props.onComplete(e)}),(function(e){400===e.status?(Z.Z.error(e.detail),t.setState({isLoading:!1})):t.props.showError(e)}))}},{key:"getGravatarButton",value:function(){return this.props.options.gravatar?(0,i.Z)(q.Z,{onClick:this.setGravatar,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-gravatar"},void 0,gettext("Download my Gravatar")):null}},{key:"getCropButton",value:function(){return this.props.options.crop_src?(0,i.Z)(q.Z,{className:"btn-default btn-block btn-avatar-crop",disabled:this.state.isLoading,onClick:this.props.showCrop},void 0,gettext("Re-crop uploaded image")):null}},{key:"getUploadButton",value:function(){return this.props.options.upload?(0,i.Z)(q.Z,{className:"btn-default btn-block btn-avatar-upload",disabled:this.state.isLoading,onClick:this.props.showUpload},void 0,gettext("Upload new image")):null}},{key:"getGalleryButton",value:function(){return this.props.options.galleries?(0,i.Z)(q.Z,{className:"btn-default btn-block btn-avatar-gallery",disabled:this.state.isLoading,onClick:this.props.showGallery},void 0,gettext("Pick avatar from gallery")):null}},{key:"getAvatarPreview",value:function(){var e={id:this.props.user.id,avatars:this.props.options.avatars};return this.state.isLoading?(0,i.Z)("div",{className:"avatar-preview preview-loading"},void 0,(0,i.Z)(h.ZP,{size:"200",user:e}),_e||(_e=(0,i.Z)(C.Z,{}))):(0,i.Z)("div",{className:"avatar-preview"},void 0,(0,i.Z)(h.ZP,{size:"200",user:e}))}},{key:"render",value:function(){return(0,i.Z)("div",{className:"modal-body modal-avatar-index"},void 0,(0,i.Z)("div",{className:"row"},void 0,(0,i.Z)("div",{className:"col-md-5"},void 0,this.getAvatarPreview()),(0,i.Z)("div",{className:"col-md-7"},void 0,this.getGravatarButton(),(0,i.Z)(q.Z,{onClick:this.setGenerated,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-generate"},void 0,gettext("Generate my individual avatar")),this.getCropButton(),this.getUploadButton(),this.getGalleryButton())))}}]),s}(p().Component),Ce=n(19755);var Se,Ee=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,v.Z)((0,f.Z)(t),"cropAvatar",(function(){if(t.state.isLoading)return!1;t.setState({isLoading:!0});var e=t.props.upload?"crop_tmp":"crop_src",n=Ce(".crop-form"),a=n.cropit("exportZoom"),s=n.cropit("offset");m.Z.post(t.props.user.api.avatar,{avatar:e,crop:{offset:{x:s.x*a,y:s.y*a},zoom:n.cropit("zoom")*a}}).then((function(e){t.props.onComplete(e),Z.Z.success(e.detail)}),(function(e){400===e.status?(Z.Z.error(e.detail),t.setState({isLoading:!1})):t.props.showError(e)}))})),t.state={isLoading:!1,deviceRatio:1},t}return(0,r.Z)(s,[{key:"getAvatarSize",value:function(){return this.props.upload?this.props.options.crop_tmp.size:this.props.options.crop_src.size}},{key:"getImagePath",value:function(){return this.props.upload?this.props.dataUrl:this.props.options.crop_src.url}},{key:"componentDidMount",value:function(){for(var e=this,t=Ce(".crop-form"),n=this.getAvatarSize(),a=t.width();a<n;)n/=2;var s=this.getAvatarSize()/n;t.width(n),t.cropit({width:n,height:n,exportZoom:s,imageState:{src:this.getImagePath()},onImageLoaded:function(){if(e.props.upload){var n=t.cropit("zoom"),a=t.cropit("imageSize");if(a.width>a.height){var s=(a.width*n-e.getAvatarSize())/-2;t.cropit("offset",{x:s,y:0})}else if(a.width<a.height){var i=(a.height*n-e.getAvatarSize())/-2;t.cropit("offset",{x:0,y:i})}else t.cropit("offset",{x:0,y:0})}else{var o=e.props.options.crop_src.crop;o&&(t.cropit("zoom",o.zoom),t.cropit("offset",{x:o.x,y:o.y}))}}})}},{key:"componentWillUnmount",value:function(){Ce(".crop-form").cropit("disable")}},{key:"render",value:function(){return(0,i.Z)("div",{},void 0,we||(we=(0,i.Z)("div",{className:"modal-body modal-avatar-crop"},void 0,(0,i.Z)("div",{className:"crop-form"},void 0,(0,i.Z)("div",{className:"cropit-preview"}),(0,i.Z)("input",{type:"range",className:"cropit-image-zoom-input"})))),(0,i.Z)("div",{className:"modal-footer"},void 0,(0,i.Z)("div",{className:"col-md-6 col-md-offset-3"},void 0,(0,i.Z)(q.Z,{onClick:this.cropAvatar,loading:this.state.isLoading,className:"btn-primary btn-block"},void 0,this.props.upload?gettext("Set avatar"):gettext("Crop image")),(0,i.Z)(q.Z,{onClick:this.props.showIndex,disabled:this.state.isLoading,className:"btn-default btn-block"},void 0,gettext("Cancel")))))}}]),s}(p().Component),Le=n(48772);var Pe,Oe=function(e){(0,l.Z)(s,e);var t,n,a=(t=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,u.Z)(t);if(n){var s=(0,u.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,c.Z)(this,e)});function s(e){var t;return(0,o.Z)(this,s),t=a.call(this,e),(0,v.Z)((0,f.Z)(t),"pickFile",(function(){document.getElementById("avatar-hidden-upload").click()})),(0,v.Z)((0,f.Z)(t),"uploadFile",(function(){var e=document.getElementById("avatar-hidden-upload").files[0];if(e){var n=t.validateFile(e);if(n)Z.Z.error(n);else{t.setState({image:e,preview:URL.createObjectURL(e),progress:0});var a=new FormData;a.append("avatar","upload"),a.append("image",e),m.Z.upload(t.props.user.api.avatar,a,(function(e){t.setState({progress:e})})).then((function(e){t.setState({options:e,uploaded:e.detail}),Z.Z.info(gettext("Your image has been uploaded and you may now crop it."))}),(function(e){400===e.status||413===e.status?(Z.Z.error(e.detail),t.setState({isLoading:!1,image:null,progress:0})):t.props.showError(e)}))}}})),t.state={image:null,preview:null,progress:0,uploaded:null,dataUrl:null},t}return(0,r.Z)(s,[{key:"validateFile",value:function(e){if(e.size>this.props.options.upload.limit)return interpolate(gettext("Selected file is too big. (%(filesize)s)"),{filesize:(0,Le.Z)(e.size)},!0);var t=gettext("Selected file type is not supported.");if(-1===this.props.options.upload.allowed_mime_types.indexOf(e.type))return t;var n=!1,a=e.name.toLowerCase();return this.props.options.upload.allowed_extensions.map((function(e){a.substr(-1*e.length)===e&&(n=!0)})),!n&&t}},{key:"getUploadRequirements",value:function(e){var t=e.allowed_extensions.map((function(e){return e.substr(1)}));return interpolate(gettext("%(files)s files smaller than %(limit)s"),{files:t.join(", "),limit:(0,Le.Z)(e.limit)},!0)}},{key:"getUploadButton",value:function(){return(0,i.Z)("div",{className:"modal-body modal-avatar-upload"},void 0,(0,i.Z)(q.Z,{className:"btn-pick-file",onClick:this.pickFile},void 0,Se||(Se=(0,i.Z)("div",{className:"material-icon"},void 0,"input")),gettext("Select file")),(0,i.Z)("p",{className:"text-muted"},void 0,this.getUploadRequirements(this.props.options.upload)))}},{key:"getUploadProgressLabel",value:function(){return interpolate(gettext("%(progress)s % complete"),{progress:this.state.progress},!0)}},{key:"getUploadProgress",value:function(){return(0,i.Z)("div",{className:"modal-body modal-avatar-upload"},void 0,(0,i.Z)("div",{className:"upload-progress"},void 0,(0,i.Z)("img",{src:this.state.preview}),(0,i.Z)("div",{className:"progress"},void 0,(0,i.Z)("div",{className:"progress-bar",role:"progressbar","aria-valuenow":"{this.state.progress}","aria-valuemin":"0","aria-valuemax":"100",style:{width:this.state.progress+"%"}},void 0,(0,i.Z)("span",{className:"sr-only"},void 0,this.getUploadProgressLabel())))))}},{key:"renderUpload",value:function(){return(0,i.Z)("div",{},void 0,(0,i.Z)("input",{type:"file",id:"avatar-hidden-upload",className:"hidden-file-upload",onChange:this.uploadFile}),this.state.image?this.getUploadProgress():this.getUploadButton(),(0,i.Z)("div",{className:"modal-footer"},void 0,(0,i.Z)("div",{className:"col-md-6 col-md-offset-3"},void 0,(0,i.Z)(q.Z,{onClick:this.props.showIndex,disabled:!!this.state.image,className:"btn-default btn-block"},void 0,gettext("Cancel")))))}},{key:"renderCrop",value:function(){return(0,i.Z)(Ee,{options:this.state.options,user:this.props.user,upload:this.state.uploaded,dataUrl:this.state.preview,onComplete:this.props.onComplete,showError:this.props.showError,showIndex:this.props.showIndex})}},{key:"render",value:function(){return this.state.uploaded?this.renderCrop():this.renderUpload()}}]),s}(p().Component),Te=n(69130);function Ae(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,u.Z)(e);if(t){var s=(0,u.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,c.Z)(this,n)}}var Be,Ie,je,De=function(e){(0,l.Z)(n,e);var t=Ae(n);function n(){var e;(0,o.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,v.Z)((0,f.Z)(e),"select",(function(){e.props.select(e.props.id)})),e}return(0,r.Z)(n,[{key:"getClassName",value:function(){return this.props.selection===this.props.id?this.props.disabled?"btn btn-avatar btn-disabled avatar-selected":"btn btn-avatar avatar-selected":this.props.disabled?"btn btn-avatar btn-disabled":"btn btn-avatar"}},{key:"render",value:function(){return(0,i.Z)("button",{type:"button",className:this.getClassName(),disabled:this.props.disabled,onClick:this.select},void 0,(0,i.Z)("img",{src:this.props.url}))}}]),n}(p().Component),Ue=function(e){(0,l.Z)(n,e);var t=Ae(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"render",value:function(){var e=this;return(0,i.Z)("div",{className:"avatars-gallery"},void 0,(0,i.Z)("h3",{},void 0,this.props.name),(0,i.Z)("div",{className:"avatars-gallery-images"},void 0,(0,Te.Z)(this.props.images,4,null).map((function(t,n){return(0,i.Z)("div",{className:"row"},n,t.map((function(t,n){return(0,i.Z)("div",{className:"col-xs-3"},n,t?p().createElement(De,(0,b.Z)({disabled:e.props.disabled,select:e.props.select,selection:e.props.selection},t)):Pe||(Pe=(0,i.Z)("div",{className:"blank-avatar"})))})))}))))}}]),n}(p().Component),Me=function(e){(0,l.Z)(n,e);var t=Ae(n);function n(e){var a;return(0,o.Z)(this,n),a=t.call(this,e),(0,v.Z)((0,f.Z)(a),"select",(function(e){a.setState({selection:e})})),(0,v.Z)((0,f.Z)(a),"save",(function(){if(a.state.isLoading)return!1;a.setState({isLoading:!0}),m.Z.post(a.props.user.api.avatar,{avatar:"galleries",image:a.state.selection}).then((function(e){a.setState({isLoading:!1}),Z.Z.success(e.detail),a.props.onComplete(e),a.props.showIndex()}),(function(e){400===e.status?(Z.Z.error(e.detail),a.setState({isLoading:!1})):a.props.showError(e)}))})),a.state={selection:null,isLoading:!1},a}return(0,r.Z)(n,[{key:"render",value:function(){var e=this;return(0,i.Z)("div",{},void 0,(0,i.Z)("div",{className:"modal-body modal-avatar-gallery"},void 0,this.props.options.galleries.map((function(t,n){return(0,i.Z)(Ue,{name:t.name,images:t.images,selection:e.state.selection,disabled:e.state.isLoading,select:e.select},n)}))),(0,i.Z)("div",{className:"modal-footer"},void 0,(0,i.Z)("div",{className:"row"},void 0,(0,i.Z)("div",{className:"col-md-6 col-md-offset-3"},void 0,(0,i.Z)(q.Z,{onClick:this.save,loading:this.state.isLoading,disabled:!this.state.selection,className:"btn-primary btn-block"},void 0,this.state.selection?gettext("Save choice"):gettext("Select avatar")),(0,i.Z)(q.Z,{onClick:this.props.showIndex,disabled:this.state.isLoading,className:"btn-default btn-block"},void 0,gettext("Cancel"))))))}}]),n}(p().Component),ze=n(3784),He=n(6935),Fe=n(90287);function qe(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,u.Z)(e);if(t){var s=(0,u.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,c.Z)(this,n)}}var Ye,Ve,$e,Ge,We,Ke,Je,Qe,Xe,et,tt,nt,at=function(e){(0,l.Z)(n,e);var t=qe(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"getErrorReason",value:function(){return this.props.reason?(0,i.Z)("p",{dangerouslySetInnerHTML:{__html:this.props.reason}}):null}},{key:"render",value:function(){return(0,i.Z)("div",{className:"modal-body"},void 0,Be||(Be=(0,i.Z)("div",{className:"message-icon"},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,"remove_circle_outline"))),(0,i.Z)("div",{className:"message-body"},void 0,(0,i.Z)("p",{className:"lead"},void 0,this.props.message),this.getErrorReason(),(0,i.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,gettext("Ok"))))}}]),n}(p().Component),st=function(e){(0,l.Z)(n,e);var t=qe(n);function n(){var e;(0,o.Z)(this,n);for(var a=arguments.length,s=new Array(a),i=0;i<a;i++)s[i]=arguments[i];return e=t.call.apply(t,[this].concat(s)),(0,v.Z)((0,f.Z)(e),"showError",(function(t){e.setState({error:t})})),(0,v.Z)((0,f.Z)(e),"showIndex",(function(){e.setState({component:Re})})),(0,v.Z)((0,f.Z)(e),"showUpload",(function(){e.setState({component:Oe})})),(0,v.Z)((0,f.Z)(e),"showCrop",(function(){e.setState({component:Ee})})),(0,v.Z)((0,f.Z)(e),"showGallery",(function(){e.setState({component:Me})})),(0,v.Z)((0,f.Z)(e),"completeFlow",(function(t){Fe.Z.dispatch((0,He.n1)(e.props.user,t.avatars)),e.setState({component:Re,options:t})})),e}return(0,r.Z)(n,[{key:"componentDidMount",value:function(){var e=this;m.Z.get(this.props.user.api.avatar).then((function(t){e.setState({component:Re,options:t,error:null})}),(function(t){e.showError(t)}))}},{key:"getBody",value:function(){return this.state?this.state.error?(0,i.Z)(at,{message:this.state.error.detail,reason:this.state.error.reason}):(0,i.Z)(this.state.component,{options:this.state.options,user:this.props.user,onComplete:this.completeFlow,showError:this.showError,showIndex:this.showIndex,showCrop:this.showCrop,showUpload:this.showUpload,showGallery:this.showGallery}):Ie||(Ie=(0,i.Z)(ze.Z,{}))}},{key:"getClassName",value:function(){return this.state&&this.state.error?"modal-dialog modal-message modal-change-avatar":"modal-dialog modal-change-avatar"}},{key:"render",value:function(){return(0,i.Z)("div",{className:this.getClassName(),role:"document"},void 0,(0,i.Z)("div",{className:"modal-content"},void 0,(0,i.Z)("div",{className:"modal-header"},void 0,(0,i.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},void 0,je||(je=(0,i.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,i.Z)("h4",{className:"modal-title"},void 0,gettext("Change your avatar"))),this.getBody()))}}]),n}(p().Component);function it(e){return{user:e.auth.user}}function ot(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,u.Z)(e);if(t){var s=(0,u.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,c.Z)(this,n)}}var rt=function(e){(0,l.Z)(n,e);var t=ot(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"changeAvatar",value:function(){se.Z.show((0,a.$j)(it)(st))}},{key:"render",value:function(){var e=this.props.user;return(0,i.Z)("ul",{className:"dropdown-menu user-dropdown dropdown-menu-right",role:"menu"},void 0,(0,i.Z)("li",{className:"dropdown-header"},void 0,(0,i.Z)("strong",{},void 0,e.username),(0,i.Z)("div",{className:"row user-stats"},void 0,(0,i.Z)("div",{className:"col-sm-3"},void 0,Ye||(Ye=(0,i.Z)("span",{className:"material-icon"},void 0,"message")),e.posts),(0,i.Z)("div",{className:"col-sm-3"},void 0,Ve||(Ve=(0,i.Z)("span",{className:"material-icon"},void 0,"forum")),e.threads),(0,i.Z)("div",{className:"col-sm-3"},void 0,$e||($e=(0,i.Z)("span",{className:"material-icon"},void 0,"favorite")),e.followers),(0,i.Z)("div",{className:"col-sm-3"},void 0,Ge||(Ge=(0,i.Z)("span",{className:"material-icon"},void 0,"favorite_outline")),e.following))),We||(We=(0,i.Z)("li",{className:"divider"})),(0,i.Z)("li",{},void 0,(0,i.Z)("a",{href:e.url},void 0,Ke||(Ke=(0,i.Z)("span",{className:"material-icon"},void 0,"account_circle")),gettext("See your profile"))),(0,i.Z)("li",{},void 0,(0,i.Z)("a",{href:s.Z.get("USERCP_URL")},void 0,Je||(Je=(0,i.Z)("span",{className:"material-icon"},void 0,"done_all")),gettext("Change options"))),(0,i.Z)("li",{},void 0,(0,i.Z)("button",{className:"btn-link",onClick:this.changeAvatar,type:"button"},void 0,Qe||(Qe=(0,i.Z)("span",{className:"material-icon"},void 0,"portrait")),gettext("Change avatar"))),!!e.acl.can_use_private_threads&&(0,i.Z)("li",{},void 0,(0,i.Z)("a",{href:s.Z.get("PRIVATE_THREADS_URL")},void 0,Xe||(Xe=(0,i.Z)("span",{className:"material-icon"},void 0,"message")),gettext("Private threads"),(0,i.Z)(lt,{user:e}))),et||(et=(0,i.Z)("li",{className:"divider"})),(0,i.Z)("li",{className:"dropdown-buttons"},void 0,(0,i.Z)("button",{className:"btn btn-default btn-block",onClick:function(){return document.getElementById("hidden-logout-form").submit()},type:"button"},void 0,gettext("Log out"))))}}]),n}(p().Component);function lt(e){var t=e.user;return t.unread_private_threads?(0,i.Z)("span",{className:"badge"},void 0,t.unread_private_threads):null}function ct(e){var t=e.user;return(0,i.Z)("ul",{className:"ul nav navbar-nav nav-user"},void 0,tt||(tt=(0,i.Z)("li",{},void 0,(0,i.Z)(F,{}))),(0,i.Z)(ut,{user:t}),(0,i.Z)("li",{className:"dropdown"},void 0,(0,i.Z)("a",{"aria-haspopup":"true","aria-expanded":"false",className:"dropdown-toggle","data-toggle":"dropdown",href:t.url,role:"button"},void 0,(0,i.Z)(h.ZP,{user:t,size:"64"})),(0,i.Z)(rt,{user:t})))}function ut(e){var t=e.user;if(!t.acl.can_use_private_threads)return null;var n;return n=t.unread_private_threads?gettext("You have unread private threads!"):gettext("Private threads"),(0,i.Z)("li",{},void 0,(0,i.Z)("a",{className:"navbar-icon",href:s.Z.get("PRIVATE_THREADS_URL"),title:n},void 0,nt||(nt=(0,i.Z)("span",{className:"material-icon"},void 0,"message")),t.unread_private_threads>0&&(0,i.Z)("span",{className:"badge"},void 0,t.unread_private_threads)))}function dt(e){return{user:e.auth.user}}var pt,ht,ft=function(e){(0,l.Z)(n,e);var t=ot(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"showUserMenu",value:function(){be.Z.showConnected("user-menu",(0,a.$j)(dt)(rt))}},{key:"render",value:function(){return(0,i.Z)("button",{type:"button",onClick:this.showUserMenu},void 0,(0,i.Z)(h.ZP,{user:this.props.user,size:"50"}))}}]),n}(p().Component);function vt(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,u.Z)(e);if(t){var s=(0,u.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,c.Z)(this,n)}}var mt=function(e){(0,l.Z)(n,e);var t=vt(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"render",value:function(){return this.props.isAuthenticated?(0,i.Z)(ct,{user:this.props.user}):pt||(pt=(0,i.Z)(ke,{}))}}]),n}(p().Component),Zt=function(e){(0,l.Z)(n,e);var t=vt(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n,[{key:"render",value:function(){return this.props.isAuthenticated?(0,i.Z)(ft,{user:this.props.user}):ht||(ht=(0,i.Z)(xe,{}))}}]),n}(p().Component);function gt(e){return e.auth}var bt=n(4869);s.Z.addInitializer({name:"component:user-menu",initializer:function(){(0,bt.Z)((0,a.$j)(gt)(mt),"user-menu-mount"),(0,bt.Z)((0,a.$j)(gt)(Zt),"user-menu-compact-mount")},after:"store"})},77031:function(e,t,n){"use strict";var a,s=n(22928),i=n(15671),o=n(43144),r=n(79340),l=n(6215),c=n(61120),u=n(57588),d=n.n(u),p=n(37424),h=n(97326),f=n(4942),v=n(59131),m=n(69987),Z=n(94417),g=function(e,t){var n=e;return"rank"===t.component?n+=t.slug:n+=t.component,n+"/"},b=function(e){var t=e.baseUrl,n=e.page,i=e.pages;return(0,s.Z)("div",{className:"nav-container"},void 0,(0,s.Z)("div",{className:"dropdown hidden-sm hidden-md hidden-lg"},void 0,(0,s.Z)("button",{className:"btn btn-default btn-block btn-outline dropdown-toggle",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,a||(a=(0,s.Z)("span",{className:"material-icon"},void 0,"menu")),n.name),(0,s.Z)("ul",{className:"dropdown-menu stick-to-bottom"},void 0,i.map((function(e){var n=g(t,e);return(0,s.Z)("li",{},n,(0,s.Z)(m.rU,{to:n},void 0,e.name))})))),(0,s.Z)("ul",{className:"nav nav-pills hidden-xs",role:"menu"},void 0,i.map((function(e){var n=g(t,e);return(0,s.Z)(Z.Z,{path:n},n,(0,s.Z)(m.rU,{to:n},void 0,e.name))}))))};var y,_,N=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(){return(0,i.Z)(this,u),a.apply(this,arguments)}return(0,o.Z)(u,[{key:"getEmptyMessage",value:function(){return interpolate(gettext("No users have posted any new messages during last %(days)s days."),{days:this.props.trackedPeriod},!0)}},{key:"render",value:function(){return(0,s.Z)("div",{className:"active-posters-list"},void 0,(0,s.Z)(v.Z,{},void 0,(0,s.Z)(b,{baseUrl:misago.get("USERS_LIST_URL"),page:this.props.page,pages:misago.get("USERS_LISTS")}),(0,s.Z)("p",{className:"lead"},void 0,this.getEmptyMessage())))}}]),u}(d().Component),k=n(19605),x=n(44039);var w=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(){return(0,i.Z)(this,u),a.apply(this,arguments)}return(0,o.Z)(u,[{key:"shouldComponentUpdate",value:function(){return!1}},{key:"getClassName",value:function(){return this.props.hiddenOnMobile?"list-group-item hidden-xs hidden-sm":"list-group-item"}},{key:"render",value:function(){return(0,s.Z)("li",{className:this.getClassName()},void 0,y||(y=(0,s.Z)("div",{className:"rank-user-avatar"},void 0,(0,s.Z)("span",{},void 0,(0,s.Z)(k.ZP,{size:"50"})))),(0,s.Z)("div",{className:"rank-user"},void 0,(0,s.Z)("div",{className:"user-name"},void 0,(0,s.Z)("span",{className:"item-title"},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:x.e(30,80)+"px"}},void 0," "))),(0,s.Z)("div",{className:"user-details"},void 0,(0,s.Z)("span",{className:"user-status"},void 0,_||(_=(0,s.Z)("span",{className:"status-icon ui-preview-text"},void 0," ")),(0,s.Z)("span",{className:"status-label ui-preview-text hidden-xs hidden-sm",style:{width:x.e(30,50)+"px"}},void 0," ")),(0,s.Z)("span",{className:"rank-name"},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:x.e(30,50)+"px"}},void 0," ")),(0,s.Z)("span",{className:"user-title hidden-xs hidden-sm"},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:x.e(30,50)+"px"}},void 0," "))),(0,s.Z)("div",{className:"user-compact-stats visible-xs-block"},void 0,(0,s.Z)("span",{className:"rank-position"},void 0,(0,s.Z)("strong",{},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:x.e(20,30)+"px"}},void 0," ")),(0,s.Z)("small",{},void 0,gettext("Rank"))),(0,s.Z)("span",{className:"rank-posts-counted"},void 0,(0,s.Z)("strong",{},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:x.e(20,30)+"px"}},void 0," ")),(0,s.Z)("small",{},void 0,gettext("Ranked posts"))))),(0,s.Z)("div",{className:"rank-position hidden-xs"},void 0,(0,s.Z)("strong",{},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:x.e(20,30)+"px"}},void 0," ")),(0,s.Z)("small",{},void 0,gettext("Rank"))),(0,s.Z)("div",{className:"rank-posts-counted hidden-xs"},void 0,(0,s.Z)("strong",{},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:x.e(20,30)+"px"}},void 0," ")),(0,s.Z)("small",{},void 0,gettext("Ranked posts"))),(0,s.Z)("div",{className:"rank-posts-total hidden-xs"},void 0,(0,s.Z)("strong",{},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:x.e(20,30)+"px"}},void 0," ")),(0,s.Z)("small",{},void 0,gettext("Total posts"))))}}]),u}(d().Component);var R,C=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(){return(0,i.Z)(this,u),a.apply(this,arguments)}return(0,o.Z)(u,[{key:"shouldComponentUpdate",value:function(){return!1}},{key:"render",value:function(){return(0,s.Z)("div",{className:"active-posters-list"},void 0,(0,s.Z)(v.Z,{},void 0,(0,s.Z)(b,{baseUrl:misago.get("USERS_LIST_URL"),page:this.props.page,pages:misago.get("USERS_LISTS")}),(0,s.Z)("p",{className:"lead ui-preview"},void 0,(0,s.Z)("span",{className:"ui-preview-text",style:{width:x.e(50,220)+"px"}},void 0," ")),(0,s.Z)("div",{className:"active-posters ui-preview"},void 0,(0,s.Z)("ul",{className:"list-group"},void 0,[0,1,2].map((function(e){return(0,s.Z)(w,{hiddenOnMobile:e>0},e)}))))))}}]),u}(d().Component),S=n(24678),E=n(32233);var L=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(){return(0,i.Z)(this,u),a.apply(this,arguments)}return(0,o.Z)(u,[{key:"getClassName",value:function(){return this.props.rank.css_class?"list-group-item list-group-rank-"+this.props.rank.css_class:"list-group-item"}},{key:"getUserStatus",value:function(){return this.props.user.status?(0,s.Z)(S.ZP,{user:this.props.user,status:this.props.user.status},void 0,(0,s.Z)(S.Jj,{user:this.props.user,status:this.props.user.status}),(0,s.Z)(S.pg,{user:this.props.user,status:this.props.user.status,className:"status-label hidden-xs hidden-sm"})):(0,s.Z)("span",{className:"user-status"},void 0,R||(R=(0,s.Z)("span",{className:"status-icon ui-preview-text"},void 0," ")),(0,s.Z)("span",{className:"status-label ui-preview-text hidden-xs hidden-sm",style:{width:x.e(30,50)+"px"}},void 0," "))}},{key:"getRankName",value:function(){if(!this.props.rank.is_tab)return(0,s.Z)("span",{className:"rank-name item-title"},void 0,this.props.rank.name);var e=E.Z.get("USERS_LIST_URL")+this.props.rank.slug+"/";return(0,s.Z)(m.rU,{to:e,className:"rank-name item-title"},void 0,this.props.rank.name)}},{key:"getUserTitle",value:function(){return this.props.user.title?(0,s.Z)("span",{className:"user-title hidden-xs hidden-sm"},void 0,this.props.user.title):null}},{key:"render",value:function(){return(0,s.Z)("li",{className:this.getClassName()},void 0,(0,s.Z)("div",{className:"rank-user-avatar"},void 0,(0,s.Z)("a",{href:this.props.user.url},void 0,(0,s.Z)(k.ZP,{user:this.props.user,size:50,size2x:64}))),(0,s.Z)("div",{className:"rank-user"},void 0,(0,s.Z)("div",{className:"user-name"},void 0,(0,s.Z)("a",{href:this.props.user.url,className:"item-title"},void 0,this.props.user.username)),(0,s.Z)("div",{className:"user-details"},void 0,this.getUserStatus(),this.getRankName(),this.getUserTitle()),(0,s.Z)("div",{className:"user-compact-stats visible-xs-block"},void 0,(0,s.Z)("span",{className:"rank-position"},void 0,(0,s.Z)("strong",{},void 0,"#",this.props.counter),(0,s.Z)("small",{},void 0,gettext("Rank"))),(0,s.Z)("span",{className:"rank-posts-counted"},void 0,(0,s.Z)("strong",{},void 0,this.props.user.meta.score),(0,s.Z)("small",{},void 0,gettext("Ranked posts"))))),(0,s.Z)("div",{className:"rank-position hidden-xs"},void 0,(0,s.Z)("strong",{},void 0,"#",this.props.counter),(0,s.Z)("small",{},void 0,gettext("Rank"))),(0,s.Z)("div",{className:"rank-posts-counted hidden-xs"},void 0,(0,s.Z)("strong",{},void 0,this.props.user.meta.score),(0,s.Z)("small",{},void 0,gettext("Ranked posts"))),(0,s.Z)("div",{className:"rank-posts-total hidden-xs"},void 0,(0,s.Z)("strong",{},void 0,this.props.user.posts),(0,s.Z)("small",{},void 0,gettext("Total posts"))))}}]),u}(d().Component);var P=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(){return(0,i.Z)(this,u),a.apply(this,arguments)}return(0,o.Z)(u,[{key:"getLeadMessage",value:function(){var e=ngettext("%(posters)s top poster from last %(days)s days.","%(posters)s top posters from last %(days)s days.",this.props.count);return interpolate(e,{posters:this.props.count,days:this.props.trackedPeriod},!0)}},{key:"render",value:function(){return(0,s.Z)("div",{className:"active-posters-list"},void 0,(0,s.Z)(v.Z,{},void 0,(0,s.Z)(b,{baseUrl:misago.get("USERS_LIST_URL"),page:this.props.page,pages:misago.get("USERS_LISTS")}),(0,s.Z)("p",{className:"lead"},void 0,this.getLeadMessage()),(0,s.Z)("div",{className:"active-posters ui-ready"},void 0,(0,s.Z)("ul",{className:"list-group"},void 0,this.props.users.map((function(e,t){return(0,s.Z)(L,{user:e,rank:e.rank,counter:t+1},e.id)}))))))}}]),u}(d().Component),O=n(6935),T=n(55547),A=n(90287),B=n(53328);var I=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(e){var t;return(0,i.Z)(this,u),t=a.call(this,e),(0,f.Z)((0,h.Z)(t),"update",(function(e){A.Z.dispatch((0,O.ZB)(e.results)),t.setState({isLoaded:!0,trackedPeriod:e.tracked_period,count:e.count})})),E.Z.has("USERS")?t.initWithPreloadedData(E.Z.pop("USERS")):t.initWithoutPreloadedData(),t.startPolling(),t}return(0,o.Z)(u,[{key:"initWithPreloadedData",value:function(e){this.state={isLoaded:!0,trackedPeriod:e.tracked_period,count:e.count},A.Z.dispatch((0,O.ZB)(e.results))}},{key:"initWithoutPreloadedData",value:function(){this.state={isLoaded:!1}}},{key:"startPolling",value:function(){T.Z.start({poll:"active-posters",url:E.Z.get("USERS_API"),data:{list:"active"},frequency:9e4,update:this.update})}},{key:"componentDidMount",value:function(){B.Z.set({title:this.props.route.extra.name,parent:gettext("Users")})}},{key:"componentWillUnmount",value:function(){T.Z.stop("active-posters")}},{key:"render",value:function(){var e={name:this.props.route.extra.name};return this.state.isLoaded?this.state.count>0?(0,s.Z)(P,{page:e,users:this.props.users,trackedPeriod:this.state.trackedPeriod,count:this.state.count}):(0,s.Z)(N,{page:e,trackedPeriod:this.state.trackedPeriod}):(0,s.Z)(C,{page:e})}}]),u}(d().Component);var j,D=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(){return(0,i.Z)(this,u),a.apply(this,arguments)}return(0,o.Z)(u,[{key:"getClassName",value:function(){return this.props.copy&&this.props.copy.length&&1===function(e,t){if(e=(e+"").toLowerCase(),(t=(t+"").toLowerCase()).length<=0)return 0;for(var n=0,a=0,s=t.length;(a=e.indexOf(t,a))>=0;)n+=1,a+=s;return n}(this.props.copy,"<p")&&-1===this.props.copy.indexOf("<br")?"page-lead lead":"page-lead"}},{key:"render",value:function(){return this.props.copy&&this.props.copy.length?(0,s.Z)("div",{className:this.getClassName(),dangerouslySetInnerHTML:{__html:this.props.copy}}):null}}]),u}(d().Component),U=n(40429),M=function(e){var t=e.users;return(0,s.Z)(U.Z,{cols:4,isReady:!0,showStatus:!0,users:t})};var z,H,F,q,Y,V,$,G,W,K=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(){var e;(0,i.Z)(this,u);for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return e=a.call.apply(a,[this].concat(n)),(0,f.Z)((0,h.Z)(e),"render",(function(){return j||(j=(0,s.Z)(U.Z,{cols:4,isReady:!1}))})),e}return(0,o.Z)(u,[{key:"shouldComponentUpdate",value:function(){return!1}}]),u}(d().Component),J=K,Q=n(92490),X=function(e){var t=e.users;return t.more?(0,s.Z)("p",{},void 0,interpolate(ngettext("There is %(more)s more member with this role.","There are %(more)s more members with this role.",t.more),{more:t.more},!0)):(0,s.Z)("p",{},void 0,gettext("There are no more members with this role."))},ee=function(e){var t=e.baseUrl,n=e.users;return(0,s.Z)("div",{className:"misago-pagination"},void 0,n.isLoaded&&n.first?(0,s.Z)(m.rU,{className:"btn btn-default btn-outline btn-icon",to:t,title:gettext("Go to first page")},void 0,z||(z=(0,s.Z)("span",{className:"material-icon"},void 0,"first_page"))):(0,s.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:gettext("Go to first page"),type:"button",disabled:!0},void 0,H||(H=(0,s.Z)("span",{className:"material-icon"},void 0,"first_page"))),n.isLoaded&&n.previous?(0,s.Z)(m.rU,{className:"btn btn-default btn-outline btn-icon",to:t+(n.previous>1?n.previous+"/":""),title:gettext("Go to previous page")},void 0,F||(F=(0,s.Z)("span",{className:"material-icon"},void 0,"chevron_left"))):(0,s.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:gettext("Go to previous page"),type:"button",disabled:!0},void 0,q||(q=(0,s.Z)("span",{className:"material-icon"},void 0,"chevron_left"))),n.isLoaded&&n.next?(0,s.Z)(m.rU,{className:"btn btn-default btn-outline btn-icon",to:t+n.next+"/",title:gettext("Go to next page")},void 0,Y||(Y=(0,s.Z)("span",{className:"material-icon"},void 0,"chevron_right"))):(0,s.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:gettext("Go to next page"),type:"button",disabled:!0},void 0,V||(V=(0,s.Z)("span",{className:"material-icon"},void 0,"chevron_right"))),n.isLoaded&&n.last?(0,s.Z)(m.rU,{className:"btn btn-default btn-outline btn-icon",to:t+n.last+"/",title:gettext("Go to last page")},void 0,$||($=(0,s.Z)("span",{className:"material-icon"},void 0,"last_page"))):(0,s.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:gettext("Go to last page"),type:"button",disabled:!0},void 0,G||(G=(0,s.Z)("span",{className:"material-icon"},void 0,"last_page"))))},te=function(e){var t=e.baseUrl,n=e.users;return(0,s.Z)(Q.o8,{},void 0,(0,s.Z)(Q.Z2,{},void 0,(0,s.Z)(Q.Eg,{},void 0,(0,s.Z)(ee,{baseUrl:t,users:n}))),(0,s.Z)(Q.Z2,{auto:!0},void 0,(0,s.Z)(Q.Eg,{},void 0,(0,s.Z)(X,{users:n}))))};var ne=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(e){var t;return(0,i.Z)(this,u),t=a.call(this,e),(0,f.Z)((0,h.Z)(t),"update",(function(e){A.Z.dispatch((0,O.ZB)(e.results)),e.isLoaded=!0,t.setState(e)})),E.Z.has("USERS")?t.initWithPreloadedData(E.Z.pop("USERS")):t.initWithoutPreloadedData(),t.startPolling(e.params.page||1),t}return(0,o.Z)(u,[{key:"initWithPreloadedData",value:function(e){this.state=Object.assign(e,{isLoaded:!0}),A.Z.dispatch((0,O.ZB)(e.results))}},{key:"initWithoutPreloadedData",value:function(){this.state={isLoaded:!1}}},{key:"startPolling",value:function(e){T.Z.start({poll:"rank-users",url:E.Z.get("USERS_API"),data:{rank:this.props.route.rank.id,page:e},frequency:9e4,update:this.update})}},{key:"componentDidMount",value:function(){B.Z.set({title:this.props.route.rank.name,page:this.props.params.page||null,parent:gettext("Users")})}},{key:"componentWillUnmount",value:function(){T.Z.stop("rank-users")}},{key:"componentWillReceiveProps",value:function(e){this.props.params.page!==e.params.page&&(B.Z.set({title:this.props.route.rank.name,page:e.params.page||null,parent:gettext("Users")}),this.setState({isLoaded:!1}),T.Z.stop("rank-users"),this.startPolling(e.params.page))}},{key:"getClassName",value:function(){return this.props.route.rank.css_class?"rank-users-list rank-users-"+this.props.route.rank.css_class:"rank-users-list"}},{key:"getRankDescription",value:function(){return this.props.route.rank.description?(0,s.Z)("div",{className:"rank-description"},void 0,(0,s.Z)(D,{copy:this.props.route.rank.description.html})):null}},{key:"getComponent",value:function(){return this.state.isLoaded?this.state.count>0?(0,s.Z)(M,{users:this.props.users}):(0,s.Z)("p",{className:"lead"},void 0,gettext("There are no users with this rank at the moment.")):W||(W=(0,s.Z)(J,{}))}},{key:"render",value:function(){return(0,s.Z)("div",{className:this.getClassName()},void 0,(0,s.Z)(v.Z,{},void 0,(0,s.Z)(b,{baseUrl:E.Z.get("USERS_LIST_URL"),page:{name:this.props.route.rank.name},pages:E.Z.get("USERS_LISTS")}),this.getRankDescription(),this.getComponent(),(0,s.Z)(te,{baseUrl:E.Z.get("USERS_LIST_URL")+this.props.route.rank.slug+"/",users:this.state})))}}]),u}(d().Component),ae=n(82125),se=n(99755);var ie=function(e){(0,r.Z)(u,e);var t,n,a=(t=u,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,c.Z)(t);if(n){var s=(0,c.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,l.Z)(this,e)});function u(){return(0,i.Z)(this,u),a.apply(this,arguments)}return(0,o.Z)(u,[{key:"render",value:function(){return(0,s.Z)("div",{className:"page page-users-lists"},void 0,(0,s.Z)(se.sP,{},void 0,(0,s.Z)(se.mr,{styleName:"users-lists"},void 0,(0,s.Z)(se.gC,{styleName:"users-lists"},void 0,(0,s.Z)("h1",{},void 0,gettext("Users"))))),this.props.children)}}]),u}(ae.Z);function oe(e){return{tick:e.tick.tick,user:e.auth.user,users:e.users}}function re(){var e=[];return E.Z.get("USERS_LISTS").forEach((function(t){"rank"===t.component?(e.push({path:E.Z.get("USERS_LIST_URL")+t.slug+"/:page/",component:(0,p.$j)(oe)(ne),rank:t}),e.push({path:E.Z.get("USERS_LIST_URL")+t.slug+"/",component:(0,p.$j)(oe)(ne),rank:t})):"active-posters"===t.component&&e.push({path:E.Z.get("USERS_LIST_URL")+t.component+"/",component:(0,p.$j)(oe)(I),extra:{name:t.name}})})),e}var le=n(39633);E.Z.addInitializer({name:"component:users",initializer:function(e){e.has("USERS_LISTS")&&(0,le.Z)({root:E.Z.get("USERS_LIST_URL"),component:ie,paths:re()})},after:"store"})},97751:function(e,t,n){"use strict";var a=n(32233),s=n(96142);a.Z.addInitializer({name:"include",initializer:function(e){s.Z.init(e.get("STATIC_URL"))}})},76093:function(e,t,n){"use strict";var a=n(32233),s=n(62833);a.Z.addInitializer({name:"local-storage",initializer:function(){s.Z.init("misago_")}})},19764:function(e,t,n){"use strict";var a=n(32233),s=n(8621);a.Z.addInitializer({name:"dropdown",initializer:function(){var e=document.getElementById("mobile-navbar-dropdown-mount");e&&s.Z.init(e)},before:"store"})},47549:function(e,t,n){"use strict";var a=n(32233),s=n(59801);a.Z.addInitializer({name:"modal",initializer:function(){var e=document.getElementById("modal-mount");e&&s.Z.init(e)},before:"store"})},22331:function(e,t,n){"use strict";var a=n(30381),s=n.n(a),i=n(32233),o=n(19755);i.Z.addInitializer({name:"moment",initializer:function(){s().locale(o("html").attr("lang"))}})},21513:function(e,t,n){"use strict";var a=n(32233),s=n(53328);a.Z.addInitializer({name:"page-title",initializer:function(e){s.Z.init(e.get("SETTINGS").forum_index_title,e.get("SETTINGS").forum_name)}})},98749:function(e,t,n){"use strict";var a=n(32233),s=n(78657),i=n(53904),o=n(55547);a.Z.addInitializer({name:"polls",initializer:function(){o.Z.init(s.Z,i.Z)}})},98251:function(e,t,n){"use strict";var a=n(32233),s=n(78657),i=n(27950),o=n(53904);a.Z.addInitializer({name:"posting",initializer:function(){i.Z.init(s.Z,o.Z,document.getElementById("posting-placeholder"))}})},6720:function(e,t,n){"use strict";var a=n(32233),s=n(35486),i=n(90287);a.Z.addInitializer({name:"reducer:auth",initializer:function(e){i.Z.addReducer("auth",s.ZP,Object.assign({isAuthenticated:e.get("isAuthenticated"),isAnonymous:!e.get("isAuthenticated"),user:e.get("user")},s.E3))},before:"store"})},10846:function(e,t,n){"use strict";var a=n(32233),s=n(8154),i=n(90287);a.Z.addInitializer({name:"reducer:participants",initializer:function(){var e=null;a.Z.has("THREAD")&&(e=a.Z.get("THREAD").participants),i.Z.addReducer("participants",s.ZP,e||[])},before:"store"})},18255:function(e,t,n){"use strict";var a=n(32233),s=n(59752),i=n(90287);a.Z.addInitializer({name:"reducer:poll",initializer:function(){var e;e=a.Z.has("THREAD")&&a.Z.get("THREAD").poll?(0,s.ZB)(a.Z.get("THREAD").poll):{isBusy:!1},i.Z.addReducer("poll",s.ZP,e)},before:"store"})},14113:function(e,t,n){"use strict";var a=n(32233),s=n(21981),i=n(90287);a.Z.addInitializer({name:"reducer:posts",initializer:function(){var e;e=a.Z.has("POSTS")?(0,s.ZB)(a.Z.get("POSTS")):{isLoaded:!1,isBusy:!1},i.Z.addReducer("posts",s.ZP,e)},before:"store"})},24444:function(e,t,n){"use strict";var a=n(32233),s=n(58598),i=n(90287);a.Z.addInitializer({name:"reducer:profile-details",initializer:function(){var e=null;a.Z.has("PROFILE_DETAILS")&&(e=a.Z.get("PROFILE_DETAILS")),i.Z.addReducer("profile-details",s.ZP,e||{})},before:"store"})},1764:function(e,t,n){"use strict";var a=n(32233),s=n(27519),i=n(90287);a.Z.addInitializer({name:"reducer:profile-hydrate",initializer:function(){a.Z.has("PROFILE")&&i.Z.dispatch((0,s.ZB)(a.Z.get("PROFILE")))},after:"store"})},68351:function(e,t,n){"use strict";var a=n(32233),s=n(27519),i=n(90287);a.Z.addInitializer({name:"reducer:profile",initializer:function(){i.Z.addReducer("profile",s.ZP,{})},before:"store"})},81521:function(e,t,n){"use strict";var a=n(32233),s=n(16427),i=n(90287);a.Z.addInitializer({name:"reducer:search",initializer:function(){i.Z.addReducer("search",s.ZP,Object.assign({},s.E3,{providers:a.Z.get("SEARCH_PROVIDERS")||[],query:a.Z.get("SEARCH_QUERY")||""}))},before:"store"})},19984:function(e,t,n){"use strict";var a=n(32233),s=n(77751),i=n(90287);a.Z.addInitializer({name:"reducer:selection",initializer:function(){i.Z.addReducer("selection",s.ZP,[])},before:"store"})},41229:function(e,t,n){"use strict";var a=n(32233),s=n(27346),i=n(90287);a.Z.addInitializer({name:"reducer:snackbar",initializer:function(){i.Z.addReducer("snackbar",s.ZP,s.E3)},before:"store"})},43589:function(e,t,n){"use strict";var a=n(32233),s=n(7738),i=n(90287);a.Z.addInitializer({name:"reducer:thread",initializer:function(){var e;e=a.Z.has("THREAD")?(0,s.ZB)(a.Z.get("THREAD")):{isBusy:!1},i.Z.addReducer("thread",s.ZP,e)},before:"store"})},24108:function(e,t,n){"use strict";var a=n(32233),s=n(61340),i=n(90287);a.Z.addInitializer({name:"reducer:threads",initializer:function(){i.Z.addReducer("threads",s.ZP,[])},before:"store"})},33934:function(e,t,n){"use strict";var a=n(32233),s=n(85586),i=n(90287);a.Z.addInitializer({name:"reducer:tick",initializer:function(){i.Z.addReducer("tick",s.ZP,s.E3)},before:"store"})},85577:function(e,t,n){"use strict";var a=n(32233),s=n(48927),i=n(90287);a.Z.addInitializer({name:"reducer:username-history",initializer:function(){i.Z.addReducer("username-history",s.ZP,[])},before:"store"})},83526:function(e,t,n){"use strict";var a=n(32233),s=n(6935),i=n(90287);a.Z.addInitializer({name:"reducer:users",initializer:function(){i.Z.addReducer("users",s.ZP,[])},before:"store"})},43060:function(e,t,n){"use strict";var a=n(32233),s=n(53904),i=n(90287);a.Z.addInitializer({name:"snackbar",initializer:function(){s.Z.init(i.Z)},after:"store"})},92292:function(e,t,n){"use strict";var a=n(32233),s=n(90287);a.Z.addInitializer({name:"store",initializer:function(){s.Z.init()},before:"_end"})},33409:function(e,t,n){"use strict";var a=n(32233),s=n(85586),i=n(90287);a.Z.addInitializer({name:"tick-start",initializer:function(){window.setInterval((function(){i.Z.dispatch((0,s.bq)())}),5e4)},after:"store"})},31341:function(e,t,n){"use strict";var a=n(32233),s=n(96142),i=n(59940);a.Z.addInitializer({name:"zxcvbn",initializer:function(){i.Z.init(s.Z)}})},35486:function(e,t,n){"use strict";n.d(t,{E3:function(){return s},ZP:function(){return d},r$:function(){return l},w7:function(){return u},zB:function(){return c}});var a=n(6935),s={signedIn:!1,signedOut:!1},i="PATCH_USER",o="SIGN_IN",r="SIGN_OUT";function l(e){return{type:i,patch:e}}function c(e){return{type:o,user:e}}function u(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return{type:r,soft:e}}function d(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:s,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case i:var n=Object.assign({},e);return n.user=Object.assign({},e.user,t.patch),n;case o:return Object.assign({},e,{signedIn:t.user});case r:return Object.assign({},e,{isAuthenticated:!1,isAnonymous:!0,signedOut:!t.soft});case a.oB:if(e.isAuthenticated&&e.user.id===t.userId){var l=Object.assign({},e);return l.user=Object.assign({},e.user,{avatars:t.avatars}),l}return e;case a.D9:if(e.isAuthenticated&&e.user.id===t.userId){var c=Object.assign({},e);return c.user=Object.assign({},e.user,{username:t.username,slug:t.slug}),c}return e;default:return e}}},8154:function(e,t,n){"use strict";n.d(t,{ZP:function(){return i},gx:function(){return s}});var a="REPLACE_PARTICIPANTS";function s(e){return{type:a,state:e}}function i(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return t.type===a?t.state:e}},59752:function(e,t,n){"use strict";n.d(t,{Ar:function(){return p},Od:function(){return f},ZB:function(){return u},ZH:function(){return r},ZP:function(){return v},b9:function(){return l},gx:function(){return h},n6:function(){return d}});var a=n(30381),s=n.n(a),i="BUSY_POLL",o="RELEASE_POLL",r="REMOVE_POLL",l="REPLACE_POLL",c="UPDATE_POLL";function u(e){var t=!1;for(var n in e.choices)if(e.choices[n].selected){t=!0;break}return Object.assign({},e,{posted_on:s()(e.posted_on),hasSelectedChoices:t,endsOn:e.length?s()(e.posted_on).add(e.length,"days"):null,isBusy:!1})}function d(){return{type:i}}function p(){return{type:o}}function h(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{type:l,state:t?e:u(e)}}function f(){return{type:r}}function v(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case i:return Object.assign({},e,{isBusy:!0});case o:return Object.assign({},e,{isBusy:!1});case r:return{isBusy:!1};case l:return t.state;case c:return Object.assign({},e,t.data);default:return e}}},92747:function(e,t,n){"use strict";n.d(t,{Qu:function(){return o},ZB:function(){return r},ZP:function(){return u},r$:function(){return c}});var a=n(30381),s=n.n(a),i=n(6935),o="PATCH_POST";function r(e){return Object.assign({},e,{posted_on:s()(e.posted_on),updated_on:s()(e.updated_on),hidden_on:s()(e.hidden_on),attachments:e.attachments?e.attachments.map(l):null,poster:e.poster?(0,i.Ru)(e.poster):null,isSelected:!1,isBusy:!1,isDeleted:!1})}function l(e){return Object.assign({},e,{uploaded_on:s()(e.uploaded_on)})}function c(e,t){return{type:o,post:e,patch:t}}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return t.type===o&&e.id==t.post.id?Object.assign({},e,t.patch):e}},21981:function(e,t,n){"use strict";n.d(t,{R3:function(){return m},Rz:function(){return Z},Vx:function(){return g},Ys:function(){return d},ZB:function(){return f},ZP:function(){return b},_H:function(){return p},kR:function(){return h},zD:function(){return v}});var a=n(92747),s="APPEND_POSTS",i="SELECT_POST",o="DESELECT_POST",r="DESELECT_POSTS",l="LOAD_POSTS",c="UNLOAD_POSTS",u="UPDATE_POSTS";function d(e){return{type:i,post:e}}function p(e){return{type:o,post:e}}function h(){return{type:r}}function f(e){return Object.assign({},e,{results:e.results.map(a.ZB),isLoaded:!0,isBusy:!1,isSelected:!1})}function v(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{type:l,state:t?e:f(e)}}function m(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{type:s,state:t?e:f(e)}}function Z(){return{type:c}}function g(e){return{type:u,update:e}}function b(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case i:var n=e.results.map((function(e){return e.id==t.post.id?Object.assign({},e,{isSelected:!0}):e}));return Object.assign({},e,{results:n});case o:var d=e.results.map((function(e){return e.id==t.post.id?Object.assign({},e,{isSelected:!1}):e}));return Object.assign({},e,{results:d});case r:var p=e.results.map((function(e){return Object.assign({},e,{isSelected:!1})}));return Object.assign({},e,{results:p});case s:var h=e.results.slice(),f=e.results.map((function(e){return e.id}));return t.state.results.map((function(e){-1===f.indexOf(e.id)&&h.push(e)})),Object.assign({},t.state,{results:h});case l:return t.state;case c:return Object.assign({},e,{isLoaded:!1});case u:return Object.assign({},e,t.update);case a.Qu:var v=e.results.map((function(e){return(0,a.ZP)(e,t)}));return Object.assign({},e,{results:v});default:return e}}},58598:function(e,t,n){"use strict";n.d(t,{ZP:function(){return i},zD:function(){return s}});var a="LOAD_DETAILS";function s(e){return{type:a,newState:e}}function i(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return t.type===a?t.newState:e}},27519:function(e,t,n){"use strict";n.d(t,{ZB:function(){return l},ZP:function(){return u},r$:function(){return c}});var a=n(30381),s=n.n(a),i=n(6935),o="HYDRATE_PROFILE",r="PATCH_PROFILE";function l(e){return{type:o,profile:e}}function c(e){return{type:r,patch:e}}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case o:return Object.assign({},t.profile,{joined_on:s()(t.profile.joined_on),status:(0,i.$q)(t.profile.status)});case r:return Object.assign({},e,t.patch);case i.oB:return e.id===t.userId?Object.assign({},e,{avatars:t.avatars}):e;case i.D9:return e.id===t.userId?Object.assign({},e,{username:t.username,slug:t.slug}):e;default:return e}}},16427:function(e,t,n){"use strict";n.d(t,{E3:function(){return o},P0:function(){return l},Vx:function(){return r},ZP:function(){return c}});var a="REPLACE_SEARCH",s="UPDATE_SEARCH",i="UPDATE_SEARCH_PROVIDER",o={isLoading:!1,query:"",providers:[]};function r(e){return{type:s,update:e}}function l(e){return{type:i,provider:e}}function c(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case a:return t.state;case s:return Object.assign({},e,t.update);case i:return Object.assign({},e,{providers:e.providers.map((function(e){return e.id===t.provider.id?t.provider:e}))});default:return e}}},77751:function(e,t,n){"use strict";n.d(t,{$6:function(){return r},YP:function(){return l},ZP:function(){return u},wc:function(){return c}});var a=n(20370),s="SELECT_ALL",i="SELECT_NONE",o="SELECT_ITEM";function r(e){return{type:s,items:e}}function l(){return{type:i}}function c(e){return{type:o,item:e}}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case s:return t.items;case i:return[];case o:return(0,a.ZN)(e,t.item);default:return e}}},27346:function(e,t,n){"use strict";n.d(t,{E3:function(){return a},OV:function(){return o},ZP:function(){return l},p2:function(){return r}});var a={type:"info",message:"",isVisible:!1},s="SHOW_SNACKBAR",i="HIDE_SNACKBAR";function o(e,t){return{type:s,message:e,messageType:t}}function r(){return{type:i}}function l(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return t.type===s?{type:t.messageType,message:t.message,isVisible:!0}:t.type===i?Object.assign({},e,{isVisible:!1}):e}},7738:function(e,t,n){"use strict";n.d(t,{Ar:function(){return h},Vx:function(){return v},ZB:function(){return d},ZP:function(){return Z},gx:function(){return f},n6:function(){return p},y8:function(){return m}});var a=n(30381),s=n.n(a),i=n(59752),o="BUSY_THREAD",r="RELEASE_THREAD",l="REPLACE_THREAD",c="UPDATE_THREAD",u="UPDATE_THREAD_ACL";function d(e){return Object.assign({},e,{started_on:s()(e.started_on),last_post_on:s()(e.last_post_on),best_answer_marked_on:e.best_answer_marked_on?s()(e.best_answer_marked_on):null,isBusy:!1})}function p(){return{type:o}}function h(){return{type:r}}function f(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{type:l,state:t?e:d(e)}}function v(e){return{type:c,data:e}}function m(e){return{type:u,data:e}}function Z(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case o:return Object.assign({},e,{isBusy:!0});case r:return Object.assign({},e,{isBusy:!1});case i.ZH:return Object.assign({},e,{poll:null});case i.b9:return Object.assign({},e,{poll:t.state});case l:return t.state;case c:return Object.assign({},e,t.data);case u:var n=Object.assign({},e.acl,t.data);return Object.assign({},e,{acl:n});default:return e}}},61340:function(e,t,n){"use strict";n.d(t,{R3:function(){return h},V8:function(){return v},ZB:function(){return m},ZP:function(){return b},l8:function(){return f},r$:function(){return Z}});var a=n(30381),s=n.n(a),i=n(89759),o="APPEND_THREADS",r="DELETE_THREAD",l="FILTER_THREADS",c="HYDRATE_THREADS",u="PATCH_THREAD",d="SORT_THREADS",p=["can_announce","can_approve","can_close","can_hide","can_move","can_merge","can_pin","can_review"];function h(e,t){return{type:o,items:e,sorting:t}}function f(e){return{type:r,thread:e}}function v(e,t){return{type:l,category:e,categoriesMap:t}}function m(e){return{type:c,items:e}}function Z(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return{type:u,thread:e,patch:t,sorting:n}}function g(e){return Object.assign({},e,{started_on:s()(e.started_on),last_post_on:s()(e.last_post_on),moderation:(t=e.acl,n=[],p.forEach((function(e){t[e]&&n.push(e)})),n)});var t,n}function b(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case o:var n=(0,i.Z)(t.items.map(g),e);return n.sort(t.sorting);case r:return e.filter((function(e){return e.id!==t.thread.id}));case l:return e.filter((function(e){var n=t.categoriesMap[e.category];return n.lft>=t.category.lft&&n.rght<=t.category.rght||2==e.weight}));case c:return t.items.map(g);case u:var a=e.map((function(e){return e.id===t.thread.id?Object.assign({},e,t.patch):e}));return t.sorting?a.sort(t.sorting):a;case d:return e.sort(t.sorting);default:return e}}},85586:function(e,t,n){"use strict";n.d(t,{E3:function(){return a},ZP:function(){return o},bq:function(){return i}});var a={tick:0},s="TICK";function i(){return{type:s}}function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return t.type===s?Object.assign({},e,{tick:e.tick+1}):e}},48927:function(e,t,n){"use strict";n.d(t,{KP:function(){return u},R3:function(){return d},ZB:function(){return p},ZP:function(){return f}});var a=n(30381),s=n.n(a),i=n(6935),o=n(89759),r="ADD_NAME_CHANGE",l="APPEND_HISTORY",c="HYDRATE_HISTORY";function u(e,t,n){return{type:r,change:e,user:t,changedBy:n}}function d(e){return{type:l,items:e}}function p(e){return{type:c,items:e}}function h(e){return Object.assign({},e,{changed_on:s()(e.changed_on)})}function f(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case r:var n=e.slice();return n.unshift({id:Math.floor(Date.now()/1e3),changed_by:t.changedBy,changed_by_username:t.changedBy.username,changed_on:s()(),new_username:t.change.username,old_username:t.user.username}),n;case l:return(0,o.Z)(e,t.items.map(h));case c:return t.items.map(h);case i.oB:return e.map((function(e){return(e=Object.assign({},e)).changed_by&&e.changed_by.id===t.userId&&(e.changed_by=Object.assign({},e.changed_by,{avatars:t.avatars})),e}));case i.D9:return e.map((function(e){return(e=Object.assign({},e)).changed_by&&e.changed_by.id===t.userId&&(e.changed_by=Object.assign({},e.changed_by,{username:t.username,slug:t.slug})),Object.assign({},e)}));default:return e}}},6935:function(e,t,n){"use strict";n.d(t,{$q:function(){return p},D9:function(){return c},R3:function(){return u},Ru:function(){return h},ZB:function(){return d},ZP:function(){return m},_S:function(){return v},n1:function(){return f},oB:function(){return l}});var a=n(30381),s=n.n(a),i=n(89759),o="APPEND_USERS",r="HYDRATE_USERS",l="UPDATE_AVATAR",c="UPDATE_USERNAME";function u(e){return{type:o,items:e}}function d(e){return{type:r,items:e}}function p(e){return e?Object.assign({},e,{last_click:e.last_click?s()(e.last_click):null,banned_until:e.banned_until?s()(e.banned_until):null}):null}function h(e){return Object.assign({},e,{joined_on:s()(e.joined_on),status:p(e.status)})}function f(e,t){return{type:l,userId:e.id,avatars:t}}function v(e,t,n){return{type:c,userId:e.id,username:t,slug:n}}function m(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;switch(t.type){case o:return(0,i.Z)(e,t.items.map(h));case r:return t.items.map(h);case l:return e.map((function(e){return(e=Object.assign({},e)).id===t.userId&&(e.avatars=t.avatars),e}));default:return e}}},78657:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=n(19755),o=function(){function e(){(0,a.Z)(this,e),this._cookieName=null,this._csrfToken=null,this._locks={}}return(0,s.Z)(e,[{key:"init",value:function(e){this._cookieName=e}},{key:"getCsrfToken",value:function(){if(-1!==document.cookie.indexOf(this._cookieName)){var e=new RegExp(this._cookieName+"=([^;]*)"),t=document.cookie.match(e)[0];return t?t.split("=")[1]:null}return null}},{key:"request",value:function(e,t,n){var a=this;return new Promise((function(s,o){var r={url:t,method:e,headers:{"X-CSRFToken":a.getCsrfToken()},data:n?JSON.stringify(n):null,contentType:"application/json; charset=utf-8",dataType:"json",success:function(e){s(e)},error:function(e){var t=e.responseJSON||{};t.status=e.status,0===t.status&&(t.detail=gettext("Lost connection with application.")),404===t.status&&(t.detail&&"NOT FOUND"!==t.detail||(t.detail=gettext("Action link is invalid."))),500!==t.status||t.detail||(t.detail=gettext("Unknown error has occured.")),t.statusText=e.statusText,o(t)}};i.ajax(r)}))}},{key:"get",value:function(e,t,n){if(t&&(e+="?"+i.param(t)),n){var a=this;return this._locks[n]&&(this._locks[n].url=e),this._locks[n]&&this._locks[n].waiter?{then:function(){}}:this._locks[n]&&this._locks[n].wait?(this._locks[n].waiter=!0,new Promise((function(t,s){var i=function e(i){a._locks[n].wait?window.setTimeout((function(){e(i)}),300):a._locks[n].url!==i?e(a._locks[n].url):(a._locks[n].waiter=!1,a.request("GET",a._locks[n].url).then((function(s){a._locks[n].url===i?t(s):(a._locks[n].waiter=!0,e(a._locks[n].url))}),(function(t){a._locks[n].url===i?s(t):(a._locks[n].waiter=!0,e(a._locks[n].url))})))};window.setTimeout((function(){i(e)}),300)}))):(this._locks[n]={url:e,wait:!0,waiter:!1},new Promise((function(t,s){a.request("GET",e).then((function(s){a._locks[n].wait=!1,a._locks[n].url===e&&t(s)}),(function(t){a._locks[n].wait=!1,a._locks[n].url===e&&s(t)}))})))}return this.request("GET",e)}},{key:"post",value:function(e,t){return this.request("POST",e,t)}},{key:"patch",value:function(e,t){return this.request("PATCH",e,t)}},{key:"put",value:function(e,t){return this.request("PUT",e,t)}},{key:"delete",value:function(e,t){return this.request("DELETE",e,t)}},{key:"upload",value:function(e,t,n){var a=this;return new Promise((function(s,o){var r={url:e,method:"POST",headers:{"X-CSRFToken":a.getCsrfToken()},data:t,contentType:!1,processData:!1,xhr:function(){var e=new window.XMLHttpRequest;return e.upload.addEventListener("progress",(function(e){e.lengthComputable&&n(Math.round(e.loaded/e.total*100))}),!1),e},success:function(e){s(e)},error:function(e){var t=e.responseJSON||{};t.status=e.status,0===t.status&&(t.detail=gettext("Lost connection with application.")),413!==t.status||t.detail||(t.detail=gettext("Upload was rejected by server as too large.")),404===t.status&&(t.detail&&"NOT FOUND"!==t.detail||(t.detail=gettext("Action link is invalid."))),500!==t.status||t.detail||(t.detail=gettext("Unknown error has occured.")),t.statusText=e.statusText,o(t)}};i.ajax(r)}))}}]),e}();t.Z=new o},98274:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=n(35486),o=function(){function e(){(0,a.Z)(this,e)}return(0,s.Z)(e,[{key:"init",value:function(e,t,n){this._store=e,this._local=t,this._modal=n,this.syncSession(),this.watchState()}},{key:"syncSession",value:function(){var e=this._store.getState().auth;e.isAuthenticated?this._local.set("auth",{isAuthenticated:!0,username:e.user.username}):this._local.set("auth",{isAuthenticated:!1})}},{key:"watchState",value:function(){var e=this,t=this._store.getState().auth;this._local.watch("auth",(function(n){n.isAuthenticated?e._store.dispatch((0,i.zB)({username:n.username})):t.isAuthenticated&&e._store.dispatch((0,i.w7)())})),this._modal.hide()}},{key:"signIn",value:function(e){this._store.dispatch((0,i.zB)(e)),this._local.set("auth",{isAuthenticated:!0,username:e.username}),this._modal.hide()}},{key:"signOut",value:function(){this._store.dispatch((0,i.w7)()),this._local.set("auth",{isAuthenticated:!1}),this._modal.hide()}},{key:"softSignOut",value:function(){this._store.dispatch((0,i.w7)(!0)),this._local.set("auth",{isAuthenticated:!1}),this._modal.hide()}}]),e}();t.Z=new o},93825:function(e,t,n){"use strict";var a,s=n(22928),i=n(79340),o=n(6215),r=n(61120),l=n(15671),c=n(43144),u=n(57588),d=n.n(u),p=n(96359);function h(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=(0,r.Z)(e);if(t){var s=(0,r.Z)(this).constructor;n=Reflect.construct(a,arguments,s)}else n=a.apply(this,arguments);return(0,o.Z)(this,n)}}var f=function(){function e(){(0,l.Z)(this,e)}return(0,c.Z)(e,[{key:"init",value:function(e,t,n,a){this._context=e,this._ajax=t,this._include=n,this._snackbar=a}}]),e}(),v=function(e){(0,i.Z)(n,e);var t=h(n);function n(){return(0,l.Z)(this,n),t.apply(this,arguments)}return(0,c.Z)(n,[{key:"load",value:function(){return new Promise((function(e){e()}))}},{key:"validator",value:function(){return null}},{key:"component",value:function(){return null}}]),n}(f),m=function(e){(0,i.Z)(n,e);var t=h(n);function n(){return(0,l.Z)(this,n),t.apply(this,arguments)}return(0,c.Z)(n,[{key:"load",value:function(){var e=this;return new Promise((function(t,n){e._ajax.get(e._context.get("CAPTCHA_API")).then((function(n){e.question=n.question,e.helpText=n.help_text,t()}),(function(){e._snackbar.error(gettext("Failed to load CAPTCHA.")),n()}))}))}},{key:"validator",value:function(){return[]}},{key:"component",value:function(e){return(0,s.Z)(p.Z,{label:this.question,for:"id_captcha",labelClass:e.labelClass||"",controlClass:e.controlClass||"",validation:e.form.state.errors.captcha,helpText:this.helpText||null},void 0,(0,s.Z)("input",{"aria-describedby":"id_captcha_status",className:"form-control",disabled:e.form.state.isLoading,id:"id_captcha",onChange:e.form.bindInput("captcha"),type:"text",value:e.form.state.captcha}))}}]),n}(f),Z=function(e){(0,i.Z)(n,e);var t=h(n);function n(){return(0,l.Z)(this,n),t.apply(this,arguments)}return(0,c.Z)(n,[{key:"componentDidMount",value:function(){var e=this;grecaptcha.render("recaptcha",{sitekey:this.props.siteKey,callback:function(t){e.props.binding({target:{value:t}})}})}},{key:"render",value:function(){return a||(a=(0,s.Z)("div",{id:"recaptcha"}))}}]),n}(d().Component),g=function(e){(0,i.Z)(n,e);var t=h(n);function n(){return(0,l.Z)(this,n),t.apply(this,arguments)}return(0,c.Z)(n,[{key:"load",value:function(){return this._include.include("https://www.google.com/recaptcha/api.js",!0),new Promise((function(e){!function t(){"undefined"==typeof grecaptcha?window.setTimeout((function(){t()}),200):e()}()}))}},{key:"validator",value:function(){return[]}},{key:"component",value:function(e){return(0,s.Z)(p.Z,{label:gettext("Please solve the quick test"),for:"id_captcha",labelClass:e.labelClass||"",controlClass:e.controlClass||"",validation:e.form.state.errors.captcha,helpText:gettext("This test helps us prevent automated spam registrations on our site.")},void 0,(0,s.Z)(Z,{binding:e.form.bindInput("captcha"),siteKey:this._context.get("SETTINGS").recaptcha_site_key}))}}]),n}(f),b=function(){function e(){(0,l.Z)(this,e)}return(0,c.Z)(e,[{key:"init",value:function(e,t,n,a){switch(e.get("SETTINGS").captcha_type){case"no":this._captcha=new v;break;case"qa":this._captcha=new m;break;case"re":this._captcha=new g}this._captcha.init(e,t,n,a)}},{key:"load",value:function(){return this._captcha.load()}},{key:"validator",value:function(){return this._captcha.validator()}},{key:"component",value:function(e){return this._captcha.component(e)}}]),e}();t.ZP=new b},96142:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=n(19755),o=function(){function e(){(0,a.Z)(this,e)}return(0,s.Z)(e,[{key:"init",value:function(e){this._staticUrl=e,this._included=[]}},{key:"include",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];-1===this._included.indexOf(e)&&(this._included.push(e),this._include(e,t))}},{key:"_include",value:function(e,t){i.ajax({url:(t?"":this._staticUrl)+e,cache:!0,dataType:"script"})}}]),e}();t.Z=new o},62833:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=window.localStorage,o=function(){function e(){(0,a.Z)(this,e)}return(0,s.Z)(e,[{key:"init",value:function(e){var t=this;this._prefix=e,this._watchers=[],window.addEventListener("storage",(function(e){var n=JSON.parse(e.newValue);t._watchers.forEach((function(t){t.key===e.key&&e.oldValue!==e.newValue&&t.callback(n)}))}))}},{key:"set",value:function(e,t){i.setItem(this._prefix+e,JSON.stringify(t))}},{key:"get",value:function(e){var t=i.getItem(this._prefix+e);return t?JSON.parse(t):null}},{key:"watch",value:function(e,t){this._watchers.push({key:this._prefix+e,callback:t})}}]),e}();t.Z=new o},8621:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=n(4869),o=n(19755),r=function(){function e(){(0,a.Z)(this,e)}return(0,s.Z)(e,[{key:"init",value:function(e){this._element=e,this._component=null}},{key:"show",value:function(e){this._component===e?this.hide():(this._component=e,(0,i.Z)(e,this._element.id),o(this._element).addClass("open"))}},{key:"showConnected",value:function(e,t){this._component===e?this.hide():(this._component=e,(0,i.Z)(t,this._element.id,!0),o(this._element).addClass("open"))}},{key:"hide",value:function(){o(this._element).removeClass("open"),this._component=null}}]),e}();t.Z=new r},59801:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=n(73935),o=n.n(i),r=n(4869),l=n(19755),c=function(){function e(){(0,a.Z)(this,e)}return(0,s.Z)(e,[{key:"init",value:function(e){var t=this;this._element=e,this._modal=l(e).modal({show:!1}),this._modal.on("hidden.bs.modal",(function(){o().unmountComponentAtNode(t._element)}))}},{key:"show",value:function(e){(0,r.Z)(e,this._element.id),this._modal.modal("show")}},{key:"hide",value:function(){this._modal.modal("hide")}}]),e}();t.Z=new c},53328:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=function(){function e(){(0,a.Z)(this,e)}return(0,s.Z)(e,[{key:"init",value:function(e,t){this._indexTitle=e,this._forumName=t}},{key:"set",value:function(e){if(e){"string"==typeof e&&(e={title:e});var t=e.title;e.page>1&&(t+=" ("+interpolate(gettext("page: %(page)s"),{page:e.page},!0)+")"),e.parent&&(t+=" | "+e.parent),document.title=t+" | "+this._forumName}else document.title=this._indexTitle||this._forumName}}]),e}();t.Z=new i},55547:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=function(){function e(){(0,a.Z)(this,e)}return(0,s.Z)(e,[{key:"init",value:function(e,t){this._ajax=e,this._snackbar=t,this._polls={}}},{key:"start",value:function(e){var t=this;this.stop(e.poll);var n=function n(){t._polls[e.poll]=e,t._ajax.get(e.url,e.data||null).then((function(a){t._polls[e.poll]._stopped||(e.update(a),t._polls[e.poll].timeout=window.setTimeout(n,e.frequency))}),(function(n){t._polls[e.poll]._stopped||(e.error?e.error(n):t._snackbar.apiError(n))}))};e.delayed?this._polls[e.poll]={timeout:window.setTimeout(n,e.frequency)}:n()}},{key:"stop",value:function(e){this._polls[e]&&(window.clearTimeout(this._polls[e].timeout),this._polls[e]._stopped=!0)}}]),e}();t.Z=new i},27950:function(e,t,n){"use strict";n.d(t,{Z:function(){return ft}});var a=n(15671),s=n(43144),i=n(4942),o=n(57588),r=n.n(o),l=n(73935),c=n.n(l),u=n(91876),d=n(22928),p=n(97326),h=n(79340),f=n(6215),v=n(61120),m=n(57026),Z=n(87462);var g,b,y,_=function(e){(0,h.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function r(){var e;(0,a.Z)(this,r);for(var t=arguments.length,n=new Array(t),s=0;s<t;s++)n[s]=arguments[s];return e=o.call.apply(o,[this].concat(n)),(0,i.Z)((0,p.Z)(e),"onClick",(function(){e.props.replaceSelection(e.props.execAction)})),e}return(0,s.Z)(r,[{key:"render",value:function(){return(0,d.Z)("button",{className:"btn btn-icon "+this.props.className,disabled:this.props.disabled,onClick:this.onClick,title:this.props.title,type:"button"},void 0,this.props.children)}}]),r}(r().Component),N=n(19755);function k(e){return r().createElement(_,(0,Z.Z)({execAction:x,title:gettext("Insert code")},e),g||(g=(0,d.Z)("span",{className:"material-icon"},void 0,"functions")))}function x(e,t){t("\n\n```"+N.trim(prompt(gettext("Enter name of syntax of your code (optional)")+":"))+"\n"+e+"\n```\n\n")}function w(e){return r().createElement(_,(0,Z.Z)({execAction:R,title:gettext("Emphase selection")},e),b||(b=(0,d.Z)("span",{className:"material-icon"},void 0,"format_italic")))}function R(e,t){e.length&&t("*"+e+"*")}function C(e){return r().createElement(_,(0,Z.Z)({execAction:S,title:gettext("Insert horizontal ruler")},e),y||(y=(0,d.Z)("span",{className:"material-icon"},void 0,"remove")))}function S(e,t){t("\n\n- - - - -\n\n")}var E=n(19755),L=new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$","i");function P(e){return L.test(E.trim(e))}var O,T=n(19755);function A(e){return r().createElement(_,(0,Z.Z)({execAction:B,title:gettext("Insert image")},e),O||(O=(0,d.Z)("span",{className:"material-icon"},void 0,"insert_photo")))}function B(e,t){var n="",a="";e.length&&(P(e)?n=e:a=e),(n=T.trim(prompt(gettext("Enter link to image")+":",n))).length&&((a=T.trim(prompt(gettext("Enter image label (optional)")+":",a))).length>0?t("!["+a+"]("+n+")"):t("!("+n+")"))}var I,j,D,U,M=n(19755);function z(e){return r().createElement(_,(0,Z.Z)({execAction:H,title:gettext("Insert link")},e),I||(I=(0,d.Z)("span",{className:"material-icon"},void 0,"insert_link")))}function H(e,t){var n="",a="";if(e.length&&(P(e)?n=e:a=e),0===(n=M.trim(prompt(gettext("Enter link address")+":",n)||"")).length)return!1;a=M.trim(prompt(gettext("Enter link label (optional)")+":",a)),n.length&&(a.length>0?t("["+a+"]("+n+")"):t(n))}function F(e){return r().createElement(_,(0,Z.Z)({execAction:q,title:gettext("Insert spoiler")},e),j||(j=(0,d.Z)("span",{className:"material-icon"},void 0,"not_interested")))}function q(e,t){t("\n\n[spoiler]\n"+e+"\n[/spoiler]\n\n")}function Y(e){return r().createElement(_,(0,Z.Z)({execAction:V,title:gettext("Strikethrough selection")},e),D||(D=(0,d.Z)("span",{className:"material-icon"},void 0,"format_strikethrough")))}function V(e,t){e.length&&t("~~"+e+"~~")}function $(e){return r().createElement(_,(0,Z.Z)({execAction:G,title:gettext("Bolder selection")},e),U||(U=(0,d.Z)("span",{className:"material-icon"},void 0,"format_bold")))}function G(e,t){e.length&&t("**"+e+"**")}var W,K=n(19755);function J(e){return r().createElement(_,(0,Z.Z)({execAction:Q,title:gettext("Insert quote")},e),W||(W=(0,d.Z)("span",{className:"material-icon"},void 0,"format_quote")))}function Q(e,t){var n=K.trim(prompt(gettext("Enter quote autor, prefix usernames with @")+":",n));t(n?'\n\n[quote="'+n+'"]\n'+e+"\n[/quote]\n\n":"\n\n[quote]\n"+e+"\n[/quote]\n\n")}var X,ee=n(32233),te=n(89627),ne=n(48772);var ae,se=function(e){(0,h.Z)(l,e);var t,n,o=(t=l,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function l(){var e;(0,a.Z)(this,l);for(var t=arguments.length,n=new Array(t),s=0;s<t;s++)n[s]=arguments[s];return e=o.call.apply(o,[this].concat(n)),(0,i.Z)((0,p.Z)(e),"onInsert",(function(){e.props.replaceSelection(e.insertAttachment)})),(0,i.Z)((0,p.Z)(e),"insertAttachment",(function(t,n){var a=e.props.item;a.is_image?a.url.thumb?n("[!["+a.filename+"]("+a.url.thumb+")]("+a.url.index+")"):n("[!["+a.filename+"]("+a.url.index+")]("+a.url.index+")"):n("["+a.filename+"]("+a.url.index+")")})),(0,i.Z)((0,p.Z)(e),"onRemove",(function(){e.updateItem({isRemoved:!0})})),(0,i.Z)((0,p.Z)(e),"onUndo",(function(){e.updateItem({isRemoved:!1})})),(0,i.Z)((0,p.Z)(e),"updateItem",(function(t){var n=e.props.attachments.map((function(n){return n.id===e.props.item.id?Object.assign({},n,t):n}));e.props.onAttachmentsChange(n)})),e}return(0,s.Z)(l,[{key:"render",value:function(){return(0,d.Z)("li",{className:"editor-attachment-complete"},void 0,(0,d.Z)("div",{className:"row"},void 0,(0,d.Z)("div",{className:"col-xs-12 col-sm-8 col-md-9"},void 0,r().createElement(ie,this.props),(0,d.Z)("div",{className:"editor-attachment-details"},void 0,r().createElement(le,this.props),r().createElement(ce,this.props))),(0,d.Z)("div",{className:"col-xs-12 col-sm-4 col-md-3 xs-margin-top-half"},void 0,r().createElement(ue,(0,Z.Z)({onInsert:this.onInsert,onRemove:this.onRemove,onUndo:this.onUndo},this.props)))))}}]),l}(r().Component);function ie(e){return e.item.is_image?r().createElement(oe,e):r().createElement(re,e)}function oe(e){var t=e.item.url.thumb||e.item.url.index;return(0,d.Z)("div",{className:"editor-attachment-image"},void 0,(0,d.Z)("a",{href:e.item.url.index+"?shva=1",style:{backgroundImage:"url('"+t+"?shva=1')"},target:"_blank"}))}function re(e){return X||(X=(0,d.Z)("div",{className:"editor-attachment-icon"},void 0,(0,d.Z)("span",{className:"material-icon"},void 0,"insert_drive_file")))}function le(e){return(0,d.Z)("h4",{},void 0,(0,d.Z)("a",{className:"item-title",href:e.item.url.index+"?shva=1",target:"_blank"},void 0,e.item.filename))}function ce(e){var t;t=e.item.url.uploader?interpolate('<a href="%(url)s" class="item-title">%(user)s</a>',{url:(0,te.Z)(e.item.url.uploader),user:(0,te.Z)(e.item.uploader_name)},!0):interpolate('<span class="item-title">%(user)s</span>',{user:(0,te.Z)(e.item.uploader_name)},!0);var n=interpolate('<abbr title="%(absolute)s">%(relative)s</abbr>',{absolute:(0,te.Z)(e.item.uploaded_on.format("LLL")),relative:(0,te.Z)(e.item.uploaded_on.fromNow())},!0),a=interpolate((0,te.Z)(gettext("%(filetype)s, %(size)s, uploaded by %(uploader)s %(uploaded_on)s.")),{filetype:e.item.filetype,size:(0,ne.Z)(e.item.size),uploader:t,uploaded_on:n},!0);return(0,d.Z)("p",{dangerouslySetInnerHTML:{__html:a}})}function ue(e){return(0,d.Z)("div",{className:"editor-attachment-actions"},void 0,(0,d.Z)("div",{className:"row"},void 0,r().createElement(de,e),r().createElement(pe,e),r().createElement(he,e)))}function de(e){return e.item.isRemoved?null:(0,d.Z)("div",{className:"col-xs-6"},void 0,(0,d.Z)("button",{className:"btn btn-default btn-sm btn-block",onClick:e.onInsert,type:"button"},void 0,gettext("Insert")))}function pe(e){return e.item.isRemoved&&e.item.acl.can_delete?null:(0,d.Z)("div",{className:"col-xs-6"},void 0,(0,d.Z)("button",{className:"btn btn-default btn-sm btn-block",onClick:e.onRemove,type:"button"},void 0,gettext("Remove")))}function he(e){return e.item.isRemoved?(0,d.Z)("div",{className:"col-xs-12"},void 0,(0,d.Z)("button",{className:"btn btn-default btn-sm btn-block",onClick:e.onUndo,type:"button"},void 0,gettext("Undo removal"))):null}var fe=function(e){(0,h.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function r(){var e;(0,a.Z)(this,r);for(var t=arguments.length,n=new Array(t),s=0;s<t;s++)n[s]=arguments[s];return e=o.call.apply(o,[this].concat(n)),(0,i.Z)((0,p.Z)(e),"onClick",(function(){var t=e.props.attachments.filter((function(t){return t.key!==e.props.item.key}));e.props.onAttachmentsChange(t)})),e}return(0,s.Z)(r,[{key:"render",value:function(){var e=interpolate("<strong>%(name)s</strong>",{name:(0,te.Z)(this.props.item.filename)},!0),t=interpolate(gettext("Error uploading %(filename)s"),{filename:e,progress:this.props.item.progress+"%"},!0);return(0,d.Z)("li",{className:"editor-attachment-error"},void 0,ae||(ae=(0,d.Z)("div",{className:"editor-attachment-error-icon"},void 0,(0,d.Z)("span",{className:"material-icon"},void 0,"warning"))),(0,d.Z)("div",{className:"editor-attachment-error-message"},void 0,(0,d.Z)("h4",{dangerouslySetInnerHTML:{__html:t+":"}}),(0,d.Z)("p",{},void 0,this.props.item.error),(0,d.Z)("button",{className:"btn btn-default btn-sm",onClick:this.onClick,type:"button"},void 0,gettext("Dismiss"))))}}]),r}(r().Component);function ve(e){var t=interpolate("<strong>%(name)s</strong>",{name:(0,te.Z)(e.item.filename)},!0),n=interpolate(gettext("Uploading %(filename)s... %(progress)s"),{filename:t,progress:e.item.progress+"%"},!0);return(0,d.Z)("li",{className:"editor-attachment-upload"},void 0,(0,d.Z)("div",{className:"editor-attachment-progress-bar"},void 0,(0,d.Z)("div",{className:"editor-attachment-progress",style:{width:e.item.progress+"%"}})),(0,d.Z)("p",{className:"editor-attachment-upload-message",dangerouslySetInnerHTML:{__html:n}}))}function me(e){return e.item.id?r().createElement(se,e):e.item.error?r().createElement(fe,e):r().createElement(ve,e)}function Ze(e){return(0,d.Z)("ul",{className:"list-unstyled editor-attachments-list"},void 0,e.attachments.map((function(t){return r().createElement(me,(0,Z.Z)({item:t,key:t.id||t.key},e))})))}var ge=n(30381),be=n.n(ge),ye=n(78657),_e=n(53904);var Ne,ke=function(e){(0,h.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function r(){var e;(0,a.Z)(this,r);for(var t=arguments.length,n=new Array(t),s=0;s<t;s++)n[s]=arguments[s];return e=o.call.apply(o,[this].concat(n)),(0,i.Z)((0,p.Z)(e),"onChange",(function(t){var n=t.target.files[0];if(n){var a={id:null,key:xe(),progress:0,error:null,filename:n.name};e.props.onAttachmentsChange([a].concat(e.props.attachments));var s=new FormData;s.append("upload",n),ye.Z.upload(ee.Z.get("ATTACHMENTS_API"),s,(function(t){a.progress=t,e.props.onAttachmentsChange(e.props.attachments.concat())})).then((function(t){t.uploaded_on=be()(t.uploaded_on),Object.assign(a,t),e.props.onAttachmentsChange(e.props.attachments.concat())}),(function(t){400===t.status||413===t.status?(a.error=t.detail,e.props.onAttachmentsChange(e.props.attachments.concat())):_e.Z.apiError(t)}))}})),e}return(0,s.Z)(r,[{key:"render",value:function(){return(0,d.Z)("input",{id:"editor-upload-field",onChange:this.onChange,type:"file"})}}]),r}(r().Component);function xe(){return"upld-"+Math.round((new Date).getTime())}function we(e){return ee.Z.get("user").acl.max_attachment_size?(0,d.Z)("div",{className:"editor-attachments"},void 0,r().createElement(Ze,e),r().createElement(ke,e)):null}var Re,Ce=function(e){(0,h.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function r(){var e;(0,a.Z)(this,r);for(var t=arguments.length,n=new Array(t),s=0;s<t;s++)n[s]=arguments[s];return e=o.call.apply(o,[this].concat(n)),(0,i.Z)((0,p.Z)(e),"onClick",(function(){document.getElementById("editor-upload-field").click()})),e}return(0,s.Z)(r,[{key:"render",value:function(){return ee.Z.get("user").acl.max_attachment_size?(0,d.Z)("button",{className:"btn btn-icon "+this.props.className,disabled:this.props.disabled,onClick:this.onClick,title:gettext("Upload file"),type:"button"},void 0,Ne||(Ne=(0,d.Z)("span",{className:"material-icon"},void 0,"file_upload"))):null}}]),r}(r().Component),Se=n(69092);function Ee(e){return(0,d.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,d.Z)("div",{className:"modal-content"},void 0,(0,d.Z)("div",{className:"modal-header"},void 0,(0,d.Z)("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,Re||(Re=(0,d.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,d.Z)("h4",{className:"modal-title"},void 0,gettext("Preview message"))),(0,d.Z)("div",{className:"modal-body markup-preview"},void 0,(0,d.Z)(Se.Z,{markup:e.markup}))))}var Le=n(19755),Pe="editor-textarea";function Oe(){return document.getElementById(Pe)}function Te(e,t){return{start:e,end:t}}function Ae(){var e=Oe();if(document.selection){e.focus();var t=document.selection.createRange(),n=t.text.length;return t.moveStart("character",-e.value.length),Te(t.text.length-n,t.text.length)}if(e.selectionStart||"0"==e.selectionStart)return Te(e.selectionStart,e.selectionEnd)}function Be(e,t){var n=Oe(),a=n.value,s=a.substring(0,e.start);return n.value=a.substring(0,e.start)+t+a.substring(e.end),function(e){var t=Oe();if(t.setSelectionRange)t.focus(),t.setSelectionRange(e.start,e.end);else if(t.createTextRange){var n=t.createTextRange();n.collapse(!0),n.moveStart("character",e.start),n.moveEnd("character",e.end),n.select()}}(Te(s.length+t.length,s.length+t.length)),n.value}var Ie,je=n(82211),De=n(59801),Ue=n(19755);var Me=function(e){(0,h.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function r(e){var t;return(0,a.Z)(this,r),t=o.call(this,e),(0,i.Z)((0,p.Z)(t),"onPreviewClick",(function(){t.state.isPreviewLoading||(t.setState({isPreviewLoading:!0}),ye.Z.post(ee.Z.get("PARSE_MARKUP_API"),{post:t.props.value}).then((function(e){De.Z.show((0,d.Z)(Ee,{markup:e.parsed})),t.setState({isPreviewLoading:!1})}),(function(e){400===e.status?_e.Z.error(e.detail):_e.Z.apiError(e),t.setState({isPreviewLoading:!1})})))})),(0,i.Z)((0,p.Z)(t),"replaceSelection",(function(e){var n;e((n=Ae(),Le.trim(document.getElementById(Pe).value.substring(n.start,n.end))),t._replaceSelection)})),(0,i.Z)((0,p.Z)(t),"_replaceSelection",(function(e){var n;t.props.onChange({target:{value:(n=e,Be(Ae(),n))}})})),t.state={isPreviewLoading:!1},t}return(0,s.Z)(r,[{key:"componentDidMount",value:function(){var e=this;Ue("#editor-textarea").atwho({at:"@",displayTpl:'<li><img src="${avatar}" alt="">${username}</li>',insertTpl:"@${username}",searchKey:"username",callbacks:{remoteFilter:function(e,t){Ue.getJSON(ee.Z.get("MENTION_API"),{q:e},t)}}}),Ue("#editor-textarea").on("inserted.atwho",(function(t,n,a){e.props.onChange(t)}))}},{key:"render",value:function(){return(0,d.Z)("div",{className:"editor-border"},void 0,(0,d.Z)("textarea",{className:"form-control",value:this.props.value,disabled:this.props.loading,id:"editor-textarea",onChange:this.props.onChange,rows:"9"}),(0,d.Z)("div",{className:"editor-footer"},void 0,(0,d.Z)("div",{className:"buttons-list pull-left"},void 0,(0,d.Z)($,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,replaceSelection:this.replaceSelection}),(0,d.Z)(w,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,replaceSelection:this.replaceSelection}),(0,d.Z)(Y,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,replaceSelection:this.replaceSelection}),(0,d.Z)(C,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,replaceSelection:this.replaceSelection}),(0,d.Z)(z,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,replaceSelection:this.replaceSelection}),(0,d.Z)(A,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,replaceSelection:this.replaceSelection}),(0,d.Z)(J,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,replaceSelection:this.replaceSelection}),(0,d.Z)(F,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,replaceSelection:this.replaceSelection}),(0,d.Z)(k,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,replaceSelection:this.replaceSelection}),(0,d.Z)(Ce,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading})),(0,d.Z)(je.Z,{className:"btn-default btn-sm pull-left",disabled:this.props.loading||this.state.isPreviewLoading,onClick:this.onPreviewClick,type:"button"},void 0,gettext("Preview")),(0,d.Z)(je.Z,{className:"btn-primary btn-sm pull-right",loading:this.props.loading},void 0,this.props.submitLabel||gettext("Post")),(0,d.Z)("button",{className:"btn btn-default btn-sm pull-right",disabled:this.props.loading,onClick:this.props.onCancel,type:"button"},void 0,gettext("Cancel")),Ie||(Ie=(0,d.Z)("div",{className:"clearfix visible-xs-block"})),(0,d.Z)(ze,{canProtect:this.props.canProtect,disabled:this.props.loading,onProtect:this.props.onProtect,onUnprotect:this.props.onUnprotect,protect:this.props.protect})),(0,d.Z)(we,{attachments:this.props.attachments,onAttachmentsChange:this.props.onAttachmentsChange,placeholder:this.props.placeholder,replaceSelection:this.replaceSelection}))}}]),r}(r().Component);function ze(e){if(!e.canProtect)return null;var t=e.protect?gettext("Protected"):gettext("Protect");return(0,d.Z)("button",{className:"btn btn-icon btn-default btn-protect btn-sm pull-right",disabled:e.disabled,onClick:e.protect?e.onUnprotect:e.onProtect,title:t,type:"button"},void 0,(0,d.Z)("span",{className:"material-icon"},void 0,e.protect?"lock":"lock_outline"),(0,d.Z)("span",{className:"btn-text hidden-md hidden-lg"},void 0,t))}var He=n(43345);function Fe(e){return(0,d.Z)("div",{className:e.className},void 0,(0,d.Z)("div",{className:"container"},void 0,e.children))}var qe,Ye,Ve=n(37848);function $e(e){return qe||(qe=(0,d.Z)(Fe,{className:"posting-loader"},void 0,(0,d.Z)(Ve.Z,{})))}function Ge(e){return(0,d.Z)(Fe,{className:"posting-message"},void 0,(0,d.Z)("div",{className:"message-body"},void 0,(0,d.Z)("p",{},void 0,Ye||(Ye=(0,d.Z)("span",{className:"material-icon"},void 0,"error_outline")),e.message),(0,d.Z)("button",{type:"button",className:"btn btn-default",onClick:ft.close},void 0,gettext("Dismiss"))))}function We(e){if(!e.showOptions)return null;var t=e.columns,n="col-xs-12 xs-margin-top";n+=1===t?" col-sm-2":" sm-margin-top",n+=3===t?" col-md-3":" col-md-2",n+=" posting-options";var a="col-xs-"+12/t,s="btn-text";return s+=3===t?" visible-sm-inline-block":2===t?" hidden-md hidden-lg":" hidden-sm",(0,d.Z)("div",{className:n},void 0,(0,d.Z)("div",{className:"row"},void 0,(0,d.Z)(Qe,{className:a,disabled:e.disabled,onPinGlobally:e.onPinGlobally,onPinLocally:e.onPinLocally,onUnpin:e.onUnpin,pin:e.pin,show:e.options.pin,textClassName:s}),(0,d.Z)(Je,{className:a,disabled:e.disabled,hide:e.hide,onHide:e.onHide,onUnhide:e.onUnhide,show:e.options.hide,textClassName:s}),(0,d.Z)(Ke,{className:a,close:e.close,disabled:e.disabled,onClose:e.onClose,onOpen:e.onOpen,show:e.options.close,textClassName:s})))}function Ke(e){if(!e.show)return null;var t=e.close?gettext("Closed"):gettext("Open");return(0,d.Z)("div",{className:e.className},void 0,(0,d.Z)("button",{className:"btn btn-default btn-block",disabled:e.disabled,onClick:e.close?e.onOpen:e.onClose,title:t,type:"button"},void 0,(0,d.Z)("span",{className:"material-icon"},void 0,e.close?"lock":"lock_outline"),(0,d.Z)("span",{className:e.textClassName},void 0,t)))}function Je(e){if(!e.show)return null;var t=e.hide?gettext("Hidden"):gettext("Not hidden");return(0,d.Z)("div",{className:e.className},void 0,(0,d.Z)("button",{className:"btn btn-default btn-block",disabled:e.disabled,onClick:e.hide?e.onUnhide:e.onHide,title:t,type:"button"},void 0,(0,d.Z)("span",{className:"material-icon"},void 0,e.hide?"visibility_off":"visibility"),(0,d.Z)("span",{className:e.textClassName},void 0,t)))}function Qe(e){if(!e.show)return null;var t=null,n=null,a=null;switch(e.pin){case 0:t="radio_button_unchecked",n=e.onPinLocally,a=gettext("Unpinned");break;case 1:t="bookmark_outline",n=e.onPinGlobally,a=gettext("Pinned locally"),n=2==e.show?e.onPinGlobally:e.onUnpin;break;case 2:t="bookmark",n=e.onUnpin,a=gettext("Pinned globally")}return(0,d.Z)("div",{className:e.className},void 0,(0,d.Z)("button",{className:"btn btn-default btn-block",disabled:e.disabled,onClick:n,title:a,type:"button"},void 0,(0,d.Z)("span",{className:"material-icon"},void 0,t),(0,d.Z)("span",{className:e.textClassName},void 0,a)))}function Xe(e){var t=e.filter((function(e){return e.id&&!e.isRemoved}));return t.map((function(e){return e.id}))}function et(e){return e.map((function(e){return Object.assign({},e,{uploaded_on:be()(e.uploaded_on)})}))}var tt,nt=n(12891);var at=function(e){(0,h.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function r(e){var t;return(0,a.Z)(this,r),t=o.call(this,e),(0,i.Z)((0,p.Z)(t),"loadSuccess",(function(e){var n=null,a=!1,s=null,i=e.map((function(e){return!1===e.post||n&&e.id!=t.state.category||(n=e.id,s=e.post),e.post&&(e.post.close||e.post.hide||e.post.pin)&&(a=!0),Object.assign(e,{disabled:!1===e.post,label:e.name,value:e.id})}));t.setState({isReady:!0,showOptions:a,categories:i,category:n,categoryOptions:s})})),(0,i.Z)((0,p.Z)(t),"loadError",(function(e){t.setState({isErrored:e.detail})})),(0,i.Z)((0,p.Z)(t),"onCancel",(function(){window.confirm(gettext("Are you sure you want to discard thread?"))&&ft.close()})),(0,i.Z)((0,p.Z)(t),"onTitleChange",(function(e){t.changeValue("title",e.target.value)})),(0,i.Z)((0,p.Z)(t),"onCategoryChange",(function(e){var n=t.state.categories.find((function(t){return e.target.value==t.value})),a=t.state.pin;n.post.pin&&n.post.pin<a&&(a=n.post.pin),t.setState({category:n.id,categoryOptions:n.post,pin:a})})),(0,i.Z)((0,p.Z)(t),"onPostChange",(function(e){t.changeValue("post",e.target.value)})),(0,i.Z)((0,p.Z)(t),"onAttachmentsChange",(function(e){t.setState({attachments:e})})),(0,i.Z)((0,p.Z)(t),"onClose",(function(){t.changeValue("close",!0)})),(0,i.Z)((0,p.Z)(t),"onOpen",(function(){t.changeValue("close",!1)})),(0,i.Z)((0,p.Z)(t),"onPinGlobally",(function(){t.changeValue("pin",2)})),(0,i.Z)((0,p.Z)(t),"onPinLocally",(function(){t.changeValue("pin",1)})),(0,i.Z)((0,p.Z)(t),"onUnpin",(function(){t.changeValue("pin",0)})),(0,i.Z)((0,p.Z)(t),"onHide",(function(){t.changeValue("hide",!0)})),(0,i.Z)((0,p.Z)(t),"onUnhide",(function(){t.changeValue("hide",!1)})),t.state={isReady:!1,isLoading:!1,isErrored:!1,showOptions:!1,categoryOptions:null,title:"",category:e.category||null,categories:[],post:"",attachments:[],close:!1,hide:!1,pin:0,validators:{title:(0,nt.jn)(),post:(0,nt.Jh)()},errors:{}},t}return(0,s.Z)(r,[{key:"componentDidMount",value:function(){ye.Z.get(this.props.config).then(this.loadSuccess,this.loadError)}},{key:"clean",value:function(){if(!this.state.title.trim().length)return _e.Z.error(gettext("You have to enter thread title.")),!1;if(!this.state.post.trim().length)return _e.Z.error(gettext("You have to enter a message.")),!1;var e=this.validate();return e.title?(_e.Z.error(e.title[0]),!1):!e.post||(_e.Z.error(e.post[0]),!1)}},{key:"send",value:function(){return ye.Z.post(this.props.submit,{title:this.state.title,category:this.state.category,post:this.state.post,attachments:Xe(this.state.attachments),close:this.state.close,hide:this.state.hide,pin:this.state.pin})}},{key:"handleSuccess",value:function(e){_e.Z.success(gettext("Your thread has been posted.")),window.location=e.url,this.setState({isLoading:!0})}},{key:"handleError",value:function(e){if(400===e.status){var t=[].concat(e.non_field_errors||[],e.category||[],e.title||[],e.post||[],e.attachments||[]);_e.Z.error(t[0])}else _e.Z.apiError(e)}},{key:"render",value:function(){if(this.state.isErrored)return(0,d.Z)(Ge,{message:this.state.isErrored});if(!this.state.isReady)return tt||(tt=(0,d.Z)($e,{}));var e=0;this.state.categoryOptions.close&&(e+=1),this.state.categoryOptions.hide&&(e+=1),this.state.categoryOptions.pin&&(e+=1);var t=null;return t=1===e?"col-sm-6":"col-sm-8",t+=3===e?" col-md-6":e?" col-md-7":" col-md-9",(0,d.Z)(Fe,{className:"posting-form",withFirstRow:!0},void 0,(0,d.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,d.Z)("div",{className:"row first-row"},void 0,(0,d.Z)("div",{className:t},void 0,(0,d.Z)("input",{className:"form-control",disabled:this.state.isLoading,onChange:this.onTitleChange,placeholder:gettext("Thread title"),type:"text",value:this.state.title})),(0,d.Z)("div",{className:"col-xs-12 col-sm-4 col-md-3 xs-margin-top"},void 0,(0,d.Z)(m.Z,{choices:this.state.categories,disabled:this.state.isLoading,onChange:this.onCategoryChange,value:this.state.category})),(0,d.Z)(We,{close:this.state.close,columns:e,disabled:this.state.isLoading,hide:this.state.hide,onClose:this.onClose,onHide:this.onHide,onOpen:this.onOpen,onPinGlobally:this.onPinGlobally,onPinLocally:this.onPinLocally,onUnhide:this.onUnhide,onUnpin:this.onUnpin,options:this.state.categoryOptions,pin:this.state.pin,showOptions:this.state.showOptions})),(0,d.Z)("div",{className:"row"},void 0,(0,d.Z)("div",{className:"col-md-12"},void 0,(0,d.Z)(Me,{attachments:this.state.attachments,loading:this.state.isLoading,onAttachmentsChange:this.onAttachmentsChange,onCancel:this.onCancel,onChange:this.onPostChange,submitLabel:gettext("Post thread"),value:this.state.post})))))}}]),r}(He.Z);function st(e){var t=e.split(",").map((function(e){return e.trim().toLowerCase()})).filter((function(e){return e.length>0}));return t.filter((function(e,n){return t.indexOf(e)==n}))}var it,ot=function(e){(0,h.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function r(e){var t;(0,a.Z)(this,r),t=o.call(this,e),(0,i.Z)((0,p.Z)(t),"onCancel",(function(){window.confirm(gettext("Are you sure you want to discard private thread?"))&&ft.close()})),(0,i.Z)((0,p.Z)(t),"onToChange",(function(e){t.changeValue("to",e.target.value)})),(0,i.Z)((0,p.Z)(t),"onTitleChange",(function(e){t.changeValue("title",e.target.value)})),(0,i.Z)((0,p.Z)(t),"onPostChange",(function(e){t.changeValue("post",e.target.value)})),(0,i.Z)((0,p.Z)(t),"onAttachmentsChange",(function(e){t.setState({attachments:e})}));var n=(e.to||[]).map((function(e){return e.username})).join(", ");return t.state={isLoading:!1,to:n,title:"",post:"",attachments:[],validators:{title:(0,nt.jn)(),post:(0,nt.Jh)()},errors:{}},t}return(0,s.Z)(r,[{key:"clean",value:function(){if(!st(this.state.to).length)return _e.Z.error(gettext("You have to enter at least one recipient.")),!1;if(!this.state.title.trim().length)return _e.Z.error(gettext("You have to enter thread title.")),!1;if(!this.state.post.trim().length)return _e.Z.error(gettext("You have to enter a message.")),!1;var e=this.validate();return e.title?(_e.Z.error(e.title[0]),!1):!e.post||(_e.Z.error(e.post[0]),!1)}},{key:"send",value:function(){return ye.Z.post(this.props.submit,{to:st(this.state.to),title:this.state.title,post:this.state.post,attachments:Xe(this.state.attachments)})}},{key:"handleSuccess",value:function(e){_e.Z.success(gettext("Your thread has been posted.")),window.location=e.url,this.setState({isLoading:!0})}},{key:"handleError",value:function(e){if(400===e.status){var t=[].concat(e.non_field_errors||[],e.to||[],e.title||[],e.post||[],e.attachments||[]);_e.Z.error(t[0])}else _e.Z.apiError(e)}},{key:"render",value:function(){return(0,d.Z)(Fe,{className:"posting-form",withFirstRow:!0},void 0,(0,d.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,d.Z)("div",{className:"row first-row"},void 0,(0,d.Z)("div",{className:"col-xs-12"},void 0,(0,d.Z)("input",{className:"form-control",disabled:this.state.isLoading,onChange:this.onToChange,placeholder:gettext("Comma separated list of user names, eg.: Danny, Lisa"),type:"text",value:this.state.to}))),(0,d.Z)("div",{className:"row first-row"},void 0,(0,d.Z)("div",{className:"col-xs-12"},void 0,(0,d.Z)("input",{className:"form-control",disabled:this.state.isLoading,onChange:this.onTitleChange,placeholder:gettext("Thread title"),type:"text",value:this.state.title}))),(0,d.Z)("div",{className:"row"},void 0,(0,d.Z)("div",{className:"col-xs-12"},void 0,(0,d.Z)(Me,{attachments:this.state.attachments,loading:this.state.isLoading,onAttachmentsChange:this.onAttachmentsChange,onCancel:this.onCancel,onChange:this.onPostChange,submitLabel:gettext("Post thread"),value:this.state.post})))))}}]),r}(He.Z);var rt,lt=function(e){(0,h.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function r(e){var t;return(0,a.Z)(this,r),t=o.call(this,e),(0,i.Z)((0,p.Z)(t),"loadSuccess",(function(e){t.setState({isReady:!0,post:e.post?'[quote="@'+e.poster+'"]\n'+e.post+"\n[/quote]":""})})),(0,i.Z)((0,p.Z)(t),"loadError",(function(e){t.setState({isErrored:e.detail})})),(0,i.Z)((0,p.Z)(t),"appendData",(function(e){var n=e.post?'[quote="@'+e.poster+'"]\n'+e.post+"\n[/quote]\n\n":"";t.setState((function(e,t){return e.post.length>0?{post:e.post+"\n\n"+n}:{post:n}}))})),(0,i.Z)((0,p.Z)(t),"onCancel",(function(){window.confirm(gettext("Are you sure you want to discard your reply?"))&&ft.close()})),(0,i.Z)((0,p.Z)(t),"onPostChange",(function(e){t.changeValue("post",e.target.value)})),(0,i.Z)((0,p.Z)(t),"onAttachmentsChange",(function(e){t.setState({attachments:e})})),t.state={isReady:!1,isLoading:!1,isErrored:!1,post:"",attachments:[],validators:{post:(0,nt.Jh)()},errors:{}},t}return(0,s.Z)(r,[{key:"componentDidMount",value:function(){ye.Z.get(this.props.config,this.props.context||null).then(this.loadSuccess,this.loadError)}},{key:"componentWillReceiveProps",value:function(e){var t=this.props.context,n=e.context;t&&n&&t.reply===n.reply||ye.Z.get(e.config,e.context||null).then(this.appendData,_e.Z.apiError)}},{key:"clean",value:function(){if(!this.state.post.trim().length)return _e.Z.error(gettext("You have to enter a message.")),!1;var e=this.validate();return!e.post||(_e.Z.error(e.post[0]),!1)}},{key:"send",value:function(){return ye.Z.post(this.props.submit,{post:this.state.post,attachments:Xe(this.state.attachments)})}},{key:"handleSuccess",value:function(e){_e.Z.success(gettext("Your reply has been posted.")),window.location=e.url.index,this.setState({isLoading:!0})}},{key:"handleError",value:function(e){if(400===e.status){var t=[].concat(e.non_field_errors||[],e.post||[],e.attachments||[]);_e.Z.error(t[0])}else _e.Z.apiError(e)}},{key:"render",value:function(){return this.state.isReady?(0,d.Z)(Fe,{className:"posting-form"},void 0,(0,d.Z)("form",{onSubmit:this.handleSubmit,method:"POST"},void 0,(0,d.Z)("div",{className:"row"},void 0,(0,d.Z)("div",{className:"col-md-12"},void 0,(0,d.Z)(Me,{attachments:this.state.attachments,loading:this.state.isLoading,onAttachmentsChange:this.onAttachmentsChange,onCancel:this.onCancel,onChange:this.onPostChange,submitLabel:gettext("Post reply"),value:this.state.post}))))):this.state.isErrored?(0,d.Z)(Ge,{message:this.state.isErrored}):it||(it=(0,d.Z)($e,{}))}}]),r}(He.Z);var ct=function(e){(0,h.Z)(r,e);var t,n,o=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,v.Z)(t);if(n){var s=(0,v.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,f.Z)(this,e)});function r(e){var t;return(0,a.Z)(this,r),t=o.call(this,e),(0,i.Z)((0,p.Z)(t),"loadSuccess",(function(e){t.setState({isReady:!0,post:e.post,attachments:et(e.attachments),protect:e.is_protected,canProtect:e.can_protect})})),(0,i.Z)((0,p.Z)(t),"loadError",(function(e){t.setState({isErrored:e.detail})})),(0,i.Z)((0,p.Z)(t),"onCancel",(function(){window.confirm(gettext("Are you sure you want to discard changes?"))&&ft.close()})),(0,i.Z)((0,p.Z)(t),"onProtect",(function(){t.setState({protect:!0})})),(0,i.Z)((0,p.Z)(t),"onUnprotect",(function(){t.setState({protect:!1})})),(0,i.Z)((0,p.Z)(t),"onPostChange",(function(e){t.changeValue("post",e.target.value)})),(0,i.Z)((0,p.Z)(t),"onAttachmentsChange",(function(e){t.setState({attachments:e})})),t.state={isReady:!1,isLoading:!1,isErrored:!1,post:"",attachments:[],protect:!1,canProtect:!1,validators:{post:(0,nt.Jh)()},errors:{}},t}return(0,s.Z)(r,[{key:"componentDidMount",value:function(){ye.Z.get(this.props.config).then(this.loadSuccess,this.loadError)}},{key:"clean",value:function(){if(!this.state.post.trim().length)return _e.Z.error(gettext("You have to enter a message.")),!1;var e=this.validate();return!e.post||(_e.Z.error(e.post[0]),!1)}},{key:"send",value:function(){return ye.Z.put(this.props.submit,{post:this.state.post,attachments:Xe(this.state.attachments),protect:this.state.protect})}},{key:"handleSuccess",value:function(e){_e.Z.success(gettext("Reply has been edited.")),window.location=e.url.index,this.setState({isLoading:!0})}},{key:"handleError",value:function(e){if(400===e.status){var t=[].concat(e.non_field_errors||[],e.category||[],e.title||[],e.post||[],e.attachments||[]);_e.Z.error(t[0])}else _e.Z.apiError(e)}},{key:"render",value:function(){return this.state.isReady?(0,d.Z)(Fe,{className:"posting-form"},void 0,(0,d.Z)("form",{onSubmit:this.handleSubmit,method:"POST"},void 0,(0,d.Z)("div",{className:"row"},void 0,(0,d.Z)("div",{className:"col-md-12"},void 0,(0,d.Z)(Me,{attachments:this.state.attachments,canProtect:this.state.canProtect,loading:this.state.isLoading,onAttachmentsChange:this.onAttachmentsChange,onCancel:this.onCancel,onChange:this.onPostChange,onProtect:this.onProtect,onUnprotect:this.onUnprotect,protect:this.state.protect,submitLabel:gettext("Edit reply"),value:this.state.post}))))):this.state.isErrored?(0,d.Z)(Ge,{message:this.state.isErrored}):rt||(rt=(0,d.Z)($e,{}))}}]),r}(He.Z);function ut(e){return"START"===e.mode?r().createElement(at,e):"START_PRIVATE"===e.mode?r().createElement(ot,e):"REPLY"===e.mode?r().createElement(lt,e):"EDIT"===e.mode?r().createElement(ct,e):null}var dt=n(4869),pt=n(19755),ht=function(){function e(){var t=this;(0,a.Z)(this,e),(0,i.Z)(this,"close",(function(){t._isOpen&&!t._isClosing&&(t._isClosing=!0,t._placeholder.removeClass("slide-in"),window.setTimeout((function(){c().unmountComponentAtNode(document.getElementById("posting-mount")),t._isClosing=!1,t._isOpen=!1}),300))}))}return(0,s.Z)(e,[{key:"init",value:function(e,t,n){this._ajax=e,this._snackbar=t,this._placeholder=pt(n),this._mode=null,this._isOpen=!1,this._isClosing=!1}},{key:"open",value:function(e){if(!1===this._isOpen)this._mode=e.mode,this._isOpen=e.submit,this._realOpen(e);else if(this._isOpen!==e.submit){var t=gettext("You are already working on other message. Do you want to discard it?");"POLL"==this._mode&&(t=gettext("You are already working on a poll. Do you want to discard it?")),window.confirm(t)&&(this._mode=e.mode,this._isOpen=e.submit,this._realOpen(e))}else"REPLY"==this._mode&&"REPLY"==e.mode&&this._realOpen(e)}},{key:"_realOpen",value:function(e){"POLL"==e.mode?(0,dt.Z)(r().createElement(u.y,e),"posting-mount"):(0,dt.Z)(r().createElement(ut,e),"posting-mount"),this._placeholder.addClass("slide-in"),pt("html, body").animate({scrollTop:this._placeholder.offset().top},1e3)}}]),e}(),ft=new ht},53904:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=n(27346),o=function(){function e(){(0,a.Z)(this,e)}return(0,s.Z)(e,[{key:"init",value:function(e){this._store=e,this._timeout=null}},{key:"alert",value:function(e,t){var n=this;this._timeout?(window.clearTimeout(this._timeout),this._store.dispatch((0,i.p2)()),this._timeout=window.setTimeout((function(){n._timeout=null,n.alert(e,t)}),300)):(this._store.dispatch((0,i.OV)(e,t)),this._timeout=window.setTimeout((function(){n._store.dispatch((0,i.p2)()),n._timeout=null}),5e3))}},{key:"info",value:function(e){this.alert(e,"info")}},{key:"success",value:function(e){this.alert(e,"success")}},{key:"warning",value:function(e){this.alert(e,"warning")}},{key:"error",value:function(e){this.alert(e,"error")}},{key:"apiError",value:function(e){var t=e.detail;t||(t=404===e.status?gettext("Action link is invalid."):gettext("Unknown error has occured.")),403===e.status&&"Permission denied"===t&&(t=gettext("You don't have permission to perform this action.")),this.error(t)}}]),e}();t.Z=new o},90287:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=n(41438),o=function(){function e(){(0,a.Z)(this,e),this._store=null,this._reducers={},this._initialState={}}return(0,s.Z)(e,[{key:"addReducer",value:function(e,t,n){this._reducers[e]=t,this._initialState[e]=n}},{key:"init",value:function(){this._store=(0,i.createStore)((0,i.combineReducers)(this._reducers),this._initialState)}},{key:"getStore",value:function(){return this._store}},{key:"getState",value:function(){return this._store.getState()}},{key:"dispatch",value:function(e){return this._store.dispatch(e)}}]),e}();t.Z=new o},59940:function(e,t,n){"use strict";var a=n(15671),s=n(43144),i=function(){function e(){(0,a.Z)(this,e)}return(0,s.Z)(e,[{key:"init",value:function(e){this._include=e,this._isLoaded=!1}},{key:"scorePassword",value:function(e,t){return this._isLoaded?zxcvbn(e,t).score:0}},{key:"load",value:function(){return this._isLoaded?this._loadedPromise():(this._include.include("misago/js/zxcvbn.js"),this._loadingPromise())}},{key:"_loadingPromise",value:function(){var e=this;return new Promise((function(t,n){!function a(){var s=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;(s+=1)>200?n():"undefined"==typeof zxcvbn?window.setTimeout((function(){a(s)}),200):(e._isLoaded=!0,t())}()}))}},{key:"_loadedPromise",value:function(){return new Promise((function(e){e()}))}}]),e}();t.Z=new i},93051:function(e,t,n){"use strict";n.d(t,{Z:function(){return _}});var a,s=n(22928),i=n(30381),o=n.n(i),r=n(57588),l=n.n(r),c=n(73935),u=n.n(c),d=n(37424),p=n(15671),h=n(43144),f=n(79340),v=n(6215),m=n(61120);var Z=function(e){(0,f.Z)(r,e);var t,n,i=(t=r,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=(0,m.Z)(t);if(n){var s=(0,m.Z)(this).constructor;e=Reflect.construct(a,arguments,s)}else e=a.apply(this,arguments);return(0,v.Z)(this,e)});function r(){return(0,p.Z)(this,r),i.apply(this,arguments)}return(0,h.Z)(r,[{key:"getReasonMessage",value:function(){return this.props.message.html?(0,s.Z)("div",{className:"lead",dangerouslySetInnerHTML:{__html:this.props.message.html}}):(0,s.Z)("p",{className:"lead"},void 0,this.props.message.plain)}},{key:"getExpirationMessage",value:function(){if(this.props.expires){if(this.props.expires.isAfter(o()())){var e=interpolate(gettext("This ban expires on %(expires_on)s."),{expires_on:this.props.expires.format("LL, LT")},!0),t=interpolate(gettext("This ban expires %(expires_on)s."),{expires_on:this.props.expires.fromNow()},!0);return(0,s.Z)("abbr",{title:e},void 0,t)}return gettext("This ban has expired.")}return gettext("This ban is permanent.")}},{key:"render",value:function(){return(0,s.Z)("div",{className:"page page-error page-error-banned"},void 0,(0,s.Z)("div",{className:"container"},void 0,(0,s.Z)("div",{className:"message-panel"},void 0,a||(a=(0,s.Z)("div",{className:"message-icon"},void 0,(0,s.Z)("span",{className:"material-icon"},void 0,"highlight_off"))),(0,s.Z)("div",{className:"message-body"},void 0,this.getReasonMessage(),(0,s.Z)("p",{className:"message-footnote"},void 0,this.getExpirationMessage())))))}}]),r}(l().Component),g=n(32233),b=n(90287),y=(0,d.$j)((function(e){return e.tick}))(Z);function _(e,t){if(u().render((0,s.Z)(d.zt,{store:b.Z.getStore()},void 0,(0,s.Z)(y,{message:e.message,expires:e.expires_on?o()(e.expires_on):null})),document.getElementById("page-mount")),void 0===t||t){var n=g.Z.get("SETTINGS").forum_name;document.title=gettext("You are banned")+" | "+n,window.history.pushState({},"",g.Z.get("BANNED_URL"))}}},69130:function(e,t,n){"use strict";function a(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=[],s=[];if(e.forEach((function(e){s.push(e),s.length===t&&(a.push(s),s=[])})),!1!==n&&s.length>0&&s.length<t)for(var i=s.length;i<t;i++)s.push(n);return s.length&&a.push(s),a}n.d(t,{Z:function(){return a}})},89759:function(e,t,n){"use strict";function a(e,t){var n=[];return e.concat(t).filter((function(e){return-1===n.indexOf(e.id)&&(n.push(e.id),!0)}))}n.d(t,{Z:function(){return a}})},89627:function(e,t,n){"use strict";n.d(t,{Z:function(){return s}});var a={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function s(e){return e.replace(/[&<>"']/g,(function(e){return a[e]}))}},48772:function(e,t,n){"use strict";function a(e){return e>1073741824?s(e/1073741824)+" GB":e>1048576?s(e/1048576)+" MB":e>1024?s(e/1024)+" KB":s(e)+" B"}function s(e){return e.toFixed(1)}n.d(t,{Z:function(){return a}})},4869:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var a=n(22928),s=(n(57588),n(73935)),i=n.n(s),o=n(37424),r=n(90287);function l(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=document.getElementById(t),l=e.props?e:(0,a.Z)(e,{});s&&(n?i().render((0,a.Z)(o.zt,{store:r.Z.getStore()},void 0,l),s):i().render(l,s))}},44039:function(e,t,n){"use strict";function a(e,t){return Math.floor(Math.random()*(t-e+1))+e}n.d(t,{e:function(){return a}})},39633:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var a=n(22928),s=(n(57588),n(73935)),i=n.n(s),o=n(37424),r=n(69987),l=n(90287),c=document.getElementById("page-mount");function u(e){var t={component:e.component||null,childRoutes:[]};e.root?t.childRoutes=[{path:e.root,onEnter:function(t,n){n(null,e.paths[0].path)}}].concat(e.paths):t.childRoutes=e.paths,i().render((0,a.Z)(o.zt,{store:l.Z.getStore()},void 0,(0,a.Z)(r.F0,{routes:t,history:r.mW})),c)}},20370:function(e,t,n){"use strict";function a(e,t){if(-1===e.indexOf(t)){var n=e.slice();return n.push(t),n}return e.filter((function(e){return e!==t}))}n.d(t,{ZN:function(){return a}})},55210:function(e,t,n){"use strict";n.d(t,{BS:function(){return d},C1:function(){return o},Do:function(){return c},Ei:function(){return u},HR:function(){return p},Vb:function(){return v},fT:function(){return r},gS:function(){return h},jA:function(){return l},lG:function(){return f}});var a=n(19755),s=/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i,i=new RegExp("^[0-9a-z]+$","i");function o(e){return function(t){if(!1===t||null===t||0===a.trim(t).length)return e||gettext("This field is required.")}}function r(e){var t=gettext("You have to accept the terms of service.");return o(e||t)}function l(e){var t=gettext("You have to accept the privacy policy.");return o(e||t)}function c(e){return function(t){if(!s.test(t))return e||gettext("Enter a valid email address.")}}function u(e,t){return function(n){var s="",i=a.trim(n).length;if(i<e)return s=t?t(e,i):ngettext("Ensure this value has at least %(limit_value)s character (it has %(show_value)s).","Ensure this value has at least %(limit_value)s characters (it has %(show_value)s).",e),interpolate(s,{limit_value:e,show_value:i},!0)}}function d(e,t){return function(n){var s="",i=a.trim(n).length;if(i>e)return s=t?t(e,i):ngettext("Ensure this value has at most %(limit_value)s character (it has %(show_value)s).","Ensure this value has at most %(limit_value)s characters (it has %(show_value)s).",e),interpolate(s,{limit_value:e,show_value:i},!0)}}function p(e){return u(e,(function(e){return ngettext("Username must be at least %(limit_value)s character long.","Username must be at least %(limit_value)s characters long.",e)}))}function h(e){return d(e,(function(e){return ngettext("Username cannot be longer than %(limit_value)s character.","Username cannot be longer than %(limit_value)s characters.",e)}))}function f(){return function(e){if(!i.test(a.trim(e)))return gettext("Username can only contain latin alphabet letters and digits.")}}function v(e){return function(t){var n=t.length;if(n<e){var a=ngettext("Valid password must be at least %(limit_value)s character long.","Valid password must be at least %(limit_value)s characters long.",e);return interpolate(a,{limit_value:e,show_value:n},!0)}}}},46700:function(e,t,n){var a={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":30094,"./hi.js":30094,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function s(e){var t=i(e);return n(t)}function i(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}s.keys=function(){return Object.keys(a)},s.resolve=i,e.exports=s,s.id=46700}},n={};function a(e){var s=n[e];if(void 0!==s)return s.exports;var i=n[e]={id:e,loaded:!1,exports:{}};return t[e].call(i.exports,i,i.exports,a),i.loaded=!0,i.exports}a.m=t,e=[],a.O=function(t,n,s,i){if(!n){var o=1/0;for(u=0;u<e.length;u++){n=e[u][0],s=e[u][1],i=e[u][2];for(var r=!0,l=0;l<n.length;l++)(!1&i||o>=i)&&Object.keys(a.O).every((function(e){return a.O[e](n[l])}))?n.splice(l--,1):(r=!1,i<o&&(o=i));if(r){e.splice(u--,1);var c=s();void 0!==c&&(t=c)}}return t}i=i||0;for(var u=e.length;u>0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[n,s,i]},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,{a:t}),t},a.d=function(e,t){for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.hmd=function(e){return(e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:function(){throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},function(){var e={174:0};a.O.j=function(t){return 0===e[t]};var t=function(t,n){var s,i,o=n[0],r=n[1],l=n[2],c=0;if(o.some((function(t){return 0!==e[t]}))){for(s in r)a.o(r,s)&&(a.m[s]=r[s]);if(l)var u=l(a)}for(t&&t(n);c<o.length;c++)i=o[c],a.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return a.O(u)},n=self.webpackChunkmisago=self.webpackChunkmisago||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))}(),a.O(void 0,[736],(function(){return a(32233)})),a.O(void 0,[736],(function(){return a(58339)})),a.O(void 0,[736],(function(){return a(64109)})),a.O(void 0,[736],(function(){return a(46226)})),a.O(void 0,[736],(function(){return a(93240)})),a.O(void 0,[736],(function(){return a(75147)})),a.O(void 0,[736],(function(){return a(4894)})),a.O(void 0,[736],(function(){return a(29223)})),a.O(void 0,[736],(function(){return a(3026)})),a.O(void 0,[736],(function(){return a(94795)})),a.O(void 0,[736],(function(){return a(95563)})),a.O(void 0,[736],(function(){return a(32488)})),a.O(void 0,[736],(function(){return a(11768)})),a.O(void 0,[736],(function(){return a(61323)})),a.O(void 0,[736],(function(){return a(15049)})),a.O(void 0,[736],(function(){return a(61814)})),a.O(void 0,[736],(function(){return a(95920)})),a.O(void 0,[736],(function(){return a(59203)})),a.O(void 0,[736],(function(){return a(72168)})),a.O(void 0,[736],(function(){return a(47806)})),a.O(void 0,[736],(function(){return a(77031)})),a.O(void 0,[736],(function(){return a(97751)})),a.O(void 0,[736],(function(){return a(76093)})),a.O(void 0,[736],(function(){return a(19764)})),a.O(void 0,[736],(function(){return a(47549)})),a.O(void 0,[736],(function(){return a(22331)})),a.O(void 0,[736],(function(){return a(21513)})),a.O(void 0,[736],(function(){return a(98749)})),a.O(void 0,[736],(function(){return a(98251)})),a.O(void 0,[736],(function(){return a(6720)})),a.O(void 0,[736],(function(){return a(10846)})),a.O(void 0,[736],(function(){return a(18255)})),a.O(void 0,[736],(function(){return a(14113)})),a.O(void 0,[736],(function(){return a(24444)})),a.O(void 0,[736],(function(){return a(1764)})),a.O(void 0,[736],(function(){return a(68351)})),a.O(void 0,[736],(function(){return a(81521)})),a.O(void 0,[736],(function(){return a(19984)})),a.O(void 0,[736],(function(){return a(41229)})),a.O(void 0,[736],(function(){return a(43589)})),a.O(void 0,[736],(function(){return a(24108)})),a.O(void 0,[736],(function(){return a(33934)})),a.O(void 0,[736],(function(){return a(85577)})),a.O(void 0,[736],(function(){return a(83526)})),a.O(void 0,[736],(function(){return a(43060)})),a.O(void 0,[736],(function(){return a(92292)})),a.O(void 0,[736],(function(){return a(33409)}));var s=a.O(void 0,[736],(function(){return a(31341)}));s=a.O(s)}();
 //# sourceMappingURL=misago.js.map
\ No newline at end of file
diff --git a/misago/static/misago/js/misago.js.map b/misago/static/misago/js/misago.js.map
index 0f3f9ae9fd..0b2e90d609 100644
--- a/misago/static/misago/js/misago.js.map
+++ b/misago/static/misago/js/misago.js.map
@@ -1 +1 @@
-{"version":3,"file":"misago.js","mappings":"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","sources":["webpack://misago/webpack/runtime/chunk loaded","webpack://misago/./highlight/highlight.pack.js","webpack://misago/./src/components/FlexRow/FlexRow.jsx","webpack://misago/./src/components/FlexRow/FlexRowCol.jsx","webpack://misago/./src/components/FlexRow/FlexRowSection.jsx","webpack://misago/./src/components/PageContainer.jsx","webpack://misago/./src/components/PageHeader/PageHeader.jsx","webpack://misago/./src/components/PageHeader/PageHeaderBanner.jsx","webpack://misago/./src/components/PageHeader/PageHeaderContainer.jsx","webpack://misago/./src/components/PageHeader/PageHeaderDetails.jsx","webpack://misago/./src/components/PageHeader/PageHeaderHTMLMessage.jsx","webpack://misago/./src/components/PageHeader/PageHeaderMessage.jsx","webpack://misago/./src/components/PageHeader/PageHeaderPlain.jsx","webpack://misago/./src/components/RegisterLegalFootnote.js","webpack://misago/./src/components/StartSocialAuth.js","webpack://misago/./src/components/ThreadFlags.jsx","webpack://misago/./src/components/ThreadReplies.jsx","webpack://misago/./src/components/Toolbar/Toolbar.jsx","webpack://misago/./src/components/Toolbar/ToolbarItem.jsx","webpack://misago/./src/components/Toolbar/ToolbarSection.jsx","webpack://misago/./src/components/Toolbar/ToolbarSpacer.jsx","webpack://misago/./src/components/avatar.js","webpack://misago/./src/components/button.js","webpack://misago/./src/components/category-select.js","webpack://misago/./src/components/edit-details/blankslate.js","webpack://misago/./src/components/edit-details/loader.js","webpack://misago/./src/components/edit-details/field-input.js","webpack://misago/./src/components/edit-details/fieldset.js","webpack://misago/./src/components/edit-details/form.js","webpack://misago/./src/components/edit-details/index.js","webpack://misago/./src/components/form-group.js","webpack://misago/./src/components/form.js","webpack://misago/./src/components/li.js","webpack://misago/./src/components/loader.js","webpack://misago/./src/components/merge-conflict.js","webpack://misago/./src/services/one-box.js","webpack://misago/./src/components/misago-markup.js","webpack://misago/./src/components/modal-loader.js","webpack://misago/./src/components/modal-message.js","webpack://misago/./src/components/panel-loader.js","webpack://misago/./src/components/panel-message.js","webpack://misago/./src/components/poll/results/chart.js","webpack://misago/./src/components/poll/results/modal.js","webpack://misago/./src/components/poll/results/options.js","webpack://misago/./src/components/poll/info.js","webpack://misago/./src/components/poll/results/index.js","webpack://misago/./src/components/poll/voting/help.js","webpack://misago/./src/components/poll/voting/select.js","webpack://misago/./src/components/poll/voting/utils.js","webpack://misago/./src/components/poll/voting/index.js","webpack://misago/./src/components/poll/poll.js","webpack://misago/./src/components/poll/form/choices-control.js","webpack://misago/./src/components/poll/form/index.js","webpack://misago/./src/components/post-feed/post/body.js","webpack://misago/./src/components/post-feed/post/header.js","webpack://misago/./src/components/post-feed/post/post-side/button.js","webpack://misago/./src/components/post-feed/post/post-side/anonymous.js","webpack://misago/./src/components/post-feed/post/post-side/user-title.js","webpack://misago/./src/components/post-feed/post/post-side/registered.js","webpack://misago/./src/components/post-feed/post/post-side/index.js","webpack://misago/./src/components/post-feed/post/index.js","webpack://misago/./src/components/post-feed/preview.js","webpack://misago/./src/components/post-feed/index.js","webpack://misago/./src/components/posting/utils/validators.js","webpack://misago/./src/components/select.js","webpack://misago/./src/components/sign-in.js","webpack://misago/./src/components/user-status.js","webpack://misago/./src/components/username-history/list-empty.js","webpack://misago/./src/components/username-history/change.js","webpack://misago/./src/components/username-history/list-ready.js","webpack://misago/./src/components/username-history/change-preview.js","webpack://misago/./src/components/username-history/list-preview.js","webpack://misago/./src/components/username-history/root.js","webpack://misago/./src/components/users-list/card/stats.js","webpack://misago/./src/components/users-list/card/user-title.js","webpack://misago/./src/components/users-list/card/index.js","webpack://misago/./src/components/users-list/preview/card.js","webpack://misago/./src/components/users-list/preview/index.js","webpack://misago/./src/components/users-list/index.js","webpack://misago/./src/components/with-dropdown.js","webpack://misago/./src/components/yes-no-switch.js","webpack://misago/./src/utils/ordered-list.js","webpack://misago/./src/index.js","webpack://misago/./src/initializers/ajax.js","webpack://misago/./src/initializers/auth-sync.js","webpack://misago/./src/initializers/auth.js","webpack://misago/./src/initializers/captcha.js","webpack://misago/./src/components/accept-agreement.js","webpack://misago/./src/initializers/components/accept-agreement.js","webpack://misago/./src/components/auth-message.js","webpack://misago/./src/initializers/components/auth-message.js","webpack://misago/./src/initializers/components/banned-page.js","webpack://misago/./src/components/categories/blankslate.js","webpack://misago/./src/components/categories/category/list-item/description.js","webpack://misago/./src/components/categories/category/list-item/icon.js","webpack://misago/./src/components/categories/category/list-item/main.js","webpack://misago/./src/components/categories/category/list-item/last-thread.js","webpack://misago/./src/components/categories/category/list-item/stats.js","webpack://misago/./src/components/categories/category/list-item/subcategories/list-item.js","webpack://misago/./src/components/categories/category/list-item/subcategories/index.js","webpack://misago/./src/components/categories/category/list-item/index.js","webpack://misago/./src/components/categories/category/index.js","webpack://misago/./src/components/categories/categories-list.js","webpack://misago/./src/components/categories/index.js","webpack://misago/./src/initializers/components/categories.js","webpack://misago/./src/components/options/navs.js","webpack://misago/./src/components/options/delete-account.js","webpack://misago/./src/components/options/edit-details.js","webpack://misago/./src/components/options/download-data.js","webpack://misago/./src/components/options/forum-options.js","webpack://misago/./src/components/options/change-username/form-loading.js","webpack://misago/./src/components/options/change-username/form-locked.js","webpack://misago/./src/components/options/change-username/form.js","webpack://misago/./src/components/options/change-username/root.js","webpack://misago/./src/components/options/sign-in-credentials/change-email.js","webpack://misago/./src/components/options/sign-in-credentials/change-password.js","webpack://misago/./src/components/options/sign-in-credentials/UnusablePasswordMessage.js","webpack://misago/./src/components/options/sign-in-credentials/root.js","webpack://misago/./src/components/options/root.js","webpack://misago/./src/initializers/components/options.js","webpack://misago/./src/components/profile/ban-details.js","webpack://misago/./src/components/profile/details/form.js","webpack://misago/./src/components/profile/details/empty-message.js","webpack://misago/./src/components/profile/details/field-value.js","webpack://misago/./src/components/profile/details/field.js","webpack://misago/./src/components/profile/details/group.js","webpack://misago/./src/components/profile/details/groups-list.js","webpack://misago/./src/components/profile/details/header.js","webpack://misago/./src/data/profile-details.js","webpack://misago/./src/components/profile/details/index.js","webpack://misago/./src/components/profile/feed/route.js","webpack://misago/./src/components/quick-search.js","webpack://misago/./src/components/profile/followers.js","webpack://misago/./src/components/profile/follows.js","webpack://misago/./src/components/profile/username-history.js","webpack://misago/./src/components/profile/follow-button.js","webpack://misago/./src/components/profile/message-button.js","webpack://misago/./src/components/profile/moderation/avatar-controls.js","webpack://misago/./src/components/profile/moderation/change-username.js","webpack://misago/./src/components/profile/moderation/delete-account.js","webpack://misago/./src/components/profile/moderation/nav.js","webpack://misago/./src/components/profile/ProfileDataList.jsx","webpack://misago/./src/components/profile/ProfileHeader.jsx","webpack://misago/./src/components/profile/ProfileNav.js","webpack://misago/./src/components/profile/root.js","webpack://misago/./src/components/profile/feed/index.js","webpack://misago/./src/initializers/components/profile.js","webpack://misago/./src/components/request-activation-link.js","webpack://misago/./src/initializers/components/request-activation-link.js","webpack://misago/./src/components/request-password-reset.js","webpack://misago/./src/initializers/components/request-password-reset.js","webpack://misago/./src/components/reset-password-form.js","webpack://misago/./src/initializers/components/reset-password-form.js","webpack://misago/./src/components/search/form.js","webpack://misago/./src/components/search/sidenav.js","webpack://misago/./src/components/search/page.js","webpack://misago/./src/components/search/threads/results.js","webpack://misago/./src/components/search/threads/index.js","webpack://misago/./src/components/search/users/index.js","webpack://misago/./src/components/search/index.js","webpack://misago/./src/initializers/components/search.js","webpack://misago/./src/components/snackbar.js","webpack://misago/./src/initializers/components/snackbar.js","webpack://misago/./src/components/social-auth/header.js","webpack://misago/./src/components/social-auth/register.js","webpack://misago/./src/components/social-auth/complete.js","webpack://misago/./src/components/social-auth/index.js","webpack://misago/./src/initializers/components/social-auth.js","webpack://misago/./src/components/add-participant.js","webpack://misago/./src/components/participants/add-participant.js","webpack://misago/./src/components/participants/cards-list/make-owner.js","webpack://misago/./src/components/participants/cards-list/actions.js","webpack://misago/./src/components/participants/cards-list/remove.js","webpack://misago/./src/components/participants/cards-list/card.js","webpack://misago/./src/components/participants/cards-list/index.js","webpack://misago/./src/components/participants/index.js","webpack://misago/./src/components/participants/utils.js","webpack://misago/./src/components/posts-list/event/icon.js","webpack://misago/./src/components/posts-list/event/controls.js","webpack://misago/./src/components/posts-list/event/info.js","webpack://misago/./src/components/posts-list/event/message.js","webpack://misago/./src/components/posts-list/event/unread-label.js","webpack://misago/./src/components/posts-list/waypoint.js","webpack://misago/./src/components/posts-list/event/index.js","webpack://misago/./src/components/posts-list/post/attachments/attachment.js","webpack://misago/./src/components/posts-list/post/attachments/index.js","webpack://misago/./src/components/posts-list/post/body.js","webpack://misago/./src/components/posts-list/post/flags.js","webpack://misago/./src/components/posts-list/post/controls/actions.js","webpack://misago/./src/components/post-likes.js","webpack://misago/./src/components/posts-list/post/footer.js","webpack://misago/./src/components/posts-list/post/controls/move.js","webpack://misago/./src/components/post-changelog/diff.js","webpack://misago/./src/components/post-changelog/footer.js","webpack://misago/./src/components/post-changelog/toolbar.js","webpack://misago/./src/components/post-changelog/utils.js","webpack://misago/./src/components/post-changelog/index.js","webpack://misago/./src/components/posts-list/post/controls/split.js","webpack://misago/./src/components/posts-list/post/controls/dropdown.js","webpack://misago/./src/components/posts-list/post/controls/index.js","webpack://misago/./src/components/posts-list/post/select.js","webpack://misago/./src/components/posts-list/post/header.js","webpack://misago/./src/components/posts-list/post/post-side/anonymous.js","webpack://misago/./src/components/posts-list/post/post-side/has-visible-title.js","webpack://misago/./src/components/posts-list/post/post-side/user-postcount.js","webpack://misago/./src/components/posts-list/post/post-side/user-status.js","webpack://misago/./src/components/posts-list/post/post-side/user-title.js","webpack://misago/./src/components/posts-list/post/post-side/registered.js","webpack://misago/./src/components/posts-list/post/post-side/index.js","webpack://misago/./src/components/posts-list/post/index.js","webpack://misago/./src/components/posts-list/post/preview.js","webpack://misago/./src/components/posts-list/index.js","webpack://misago/./src/components/ThreadStarterCard.jsx","webpack://misago/./src/components/thread/moderation/thread/ThreadChangeTitleModal.jsx","webpack://misago/./src/components/thread/moderation/thread/merge.js","webpack://misago/./src/components/thread/moderation/thread/move.js","webpack://misago/./src/components/thread/moderation/thread/controls.js","webpack://misago/./src/components/thread/moderation/thread/index.js","webpack://misago/./src/components/thread/ThreadModeration.jsx","webpack://misago/./src/components/thread/ThreadSubscriptionButton.jsx","webpack://misago/./src/components/Breadcrumbs/Breadcrumbs.jsx","webpack://misago/./src/components/Breadcrumbs/BreadcrumbsCategory.jsx","webpack://misago/./src/components/Breadcrumbs/BreadcrumbsRootCategory.jsx","webpack://misago/./src/components/thread/ThreadHeader/ThreadHeaderBreadcrumbs.jsx","webpack://misago/./src/components/thread/ThreadHeader/index.js","webpack://misago/./src/components/thread/ThreadHeader/ThreadHeader.jsx","webpack://misago/./src/components/thread/ThreadPagination.jsx","webpack://misago/./src/components/thread/ThreadPostsLeft.jsx","webpack://misago/./src/components/thread/moderation/posts/errors-list.js","webpack://misago/./src/components/thread/moderation/posts/actions.js","webpack://misago/./src/components/thread/moderation/posts/move.js","webpack://misago/./src/components/thread/moderation/posts/split.js","webpack://misago/./src/components/thread/moderation/posts/dropdown.js","webpack://misago/./src/components/thread/ThreadPostsModeration.jsx","webpack://misago/./src/components/thread/ThreadReplyButton.jsx","webpack://misago/./src/components/thread/ThreadToolbarBottom.jsx","webpack://misago/./src/components/thread/ThreadPollButton.jsx","webpack://misago/./src/components/thread/ThreadShortcutsButton.jsx","webpack://misago/./src/components/thread/ThreadToolbarTop.jsx","webpack://misago/./src/components/thread/route.js","webpack://misago/./src/components/thread/root.js","webpack://misago/./src/initializers/components/thread.js","webpack://misago/./src/components/threads/compare.js","webpack://misago/./src/components/threads/ThreadsCategoryPicker.jsx","webpack://misago/./src/components/threads/ThreadsListPicker.jsx","webpack://misago/./src/components/threads/moderation/errors-list.js","webpack://misago/./src/components/threads/moderation/merge.js","webpack://misago/./src/components/threads/moderation/move.js","webpack://misago/./src/components/threads/moderation/controls.js","webpack://misago/./src/components/threads/ThreadsToolbarModeration.jsx","webpack://misago/./src/components/threads/ThreadsToolbar.jsx","webpack://misago/./src/components/threads/container.js","webpack://misago/./src/components/threads/utils.js","webpack://misago/./src/components/ThreadsList/ThreadsListEmpty.jsx","webpack://misago/./src/components/ThreadsList/ThreadsListItemActivity.jsx","webpack://misago/./src/components/ThreadsList/ThreadsListItemCategory.jsx","webpack://misago/./src/components/ThreadsList/ThreadsListItemCheckbox.jsx","webpack://misago/./src/components/ThreadsList/ThreadsListItemIcon.jsx","webpack://misago/./src/components/ThreadsList/ThreadsListItemLastPoster.jsx","webpack://misago/./src/components/ThreadsList/ThreadsListItemSubscriptionOptions.jsx","webpack://misago/./src/components/ThreadsList/ThreadsListItemSubscription.jsx","webpack://misago/./src/components/ThreadsList/ThreadsListItem.jsx","webpack://misago/./src/components/UIPreview/UIPreviewText.js","webpack://misago/./src/components/ThreadsList/ThreadsListLoader.jsx","webpack://misago/./src/components/ThreadsList/ThreadsListUpdatePrompt.jsx","webpack://misago/./src/components/ThreadsList/index.js","webpack://misago/./src/components/ThreadsList/ThreadsList.jsx","webpack://misago/./src/components/threads/route.js","webpack://misago/./src/initializers/components/threads.js","webpack://misago/./src/components/threads/root.js","webpack://misago/./src/components/navbar-search/clean-results.js","webpack://misago/./src/components/navbar-search/dropdown/constants.js","webpack://misago/./src/components/navbar-search/dropdown/input.js","webpack://misago/./src/components/navbar-search/dropdown/dropdown-menu.js","webpack://misago/./src/components/navbar-search/dropdown/empty.js","webpack://misago/./src/components/navbar-search/dropdown/loader.js","webpack://misago/./src/components/navbar-search/dropdown/result/footer.js","webpack://misago/./src/components/navbar-search/dropdown/result/header.js","webpack://misago/./src/components/navbar-search/dropdown/result/thread.js","webpack://misago/./src/components/navbar-search/dropdown/result/user.js","webpack://misago/./src/components/navbar-search/dropdown/result/result.js","webpack://misago/./src/components/navbar-search/dropdown/result/index.js","webpack://misago/./src/components/navbar-search/dropdown/flatten-results.js","webpack://misago/./src/components/navbar-search/dropdown/index.js","webpack://misago/./src/components/navbar-search/index.js","webpack://misago/./src/components/password-strength.js","webpack://misago/./src/components/register.js","webpack://misago/./src/components/register-button.js","webpack://misago/./src/components/user-menu/guest-nav.js","webpack://misago/./src/components/change-avatar/index.js","webpack://misago/./src/components/change-avatar/crop.js","webpack://misago/./src/components/change-avatar/upload.js","webpack://misago/./src/components/change-avatar/gallery.js","webpack://misago/./src/components/change-avatar/root.js","webpack://misago/./src/components/user-menu/user-nav.js","webpack://misago/./src/components/user-menu/root.js","webpack://misago/./src/initializers/components/user-menu.js","webpack://misago/./src/components/users/UsersNav.js","webpack://misago/./src/components/users/active-posters/list-empty.js","webpack://misago/./src/components/users/active-posters/list-item-preview.js","webpack://misago/./src/components/users/active-posters/list-preview.js","webpack://misago/./src/components/users/active-posters/list-item.js","webpack://misago/./src/components/users/active-posters/list-ready.js","webpack://misago/./src/components/users/active-posters/root.js","webpack://misago/./src/components/page-lead.js","webpack://misago/./src/utils/string-count.js","webpack://misago/./src/components/users/rank/RankUsersList.js","webpack://misago/./src/components/users/rank/RankUsersListLoader.js","webpack://misago/./src/components/users/rank/RankUsersLeft.jsx","webpack://misago/./src/components/users/rank/RankUsersPagination.jsx","webpack://misago/./src/components/users/rank/RankUsersToolbar.jsx","webpack://misago/./src/components/users/rank/root.js","webpack://misago/./src/components/users/root.js","webpack://misago/./src/initializers/components/users.js","webpack://misago/./src/initializers/include.js","webpack://misago/./src/initializers/local-storage.js","webpack://misago/./src/initializers/mobile-navbar-dropdown.js","webpack://misago/./src/initializers/modal.js","webpack://misago/./src/initializers/moment-locale.js","webpack://misago/./src/initializers/page-title.js","webpack://misago/./src/initializers/polls.js","webpack://misago/./src/initializers/posting.js","webpack://misago/./src/initializers/reducers/auth.js","webpack://misago/./src/initializers/reducers/participants.js","webpack://misago/./src/initializers/reducers/poll.js","webpack://misago/./src/initializers/reducers/posts.js","webpack://misago/./src/initializers/reducers/profile-details.js","webpack://misago/./src/initializers/reducers/profile-hydrate.js","webpack://misago/./src/initializers/reducers/profile.js","webpack://misago/./src/initializers/reducers/search.js","webpack://misago/./src/initializers/reducers/selection.js","webpack://misago/./src/initializers/reducers/snackbar.js","webpack://misago/./src/initializers/reducers/thread.js","webpack://misago/./src/initializers/reducers/threads.js","webpack://misago/./src/initializers/reducers/tick.js","webpack://misago/./src/initializers/reducers/username-history.js","webpack://misago/./src/initializers/reducers/users.js","webpack://misago/./src/initializers/snackbar.js","webpack://misago/./src/initializers/store.js","webpack://misago/./src/initializers/tick-start.js","webpack://misago/./src/initializers/zxcvbn.js","webpack://misago/./src/reducers/auth.js","webpack://misago/./src/reducers/participants.js","webpack://misago/./src/reducers/poll.js","webpack://misago/./src/reducers/post.js","webpack://misago/./src/reducers/posts.js","webpack://misago/./src/reducers/profile-details.js","webpack://misago/./src/reducers/profile.js","webpack://misago/./src/reducers/search.js","webpack://misago/./src/reducers/selection.js","webpack://misago/./src/reducers/snackbar.js","webpack://misago/./src/reducers/thread.js","webpack://misago/./src/reducers/threads.js","webpack://misago/./src/reducers/tick.js","webpack://misago/./src/reducers/username-history.js","webpack://misago/./src/reducers/users.js","webpack://misago/./src/services/ajax.js","webpack://misago/./src/services/auth.js","webpack://misago/./src/services/captcha.js","webpack://misago/./src/services/include.js","webpack://misago/./src/services/local-storage.js","webpack://misago/./src/services/mobile-navbar-dropdown.js","webpack://misago/./src/services/modal.js","webpack://misago/./src/services/page-title.js","webpack://misago/./src/services/polls.js","webpack://misago/./src/components/editor/actions/action.js","webpack://misago/./src/components/editor/actions/code.js","webpack://misago/./src/components/editor/actions/emphasis.js","webpack://misago/./src/components/editor/actions/hr.js","webpack://misago/./src/utils/is-url.js","webpack://misago/./src/components/editor/actions/image.js","webpack://misago/./src/components/editor/actions/link.js","webpack://misago/./src/components/editor/actions/spoiler.js","webpack://misago/./src/components/editor/actions/strikethrough.js","webpack://misago/./src/components/editor/actions/strong.js","webpack://misago/./src/components/editor/actions/quote.js","webpack://misago/./src/components/editor/attachments/attachment/complete.js","webpack://misago/./src/components/editor/attachments/attachment/error.js","webpack://misago/./src/components/editor/attachments/attachment/upload.js","webpack://misago/./src/components/editor/attachments/attachment/index.js","webpack://misago/./src/components/editor/attachments/list.js","webpack://misago/./src/components/editor/attachments/uploader.js","webpack://misago/./src/components/editor/attachments/index.js","webpack://misago/./src/components/editor/attachments/upload-button.js","webpack://misago/./src/components/editor/markup-preview.js","webpack://misago/./src/components/editor/textutils.js","webpack://misago/./src/components/editor/index.js","webpack://misago/./src/components/posting/utils/container.js","webpack://misago/./src/components/posting/utils/loader.js","webpack://misago/./src/components/posting/utils/message.js","webpack://misago/./src/components/posting/utils/options.js","webpack://misago/./src/components/posting/utils/attachments.js","webpack://misago/./src/components/posting/start.js","webpack://misago/./src/components/posting/utils/usernames.js","webpack://misago/./src/components/posting/start-private.js","webpack://misago/./src/components/posting/reply.js","webpack://misago/./src/components/posting/edit.js","webpack://misago/./src/components/posting/index.js","webpack://misago/./src/services/posting.js","webpack://misago/./src/services/snackbar.js","webpack://misago/./src/services/store.js","webpack://misago/./src/services/zxcvbn.js","webpack://misago/./src/components/banned-page.js","webpack://misago/./src/utils/banned-page.js","webpack://misago/./src/utils/batch.js","webpack://misago/./src/utils/concat-unique.js","webpack://misago/./src/utils/escape-html.js","webpack://misago/./src/utils/file-size.js","webpack://misago/./src/utils/mount-component.js","webpack://misago/./src/utils/random.js","webpack://misago/./src/utils/routed-component.js","webpack://misago/./src/utils/sets.js","webpack://misago/./src/utils/validators.js","webpack://misago/./node_modules/moment/locale/ sync ^\\.\\/.*$","webpack://misago/webpack/bootstrap","webpack://misago/webpack/runtime/compat get default export","webpack://misago/webpack/runtime/define property getters","webpack://misago/webpack/runtime/global","webpack://misago/webpack/runtime/harmony module decorator","webpack://misago/webpack/runtime/hasOwnProperty shorthand","webpack://misago/webpack/runtime/make namespace object","webpack://misago/webpack/runtime/node module decorator","webpack://misago/webpack/runtime/jsonp chunk loading","webpack://misago/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/*! highlight.js v9.9.0 | BSD3 License | git.io/hljslicense */\n!function(e){var n=\"object\"==typeof window&&window||\"object\"==typeof self&&self;\"undefined\"!=typeof undefined?e(exports):n&&(n.hljs=e({}),\"function\"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/[&<>]/gm,function(e){return I[e]})}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function i(e){return k.test(e)}function a(e){var n,t,r,a,o=e.className+\" \";if(o+=e.parentNode?e.parentNode.className:\"\",t=B.exec(o))return R(t[1])?t[1]:\"no-highlight\";for(o=o.split(/\\s+/),n=0,r=o.length;r>n;n++)if(a=o[n],i(a)||R(a))return a}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,i){for(var a=e.firstChild;a;a=a.nextSibling)3===a.nodeType?i+=a.nodeValue.length:1===a.nodeType&&(n.push({event:\"start\",offset:i,node:a}),i=r(a,i),t(a).match(/br|hr|img|input/)||n.push({event:\"stop\",offset:i,node:a}));return i}(e,0),n}function c(e,r,i){function a(){return e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset<r[0].offset?e:r:\"start\"===r[0].event?e:r:e.length?e:r}function o(e){function r(e){return\" \"+e.nodeName+'=\"'+n(e.value)+'\"'}l+=\"<\"+t(e)+w.map.call(e.attributes,r).join(\"\")+\">\"}function u(e){l+=\"</\"+t(e)+\">\"}function c(e){(\"start\"===e.event?o:u)(e.node)}for(var s=0,l=\"\",f=[];e.length||r.length;){var g=a();if(l+=n(i.substring(s,g[0].offset)),s=g[0].offset,g===e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=a();while(g===e&&g.length&&g[0].offset===s);f.reverse().forEach(o)}else\"start\"===g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return l+n(i.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),\"m\"+(e.cI?\"i\":\"\")+(r?\"g\":\"\"))}function r(i,a){if(!i.compiled){if(i.compiled=!0,i.k=i.k||i.bK,i.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(\" \").forEach(function(e){var t=e.split(\"|\");u[t[0]]=[n,t[1]?Number(t[1]):1]})};\"string\"==typeof i.k?c(\"keyword\",i.k):E(i.k).forEach(function(e){c(e,i.k[e])}),i.k=u}i.lR=t(i.l||/\\w+/,!0),a&&(i.bK&&(i.b=\"\\\\b(\"+i.bK.split(\" \").join(\"|\")+\")\\\\b\"),i.b||(i.b=/\\B|\\b/),i.bR=t(i.b),i.e||i.eW||(i.e=/\\B|\\b/),i.e&&(i.eR=t(i.e)),i.tE=n(i.e)||\"\",i.eW&&a.tE&&(i.tE+=(i.e?\"|\":\"\")+a.tE)),i.i&&(i.iR=t(i.i)),null==i.r&&(i.r=1),i.c||(i.c=[]);var s=[];i.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push(\"self\"===e?i:e)}),i.c=s,i.c.forEach(function(e){r(e,i)}),i.starts&&r(i.starts,a);var l=i.c.map(function(e){return e.bK?\"\\\\.?(\"+e.b+\")\\\\.?\":e.b}).concat([i.tE,i.i]).map(n).filter(Boolean);i.t=l.length?t(l.join(\"|\"),!0):{exec:function(){return null}}}}r(e)}function l(e,t,i,a){function o(e,n){var t,i;for(t=0,i=n.c.length;i>t;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!i&&r(n.iR,e)}function g(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function h(e,n,t,r){var i=r?\"\":y.classPrefix,a='<span class=\"'+i,o=t?\"\":C;return a+=e+'\">',a+n+o}function p(){var e,t,r,i;if(!E.k)return n(B);for(i=\"\",t=0,E.lR.lastIndex=0,r=E.lR.exec(B);r;)i+=n(B.substring(t,r.index)),e=g(E,r),e?(M+=e[1],i+=h(e[0],n(r[0]))):i+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(B);return i+n(B.substr(t))}function d(){var e=\"string\"==typeof E.sL;if(e&&!x[E.sL])return n(B);var t=e?l(E.sL,B,!0,L[E.sL]):f(B,E.sL.length?E.sL:void 0);return E.r>0&&(M+=t.r),e&&(L[E.sL]=t.top),h(t.language,t.value,!1,!0)}function b(){k+=null!=E.sL?d():p(),B=\"\"}function v(e){k+=e.cN?h(e.cN,\"\",!0):\"\",E=Object.create(e,{parent:{value:E}})}function m(e,n){if(B+=e,null==n)return b(),0;var t=o(n,E);if(t)return t.skip?B+=n:(t.eB&&(B+=n),b(),t.rB||t.eB||(B=n)),v(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var i=E;i.skip?B+=n:(i.rE||i.eE||(B+=n),b(),i.eE&&(B=n));do E.cN&&(k+=C),E.skip||(M+=E.r),E=E.parent;while(E!==r.parent);return r.starts&&v(r.starts,\"\"),i.rE?0:n.length}if(c(n,E))throw new Error('Illegal lexeme \"'+n+'\" for mode \"'+(E.cN||\"<unnamed>\")+'\"');return B+=n,n.length||1}var N=R(e);if(!N)throw new Error('Unknown language: \"'+e+'\"');s(N);var w,E=a||N,L={},k=\"\";for(w=E;w!==N;w=w.parent)w.cN&&(k=h(w.cN,\"\",!0)+k);var B=\"\",M=0;try{for(var I,j,O=0;;){if(E.t.lastIndex=O,I=E.t.exec(t),!I)break;j=m(t.substring(O,I.index),I[0]),O=I.index+j}for(m(t.substr(O)),w=E;w.parent;w=w.parent)w.cN&&(k+=C);return{r:M,value:k,language:e,top:E}}catch(T){if(T.message&&-1!==T.message.indexOf(\"Illegal\"))return{r:0,value:n(t)};throw T}}function f(e,t){t=t||y.languages||E(x);var r={r:0,value:n(e)},i=r;return t.filter(R).forEach(function(n){var t=l(n,e,!1);t.language=n,t.r>i.r&&(i=t),t.r>r.r&&(i=r,r=t)}),i.language&&(r.second_best=i),r}function g(e){return y.tabReplace||y.useBR?e.replace(M,function(e,n){return y.useBR&&\"\\n\"===e?\"<br>\":y.tabReplace?n.replace(/\\t/g,y.tabReplace):void 0}):e}function h(e,n,t){var r=n?L[n]:t,i=[e.trim()];return e.match(/\\bhljs\\b/)||i.push(\"hljs\"),-1===e.indexOf(r)&&i.push(r),i.join(\" \").trim()}function p(e){var n,t,r,o,s,p=a(e);i(p)||(y.useBR?(n=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\"),n.innerHTML=e.innerHTML.replace(/\\n/g,\"\").replace(/<br[ \\/]*>/g,\"\\n\")):n=e,s=n.textContent,r=p?l(p,s,!0):f(s),t=u(n),t.length&&(o=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\"),o.innerHTML=r.value,r.value=c(t,u(o),s)),r.value=g(r.value),e.innerHTML=r.value,e.className=h(e.className,p,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function d(e){y=o(y,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll(\"pre code\");w.forEach.call(e,p)}}function v(){addEventListener(\"DOMContentLoaded\",b,!1),addEventListener(\"load\",b,!1)}function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e){L[e]=n})}function N(){return E(x)}function R(e){return e=(e||\"\").toLowerCase(),x[e]||x[L[e]]}var w=[],E=Object.keys,x={},L={},k=/^(no-?highlight|plain|text)$/i,B=/\\blang(?:uage)?-([\\w-]+)\\b/i,M=/((^(<[^>]+>|\\t|)+|(?:\\n)))/gm,C=\"</span>\",y={classPrefix:\"hljs-\",tabReplace:null,useBR:!1,languages:void 0},I={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\"};return e.highlight=l,e.highlightAuto=f,e.fixMarkup=g,e.highlightBlock=p,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=R,e.inherit=o,e.IR=\"[a-zA-Z]\\\\w*\",e.UIR=\"[a-zA-Z_]\\\\w*\",e.NR=\"\\\\b\\\\d+(\\\\.\\\\d+)?\",e.CNR=\"(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\",e.BNR=\"\\\\b(0b[01]+)\",e.RSR=\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\",e.BE={b:\"\\\\\\\\[\\\\s\\\\S]\",r:0},e.ASM={cN:\"string\",b:\"'\",e:\"'\",i:\"\\\\n\",c:[e.BE]},e.QSM={cN:\"string\",b:'\"',e:'\"',i:\"\\\\n\",c:[e.BE]},e.PWM={b:/\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\\b/},e.C=function(n,t,r){var i=e.inherit({cN:\"comment\",b:n,e:t,c:[]},r||{});return i.c.push(e.PWM),i.c.push({cN:\"doctag\",b:\"(?:TODO|FIXME|NOTE|BUG|XXX):\",r:0}),i},e.CLCM=e.C(\"//\",\"$\"),e.CBCM=e.C(\"/\\\\*\",\"\\\\*/\"),e.HCM=e.C(\"#\",\"$\"),e.NM={cN:\"number\",b:e.NR,r:0},e.CNM={cN:\"number\",b:e.CNR,r:0},e.BNM={cN:\"number\",b:e.BNR,r:0},e.CSSNM={cN:\"number\",b:e.NR+\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\",r:0},e.RM={cN:\"regexp\",b:/\\//,e:/\\/[gimuy]*/,i:/\\n/,c:[e.BE,{b:/\\[/,e:/\\]/,r:0,c:[e.BE]}]},e.TM={cN:\"title\",b:e.IR,r:0},e.UTM={cN:\"title\",b:e.UIR,r:0},e.METHOD_GUARD={b:\"\\\\.\\\\s*\"+e.UIR,r:0},e});hljs.registerLanguage(\"xml\",function(s){var e=\"[A-Za-z0-9\\\\._:-]+\",t={eW:!0,i:/</,r:0,c:[{cN:\"attr\",b:e,r:0},{b:/=\\s*/,r:0,c:[{cN:\"string\",endsParent:!0,v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/},{b:/[^\\s\"'=<>`]+/}]}]}]};return{aliases:[\"html\",\"xhtml\",\"rss\",\"atom\",\"xjb\",\"xsd\",\"xsl\",\"plist\"],cI:!0,c:[{cN:\"meta\",b:\"<!DOCTYPE\",e:\">\",r:10,c:[{b:\"\\\\[\",e:\"\\\\]\"}]},s.C(\"<!--\",\"-->\",{r:10}),{b:\"<\\\\!\\\\[CDATA\\\\[\",e:\"\\\\]\\\\]>\",r:10},{b:/<\\?(php)?/,e:/\\?>/,sL:\"php\",c:[{b:\"/\\\\*\",e:\"\\\\*/\",skip:!0}]},{cN:\"tag\",b:\"<style(?=\\\\s|>|$)\",e:\">\",k:{name:\"style\"},c:[t],starts:{e:\"</style>\",rE:!0,sL:[\"css\",\"xml\"]}},{cN:\"tag\",b:\"<script(?=\\\\s|>|$)\",e:\">\",k:{name:\"script\"},c:[t],starts:{e:\"</script>\",rE:!0,sL:[\"actionscript\",\"javascript\",\"handlebars\",\"xml\"]}},{cN:\"meta\",v:[{b:/<\\?xml/,e:/\\?>/,r:10},{b:/<\\?\\w+/,e:/\\?>/}]},{cN:\"tag\",b:\"</?\",e:\"/?>\",c:[{cN:\"name\",b:/[^\\/><\\s]+/,r:0},t]}]}});hljs.registerLanguage(\"markdown\",function(e){return{aliases:[\"md\",\"mkdown\",\"mkd\"],c:[{cN:\"section\",v:[{b:\"^#{1,6}\",e:\"$\"},{b:\"^.+?\\\\n[=-]{2,}$\"}]},{b:\"<\",e:\">\",sL:\"xml\",r:0},{cN:\"bullet\",b:\"^([*+-]|(\\\\d+\\\\.))\\\\s+\"},{cN:\"strong\",b:\"[*_]{2}.+?[*_]{2}\"},{cN:\"emphasis\",v:[{b:\"\\\\*.+?\\\\*\"},{b:\"_.+?_\",r:0}]},{cN:\"quote\",b:\"^>\\\\s+\",e:\"$\"},{cN:\"code\",v:[{b:\"^```w*s*$\",e:\"^```s*$\"},{b:\"`.+?`\"},{b:\"^( {4}|\t)\",e:\"$\",r:0}]},{b:\"^[-\\\\*]{3,}\",e:\"$\"},{b:\"\\\\[.+?\\\\][\\\\(\\\\[].*?[\\\\)\\\\]]\",rB:!0,c:[{cN:\"string\",b:\"\\\\[\",e:\"\\\\]\",eB:!0,rE:!0,r:0},{cN:\"link\",b:\"\\\\]\\\\(\",e:\"\\\\)\",eB:!0,eE:!0},{cN:\"symbol\",b:\"\\\\]\\\\[\",e:\"\\\\]\",eB:!0,eE:!0}],r:10},{b:/^\\[[^\\n]+\\]:/,rB:!0,c:[{cN:\"symbol\",b:/\\[/,e:/\\]/,eB:!0,eE:!0},{cN:\"link\",b:/:\\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage(\"ini\",function(e){var b={cN:\"string\",c:[e.BE],v:[{b:\"'''\",e:\"'''\",r:10},{b:'\"\"\"',e:'\"\"\"',r:10},{b:'\"',e:'\"'},{b:\"'\",e:\"'\"}]};return{aliases:[\"toml\"],cI:!0,i:/\\S/,c:[e.C(\";\",\"$\"),e.HCM,{cN:\"section\",b:/^\\s*\\[+/,e:/\\]+/},{b:/^[a-z0-9\\[\\]_-]+\\s*=\\s*/,e:\"$\",rB:!0,c:[{cN:\"attr\",b:/[a-z0-9\\[\\]_-]+/},{b:/=/,eW:!0,r:0,c:[{cN:\"literal\",b:/\\bon|off|true|false|yes|no\\b/},{cN:\"variable\",v:[{b:/\\$[\\w\\d\"][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},b,{cN:\"number\",b:/([\\+\\-]+)?[\\d]+_[\\d_]+/},e.NM]}]}]}});hljs.registerLanguage(\"python\",function(e){var r={cN:\"meta\",b:/^(>>>|\\.\\.\\.) /},b={cN:\"string\",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[r],r:10},{b:/(u|b)?r?\"\"\"/,e:/\"\"\"/,c:[r],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)\"/,e:/\"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)\"/,e:/\"/},e.ASM,e.QSM]},a={cN:\"number\",r:0,v:[{b:e.BNR+\"[lLjJ]?\"},{b:\"\\\\b(0o[0-7]+)[lLjJ]?\"},{b:e.CNR+\"[lLjJ]?\"}]},l={cN:\"params\",b:/\\(/,e:/\\)/,c:[\"self\",r,a,b]};return{aliases:[\"py\",\"gyp\"],k:{keyword:\"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False\",built_in:\"Ellipsis NotImplemented\"},i:/(<\\/|->|\\?)|=>/,c:[r,a,b,e.HCM,{v:[{cN:\"function\",bK:\"def\"},{cN:\"class\",bK:\"class\"}],e:/:/,i:/[${=;\\n,]/,c:[e.UTM,l,{b:/->/,eW:!0,k:\"None\"}]},{cN:\"meta\",b:/^[\\t ]*@/,e:/$/},{b:/\\b(print|exec)\\(/}]}});hljs.registerLanguage(\"css\",function(e){var c=\"[a-zA-Z-][a-zA-Z0-9_-]*\",t={b:/[A-Z\\_\\.\\-]+\\s*:/,rB:!0,e:\";\",eW:!0,c:[{cN:\"attribute\",b:/\\S/,e:\":\",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\\w-]+\\(/,rB:!0,c:[{cN:\"built_in\",b:/[\\w-]+/},{b:/\\(/,e:/\\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:\"number\",b:\"#[0-9A-Fa-f]+\"},{cN:\"meta\",b:\"!important\"}]}}]};return{cI:!0,i:/[=\\/|'\\$]/,c:[e.CBCM,{cN:\"selector-id\",b:/#[A-Za-z0-9_-]+/},{cN:\"selector-class\",b:/\\.[A-Za-z0-9_-]+/},{cN:\"selector-attr\",b:/\\[/,e:/\\]/,i:\"$\"},{cN:\"selector-pseudo\",b:/:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"'.]+/},{b:\"@(font-face|page)\",l:\"[a-z-]+\",k:\"font-face page\"},{b:\"@\",e:\"[{;]\",i:/:/,c:[{cN:\"keyword\",b:/\\w+/},{b:/\\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:\"selector-tag\",b:c,r:0},{b:\"{\",e:\"}\",i:/\\S/,c:[e.CBCM,t]}]}});hljs.registerLanguage(\"less\",function(e){var r=\"[\\\\w-]+\",t=\"(\"+r+\"|@{\"+r+\"})\",a=[],c=[],s=function(e){return{cN:\"string\",b:\"~?\"+e+\".*?\"+e}},b=function(e,r,t){return{cN:e,b:r,r:t}},n={b:\"\\\\(\",e:\"\\\\)\",c:c,r:0};c.push(e.CLCM,e.CBCM,s(\"'\"),s('\"'),e.CSSNM,{b:\"(url|data-uri)\\\\(\",starts:{cN:\"string\",e:\"[\\\\)\\\\n]\",eE:!0}},b(\"number\",\"#[0-9A-Fa-f]+\\\\b\"),n,b(\"variable\",\"@@?\"+r,10),b(\"variable\",\"@{\"+r+\"}\"),b(\"built_in\",\"~?`[^`]*?`\"),{cN:\"attribute\",b:r+\"\\\\s*:\",e:\":\",rB:!0,eE:!0},{cN:\"meta\",b:\"!important\"});var i=c.concat({b:\"{\",e:\"}\",c:a}),o={bK:\"when\",eW:!0,c:[{bK:\"and not\"}].concat(c)},u={b:t+\"\\\\s*:\",rB:!0,e:\"[;}]\",r:0,c:[{cN:\"attribute\",b:t,e:\":\",eE:!0,starts:{eW:!0,i:\"[<=$]\",r:0,c:c}}]},l={cN:\"keyword\",b:\"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\\\b\",starts:{e:\"[;{}]\",rE:!0,c:c,r:0}},C={cN:\"variable\",v:[{b:\"@\"+r+\"\\\\s*:\",r:15},{b:\"@\"+r}],starts:{e:\"[;}]\",rE:!0,c:i}},p={v:[{b:\"[\\\\.#:&\\\\[>]\",e:\"[;{}]\"},{b:t,e:\"{\"}],rB:!0,rE:!0,i:\"[<='$\\\"]\",r:0,c:[e.CLCM,e.CBCM,o,b(\"keyword\",\"all\\\\b\"),b(\"variable\",\"@{\"+r+\"}\"),b(\"selector-tag\",t+\"%?\",0),b(\"selector-id\",\"#\"+t),b(\"selector-class\",\"\\\\.\"+t,0),b(\"selector-tag\",\"&\",0),{cN:\"selector-attr\",b:\"\\\\[\",e:\"\\\\]\"},{cN:\"selector-pseudo\",b:/:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"'.]+/},{b:\"\\\\(\",e:\"\\\\)\",c:i},{b:\"!important\"}]};return a.push(e.CLCM,e.CBCM,l,C,u,p),{cI:!0,i:\"[=>'/<($\\\"]\",c:a}});hljs.registerLanguage(\"scss\",function(e){var t=\"[a-zA-Z-][a-zA-Z0-9_-]*\",i={cN:\"variable\",b:\"(\\\\$\"+t+\")\\\\b\"},r={cN:\"number\",b:\"#[0-9A-Fa-f]+\"};({cN:\"attribute\",b:\"[A-Z\\\\_\\\\.\\\\-]+\",e:\":\",eE:!0,i:\"[^\\\\s]\",starts:{eW:!0,eE:!0,c:[r,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:\"meta\",b:\"!important\"}]}});return{cI:!0,i:\"[=/|']\",c:[e.CLCM,e.CBCM,{cN:\"selector-id\",b:\"\\\\#[A-Za-z0-9_-]+\",r:0},{cN:\"selector-class\",b:\"\\\\.[A-Za-z0-9_-]+\",r:0},{cN:\"selector-attr\",b:\"\\\\[\",e:\"\\\\]\",i:\"$\"},{cN:\"selector-tag\",b:\"\\\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\\\b\",r:0},{b:\":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)\"},{b:\"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)\"},i,{cN:\"attribute\",b:\"\\\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\\\b\",i:\"[^\\\\s]\"},{b:\"\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b\"},{b:\":\",e:\";\",c:[i,r,e.CSSNM,e.QSM,e.ASM,{cN:\"meta\",b:\"!important\"}]},{b:\"@\",e:\"[{;]\",k:\"mixin include extend for if else each while charset import debug media page content font-face namespace warn\",c:[i,e.QSM,e.ASM,r,e.CSSNM,{b:\"\\\\s[A-Za-z0-9_.-]+\",r:0}]}]}});hljs.registerLanguage(\"json\",function(e){var i={literal:\"true false null\"},n=[e.QSM,e.CNM],r={e:\",\",eW:!0,eE:!0,c:n,k:i},t={b:\"{\",e:\"}\",c:[{cN:\"attr\",b:/\"/,e:/\"/,c:[e.BE],i:\"\\\\n\"},e.inherit(r,{b:/:/})],i:\"\\\\S\"},c={b:\"\\\\[\",e:\"\\\\]\",c:[e.inherit(r)],i:\"\\\\S\"};return n.splice(n.length,0,t,c),{c:n,k:i,i:\"\\\\S\"}});hljs.registerLanguage(\"javascript\",function(e){var r=\"[A-Za-z$_][0-9A-Za-z$_]*\",t={keyword:\"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as\",literal:\"true false null undefined NaN Infinity\",built_in:\"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise\"},a={cN:\"number\",v:[{b:\"\\\\b(0[bB][01]+)\"},{b:\"\\\\b(0[oO][0-7]+)\"},{b:e.CNR}],r:0},n={cN:\"subst\",b:\"\\\\$\\\\{\",e:\"\\\\}\",k:t,c:[]},c={cN:\"string\",b:\"`\",e:\"`\",c:[e.BE,n]};n.c=[e.ASM,e.QSM,c,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:[\"js\",\"jsx\"],k:t,c:[{cN:\"meta\",r:10,b:/^\\s*['\"]use (strict|asm)['\"]/},{cN:\"meta\",b:/^#!/,e:/$/},e.ASM,e.QSM,c,e.CLCM,e.CBCM,a,{b:/[{,]\\s*/,r:0,c:[{b:r+\"\\\\s*:\",rB:!0,r:0,c:[{cN:\"attr\",b:r,r:0}]}]},{b:\"(\"+e.RSR+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",k:\"return throw case\",c:[e.CLCM,e.CBCM,e.RM,{cN:\"function\",b:\"(\\\\(.*?\\\\)|\"+r+\")\\\\s*=>\",rB:!0,e:\"\\\\s*=>\",c:[{cN:\"params\",v:[{b:r},{b:/\\(\\s*\\)/},{b:/\\(/,e:/\\)/,eB:!0,eE:!0,k:t,c:s}]}]},{b:/</,e:/(\\/\\w+|\\w+\\/)>/,sL:\"xml\",c:[{b:/<\\w+\\s*\\/>/,skip:!0},{b:/<\\w+/,e:/(\\/\\w+|\\w+\\/)>/,skip:!0,c:[{b:/<\\w+\\s*\\/>/,skip:!0},\"self\"]}]}],r:0},{cN:\"function\",bK:\"function\",e:/\\{/,eE:!0,c:[e.inherit(e.TM,{b:r}),{cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,c:s}],i:/\\[|%/},{b:/\\$[(.]/},e.METHOD_GUARD,{cN:\"class\",bK:\"class\",e:/[{;=]/,eE:!0,i:/[:\"\\[\\]]/,c:[{bK:\"extends\"},e.UTM]},{bK:\"constructor\",e:/\\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage(\"bash\",function(e){var t={cN:\"variable\",v:[{b:/\\$[\\w\\d#@][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},s={cN:\"string\",b:/\"/,e:/\"/,c:[e.BE,t,{cN:\"variable\",b:/\\$\\(/,e:/\\)/,c:[e.BE]}]},a={cN:\"string\",b:/'/,e:/'/};return{aliases:[\"sh\",\"zsh\"],l:/-?[a-z\\._]+/,k:{keyword:\"if then else elif fi for while in do done case esac function\",literal:\"true false\",built_in:\"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp\",_:\"-ne -eq -lt -gt -f -d -e -s -l -a\"},c:[{cN:\"meta\",b:/^#![^\\n]+sh\\s*$/,r:10},{cN:\"function\",b:/\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,rB:!0,c:[e.inherit(e.TM,{b:/\\w[\\w\\d_]*/})],r:0},e.HCM,s,a,t]}});","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst FlexRow = ({ children, className }) => (\n  <div className={classnames(\"flex-row\", className)}>{children}</div>\n)\n\nexport default FlexRow\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst FlexRowCol = ({ children, className, shrink }) => (\n  <div\n    className={classnames(\"flex-row-col\", className, {\n      \"flex-row-col-shrink\": shrink,\n    })}\n  >\n    {children}\n  </div>\n)\n\nexport default FlexRowCol\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst FlexRowSection = ({ auto, children, className }) => (\n  <div\n    className={classnames(\n      \"flex-row-section\",\n      { \"flex-row-section-auto\": auto },\n      className\n    )}\n  >\n    {children}\n  </div>\n)\n\nexport default FlexRowSection\n","import React from \"react\"\n\nconst PageContainer = ({ children }) => (\n  <div className=\"container page-container\">{children}</div>\n)\n\nexport default PageContainer\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst PageHeader = ({ children, className, styleName }) => (\n  <div\n    className={classnames(\n      \"page-header\",\n      className,\n      styleName && \"page-header-\" + styleName\n    )}\n  >\n    <div className=\"page-header-bg-image\">\n      <div className=\"page-header-bg-overlay\">\n        <div className=\"page-header-image\" />\n        {children}\n      </div>\n    </div>\n  </div>\n)\n\nexport default PageHeader\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst PageHeaderBanner = ({ children, className, styleName }) => (\n  <div\n    className={classnames(\n      \"page-header-banner\",\n      className,\n      styleName && \"page-header-banner-\" + styleName\n    )}\n  >\n    <div className=\"page-header-banner-bg-image\">\n      <div className=\"page-header-banner-bg-overlay\">{children}</div>\n    </div>\n  </div>\n)\n\nexport default PageHeaderBanner\n","import React from \"react\"\n\nconst PageHeaderContainer = ({ children }) => (\n  <div className=\"container page-header-container\">{children}</div>\n)\n\nexport default PageHeaderContainer\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst PageHeaderDetails = ({ children, className }) => (\n  <div className={classnames(\"page-header-details\", className)}>{children}</div>\n)\n\nexport default PageHeaderDetails\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst PageHeaderHTMLMessage = ({ className, message }) => (\n  <div\n    className={classnames(\"page-header-message\", className)}\n    dangerouslySetInnerHTML={{ __html: message }}\n  />\n)\n\nexport default PageHeaderHTMLMessage\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst PageHeaderMessage = ({ children, className }) => (\n  <div className={classnames(\"page-header-message\", className)}>{children}</div>\n)\n\nexport default PageHeaderMessage\n","import React from \"react\"\nimport PageHeader from \"./PageHeader\"\nimport PageHeaderBanner from \"./PageHeaderBanner\"\nimport PageHeaderContainer from \"./PageHeaderContainer\"\nimport PageHeaderDetails from \"./PageHeaderDetails\"\n\nconst PageHeaderPlain = ({ styleName, header, message }) => (\n  <PageHeaderContainer>\n    <PageHeader styleName={styleName}>\n      <PageHeaderBanner styleName={styleName}>\n        <h1>{header}</h1>\n      </PageHeaderBanner>\n      {message && (\n        <PageHeaderDetails styleName={styleName}>{message}</PageHeaderDetails>\n      )}\n    </PageHeader>\n  </PageHeaderContainer>\n)\n\nexport default PageHeaderPlain\n","import React from \"react\"\nimport misago from \"misago\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nconst AGREEMENT_URL = '<a href=\"%(url)s\" target=\"_blank\">%(agreement)s</a>'\n\nconst RegisterLegalFootnote = (props) => {\n  const {\n    errors,\n    privacyPolicy,\n    termsOfService,\n    onPrivacyPolicyChange,\n    onTermsOfServiceChange,\n  } = props\n\n  const termsOfServiceId = misago.get(\"TERMS_OF_SERVICE_ID\")\n  const termsOfServiceUrl = misago.get(\"TERMS_OF_SERVICE_URL\")\n\n  const privacyPolicyId = misago.get(\"PRIVACY_POLICY_ID\")\n  const privacyPolicyUrl = misago.get(\"PRIVACY_POLICY_URL\")\n\n  if (!termsOfServiceId && !privacyPolicyId) return null\n\n  return (\n    <div>\n      <LegalAgreement\n        agreement={gettext(\"the terms of service\")}\n        checked={termsOfService !== null}\n        errors={errors.termsOfService}\n        url={termsOfServiceUrl}\n        value={termsOfServiceId}\n        onChange={onTermsOfServiceChange}\n      />\n      <LegalAgreement\n        agreement={gettext(\"the privacy policy\")}\n        checked={privacyPolicy !== null}\n        errors={errors.privacyPolicy}\n        url={privacyPolicyUrl}\n        value={privacyPolicyId}\n        onChange={onPrivacyPolicyChange}\n      />\n    </div>\n  )\n}\n\nconst LegalAgreement = (props) => {\n  const { agreement, checked, errors, url, value, onChange } = props\n\n  if (!url) return null\n\n  const agreementHtml = interpolate(\n    AGREEMENT_URL,\n    { agreement: escapeHtml(agreement), url: escapeHtml(url) },\n    true\n  )\n  const label = interpolate(\n    gettext(\"I have read and accept %(agreement)s.\"),\n    { agreement: agreementHtml },\n    true\n  )\n\n  return (\n    <div className=\"checkbox legal-footnote\">\n      <label>\n        <input\n          checked={checked}\n          type=\"checkbox\"\n          value={value}\n          onChange={onChange}\n        />\n        <span dangerouslySetInnerHTML={{ __html: label }} />\n      </label>\n      {errors &&\n        errors.map((error, i) => (\n          <div className=\"help-block errors\" key={i}>\n            {error}\n          </div>\n        ))}\n    </div>\n  )\n}\n\nexport default RegisterLegalFootnote\n","import React from \"react\"\nimport misago from \"misago\"\n\nconst StartSocialAuth = (props) => {\n  const { buttonClassName, buttonLabel, formLabel, header, labelClassName } =\n    props\n  const socialAuth = misago.get(\"SOCIAL_AUTH\")\n\n  if (socialAuth.length === 0) return null\n\n  return (\n    <div className=\"form-group form-social-auth\">\n      <FormHeader className={labelClassName} text={header} />\n      <div className=\"row\">\n        {socialAuth.map(({ id, name, button_text, button_color, url }) => {\n          const className = \"btn btn-block btn-default btn-social-\" + id\n          const style = button_color ? { color: button_color } : null\n          const finalButtonLabel =\n            button_text || interpolate(buttonLabel, { site: name }, true)\n\n          return (\n            <div className={buttonClassName || \"col-xs-12\"} key={id}>\n              <a className={className} style={style} href={url}>\n                {finalButtonLabel}\n              </a>\n            </div>\n          )\n        })}\n      </div>\n      <hr />\n      <FormHeader className={labelClassName} text={formLabel} />\n    </div>\n  )\n}\n\nconst FormHeader = ({ className, text }) => {\n  if (!text) return null\n  return <h5 className={className || \"\"}>{text}</h5>\n}\n\nexport default StartSocialAuth\n","import React from \"react\"\n\nconst ThreadFlags = ({ thread }) => (\n  <ul className=\"thread-flags\">\n    {thread.weight == 2 && (\n      <li\n        className=\"thread-flag-pinned-globally\"\n        title={gettext(\"Pinned globally\")}\n      >\n        <span className=\"material-icon\">bookmark</span>\n      </li>\n    )}\n    {thread.weight == 1 && (\n      <li\n        className=\"thread-flag-pinned-locally\"\n        title={gettext(\"Pinned in category\")}\n      >\n        <span className=\"material-icon\">bookmark_outline</span>\n      </li>\n    )}\n    {thread.best_answer && (\n      <li className=\"thread-flag-answered\" title={gettext(\"Answered\")}>\n        <span className=\"material-icon\">check_circle</span>\n      </li>\n    )}\n    {thread.has_poll && (\n      <li className=\"thread-flag-poll\" title={gettext(\"Poll\")}>\n        <span className=\"material-icon\">poll</span>\n      </li>\n    )}\n    {(thread.is_unapproved || thread.has_unapproved_posts) && (\n      <li\n        className=\"thread-flag-unapproved\"\n        title={\n          thread.is_unapproved\n            ? gettext(\"Awaiting approval\")\n            : gettext(\"Has unapproved posts\")\n        }\n      >\n        <span className=\"material-icon\">visibility</span>\n      </li>\n    )}\n    {thread.is_closed && (\n      <li className=\"thread-flag-closed\" title={gettext(\"Closed\")}>\n        <span className=\"material-icon\">lock</span>\n      </li>\n    )}\n    {thread.is_hidden && (\n      <li className=\"thread-flag-hidden\" title={gettext(\"Hidden\")}>\n        <span className=\"material-icon\">visibility_off</span>\n      </li>\n    )}\n  </ul>\n)\n\nexport default ThreadFlags\n","import React from \"react\"\n\nconst ThreadReplies = ({ thread }) => (\n  <span\n    className=\"threads-replies\"\n    title={interpolate(\n      ngettext(\"%(replies)s reply\", \"%(replies)s replies\", thread.replies),\n      { replies: thread.replies },\n      true\n    )}\n  >\n    <span className=\"material-icon\">chat_bubble_outline</span>\n    {thread.replies > 980\n      ? Math.round(thread.replies / 1000) + \"K\"\n      : thread.replies}\n  </span>\n)\n\nexport default ThreadReplies\n","import React from \"react\"\n\nconst Toolbar = ({ children }) => <nav className=\"toolbar\">{children}</nav>\n\nexport default Toolbar\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst ToolbarItem = ({ children, className, shrink }) => (\n  <div\n    className={classnames(\"toolbar-item\", className, {\n      \"toolbar-item-shrink\": shrink,\n    })}\n  >\n    {children}\n  </div>\n)\n\nexport default ToolbarItem\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst ToolbarSection = ({ auto, children, className }) => (\n  <div\n    className={classnames(\n      \"toolbar-section\",\n      { \"toolbar-section-auto\": auto },\n      className\n    )}\n  >\n    {children}\n  </div>\n)\n\nexport default ToolbarSection\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst ToolbarSpacer = ({ className }) => (\n  <div className={classnames(\"toolbar-spacer\", className)} />\n)\n\nexport default ToolbarSpacer\n","import React from \"react\"\nimport misago from \"misago\"\n\nexport default function (props) {\n  const size = props.size || 100\n  const size2x = props.size2x || size\n\n  return (\n    <img\n      alt=\"\"\n      className={props.className || \"user-avatar\"}\n      src={getSrc(props.user, size)}\n      srcSet={getSrc(props.user, size2x)}\n      width={size}\n      height={size}\n    />\n  )\n}\n\nexport function getSrc(user, size) {\n  if (user && user.id) {\n    // just avatar hash, size and user id\n    return resolveAvatarForSize(user.avatars, size).url\n  } else {\n    // just append avatar size to file to produce no-avatar placeholder\n    return misago.get(\"BLANK_AVATAR_URL\")\n  }\n}\n\nexport function resolveAvatarForSize(avatars, size) {\n  let avatar = avatars[0]\n  avatars.forEach((av) => {\n    if (av.size >= size) {\n      avatar = av\n    }\n  })\n  return avatar\n}\n","import React from \"react\"\nimport Loader from \"./loader\"\n\nexport default class Button extends React.Component {\n  render() {\n    let className = \"btn \" + this.props.className\n    let disabled = this.props.disabled\n\n    if (this.props.loading) {\n      className += \" btn-loading\"\n      disabled = true\n    }\n\n    return (\n      <button\n        className={className}\n        disabled={disabled}\n        onClick={this.props.onClick}\n        type={this.props.onClick ? \"button\" : \"submit\"}\n      >\n        {this.props.children}\n        {this.props.loading ? <Loader /> : null}\n      </button>\n    )\n  }\n}\n\nButton.defaultProps = {\n  className: \"btn-default\",\n\n  type: \"submit\",\n\n  loading: false,\n  disabled: false,\n\n  onClick: null,\n}\n","import React from \"react\"\n\nexport default function (props) {\n  return (\n    <select\n      className={props.className || \"form-control\"}\n      disabled={props.disabled || false}\n      id={props.id || null}\n      onChange={props.onChange}\n      value={props.value}\n    >\n      {props.choices.map((item) => {\n        return (\n          <option\n            disabled={item.disabled || false}\n            key={item.value}\n            value={item.value}\n          >\n            {\"- - \".repeat(item.level) + item.label}\n          </option>\n        )\n      })}\n    </select>\n  )\n}\n","import React from \"react\"\nimport PanelMessage from \"misago/components/panel-message\"\n\nexport default function ({ display }) {\n  if (!display) return null\n\n  return (\n    <PanelMessage\n      helpText={gettext(\"No profile details are editable at this time.\")}\n      message={gettext(\"This option is currently unavailable.\")}\n    />\n  )\n}\n","import React from \"react\"\nimport Loader from \"misago/components/loader\"\n\nexport default function ({ display }) {\n  if (!display) return null\n\n  return (\n    <div className=\"panel-body\">\n      <Loader />\n    </div>\n  )\n}\n","import React from \"react\"\nimport Select from \"misago/components/select\"\n\nexport default class extends React.Component {\n  onChange = (ev) => {\n    const { field, onChange } = this.props\n    onChange(field.fieldname, ev.target.value)\n  }\n\n  render() {\n    const { disabled, field, value } = this.props\n    const { input } = field\n\n    if (input.type === \"select\") {\n      return (\n        <Select\n          choices={input.choices}\n          disabled={disabled}\n          id={\"id_\" + field.fieldname}\n          onChange={this.onChange}\n          value={value}\n        />\n      )\n    }\n\n    if (input.type === \"textarea\") {\n      return (\n        <textarea\n          className=\"form-control\"\n          disabled={disabled}\n          id={\"id_\" + field.fieldname}\n          onChange={this.onChange}\n          rows=\"4\"\n          type=\"text\"\n          value={value}\n        />\n      )\n    }\n\n    if (input.type === \"text\") {\n      return (\n        <input\n          className=\"form-control\"\n          disabled={disabled}\n          id={\"id_\" + field.fieldname}\n          onChange={this.onChange}\n          type=\"text\"\n          value={value}\n        />\n      )\n    }\n\n    return null\n  }\n}\n","import React from \"react\"\nimport FieldInput from \"./field-input\"\nimport FormGroup from \"misago/components/form-group\"\n\nexport default function ({ disabled, errors, fields, name, onChange, value }) {\n  return (\n    <fieldset>\n      <legend>{name}</legend>\n      {fields.map((field) => {\n        return (\n          <FormGroup\n            for={\"id_\" + field.fieldname}\n            helpText={field.help_text}\n            key={field.fieldname}\n            label={field.label}\n            validation={errors[field.fieldname]}\n          >\n            <FieldInput\n              disabled={disabled}\n              field={field}\n              onChange={onChange}\n              value={value[field.fieldname]}\n            />\n          </FormGroup>\n        )\n      })}\n    </fieldset>\n  )\n}\n","import React from \"react\"\nimport Fieldset from \"./fieldset\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      errors: {},\n    }\n\n    const groups = props.groups.length\n    for (let i = 0; i < groups; i++) {\n      const group = props.groups[i]\n      const fields = group.fields.length\n      for (let f = 0; f < fields; f++) {\n        const fieldname = group.fields[f].fieldname\n        const initial = group.fields[f].initial\n        this.state[fieldname] = initial\n      }\n    }\n  }\n\n  send() {\n    const data = Object.assign({}, this.state, {\n      errors: null,\n      isLoading: null,\n    })\n\n    return ajax.post(this.props.api, data)\n  }\n\n  handleSuccess(data) {\n    this.props.onSuccess(data)\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      snackbar.error(gettext(\"Form contains errors.\"))\n      this.setState({ errors: rejection })\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  onChange = (name, value) => {\n    this.setState({\n      [name]: value,\n    })\n  }\n\n  render() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"panel-body\">\n          {this.props.groups.map((group, i) => {\n            return (\n              <Fieldset\n                disabled={this.state.isLoading}\n                errors={this.state.errors}\n                fields={group.fields}\n                name={group.name}\n                key={i}\n                onChange={this.onChange}\n                value={this.state}\n              />\n            )\n          })}\n        </div>\n        <div className=\"panel-footer text-right\">\n          <CancelButton\n            disabled={this.state.isLoading}\n            onCancel={this.props.onCancel}\n          />{\" \"}\n          <Button className=\"btn-primary\" loading={this.state.isLoading}>\n            {gettext(\"Save changes\")}\n          </Button>\n        </div>\n      </form>\n    )\n  }\n}\n\nexport function CancelButton({ onCancel, disabled }) {\n  if (!onCancel) return null\n\n  return (\n    <button\n      className=\"btn btn-default\"\n      disabled={disabled}\n      onClick={onCancel}\n      type=\"button\"\n    >\n      {gettext(\"Cancel\")}\n    </button>\n  )\n}\n","import React from \"react\"\nimport Blankslate from \"./blankslate\"\nimport Loader from \"./loader\"\nimport Form from \"./form\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      loading: true,\n      groups: null,\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(this.props.api).then(\n      (groups) => {\n        this.setState({\n          loading: false,\n\n          groups,\n        })\n      },\n      (rejection) => {\n        snackbar.apiError(rejection)\n        if (this.props.cancel) {\n          this.props.cancel()\n        }\n      }\n    )\n  }\n\n  render() {\n    const { groups, loading } = this.state\n\n    return (\n      <div className=\"panel panel-default panel-form\">\n        <div className=\"panel-heading\">\n          <h3 className=\"panel-title\">{gettext(\"Edit details\")}</h3>\n        </div>\n        <Loader display={loading} />\n        <Blankslate display={!loading && !groups.length} />\n        <FormDisplay\n          api={this.props.api}\n          display={!loading && groups.length}\n          groups={groups}\n          onCancel={this.props.onCancel}\n          onSuccess={this.props.onSuccess}\n        />\n      </div>\n    )\n  }\n}\n\nexport function FormDisplay({ api, display, groups, onCancel, onSuccess }) {\n  if (!display) return null\n\n  return (\n    <Form api={api} groups={groups} onCancel={onCancel} onSuccess={onSuccess} />\n  )\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  isValidated() {\n    return typeof this.props.validation !== \"undefined\"\n  }\n\n  getClassName() {\n    let className = \"form-group\"\n    if (this.isValidated()) {\n      className += \" has-feedback\"\n      if (this.props.validation === null) {\n        className += \" has-success\"\n      } else {\n        className += \" has-error\"\n      }\n    }\n    return className\n  }\n\n  getFeedback() {\n    if (this.props.validation) {\n      return (\n        <div className=\"help-block errors\">\n          {this.props.validation.map((error, i) => {\n            return <p key={this.props.for + \"FeedbackItem\" + i}>{error}</p>\n          })}\n        </div>\n      )\n    } else {\n      return null\n    }\n  }\n\n  getFeedbackDescription() {\n    if (this.isValidated()) {\n      return (\n        <span id={this.props.for + \"_status\"} className=\"sr-only\">\n          {this.props.validation ? gettext(\"(error)\") : gettext(\"(success)\")}\n        </span>\n      )\n    } else {\n      return null\n    }\n  }\n\n  getHelpText() {\n    if (this.props.helpText) {\n      return <p className=\"help-block\">{this.props.helpText}</p>\n    } else {\n      return null\n    }\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()}>\n        <label\n          className={\"control-label \" + (this.props.labelClass || \"\")}\n          htmlFor={this.props.for || \"\"}\n        >\n          {this.props.label + \":\"}\n        </label>\n        <div className={this.props.controlClass || \"\"}>\n          {this.props.children}\n          {this.getFeedbackDescription()}\n          {this.getFeedback()}\n          {this.getHelpText()}\n          {this.props.extra || null}\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport { required } from \"misago/utils/validators\"\nimport snackbar from \"misago/services/snackbar\"\n\nlet validateRequired = required()\n\nexport default class extends React.Component {\n  validate() {\n    let errors = {}\n    if (!this.state.validators) {\n      return errors\n    }\n\n    let validators = {\n      required: this.state.validators.required || this.state.validators,\n      optional: this.state.validators.optional || {},\n    }\n\n    let validatedFields = []\n\n    // add required fields to validation\n    for (let name in validators.required) {\n      if (\n        validators.required.hasOwnProperty(name) &&\n        validators.required[name]\n      ) {\n        validatedFields.push(name)\n      }\n    }\n\n    // add optional fields to validation\n    for (let name in validators.optional) {\n      if (\n        validators.optional.hasOwnProperty(name) &&\n        validators.optional[name]\n      ) {\n        validatedFields.push(name)\n      }\n    }\n\n    // validate fields values\n    for (let i in validatedFields) {\n      let name = validatedFields[i]\n      let fieldErrors = this.validateField(name, this.state[name])\n\n      if (fieldErrors === null) {\n        errors[name] = null\n      } else if (fieldErrors) {\n        errors[name] = fieldErrors\n      }\n    }\n\n    return errors\n  }\n\n  isValid() {\n    let errors = this.validate()\n    for (let field in errors) {\n      if (errors.hasOwnProperty(field)) {\n        if (errors[field] !== null) {\n          return false\n        }\n      }\n    }\n\n    return true\n  }\n\n  validateField(name, value) {\n    let errors = []\n    if (!this.state.validators) {\n      return errors\n    }\n\n    let validators = {\n      required: (this.state.validators.required || this.state.validators)[name],\n      optional: (this.state.validators.optional || {})[name],\n    }\n\n    let requiredError = validateRequired(value) || false\n\n    if (validators.required) {\n      if (requiredError) {\n        errors = [requiredError]\n      } else {\n        for (let i in validators.required) {\n          let validationError = validators.required[i](value)\n          if (validationError) {\n            errors.push(validationError)\n          }\n        }\n      }\n\n      return errors.length ? errors : null\n    } else if (requiredError === false && validators.optional) {\n      for (let i in validators.optional) {\n        let validationError = validators.optional[i](value)\n        if (validationError) {\n          errors.push(validationError)\n        }\n      }\n\n      return errors.length ? errors : null\n    }\n\n    return false // false === field wasn't validated\n  }\n\n  bindInput = (name) => {\n    return (event) => {\n      this.changeValue(name, event.target.value)\n    }\n  }\n\n  changeValue = (name, value) => {\n    let newState = {\n      [name]: value,\n    }\n\n    const formErrors = this.state.errors || {}\n    formErrors[name] = this.validateField(name, newState[name])\n    newState.errors = formErrors\n\n    this.setState(newState)\n  }\n\n  clean() {\n    return true\n  }\n\n  send() {\n    return null\n  }\n\n  handleSuccess(success) {\n    return\n  }\n\n  handleError(rejection) {\n    snackbar.apiError(rejection)\n  }\n\n  handleSubmit = (event) => {\n    // we don't reload page on submissions\n    if (event) {\n      event.preventDefault()\n    }\n\n    if (this.state.isLoading) {\n      return\n    }\n\n    if (this.clean()) {\n      this.setState({ isLoading: true })\n      let promise = this.send()\n\n      if (promise) {\n        promise.then(\n          (success) => {\n            this.setState({ isLoading: false })\n            this.handleSuccess(success)\n          },\n          (rejection) => {\n            this.setState({ isLoading: false })\n            this.handleError(rejection)\n          }\n        )\n      } else {\n        this.setState({ isLoading: false })\n      }\n    }\n  }\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  isActive() {\n    if (this.props.isControlled) {\n      return this.props.isActive\n    } else {\n      if (this.props.path) {\n        return document.location.pathname.indexOf(this.props.path) === 0\n      } else {\n        return false\n      }\n    }\n  }\n\n  getClassName() {\n    if (this.isActive()) {\n      return (\n        (this.props.className || \"\") +\n        \" \" +\n        (this.props.activeClassName || \"active\")\n      )\n    } else {\n      return this.props.className || \"\"\n    }\n  }\n\n  render() {\n    return <li className={this.getClassName()}>{this.props.children}</li>\n  }\n}\n","import React from \"react\"\n\nexport default function (props) {\n  return (\n    <div className={props.className || \"loader\"}>\n      <div className=\"loader-spinning-wheel\" />\n    </div>\n  )\n}\n","import React from \"react\"\nimport Button from \"./button\"\nimport Form from \"./form\"\nimport FormGroup from \"./form-group\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      bestAnswer: \"0\",\n      poll: \"0\",\n    }\n  }\n\n  clean() {\n    if (this.props.polls && this.state.poll === \"0\") {\n      const confirmation = window.confirm(\n        gettext(\"Are you sure you want to delete all polls?\")\n      )\n      return confirmation\n    }\n\n    return true\n  }\n\n  send() {\n    const data = Object.assign({}, this.props.data, {\n      best_answer: this.state.bestAnswer,\n      poll: this.state.poll,\n    })\n\n    return ajax.post(this.props.api, data)\n  }\n\n  handleSuccess = (success) => {\n    this.props.onSuccess(success)\n    modal.hide()\n  }\n\n  handleError = (rejection) => {\n    this.props.onError(rejection)\n  }\n\n  onBestAnswerChange = (event) => {\n    this.changeValue(\"bestAnswer\", event.target.value)\n  }\n\n  onPollChange = (event) => {\n    this.changeValue(\"poll\", event.target.value)\n  }\n\n  render() {\n    return (\n      <div className=\"modal-dialog\" role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              aria-label={gettext(\"Close\")}\n              className=\"close\"\n              data-dismiss=\"modal\"\n              type=\"button\"\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Merge threads\")}</h4>\n          </div>\n          <form onSubmit={this.handleSubmit}>\n            <div className=\"modal-body\">\n              <BestAnswerSelect\n                choices={this.props.bestAnswers}\n                onChange={this.onBestAnswerChange}\n                value={this.state.bestAnswer}\n              />\n              <PollSelect\n                choices={this.props.polls}\n                onChange={this.onPollChange}\n                value={this.state.poll}\n              />\n            </div>\n            <div className=\"modal-footer\">\n              <button\n                className=\"btn btn-default\"\n                data-dismiss=\"modal\"\n                disabled={this.state.isLoading}\n                type=\"button\"\n              >\n                {gettext(\"Cancel\")}\n              </button>\n              <Button className=\"btn-primary\" loading={this.state.isLoading}>\n                {gettext(\"Merge threads\")}\n              </Button>\n            </div>\n          </form>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport function BestAnswerSelect({ choices, onChange, value }) {\n  if (!choices) return null\n\n  return (\n    <FormGroup\n      label={gettext(\"Best answer\")}\n      helpText={gettext(\n        \"Please select the best answer for your newly merged thread. No posts will be deleted during the merge.\"\n      )}\n      for=\"id_best_answer\"\n    >\n      <select\n        className=\"form-control\"\n        id=\"id_best_answer\"\n        onChange={onChange}\n        value={value}\n      >\n        {choices.map((choice) => {\n          return (\n            <option value={choice[0]} key={choice[0]}>\n              {choice[1]}\n            </option>\n          )\n        })}\n      </select>\n    </FormGroup>\n  )\n}\n\nexport function PollSelect({ choices, onChange, value }) {\n  if (!choices) return null\n\n  return (\n    <FormGroup\n      label={gettext(\"Poll\")}\n      helpText={gettext(\n        \"Please select the poll for your newly merged thread. Rejected polls will be permanently deleted and cannot be recovered.\"\n      )}\n      for=\"id_poll\"\n    >\n      <select\n        className=\"form-control\"\n        id=\"id_poll\"\n        onChange={onChange}\n        value={value}\n      >\n        {choices.map((choice) => {\n          return (\n            <option value={choice[0]} key={choice[0]}>\n              {choice[1]}\n            </option>\n          )\n        })}\n      </select>\n    </FormGroup>\n  )\n}\n","const ytRegExp = new RegExp(\n  \"^.*(?:(?:youtu.be/|v/|vi/|u/w/|embed/)|(?:(?:watch)??v(?:i)?=|&v(?:i)?=))([^#&?]*).*\"\n)\n\nexport class OneBox {\n  constructor() {\n    this._youtube = {}\n  }\n\n  render = (domnode) => {\n    if (!domnode) return\n    this.highlightCode(domnode)\n    this.embedYoutubePlayers(domnode)\n  }\n\n  highlightCode(domnode) {\n    const codeblocks = domnode.querySelectorAll(\"pre>code\")\n    for (let i = 0; i < codeblocks.length; i++) {\n      const code = codeblocks[i]\n      hljs.highlightBlock(code)\n    }\n  }\n\n  embedYoutubePlayers(domnode) {\n    const anchors = domnode.querySelectorAll(\"p>a\")\n    for (let i = 0; i < anchors.length; i++) {\n      const a = anchors[i]\n      const p = a.parentNode\n      const onlyChild = p.childNodes.length === 1\n\n      if (!this._youtube[a.href]) {\n        this._youtube[a.href] = parseYoutubeUrl(a.href)\n      }\n\n      const youtubeMovie = this._youtube[a.href]\n      if (onlyChild && !!youtubeMovie && youtubeMovie.data !== false) {\n        this.swapYoutubePlayer(a, youtubeMovie)\n      }\n    }\n  }\n\n  swapYoutubePlayer(element, youtube) {\n    let url = \"https://www.youtube.com/embed/\"\n    url += youtube.video\n    url += \"?rel=0\"\n    if (youtube.start) {\n      url += \"&start=\" + youtube.start\n    }\n\n    const player = $(\n      '<iframe class=\"embed-responsive-item\" src=\"' +\n        url +\n        '\" allowfullscreen></iframe>'\n    )\n    $(element).replaceWith(player)\n    player.wrap('<div class=\"embed-responsive embed-responsive-16by9\"></div>')\n  }\n}\n\nexport default new OneBox()\n\nexport function parseYoutubeUrl(url) {\n  const cleanedUrl = cleanUrl(url)\n  const video = getVideoIdFromUrl(cleanedUrl)\n\n  if (!video) return null\n\n  let start = 0\n  if (cleanedUrl.indexOf(\"?\") > 0) {\n    const query = cleanedUrl.substr(cleanedUrl.indexOf(\"?\") + 1)\n    const timebit = query.split(\"&\").filter((i) => {\n      return i.substr(0, 2) === \"t=\"\n    })[0]\n\n    if (timebit) {\n      const bits = timebit.substr(2).split(\"m\")\n      if (bits[0].substr(-1) === \"s\") {\n        start += parseInt(bits[0].substr(0, bits[0].length - 1))\n      } else {\n        start += parseInt(bits[0]) * 60\n        if (!!bits[1] && bits[1].substr(-1) === \"s\") {\n          start += parseInt(bits[1].substr(0, bits[1].length - 1))\n        }\n      }\n    }\n  }\n\n  return {\n    start,\n    video,\n  }\n}\n\nexport function cleanUrl(url) {\n  let clean = url\n\n  if (url.substr(0, 8) === \"https://\") {\n    clean = clean.substr(8)\n  } else if (url.substr(0, 7) === \"http://\") {\n    clean = clean.substr(7)\n  }\n\n  if (clean.substr(0, 4) === \"www.\") {\n    clean = clean.substr(4)\n  }\n\n  return clean\n}\n\nexport function getVideoIdFromUrl(url) {\n  if (url.indexOf(\"youtu\") === -1) return null\n\n  const video = url.match(ytRegExp)\n  if (video) {\n    return video[1]\n  }\n  return null\n}\n","import React from \"react\"\nimport onebox from \"misago/services/one-box\"\n\nexport default class extends React.Component {\n  componentDidMount() {\n    onebox.render(this.documentNode)\n    $(this.documentNode).find(\".spoiler-reveal\").click(revealSpoiler)\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    onebox.render(this.documentNode)\n    $(this.documentNode).find(\".spoiler-reveal\").click(revealSpoiler)\n  }\n\n  shouldComponentUpdate(nextProps, nextState) {\n    return nextProps.markup !== this.props.markup\n  }\n\n  render() {\n    return (\n      <article\n        className=\"misago-markup\"\n        dangerouslySetInnerHTML={{ __html: this.props.markup }}\n        ref={(node) => {\n          this.documentNode = node\n        }}\n      />\n    )\n  }\n}\n\nfunction revealSpoiler(event) {\n  var btn = event.target\n  $(btn).parent().parent().addClass(\"revealed\")\n}\n","import React from \"react\"\nimport Loader from \"misago/components/loader\"\n\nexport default class extends React.Component {\n  render() {\n    return (\n      <div className=\"modal-body modal-loader\">\n        <Loader />\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport PanelMessage from \"misago/components/panel-message\"\n\nexport default class extends PanelMessage {\n  getHelpText() {\n    if (this.props.helpText) {\n      return <p className=\"help-block\">{this.props.helpText}</p>\n    } else {\n      return null\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"modal-body\">\n        <div className=\"message-icon\">\n          <span className=\"material-icon\">\n            {this.props.icon || \"info_outline\"}\n          </span>\n        </div>\n        <div className=\"message-body\">\n          <p className=\"lead\">{this.props.message}</p>\n          {this.getHelpText()}\n          <button\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            {gettext(\"Ok\")}\n          </button>\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Loader from \"misago/components/loader\"\n\nexport default class extends React.Component {\n  render() {\n    return (\n      <div className=\"panel-body panel-body-loading\">\n        <Loader className=\"loader loader-spaced\" />\n      </div>\n    )\n  }\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  getHelpText() {\n    if (this.props.helpText) {\n      return <p className=\"help-block\">{this.props.helpText}</p>\n    } else {\n      return null\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"panel-body panel-message-body\">\n        <div className=\"message-icon\">\n          <span className=\"material-icon\">\n            {this.props.icon || \"info_outline\"}\n          </span>\n        </div>\n        <div className=\"message-body\">\n          <p className=\"lead\">{this.props.message}</p>\n          {this.getHelpText()}\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\n\nexport default function (props) {\n  return (\n    <div className=\"poll-choices-bars\">\n      {props.poll.choices.map((choice) => {\n        return (\n          <PollChoice choice={choice} key={choice.hash} poll={props.poll} />\n        )\n      })}\n    </div>\n  )\n}\n\nexport function PollChoice(props) {\n  let proc = 0\n  if (props.choice.votes && props.poll.votes) {\n    proc = Math.ceil((props.choice.votes * 100) / props.poll.votes)\n  }\n\n  return (\n    <dl className=\"dl-horizontal\">\n      <dt>{props.choice.label}</dt>\n      <dd>\n        <div className=\"progress\">\n          <div\n            className=\"progress-bar\"\n            role=\"progressbar\"\n            aria-valuenow={proc}\n            aria-valuemin=\"0\"\n            aria-valuemax=\"100\"\n            style={{ width: proc + \"%\" }}\n          >\n            <span className=\"sr-only\">\n              {getVotesLabel(props.votes, props.proc)}\n            </span>\n          </div>\n        </div>\n        <ul className=\"list-unstyled list-inline poll-chart\">\n          <ChoiceVotes proc={proc} votes={props.choice.votes} />\n          <UserChoice selected={props.choice.selected} />\n        </ul>\n      </dd>\n    </dl>\n  )\n}\n\nexport function ChoiceVotes(props) {\n  return (\n    <li className=\"poll-chart-votes\">\n      {getVotesLabel(props.votes, props.proc)}\n    </li>\n  )\n}\n\nexport function getVotesLabel(votes, proc) {\n  const message = ngettext(\n    \"%(votes)s vote, %(proc)s% of total.\",\n    \"%(votes)s votes, %(proc)s% of total.\",\n    votes\n  )\n\n  return interpolate(\n    message,\n    {\n      votes: votes,\n      proc: proc,\n    },\n    true\n  )\n}\n\nexport function UserChoice(props) {\n  if (!props.selected) return null\n\n  return (\n    <li className=\"poll-chart-selected\">\n      <span className=\"material-icon\">check_box</span>\n      {gettext(\"Your choice.\")}\n    </li>\n  )\n}\n","import React from \"react\"\nimport moment from \"moment\"\nimport Message from \"misago/components/modal-message\"\nimport Loader from \"misago/components/modal-loader\"\nimport ajax from \"misago/services/ajax\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: true,\n      error: null,\n      data: [],\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(this.props.poll.api.votes).then(\n      (data) => {\n        const hydratedData = data.map((choice) => {\n          return Object.assign({}, choice, {\n            voters: choice.voters.map((voter) => {\n              return Object.assign({}, voter, {\n                voted_on: moment(voter.voted_on),\n              })\n            }),\n          })\n        })\n\n        this.setState({\n          isLoading: false,\n          data: hydratedData,\n        })\n      },\n      (rejection) => {\n        this.setState({\n          isLoading: false,\n          error: rejection.detail,\n        })\n      }\n    )\n  }\n\n  render() {\n    return (\n      <div\n        className={\n          \"modal-dialog\" + (this.state.error ? \" modal-message\" : \" modal-sm\")\n        }\n        role=\"document\"\n      >\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              type=\"button\"\n              className=\"close\"\n              data-dismiss=\"modal\"\n              aria-label={gettext(\"Close\")}\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Poll votes\")}</h4>\n          </div>\n\n          <ModalBody\n            data={this.state.data}\n            error={this.state.error}\n            isLoading={this.state.isLoading}\n          />\n        </div>\n      </div>\n    )\n  }\n}\n\nexport function ModalBody(props) {\n  if (props.isLoading) {\n    return <Loader />\n  } else if (props.error) {\n    return <Message icon=\"error_outline\" message={props.error} />\n  }\n\n  return <ChoicesList data={props.data} />\n}\n\nexport function ChoicesList(props) {\n  return (\n    <div className=\"modal-body modal-poll-votes\">\n      <ul className=\"list-unstyled votes-details\">\n        {props.data.map((choice) => {\n          return <ChoiceDetails key={choice.hash} {...choice} />\n        })}\n      </ul>\n    </div>\n  )\n}\n\nexport function ChoiceDetails(props) {\n  return (\n    <li>\n      <h4>{props.label}</h4>\n      <VotesCount votes={props.votes} />\n      <VotesList voters={props.voters} />\n      <hr />\n    </li>\n  )\n}\n\nexport function VotesCount(props) {\n  const message = ngettext(\n    \"%(votes)s user has voted for this choice.\",\n    \"%(votes)s users have voted for this choice.\",\n    props.votes\n  )\n\n  const label = interpolate(\n    message,\n    {\n      votes: props.votes,\n    },\n    true\n  )\n\n  return <p>{label}</p>\n}\n\nexport function VotesList(props) {\n  if (!props.voters.length) return null\n\n  return (\n    <ul className=\"list-unstyled\">\n      {props.voters.map((user) => {\n        return <Voter key={user.username} {...user} />\n      })}\n    </ul>\n  )\n}\n\nexport function Voter(props) {\n  if (props.url) {\n    return (\n      <li>\n        <a className=\"item-title\" href={props.url}>\n          {props.username}\n        </a>{\" \"}\n        <VoteDate voted_on={props.voted_on} />\n      </li>\n    )\n  }\n\n  return (\n    <li>\n      <strong>{props.username}</strong> <VoteDate voted_on={props.voted_on} />\n    </li>\n  )\n}\n\nexport function VoteDate(props) {\n  return (\n    <abbr className=\"text-muted\" title={props.voted_on.format(\"LLL\")}>\n      {props.voted_on.fromNow()}\n    </abbr>\n  )\n}\n","import React from \"react\"\nimport Modal from \"./modal\"\nimport * as poll from \"misago/reducers/poll\"\nimport * as thread from \"misago/reducers/thread\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport posting from \"misago/services/posting\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default function (props) {\n  const { isPollOver, poll, showVoting, thread } = props\n\n  if (!isVisible(isPollOver, poll.acl, poll)) return null\n\n  const controls = []\n\n  const canVote = poll.acl.can_vote\n  const canChangeVote = !poll.hasSelectedChoices || poll.allow_revotes\n\n  if (canVote && canChangeVote) controls.push(0)\n  if (poll.is_public || poll.acl.can_see_votes) controls.push(1)\n  if (poll.acl.can_edit) controls.push(2)\n  if (poll.acl.can_delete) controls.push(3)\n\n  return (\n    <div className=\"row poll-options\">\n      <ChangeVote\n        controls={controls}\n        isPollOver={isPollOver}\n        poll={poll}\n        showVoting={showVoting}\n      />\n      <SeeVotes controls={controls} poll={poll} />\n      <Edit controls={controls} poll={poll} thread={thread} />\n      <Delete controls={controls} poll={poll} />\n    </div>\n  )\n}\n\nexport function isVisible(isPollOver, acl, poll) {\n  return (\n    poll.is_public ||\n    acl.can_delete ||\n    acl.can_edit ||\n    acl.can_see_votes ||\n    (acl.can_vote &&\n      !isPollOver &&\n      (!poll.hasSelectedChoices || poll.allow_revotes))\n  )\n}\n\nexport function getClassName(controls, control) {\n  let className = \"col-xs-6\"\n\n  if (controls.length === 1) {\n    className = \"col-xs-12\"\n  }\n\n  if (controls.length === 3 && controls[0] === control) {\n    className = \"col-xs-12\"\n  }\n\n  return className + \" col-sm-3 col-md-2\"\n}\n\nexport function ChangeVote(props) {\n  const canVote = props.poll.acl.can_vote\n  const canChangeVote =\n    !props.poll.hasSelectedChoices || props.poll.allow_revotes\n\n  if (!(canVote && canChangeVote)) return null\n\n  return (\n    <div className={getClassName(props.controls, 0)}>\n      <button\n        className=\"btn btn-default btn-block btn-sm\"\n        disabled={props.poll.isBusy}\n        onClick={props.showVoting}\n        type=\"button\"\n      >\n        {gettext(\"Vote\")}\n      </button>\n    </div>\n  )\n}\n\nexport class SeeVotes extends React.Component {\n  onClick = () => {\n    modal.show(<Modal poll={this.props.poll} />)\n  }\n\n  render() {\n    const seeVotes =\n      this.props.poll.is_public || this.props.poll.acl.can_see_votes\n    if (!seeVotes) return null\n\n    return (\n      <div className={getClassName(this.props.controls, 1)}>\n        <button\n          className=\"btn btn-default btn-block btn-sm\"\n          disabled={this.props.poll.isBusy}\n          onClick={this.onClick}\n          type=\"button\"\n        >\n          {gettext(\"See votes\")}\n        </button>\n      </div>\n    )\n  }\n}\n\nexport class Edit extends React.Component {\n  onClick = () => {\n    posting.open({\n      submit: this.props.poll.api.index,\n\n      thread: this.props.thread,\n      poll: this.props.poll,\n\n      mode: \"POLL\",\n    })\n  }\n\n  render() {\n    if (!this.props.poll.acl.can_edit) return null\n\n    return (\n      <div className={getClassName(this.props.controls, 2)}>\n        <button\n          className=\"btn btn-default btn-block btn-sm\"\n          disabled={this.props.poll.isBusy}\n          onClick={this.onClick}\n          type=\"button\"\n        >\n          {gettext(\"Edit\")}\n        </button>\n      </div>\n    )\n  }\n}\n\nexport class Delete extends React.Component {\n  onClick = () => {\n    const deletePoll = window.confirm(\n      gettext(\n        \"Are you sure you want to delete this poll? This action is not reversible.\"\n      )\n    )\n    if (!deletePoll) return false\n\n    store.dispatch(poll.busy())\n\n    ajax\n      .delete(this.props.poll.api.index)\n      .then(this.handleSuccess, this.handleError)\n  }\n\n  handleSuccess = (newThreadAcl) => {\n    snackbar.success(\"Poll has been deleted\")\n    store.dispatch(poll.remove())\n    store.dispatch(thread.updateAcl(newThreadAcl))\n  }\n\n  handleError = (rejection) => {\n    snackbar.apiError(rejection)\n    store.dispatch(poll.release())\n  }\n\n  render() {\n    if (!this.props.poll.acl.can_delete) return null\n\n    return (\n      <div className={getClassName(this.props.controls, 3)}>\n        <button\n          className=\"btn btn-default btn-block btn-sm\"\n          disabled={this.props.poll.isBusy}\n          onClick={this.onClick}\n          type=\"button\"\n        >\n          {gettext(\"Delete\")}\n        </button>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nconst DATE_ABBR = '<abbr title=\"%(absolute)s\">%(relative)s</abbr>'\nconst USER_SPAN = '<span class=\"item-title\">%(user)s</span>'\nconst USER_URL = '<a href=\"%(url)s\" class=\"item-title\">%(user)s</a>'\n\nexport default function (props) {\n  return (\n    <ul className=\"list-unstyled list-inline poll-details\">\n      <PollVotes votes={props.poll.votes} />\n      <PollLength poll={props.poll} />\n      <PollIsPublic poll={props.poll} />\n      <PollCreation poll={props.poll} />\n    </ul>\n  )\n}\n\nexport function PollCreation(props) {\n  const message = interpolate(\n    escapeHtml(gettext(\"Posted by %(poster)s %(posted_on)s.\")),\n    {\n      poster: getPoster(props.poll),\n      posted_on: getPostedOn(props.poll),\n    },\n    true\n  )\n\n  return (\n    <li\n      className=\"poll-info-creation\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n\nexport function getPoster(poll) {\n  if (poll.url.poster) {\n    return interpolate(\n      USER_URL,\n      {\n        url: escapeHtml(poll.url.poster),\n        user: escapeHtml(poll.poster_name),\n      },\n      true\n    )\n  }\n\n  return interpolate(\n    USER_SPAN,\n    {\n      user: escapeHtml(poll.poster_name),\n    },\n    true\n  )\n}\n\nexport function getPostedOn(poll) {\n  return interpolate(\n    DATE_ABBR,\n    {\n      absolute: escapeHtml(poll.posted_on.format(\"LLL\")),\n      relative: escapeHtml(poll.posted_on.fromNow()),\n    },\n    true\n  )\n}\n\nexport function PollLength(props) {\n  if (!props.poll.length) {\n    return null\n  }\n\n  const message = interpolate(\n    escapeHtml(gettext(\"Voting ends %(ends_on)s.\")),\n    {\n      ends_on: getEndsOn(props.poll),\n    },\n    true\n  )\n\n  return (\n    <li\n      className=\"poll-info-ends-on\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n\nexport function getEndsOn(poll) {\n  return interpolate(\n    DATE_ABBR,\n    {\n      absolute: escapeHtml(poll.endsOn.format(\"LLL\")),\n      relative: escapeHtml(poll.endsOn.fromNow()),\n    },\n    true\n  )\n}\n\nexport function PollVotes(props) {\n  const message = ngettext(\"%(votes)s vote.\", \"%(votes)s votes.\", props.votes)\n  const label = interpolate(\n    message,\n    {\n      votes: props.votes,\n    },\n    true\n  )\n\n  return <li className=\"poll-info-votes\">{label}</li>\n}\n\nexport function PollIsPublic(props) {\n  if (!props.poll.is_public) {\n    return null\n  }\n\n  return <li className=\"poll-info-public\">{gettext(\"Votes are public.\")}</li>\n}\n","import React from \"react\"\nimport Chart from \"./chart\"\nimport Options from \"./options\"\nimport PollInfo from \"../info\"\n\nexport default function (props) {\n  return (\n    <div className=\"panel panel-default panel-poll\">\n      <div className=\"panel-body\">\n        <h2>{props.poll.question}</h2>\n        <PollInfo poll={props.poll} />\n        <Chart poll={props.poll} />\n        <Options\n          isPollOver={props.isPollOver}\n          poll={props.poll}\n          showVoting={props.showVoting}\n          thread={props.thread}\n        />\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nconst DATE_ABBR = '<abbr title=\"%(absolute)s\">%(relative)s</abbr>'\nconst USER_SPAN = '<span class=\"item-title\">%(user)s</span>'\nconst USER_URL = '<a href=\"%(url)s\" class=\"item-title\">%(user)s</a>'\n\nexport default function (props) {\n  return (\n    <ul className=\"list-unstyled list-inline poll-help\">\n      <PollChoicesLeft choicesLeft={props.choicesLeft} />\n      <PollAllowRevote poll={props.poll} />\n    </ul>\n  )\n}\n\nexport function PollChoicesLeft({ choicesLeft }) {\n  if (choicesLeft === 0) {\n    return (\n      <li className=\"poll-help-choices-left\">\n        {gettext(\"You can't select any more choices.\")}\n      </li>\n    )\n  }\n\n  const message = ngettext(\n    \"You can select %(choices)s more choice.\",\n    \"You can select %(choices)s more choices.\",\n    choicesLeft\n  )\n\n  const label = interpolate(\n    message,\n    {\n      choices: choicesLeft,\n    },\n    true\n  )\n\n  return <li className=\"poll-help-choices-left\">{label}</li>\n}\n\nexport function PollAllowRevote(props) {\n  if (props.poll.allow_revotes) {\n    return (\n      <li className=\"poll-help-allow-revotes\">\n        {gettext(\"You can change your vote later.\")}\n      </li>\n    )\n  }\n\n  return <li className=\"poll-help-no-revotes\">{gettext(\"Votes are final.\")}</li>\n}\n","import React from \"react\"\n\nexport default function (props) {\n  return (\n    <ul className=\"list-unstyled poll-select-choices\">\n      {props.choices.map((choice) => {\n        return (\n          <ChoiceSelect\n            choice={choice}\n            key={choice.hash}\n            toggleChoice={props.toggleChoice}\n          />\n        )\n      })}\n    </ul>\n  )\n}\n\nexport class ChoiceSelect extends React.Component {\n  onClick = () => {\n    this.props.toggleChoice(this.props.choice.hash)\n  }\n\n  render() {\n    return (\n      <li className=\"poll-select-choice\">\n        <button\n          className={this.props.choice.selected ? \"btn btn-selected\" : \"btn\"}\n          onClick={this.onClick}\n          type=\"button\"\n        >\n          <span className=\"material-icon\">\n            {this.props.choice.selected\n              ? \"check_box\"\n              : \"check_box_outline_blank\"}\n          </span>\n          <strong>{this.props.choice.label}</strong>\n        </button>\n      </li>\n    )\n  }\n}\n","export function getChoiceFromHash(choices, hash) {\n  for (const i in choices) {\n    const choice = choices[i]\n    if (choice.hash === hash) {\n      return choice\n    }\n  }\n\n  return null\n}\n\nexport function getChoicesLeft(poll, choices) {\n  let selection = []\n  for (const i in choices) {\n    const choice = choices[i]\n    if (choice.selected) {\n      selection.push(choice)\n    }\n  }\n\n  return poll.allowed_choices - selection.length\n}\n","import React from \"react\"\nimport ChoicesHelp from \"./help\"\nimport ChoicesSelect from \"./select\"\nimport { getChoicesLeft, getChoiceFromHash } from \"./utils\"\nimport PollInfo from \"../info\"\nimport { Delete, Edit, getClassName } from \"../results/options\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport * as poll from \"misago/reducers/poll\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      choices: props.poll.choices,\n      choicesLeft: getChoicesLeft(props.poll, props.poll.choices),\n    }\n  }\n\n  toggleChoice = (hash) => {\n    const choice = getChoiceFromHash(this.state.choices, hash)\n\n    let choices = null\n    if (!choice.selected) {\n      choices = this.selectChoice(choice, hash)\n    } else {\n      choices = this.deselectChoice(choice, hash)\n    }\n\n    this.setState({\n      choices,\n      choicesLeft: getChoicesLeft(this.props.poll, choices),\n    })\n  }\n\n  selectChoice = (choice, hash) => {\n    const choicesLeft = getChoicesLeft(this.props.poll, this.state.choices)\n\n    if (!choicesLeft) {\n      for (const i in this.state.choices.slice()) {\n        const item = this.state.choices[i]\n        if (item.selected && item.hash != hash) {\n          item.selected = false\n          break\n        }\n      }\n    }\n\n    return this.state.choices.map((choice) => {\n      return Object.assign({}, choice, {\n        selected: choice.hash == hash ? true : choice.selected,\n      })\n    })\n  }\n\n  deselectChoice = (choice, hash) => {\n    return this.state.choices.map((choice) => {\n      return Object.assign({}, choice, {\n        selected: choice.hash == hash ? false : choice.selected,\n      })\n    })\n  }\n\n  clean() {\n    if (this.state.choicesLeft === this.props.poll.allowed_choices) {\n      snackbar.error(gettext(\"You need to select at least one choice\"))\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    let data = []\n    for (const i in this.state.choices.slice()) {\n      const item = this.state.choices[i]\n      if (item.selected) {\n        data.push(item.hash)\n      }\n    }\n\n    return ajax.post(this.props.poll.api.votes, data)\n  }\n\n  handleSuccess(data) {\n    store.dispatch(poll.replace(data))\n    snackbar.success(gettext(\"Your vote has been saved.\"))\n\n    this.props.showResults()\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      snackbar.error(rejection.detail)\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    const controls = []\n\n    if (this.props.poll.acl.can_vote) controls.push(0)\n    if (this.props.poll.is_public || this.props.poll.acl.can_see_votes)\n      controls.push(1)\n    if (this.props.poll.acl.can_edit) controls.push(2)\n    if (this.props.poll.acl.can_delete) controls.push(3)\n\n    return (\n      <div className=\"panel panel-default panel-poll\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"panel-body\">\n            <h2>{this.props.poll.question}</h2>\n            <PollInfo poll={this.props.poll} />\n            <ChoicesSelect\n              choices={this.state.choices}\n              toggleChoice={this.toggleChoice}\n            />\n            <ChoicesHelp\n              choicesLeft={this.state.choicesLeft}\n              poll={this.props.poll}\n            />\n          </div>\n          <div className=\"panel-footer\">\n            <div className=\"row\">\n              <div className={getClassName(controls, 0)}>\n                <Button\n                  className=\"btn-primary btn-block btn-sm\"\n                  loading={this.state.isLoading}\n                >\n                  {gettext(\"Save your vote\")}\n                </Button>\n              </div>\n              <div className={getClassName(controls, 1)}>\n                <button\n                  className=\"btn btn-default btn-block btn-sm\"\n                  disabled={this.state.isLoading}\n                  onClick={this.props.showResults}\n                  type=\"button\"\n                >\n                  {gettext(\"See results\")}\n                </button>\n              </div>\n              <Edit\n                controls={controls}\n                poll={this.props.poll}\n                thread={this.props.thread}\n              />\n              <Delete controls={controls} poll={this.props.poll} />\n            </div>\n          </div>\n        </form>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport moment from \"moment\"\nimport Results from \"./results\"\nimport Voting from \"./voting\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    let showResults = true\n    if (props.user.id && !props.poll.hasSelectedChoices) {\n      showResults = false\n    }\n\n    this.state = {\n      showResults,\n    }\n  }\n\n  showResults = () => {\n    this.setState({\n      showResults: true,\n    })\n  }\n\n  showVoting = () => {\n    this.setState({\n      showResults: false,\n    })\n  }\n\n  render() {\n    if (!this.props.thread.poll) return null\n\n    const isPollOver = getIsPollOver(this.props.poll)\n\n    if (\n      !isPollOver &&\n      this.props.poll.acl.can_vote &&\n      !this.state.showResults\n    ) {\n      return <Voting showResults={this.showResults} {...this.props} />\n    } else {\n      return (\n        <Results\n          isPollOver={isPollOver}\n          showVoting={this.showVoting}\n          {...this.props}\n        />\n      )\n    }\n  }\n}\n\nexport function getIsPollOver(poll) {\n  if (poll.length) {\n    return moment().isAfter(poll.endsOn)\n  }\n  return false\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  onAdd = () => {\n    let choices = this.props.choices.slice()\n    choices.push({\n      hash: generateRandomHash(),\n      label: \"\",\n    })\n\n    this.props.setChoices(choices)\n  }\n\n  onChange = (hash, label) => {\n    const choices = this.props.choices.map((choice) => {\n      if (choice.hash === hash) {\n        choice.label = label\n      }\n\n      return choice\n    })\n    this.props.setChoices(choices)\n  }\n\n  onDelete = (hash) => {\n    const choices = this.props.choices.filter((choice) => {\n      return choice.hash !== hash\n    })\n    this.props.setChoices(choices)\n  }\n\n  render() {\n    return (\n      <div className=\"poll-choices-control\">\n        <ul className=\"list-group\">\n          {this.props.choices.map((choice) => {\n            return (\n              <PollChoice\n                canDelete={this.props.choices.length > 2}\n                choice={choice}\n                disabled={this.props.disabled}\n                key={choice.hash}\n                onChange={this.onChange}\n                onDelete={this.onDelete}\n              />\n            )\n          })}\n        </ul>\n        <button\n          className=\"btn btn-default btn-sm\"\n          disabled={this.props.disabled}\n          onClick={this.onAdd}\n          type=\"button\"\n        >\n          {gettext(\"Add choice\")}\n        </button>\n      </div>\n    )\n  }\n}\n\nexport class PollChoice extends React.Component {\n  onChange = (event) => {\n    this.props.onChange(this.props.choice.hash, event.target.value)\n  }\n\n  onDelete = () => {\n    const deleteItem = window.confirm(\n      gettext(\"Are you sure you want to delete this choice?\")\n    )\n    if (deleteItem) {\n      this.props.onDelete(this.props.choice.hash)\n    }\n  }\n\n  render() {\n    return (\n      <li className=\"list-group-item\">\n        <button\n          className=\"btn\"\n          disabled={!this.props.canDelete || this.props.disabled}\n          onClick={this.onDelete}\n          title={gettext(\"Delete this choice\")}\n          type=\"button\"\n        >\n          <span className=\"material-icon\">close</span>\n        </button>\n        <input\n          disabled={this.props.disabled}\n          maxLength=\"255\"\n          placeholder={gettext(\"choice label\")}\n          type=\"text\"\n          onChange={this.onChange}\n          value={this.props.choice.label}\n        />\n      </li>\n    )\n  }\n}\n\nexport function generateRandomHash() {\n  let randomHash = \"\"\n  while (randomHash.length != 12) {\n    randomHash = Math.random()\n      .toString(36)\n      .replace(/[^a-zA-Z0-9]+/g, \"\")\n      .substr(1, 12)\n  }\n  return randomHash\n}\n","import React from \"react\"\nimport ChoicesControl from \"./choices-control\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport YesNoSwitch from \"misago/components/yes-no-switch\"\nimport * as poll from \"misago/reducers/poll\"\nimport ajax from \"misago/services/ajax\"\nimport posting from \"misago/services/posting\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    const poll = props.poll || {\n      question: \"\",\n      choices: [\n        {\n          hash: \"choice-10000\",\n          label: \"\",\n        },\n        {\n          hash: \"choice-20000\",\n          label: \"\",\n        },\n      ],\n      length: 0,\n      allowed_choices: 1,\n      allow_revotes: 0,\n      is_public: 0,\n    }\n\n    this.state = {\n      isLoading: false,\n      isEdit: !!poll.question,\n\n      question: poll.question,\n      choices: poll.choices,\n      length: poll.length,\n      allowed_choices: poll.allowed_choices,\n      allow_revotes: poll.allow_revotes,\n      is_public: poll.is_public,\n\n      validators: {\n        question: [],\n        choices: [],\n        length: [],\n        allowed_choices: [],\n      },\n\n      errors: {},\n    }\n  }\n\n  setChoices = (choices) => {\n    const errors = Object.assign({}, errors, { choices: null })\n\n    this.setState({\n      choices,\n      errors,\n    })\n  }\n\n  onCancel = () => {\n    const cancel = window.confirm(\n      gettext(\"Are you sure you want to discard poll?\")\n    )\n    if (cancel) {\n      posting.close()\n    }\n  }\n\n  send() {\n    const data = {\n      question: this.state.question,\n      choices: this.state.choices,\n      length: this.state.length,\n      allowed_choices: this.state.allowed_choices,\n      allow_revotes: this.state.allow_revotes,\n      is_public: this.state.is_public,\n    }\n\n    if (this.state.isEdit) {\n      return ajax.put(this.props.poll.api.index, data)\n    } else {\n      return ajax.post(this.props.thread.api.poll, data)\n    }\n  }\n\n  handleSuccess(data) {\n    store.dispatch(poll.replace(data))\n\n    if (this.state.isEdit) {\n      snackbar.success(gettext(\"Poll has been edited.\"))\n    } else {\n      snackbar.success(gettext(\"Poll has been posted.\"))\n    }\n\n    posting.close()\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      if (rejection.non_field_errors) {\n        rejection.allowed_choices = rejection.non_field_errors\n      }\n\n      this.setState({\n        errors: Object.assign({}, rejection),\n      })\n\n      snackbar.error(gettext(\"Form contains errors.\"))\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"poll-form\">\n        <div className=\"container\">\n          <form onSubmit={this.handleSubmit}>\n            <div className=\"panel panel-default panel-form\">\n              <div className=\"panel-body\">\n                <fieldset>\n                  <legend>{gettext(\"Question and choices\")}</legend>\n\n                  <FormGroup\n                    label={gettext(\"Poll question\")}\n                    for=\"id_questions\"\n                    validation={this.state.errors.question}\n                  >\n                    <input\n                      className=\"form-control\"\n                      disabled={this.state.isLoading}\n                      id=\"id_questions\"\n                      onChange={this.bindInput(\"question\")}\n                      type=\"text\"\n                      maxLength=\"255\"\n                      value={this.state.question}\n                    />\n                  </FormGroup>\n\n                  <FormGroup\n                    label={gettext(\"Available choices\")}\n                    validation={this.state.errors.choices}\n                  >\n                    <ChoicesControl\n                      choices={this.state.choices}\n                      disabled={this.state.isLoading}\n                      setChoices={this.setChoices}\n                    />\n                  </FormGroup>\n                </fieldset>\n\n                <fieldset>\n                  <legend>{gettext(\"Voting\")}</legend>\n\n                  <div className=\"row\">\n                    <div className=\"col-xs-12 col-sm-6\">\n                      <FormGroup\n                        label={gettext(\"Poll length\")}\n                        helpText={gettext(\n                          \"Enter number of days for which voting in this poll should be possible or zero to run this poll indefinitely.\"\n                        )}\n                        for=\"id_length\"\n                        validation={this.state.errors.length}\n                      >\n                        <input\n                          className=\"form-control\"\n                          disabled={this.state.isLoading}\n                          id=\"id_length\"\n                          onChange={this.bindInput(\"length\")}\n                          type=\"text\"\n                          value={this.state.length}\n                        />\n                      </FormGroup>\n                    </div>\n                    <div className=\"col-xs-12 col-sm-6\">\n                      <FormGroup\n                        label={gettext(\"Allowed choices\")}\n                        for=\"id_allowed_choices\"\n                        validation={this.state.errors.allowed_choices}\n                      >\n                        <input\n                          className=\"form-control\"\n                          disabled={this.state.isLoading}\n                          id=\"id_allowed_choices\"\n                          onChange={this.bindInput(\"allowed_choices\")}\n                          type=\"text\"\n                          maxLength=\"255\"\n                          value={this.state.allowed_choices}\n                        />\n                      </FormGroup>\n                    </div>\n                  </div>\n\n                  <div className=\"row\">\n                    <PollPublicSwitch\n                      bindInput={this.bindInput}\n                      disabled={this.state.isLoading}\n                      isEdit={this.state.isEdit}\n                      value={this.state.is_public}\n                    />\n                    <div className=\"col-xs-12 col-sm-6\">\n                      <FormGroup\n                        label={gettext(\"Allow vote changes\")}\n                        for=\"id_allow_revotes\"\n                      >\n                        <YesNoSwitch\n                          id=\"id_allow_revotes\"\n                          disabled={this.state.isLoading}\n                          iconOn=\"check\"\n                          iconOff=\"close\"\n                          labelOn={gettext(\n                            \"Allow participants to change their vote\"\n                          )}\n                          labelOff={gettext(\n                            \"Don't allow participants to change their vote\"\n                          )}\n                          onChange={this.bindInput(\"allow_revotes\")}\n                          value={this.state.allow_revotes}\n                        />\n                      </FormGroup>\n                    </div>\n                  </div>\n                </fieldset>\n              </div>\n              <div className=\"panel-footer text-right\">\n                <button\n                  className=\"btn btn-default\"\n                  disabled={this.state.isLoading}\n                  onClick={this.onCancel}\n                  type=\"button\"\n                >\n                  {gettext(\"Cancel\")}\n                </button>{\" \"}\n                <Button className=\"btn-primary\" loading={this.state.isLoading}>\n                  {this.state.isEdit\n                    ? gettext(\"Save changes\")\n                    : gettext(\"Post poll\")}\n                </Button>\n              </div>\n            </div>\n          </form>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport function PollPublicSwitch(props) {\n  if (props.isEdit) return null\n\n  return (\n    <div className=\"col-xs-12 col-sm-6\">\n      <FormGroup\n        label={gettext(\"Make voting public\")}\n        helpText={gettext(\n          \"Making voting public will allow everyone to access detailed list of votes, showing which users voted for which choices and at which times. This option can't be changed after poll's creation. Moderators may see voting details for all polls.\"\n        )}\n        for=\"id_is_public\"\n      >\n        <YesNoSwitch\n          id=\"id_is_public\"\n          disabled={props.disabled}\n          iconOn=\"visibility\"\n          iconOff=\"visibility_off\"\n          labelOn={gettext(\"Votes are public\")}\n          labelOff={gettext(\"Votes are hidden\")}\n          onChange={props.bindInput(\"is_public\")}\n          value={props.value}\n        />\n      </FormGroup>\n    </div>\n  )\n}\n","import React from \"react\"\nimport MisagoMarkup from \"misago/components/misago-markup\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nexport default function (props) {\n  if (props.post.content) {\n    return <Default {...props} />\n  } else {\n    return <Invalid {...props} />\n  }\n}\n\nexport function Default(props) {\n  return (\n    <div className=\"post-body\">\n      <MisagoMarkup markup={props.post.content} />\n    </div>\n  )\n}\n\nexport function Invalid(props) {\n  return (\n    <div className=\"post-body post-body-invalid\">\n      <p className=\"lead\">\n        {gettext(\"This post's contents cannot be displayed.\")}\n      </p>\n      <p className=\"text-muted\">\n        {gettext(\"This error is caused by invalid post content manipulation.\")}\n      </p>\n    </div>\n  )\n}\n","import React from \"react\"\n\nexport default function ({ post }) {\n  const { category, thread } = post\n\n  const tooltip = interpolate(\n    gettext(\"posted %(posted_on)s\"),\n    {\n      posted_on: post.posted_on.format(\"LL, LT\"),\n    },\n    true\n  )\n\n  return (\n    <div className=\"post-heading\">\n      <a className=\"btn btn-link item-title\" href={thread.url}>\n        {thread.title}\n      </a>\n      <a className=\"btn btn-link post-category\" href={category.url.index}>\n        {category.name}\n      </a>\n      <a\n        href={post.url.index}\n        className=\"btn btn-link posted-on\"\n        title={tooltip}\n      >\n        {post.posted_on.fromNow()}\n      </a>\n    </div>\n  )\n}\n","import React from \"react\"\n\nexport default function ({ post }) {\n  return (\n    <a className=\"btn btn-default btn-icon pull-right\" href={post.url.index}>\n      <span className=\"btn-text-left hidden-xs\">{gettext(\"See post\")}</span>\n      <span className=\"material-icon\">chevron_right</span>\n    </a>\n  )\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport GoToButton from \"./button\"\n\nexport default function ({ post }) {\n  return (\n    <div className=\"post-side post-side-anonymous\">\n      <GoToButton post={post} />\n      <div className=\"media\">\n        <div className=\"media-left\">\n          <span>\n            <Avatar className=\"poster-avatar\" size={50} />\n          </span>\n        </div>\n        <div className=\"media-body\">\n          <div className=\"media-heading\">\n            <span className=\"item-title\">{post.poster_name}</span>\n          </div>\n          <span className=\"user-title user-title-anonymous\">\n            {gettext(\"Removed user\")}\n          </span>\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\n\nexport default function ({ rank, title }) {\n  let userTitle = title || rank.title || rank.name\n\n  let className = \"user-title\"\n  if (rank.css_class) {\n    className += \" user-title-\" + rank.css_class\n  }\n\n  if (rank.is_tab) {\n    return (\n      <a className={className} href={rank.url}>\n        {userTitle}\n      </a>\n    )\n  }\n\n  return <span className={className}>{userTitle}</span>\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport GoToButton from \"./button\"\nimport UserTitle from \"./user-title\"\n\nexport default function ({ post, poster }) {\n  return (\n    <div className=\"post-side post-side-registered\">\n      <GoToButton post={post} />\n      <div className=\"media\">\n        <div className=\"media-left\">\n          <a href={poster.url}>\n            <Avatar className=\"poster-avatar\" size={50} user={poster} />\n          </a>\n        </div>\n        <div className=\"media-body\">\n          <div className=\"media-heading\">\n            <a className=\"item-title\" href={poster.url}>\n              {poster.username}\n            </a>\n          </div>\n          <UserTitle title={poster.title} rank={poster.rank} />\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Anonymous from \"./anonymous\"\nimport Registered from \"./registered\"\n\nexport default function ({ post, poster }) {\n  if (poster && poster.id) {\n    return <Registered post={post} poster={poster} />\n  }\n\n  return <Anonymous post={post} />\n}\n","import React from \"react\"\nimport Body from \"./body\"\nimport Header from \"./header\"\nimport PostSide from \"./post-side\"\n\nexport default function ({ post, poster }) {\n  const user = poster || post.poster\n\n  let className = \"post\"\n  if (user && user.rank.css_class) {\n    className += \" post-\" + user.rank.css_class\n  }\n\n  return (\n    <li className={className} id={\"post-\" + post.id}>\n      <div className=\"panel panel-default panel-post\">\n        <div className=\"panel-body\">\n          <PostSide post={post} poster={user} />\n          <Header post={post} />\n          <Body post={post} />\n        </div>\n      </div>\n    </li>\n  )\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport * as random from \"misago/utils/random\"\n\nexport default function () {\n  return (\n    <ul className=\"posts-list post-feed ui-preview\">\n      <li className=\"post\">\n        <div className=\"panel panel-default panel-post\">\n          <div className=\"panel-body\">\n            <div className=\"post-side post-side-anonymous\">\n              <div className=\"media\">\n                <div className=\"media-left\">\n                  <span>\n                    <Avatar className=\"poster-avatar\" size={50} />\n                  </span>\n                </div>\n                <div className=\"media-body\">\n                  <div className=\"media-heading\">\n                    <span className=\"item-title\">\n                      <span\n                        className=\"ui-preview-text\"\n                        style={{ width: random.int(30, 200) + \"px\" }}\n                      >\n                        &nbsp;\n                      </span>\n                    </span>\n                  </div>\n                  <span className=\"user-title user-title-anonymous\">\n                    <span\n                      className=\"ui-preview-text\"\n                      style={{ width: random.int(30, 200) + \"px\" }}\n                    >\n                      &nbsp;\n                    </span>\n                  </span>\n                </div>\n              </div>\n            </div>\n            <div className=\"post-heading\">\n              <span\n                className=\"ui-preview-text\"\n                style={{ width: random.int(30, 200) + \"px\" }}\n              >\n                &nbsp;\n              </span>\n            </div>\n            <div className=\"post-body\">\n              <article className=\"misago-markup\">\n                <p>\n                  <span\n                    className=\"ui-preview-text\"\n                    style={{ width: random.int(30, 200) + \"px\" }}\n                  >\n                    &nbsp;\n                  </span>\n                  &nbsp;\n                  <span\n                    className=\"ui-preview-text\"\n                    style={{ width: random.int(30, 200) + \"px\" }}\n                  >\n                    &nbsp;\n                  </span>\n                  &nbsp;\n                  <span\n                    className=\"ui-preview-text\"\n                    style={{ width: random.int(30, 200) + \"px\" }}\n                  >\n                    &nbsp;\n                  </span>\n                </p>\n              </article>\n            </div>\n          </div>\n        </div>\n      </li>\n    </ul>\n  )\n}\n","import React from \"react\"\nimport Post from \"./post\"\nimport Preview from \"./preview\"\n\nexport default function ({ isReady, posts, poster }) {\n  if (!isReady) {\n    return <Preview />\n  }\n\n  return (\n    <ul className=\"posts-list post-feed ui-ready\">\n      {posts.map((post) => {\n        return <Post key={post.id} post={post} poster={poster} />\n      })}\n    </ul>\n  )\n}\n","import { maxLength, minLength } from \"misago/utils/validators\"\nimport misago from \"misago\"\n\nexport function getTitleValidators() {\n  return [getTitleLengthMin(), getTitleLengthMax()]\n}\n\nexport function getPostValidators() {\n  if (misago.get(\"SETTINGS\").post_length_max) {\n    return [validatePostLengthMin(), validatePostLengthMax()]\n  } else {\n    return [validatePostLengthMin()]\n  }\n}\n\nexport function getTitleLengthMin() {\n  return minLength(\n    misago.get(\"SETTINGS\").thread_title_length_min,\n    (limitValue, length) => {\n      const message = ngettext(\n        \"Thread title should be at least %(limit_value)s character long (it has %(show_value)s).\",\n        \"Thread title should be at least %(limit_value)s characters long (it has %(show_value)s).\",\n        limitValue\n      )\n\n      return interpolate(\n        message,\n        {\n          limit_value: limitValue,\n          show_value: length,\n        },\n        true\n      )\n    }\n  )\n}\n\nexport function getTitleLengthMax() {\n  return maxLength(\n    misago.get(\"SETTINGS\").thread_title_length_max,\n    (limitValue, length) => {\n      const message = ngettext(\n        \"Thread title cannot be longer than %(limit_value)s character (it has %(show_value)s).\",\n        \"Thread title cannot be longer than %(limit_value)s characters (it has %(show_value)s).\",\n        limitValue\n      )\n\n      return interpolate(\n        message,\n        {\n          limit_value: limitValue,\n          show_value: length,\n        },\n        true\n      )\n    }\n  )\n}\n\nexport function validatePostLengthMin() {\n  return minLength(\n    misago.get(\"SETTINGS\").post_length_min,\n    (limitValue, length) => {\n      const message = ngettext(\n        \"Posted message should be at least %(limit_value)s character long (it has %(show_value)s).\",\n        \"Posted message should be at least %(limit_value)s characters long (it has %(show_value)s).\",\n        limitValue\n      )\n\n      return interpolate(\n        message,\n        {\n          limit_value: limitValue,\n          show_value: length,\n        },\n        true\n      )\n    }\n  )\n}\n\nexport function validatePostLengthMax() {\n  return maxLength(\n    misago.get(\"SETTINGS\").post_length_max || 1000000,\n    (limitValue, length) => {\n      const message = ngettext(\n        \"Posted message cannot be longer than %(limit_value)s character (it has %(show_value)s).\",\n        \"Posted message cannot be longer than %(limit_value)s characters (it has %(show_value)s).\",\n        limitValue\n      )\n\n      return interpolate(\n        message,\n        {\n          limit_value: limitValue,\n          show_value: length,\n        },\n        true\n      )\n    }\n  )\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  getChoice() {\n    let choice = null\n    this.props.choices.map((item) => {\n      if (item.value === this.props.value) {\n        choice = item\n      }\n    })\n    return choice\n  }\n\n  getIcon() {\n    return this.getChoice().icon\n  }\n\n  getLabel() {\n    return this.getChoice().label\n  }\n\n  change = (value) => {\n    return () => {\n      this.props.onChange({\n        target: {\n          value: value,\n        },\n      })\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"btn-group btn-select-group\">\n        <button\n          type=\"button\"\n          className=\"btn btn-select dropdown-toggle\"\n          id={this.props.id || null}\n          data-toggle=\"dropdown\"\n          aria-haspopup=\"true\"\n          aria-expanded=\"false\"\n          aria-describedby={this.props[\"aria-describedby\"] || null}\n          disabled={this.props.disabled || false}\n        >\n          <Icon icon={this.getIcon()} />\n          {this.getLabel()}\n        </button>\n        <ul className=\"dropdown-menu\">\n          {this.props.choices.map((item, i) => {\n            return (\n              <li key={i}>\n                <button\n                  type=\"button\"\n                  className=\"btn-link\"\n                  onClick={this.change(item.value)}\n                >\n                  <Icon icon={item.icon} />\n                  {item.label}\n                </button>\n              </li>\n            )\n          })}\n        </ul>\n      </div>\n    )\n  }\n}\n\nexport function Icon({ icon }) {\n  if (!icon) return null\n\n  return <span className=\"material-icon\">{icon}</span>\n}\n","import React from \"react\"\nimport misago from \"misago/index\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport StartSocialAuth from \"misago/components/StartSocialAuth\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport showBannedPage from \"misago/utils/banned-page\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n      showActivation: false,\n\n      username: \"\",\n      password: \"\",\n\n      validators: {\n        username: [],\n        password: [],\n      },\n    }\n  }\n\n  clean() {\n    if (!this.isValid()) {\n      snackbar.error(gettext(\"Fill out both fields.\"))\n      return false\n    } else {\n      return true\n    }\n  }\n\n  send() {\n    return ajax.post(misago.get(\"AUTH_API\"), {\n      username: this.state.username,\n      password: this.state.password,\n    })\n  }\n\n  handleSuccess() {\n    let form = $(\"#hidden-login-form\")\n\n    form.append('<input type=\"text\" name=\"username\" />')\n    form.append('<input type=\"password\" name=\"password\" />')\n\n    // fill out form with user credentials and submit it, this will tell\n    // Misago to redirect user back to right page, and will trigger browser's\n    // key ring feature\n    form.find('input[type=\"hidden\"]').val(ajax.getCsrfToken())\n    form.find('input[name=\"redirect_to\"]').val(window.location.pathname)\n    form.find('input[name=\"username\"]').val(this.state.username)\n    form.find('input[name=\"password\"]').val(this.state.password)\n    form.submit()\n\n    // keep form loading\n    this.setState({\n      isLoading: true,\n    })\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      if (rejection.code === \"inactive_admin\") {\n        snackbar.info(rejection.detail)\n      } else if (rejection.code === \"inactive_user\") {\n        snackbar.info(rejection.detail)\n        this.setState({\n          showActivation: true,\n        })\n      } else if (rejection.code === \"banned\") {\n        showBannedPage(rejection.detail)\n        modal.hide()\n      } else {\n        snackbar.error(rejection.detail)\n      }\n    } else if (rejection.status === 403 && rejection.ban) {\n      showBannedPage(rejection.ban)\n      modal.hide()\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  getActivationButton() {\n    if (!this.state.showActivation) return null\n\n    return (\n      <a\n        className=\"btn btn-success btn-block\"\n        href={misago.get(\"REQUEST_ACTIVATION_URL\")}\n      >\n        {gettext(\"Activate account\")}\n      </a>\n    )\n  }\n\n  render() {\n    return (\n      <div className=\"modal-dialog modal-sm modal-sign-in\" role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              aria-label={gettext(\"Close\")}\n              className=\"close\"\n              data-dismiss=\"modal\"\n              type=\"button\"\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Sign in\")}</h4>\n          </div>\n          <form onSubmit={this.handleSubmit}>\n            <div className=\"modal-body\">\n              <StartSocialAuth\n                buttonLabel={gettext(\"Sign in with %(site)s\")}\n                formLabel={gettext(\"Or use your forum account:\")}\n                labelClassName=\"text-center\"\n              />\n\n              <div className=\"form-group\">\n                <div className=\"control-input\">\n                  <input\n                    className=\"form-control input-lg\"\n                    disabled={this.state.isLoading}\n                    id=\"id_username\"\n                    onChange={this.bindInput(\"username\")}\n                    placeholder={gettext(\"Username or e-mail\")}\n                    type=\"text\"\n                    value={this.state.username}\n                  />\n                </div>\n              </div>\n\n              <div className=\"form-group\">\n                <div className=\"control-input\">\n                  <input\n                    className=\"form-control input-lg\"\n                    disabled={this.state.isLoading}\n                    id=\"id_password\"\n                    onChange={this.bindInput(\"password\")}\n                    placeholder={gettext(\"Password\")}\n                    type=\"password\"\n                    value={this.state.password}\n                  />\n                </div>\n              </div>\n            </div>\n            <div className=\"modal-footer\">\n              {this.getActivationButton()}\n              <Button\n                className=\"btn-primary btn-block\"\n                loading={this.state.isLoading}\n              >\n                {gettext(\"Sign in\")}\n              </Button>\n              <a\n                className=\"btn btn-default btn-block\"\n                href={misago.get(\"FORGOTTEN_PASSWORD_URL\")}\n              >\n                {gettext(\"Forgot password?\")}\n              </a>\n            </div>\n          </form>\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  getClass() {\n    return getStatusClassName(this.props.status)\n  }\n\n  render() {\n    return <span className={this.getClass()}>{this.props.children}</span>\n  }\n}\n\nexport class StatusIcon extends React.Component {\n  getIcon() {\n    if (this.props.status.is_banned) {\n      return \"remove_circle_outline\"\n    } else if (this.props.status.is_hidden) {\n      return \"help_outline\"\n    } else if (this.props.status.is_online_hidden) {\n      return \"label\"\n    } else if (this.props.status.is_offline_hidden) {\n      return \"label_outline\"\n    } else if (this.props.status.is_online) {\n      return \"lens\"\n    } else if (this.props.status.is_offline) {\n      return \"panorama_fish_eye\"\n    }\n  }\n\n  render() {\n    return <span className=\"material-icon status-icon\">{this.getIcon()}</span>\n  }\n}\n\nexport class StatusLabel extends React.Component {\n  getHelp() {\n    return getStatusDescription(this.props.user, this.props.status)\n  }\n\n  getLabel() {\n    if (this.props.status.is_banned) {\n      return gettext(\"Banned\")\n    } else if (this.props.status.is_hidden) {\n      return gettext(\"Hidden\")\n    } else if (this.props.status.is_online_hidden) {\n      return gettext(\"Online (hidden)\")\n    } else if (this.props.status.is_offline_hidden) {\n      return gettext(\"Offline (hidden)\")\n    } else if (this.props.status.is_online) {\n      return gettext(\"Online\")\n    } else if (this.props.status.is_offline) {\n      return gettext(\"Offline\")\n    }\n  }\n\n  render() {\n    return (\n      <span\n        className={this.props.className || \"status-label\"}\n        title={this.getHelp()}\n      >\n        {this.getLabel()}\n      </span>\n    )\n  }\n}\n\nexport function getStatusClassName(status) {\n  let className = \"\"\n  if (status.is_banned) {\n    className = \"banned\"\n  } else if (status.is_hidden) {\n    className = \"offline\"\n  } else if (status.is_online_hidden) {\n    className = \"online\"\n  } else if (status.is_offline_hidden) {\n    className = \"offline\"\n  } else if (status.is_online) {\n    className = \"online\"\n  } else if (status.is_offline) {\n    className = \"offline\"\n  }\n\n  return \"user-status user-\" + className\n}\n\nexport function getStatusDescription(user, status) {\n  if (status.is_banned) {\n    if (status.banned_until) {\n      return interpolate(\n        gettext(\"%(username)s is banned until %(ban_expires)s\"),\n        {\n          username: user.username,\n          ban_expires: status.banned_until.format(\"LL, LT\"),\n        },\n        true\n      )\n    } else {\n      return interpolate(\n        gettext(\"%(username)s is banned\"),\n        {\n          username: user.username,\n        },\n        true\n      )\n    }\n  } else if (status.is_hidden) {\n    return interpolate(\n      gettext(\"%(username)s is hiding presence\"),\n      {\n        username: user.username,\n      },\n      true\n    )\n  } else if (status.is_online_hidden) {\n    return interpolate(\n      gettext(\"%(username)s is online (hidden)\"),\n      {\n        username: user.username,\n      },\n      true\n    )\n  } else if (status.is_offline_hidden) {\n    return interpolate(\n      gettext(\"%(username)s was last seen %(last_click)s (hidden)\"),\n      {\n        username: user.username,\n        last_click: status.last_click.fromNow(),\n      },\n      true\n    )\n  } else if (status.is_online) {\n    return interpolate(\n      gettext(\"%(username)s is online\"),\n      {\n        username: user.username,\n      },\n      true\n    )\n  } else if (status.is_offline) {\n    return interpolate(\n      gettext(\"%(username)s was last seen %(last_click)s\"),\n      {\n        username: user.username,\n        last_click: status.last_click.fromNow(),\n      },\n      true\n    )\n  }\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  getEmptyMessage() {\n    if (this.props.emptyMessage) {\n      return this.props.emptyMessage\n    } else {\n      return gettext(\"No name changes have been recorded for your account.\")\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"username-history ui-ready\">\n        <ul className=\"list-group\">\n          <li className=\"list-group-item empty-message\">\n            {this.getEmptyMessage()}\n          </li>\n        </ul>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\n\nexport default class extends React.Component {\n  renderUserAvatar() {\n    if (this.props.change.changed_by) {\n      return (\n        <a\n          href={this.props.change.changed_by.url}\n          className=\"user-avatar-wrapper\"\n        >\n          <Avatar user={this.props.change.changed_by} size=\"100\" />\n        </a>\n      )\n    } else {\n      return (\n        <span className=\"user-avatar-wrapper\">\n          <Avatar size=\"100\" />\n        </span>\n      )\n    }\n  }\n\n  renderUsername() {\n    if (this.props.change.changed_by) {\n      return (\n        <a href={this.props.change.changed_by.url} className=\"item-title\">\n          {this.props.change.changed_by.username}\n        </a>\n      )\n    } else {\n      return (\n        <span className=\"item-title\">\n          {this.props.change.changed_by_username}\n        </span>\n      )\n    }\n  }\n\n  render() {\n    return (\n      <li className=\"list-group-item\" key={this.props.change.id}>\n        <div className=\"change-avatar\">{this.renderUserAvatar()}</div>\n        <div className=\"change-author\">{this.renderUsername()}</div>\n        <div className=\"change\">\n          <span className=\"old-username\">{this.props.change.old_username}</span>\n          <span className=\"material-icon\">arrow_forward</span>\n          <span className=\"new-username\">{this.props.change.new_username}</span>\n        </div>\n        <div className=\"change-date\">\n          <abbr title={this.props.change.changed_on.format(\"LLL\")}>\n            {this.props.change.changed_on.fromNow()}\n          </abbr>\n        </div>\n      </li>\n    )\n  }\n}\n","import React from \"react\"\nimport Change from \"misago/components/username-history/change\"\n\nexport default class extends React.Component {\n  render() {\n    return (\n      <div className=\"username-history ui-ready\">\n        <ul className=\"list-group\">\n          {this.props.changes.map((change) => {\n            return <Change change={change} key={change.id} />\n          })}\n        </ul>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport * as random from \"misago/utils/random\"\n\nexport default class extends React.Component {\n  shouldComponentUpdate() {\n    return false\n  }\n\n  getClassName() {\n    if (this.props.hiddenOnMobile) {\n      return \"list-group-item hidden-xs hidden-sm\"\n    } else {\n      return \"list-group-item\"\n    }\n  }\n\n  render() {\n    return (\n      <li className={this.getClassName()}>\n        <div className=\"change-avatar\">\n          <span className=\"user-avatar\">\n            <Avatar size=\"100\" />\n          </span>\n        </div>\n        <div className=\"change-author\">\n          <span\n            className=\"ui-preview-text\"\n            style={{ width: random.int(30, 100) + \"px\" }}\n          >\n            &nbsp;\n          </span>\n        </div>\n        <div className=\"change\">\n          <span\n            className=\"ui-preview-text\"\n            style={{ width: random.int(30, 70) + \"px\" }}\n          >\n            &nbsp;\n          </span>\n          <span className=\"material-icon\">arrow_forward</span>\n          <span\n            className=\"ui-preview-text\"\n            style={{ width: random.int(30, 70) + \"px\" }}\n          >\n            &nbsp;\n          </span>\n        </div>\n        <div className=\"change-date\">\n          <span\n            className=\"ui-preview-text\"\n            style={{ width: random.int(80, 140) + \"px\" }}\n          >\n            &nbsp;\n          </span>\n        </div>\n      </li>\n    )\n  }\n}\n","import React from \"react\"\nimport ChangePreview from \"misago/components/username-history/change-preview\"\n\nexport default class extends React.Component {\n  shouldComponentUpdate() {\n    return false\n  }\n\n  render() {\n    return (\n      <div className=\"username-history ui-preview\">\n        <ul className=\"list-group\">\n          {[0, 1, 2].map((i) => {\n            return <ChangePreview hiddenOnMobile={i > 0} key={i} />\n          })}\n        </ul>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport ListEmpty from \"misago/components/username-history/list-empty\"\nimport ListReady from \"misago/components/username-history/list-ready\"\nimport ListPreview from \"misago/components/username-history/list-preview\"\n\nexport default class extends React.Component {\n  render() {\n    if (this.props.isLoaded) {\n      if (this.props.changes.length) {\n        return <ListReady changes={this.props.changes} />\n      } else {\n        return <ListEmpty emptyMessage={this.props.emptyMessage} />\n      }\n    } else {\n      return <ListPreview />\n    }\n  }\n}\n","import React from \"react\"\nimport UserStatus, { StatusLabel } from \"misago/components/user-status\"\n\nexport default function ({ showStatus, user }) {\n  return (\n    <ul className=\"list-unstyled\">\n      <Status showStatus={showStatus} user={user} />\n      <JoinDate user={user} />\n      <li className=\"user-stat-divider\" />\n      <Posts user={user} />\n      <Threads user={user} />\n      <Followers user={user} />\n    </ul>\n  )\n}\n\nexport function Status({ showStatus, user }) {\n  if (!showStatus) return null\n\n  return (\n    <li className=\"user-stat-status\">\n      <UserStatus status={user.status}>\n        <StatusLabel status={user.status} user={user} />\n      </UserStatus>\n    </li>\n  )\n}\n\nexport function JoinDate({ user }) {\n  const { joined_on } = user\n\n  let title = interpolate(\n    gettext(\"Joined on %(joined_on)s\"),\n    {\n      joined_on: joined_on.format(\"LL, LT\"),\n    },\n    true\n  )\n\n  let message = interpolate(\n    gettext(\"Joined %(joined_on)s\"),\n    {\n      joined_on: joined_on.fromNow(),\n    },\n    true\n  )\n\n  return (\n    <li className=\"user-stat-join-date\">\n      <abbr title={title}>{message}</abbr>\n    </li>\n  )\n}\n\nexport function Posts({ user }) {\n  const className = getStatClassName(\"user-stat-posts\", user.posts)\n  const message = ngettext(\"%(posts)s post\", \"%(posts)s posts\", user.posts)\n\n  return (\n    <li className={className}>\n      {interpolate(\n        message,\n        {\n          posts: user.posts,\n        },\n        true\n      )}\n    </li>\n  )\n}\n\nexport function Threads({ user }) {\n  const className = getStatClassName(\"user-stat-threads\", user.threads)\n  const message = ngettext(\n    \"%(threads)s thread\",\n    \"%(threads)s threads\",\n    user.threads\n  )\n\n  return (\n    <li className={className}>\n      {interpolate(\n        message,\n        {\n          threads: user.threads,\n        },\n        true\n      )}\n    </li>\n  )\n}\n\nexport function Followers({ user }) {\n  const className = getStatClassName(\"user-stat-followers\", user.followers)\n  const message = ngettext(\n    \"%(followers)s follower\",\n    \"%(followers)s followers\",\n    user.followers\n  )\n\n  return (\n    <li className={className}>\n      {interpolate(\n        message,\n        {\n          followers: user.followers,\n        },\n        true\n      )}\n    </li>\n  )\n}\n\nexport function getStatClassName(className, stat) {\n  if (stat === 0) {\n    return className + \" user-stat-empty\"\n  }\n  return className\n}\n","import React from \"react\"\n\nexport default function ({ rank, title }) {\n  let userTitle = title || rank.title || rank.name\n\n  let className = \"user-title\"\n  if (rank.css_class) {\n    className += \" user-title-\" + rank.css_class\n  }\n\n  if (rank.is_tab) {\n    return (\n      <a className={className} href={rank.url}>\n        {userTitle}\n      </a>\n    )\n  }\n\n  return <span className={className}>{userTitle}</span>\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport Stats from \"./stats\"\nimport UserTitle from \"./user-title\"\n\nexport default function ({ showStatus, user }) {\n  const { rank } = user\n\n  let className = \"panel user-card\"\n  if (rank.css_class) {\n    className += \" user-card-\" + rank.css_class\n  }\n\n  return (\n    <div className={className}>\n      <div className=\"panel-body\">\n        <div className=\"row\">\n          <div className=\"col-xs-3 user-card-left\">\n            <div className=\"user-card-small-avatar\">\n              <a href={user.url}>\n                <Avatar size=\"50\" size2x=\"80\" user={user} />\n              </a>\n            </div>\n          </div>\n          <div className=\"col-xs-9 col-sm-12 user-card-body\">\n            <div className=\"user-card-avatar\">\n              <a href={user.url}>\n                <Avatar size=\"150\" size2x=\"200\" user={user} />\n              </a>\n            </div>\n\n            <div className=\"user-card-username\">\n              <a href={user.url}>{user.username}</a>\n            </div>\n            <div className=\"user-card-title\">\n              <UserTitle rank={rank} title={user.title} />\n            </div>\n\n            <div className=\"user-card-stats\">\n              <Stats showStatus={showStatus} user={user} />\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport * as random from \"misago/utils/random\"\n\nexport default class extends React.Component {\n  shouldComponentUpdate() {\n    return false\n  }\n\n  render() {\n    return (\n      <div className=\"panel user-card user-card-preview\">\n        <div className=\"panel-body\">\n          <div className=\"row\">\n            <div className=\"col-xs-3 user-card-left\">\n              <div className=\"user-card-small-avatar\">\n                <span>\n                  <Avatar size=\"50\" size2x=\"80\" />\n                </span>\n              </div>\n            </div>\n            <div className=\"col-xs-9 col-sm-12 user-card-body\">\n              <div className=\"user-card-avatar\">\n                <span>\n                  <Avatar size=\"150\" size2x=\"200\" />\n                </span>\n              </div>\n\n              <div className=\"user-card-username\">\n                <span\n                  className=\"ui-preview-text\"\n                  style={{ width: random.int(60, 150) + \"px\" }}\n                >\n                  &nbsp;\n                </span>\n              </div>\n              <div className=\"user-card-title\">\n                <span\n                  className=\"ui-preview-text\"\n                  style={{ width: random.int(60, 150) + \"px\" }}\n                >\n                  &nbsp;\n                </span>\n              </div>\n\n              <div className=\"user-card-stats\">\n                <ul className=\"list-unstyled\">\n                  <li>\n                    <span\n                      className=\"ui-preview-text\"\n                      style={{ width: random.int(30, 70) + \"px\" }}\n                    >\n                      &nbsp;\n                    </span>\n                  </li>\n                  <li>\n                    <span\n                      className=\"ui-preview-text\"\n                      style={{ width: random.int(30, 70) + \"px\" }}\n                    >\n                      &nbsp;\n                    </span>\n                  </li>\n                  <li className=\"user-stat-divider\" />\n                  <li>\n                    <span\n                      className=\"ui-preview-text\"\n                      style={{ width: random.int(30, 70) + \"px\" }}\n                    >\n                      &nbsp;\n                    </span>\n                  </li>\n                  <li>\n                    <span\n                      className=\"ui-preview-text\"\n                      style={{ width: random.int(30, 70) + \"px\" }}\n                    >\n                      &nbsp;\n                    </span>\n                  </li>\n                </ul>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Card from \"./card\"\n\nexport default function ({ colClassName, cols }) {\n  const list = Array.apply(null, { length: cols }).map(Number.call, Number)\n\n  return (\n    <div className=\"users-cards-list ui-preview\">\n      <div className=\"row\">\n        {list.map((i) => {\n          let className = colClassName\n          if (i !== 0) className += \" hidden-xs\"\n          if (i === 3) className += \" hidden-sm\"\n\n          return (\n            <div className={className} key={i}>\n              <Card />\n            </div>\n          )\n        })}\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Card from \"./card\"\nimport Preview from \"./preview\"\n\nexport default function ({ cols, isReady, showStatus, users }) {\n  let colClassName = \"col-xs-12 col-sm-4\"\n  if (cols === 4) {\n    colClassName += \" col-md-3\"\n  }\n\n  if (!isReady) {\n    return <Preview colClassName={colClassName} cols={cols} />\n  }\n\n  return (\n    <div className=\"users-cards-list ui-ready\">\n      <div className=\"row\">\n        {users.map((user) => {\n          return (\n            <div className={colClassName} key={user.id}>\n              <Card showStatus={showStatus} user={user} />\n            </div>\n          )\n        })}\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      dropdown: false,\n    }\n  }\n\n  toggleNav = () => {\n    this.setState({\n      dropdown: !this.state.dropdown,\n    })\n  }\n\n  hideNav = () => {\n    this.setState({\n      dropdown: false,\n    })\n  }\n\n  getCompactNavClassName() {\n    if (this.state.dropdown) {\n      return \"compact-nav open\"\n    } else {\n      return \"compact-nav\"\n    }\n  }\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  getClassName() {\n    if (this.props.value) {\n      return \"btn btn-yes-no btn-yes-no-on\"\n    } else {\n      return \"btn btn-yes-no btn-yes-no-off\"\n    }\n  }\n\n  getIcon() {\n    if (!!this.props.value) {\n      return this.props.iconOn || \"check_box\"\n    } else {\n      return this.props.iconOff || \"check_box_outline_blank\"\n    }\n  }\n\n  getLabel() {\n    if (!!this.props.value) {\n      return this.props.labelOn || gettext(\"yes\")\n    } else {\n      return this.props.labelOff || gettext(\"no\")\n    }\n  }\n\n  toggle = () => {\n    this.props.onChange({\n      target: {\n        value: !this.props.value,\n      },\n    })\n  }\n\n  render() {\n    return (\n      <button\n        type=\"button\"\n        onClick={this.toggle}\n        className={this.getClassName()}\n        id={this.props.id || null}\n        aria-describedby={this.props[\"aria-describedby\"] || null}\n        disabled={this.props.disabled || false}\n      >\n        <span className=\"material-icon\">{this.getIcon()}</span>\n        <span className=\"btn-text\">{this.getLabel()}</span>\n      </button>\n    )\n  }\n}\n","class OrderedList {\n  constructor(items) {\n    this.isOrdered = false\n    this._items = items || []\n  }\n\n  add(key, item, order) {\n    this._items.push({\n      key: key,\n      item: item,\n\n      after: order ? order.after || null : null,\n      before: order ? order.before || null : null,\n    })\n  }\n\n  get(key, value) {\n    for (var i = 0; i < this._items.length; i++) {\n      if (this._items[i].key === key) {\n        return this._items[i].item\n      }\n    }\n\n    return value\n  }\n\n  has(key) {\n    return this.get(key) !== undefined\n  }\n\n  values() {\n    var values = []\n    for (var i = 0; i < this._items.length; i++) {\n      values.push(this._items[i].item)\n    }\n    return values\n  }\n\n  order(values_only) {\n    if (!this.isOrdered) {\n      this._items = this._order(this._items)\n      this.isOrdered = true\n    }\n\n    if (values_only || typeof values_only === \"undefined\") {\n      return this.values()\n    } else {\n      return this._items\n    }\n  }\n\n  orderedValues() {\n    return this.order(true)\n  }\n\n  _order(unordered) {\n    // Index of unordered items\n    var index = []\n    unordered.forEach(function (item) {\n      index.push(item.key)\n    })\n\n    // Ordered items\n    var ordered = []\n    var ordering = []\n\n    // First pass: register items that\n    // don't specify their order\n    unordered.forEach(function (item) {\n      if (!item.after && !item.before) {\n        ordered.push(item)\n        ordering.push(item.key)\n      }\n    })\n\n    // Second pass: register items that\n    // specify their before to \"_end\"\n    unordered.forEach(function (item) {\n      if (item.before === \"_end\") {\n        ordered.push(item)\n        ordering.push(item.key)\n      }\n    })\n\n    // Third pass: keep iterating items\n    // until we hit iterations limit or finish\n    // ordering list\n    function insertItem(item) {\n      var insertAt = -1\n      if (ordering.indexOf(item.key) === -1) {\n        if (item.after) {\n          insertAt = ordering.indexOf(item.after)\n          if (insertAt !== -1) {\n            insertAt += 1\n          }\n        } else if (item.before) {\n          insertAt = ordering.indexOf(item.before)\n        }\n\n        if (insertAt !== -1) {\n          ordered.splice(insertAt, 0, item)\n          ordering.splice(insertAt, 0, item.key)\n        }\n      }\n    }\n\n    var iterations = 200\n    while (iterations > 0 && index.length !== ordering.length) {\n      iterations -= 1\n      unordered.forEach(insertItem)\n    }\n\n    return ordered\n  }\n}\n\nexport default OrderedList\n","import \"bootstrap/js/transition\"\nimport \"bootstrap/js/affix\"\nimport \"bootstrap/js/modal\"\nimport \"bootstrap/js/dropdown\"\nimport \"at-js\"\nimport \"cropit\"\nimport \"waypoints\"\nimport \"jquery-caret\"\nimport \"highlight\"\nimport OrderedList from \"misago/utils/ordered-list\"\nimport \"misago/style/index.less\"\n\nexport class Misago {\n  constructor() {\n    this._initializers = []\n    this._context = {}\n  }\n\n  addInitializer(initializer) {\n    this._initializers.push({\n      key: initializer.name,\n\n      item: initializer.initializer,\n\n      after: initializer.after,\n      before: initializer.before,\n    })\n  }\n\n  init(context) {\n    this._context = context\n\n    var initOrder = new OrderedList(this._initializers).orderedValues()\n    initOrder.forEach((initializer) => {\n      initializer(this)\n    })\n  }\n\n  // context accessors\n  has(key) {\n    return !!this._context[key]\n  }\n\n  get(key, fallback) {\n    if (this.has(key)) {\n      return this._context[key]\n    } else {\n      return fallback || undefined\n    }\n  }\n\n  pop(key) {\n    if (this.has(key)) {\n      let value = this._context[key]\n      this._context[key] = null\n      return value\n    } else {\n      return undefined\n    }\n  }\n}\n\n// create  singleton\nvar misago = new Misago()\n\n// expose it globally\nwindow.misago = misago\n\n// and export it for tests and stuff\nexport default misago\n","import misago from \"misago/index\"\nimport ajax from \"misago/services/ajax\"\n\nexport default function initializer() {\n  ajax.init(misago.get(\"CSRF_COOKIE_NAME\"))\n}\n\nmisago.addInitializer({\n  name: \"ajax\",\n  initializer: initializer,\n})\n","import misago from \"misago/index\"\nimport { patch } from \"misago/reducers/auth\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nconst AUTH_SYNC_RATE = 45 // sync user with backend every 45 seconds\n\nexport default function initializer(context) {\n  if (context.get(\"isAuthenticated\")) {\n    window.setInterval(function () {\n      ajax.get(context.get(\"AUTH_API\")).then(\n        function (data) {\n          store.dispatch(patch(data))\n        },\n        function (rejection) {\n          snackbar.apiError(rejection)\n        }\n      )\n    }, AUTH_SYNC_RATE * 1000)\n  }\n}\n\nmisago.addInitializer({\n  name: \"auth-sync\",\n  initializer: initializer,\n  after: \"auth\",\n})\n","import misago from \"misago/index\"\nimport auth from \"misago/services/auth\"\nimport modal from \"misago/services/modal\"\nimport store from \"misago/services/store\"\nimport storage from \"misago/services/local-storage\"\n\nexport default function initializer() {\n  auth.init(store, storage, modal)\n}\n\nmisago.addInitializer({\n  name: \"auth\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import misago from \"misago/index\"\nimport ajax from \"misago/services/ajax\"\nimport captcha from \"misago/services/captcha\"\nimport include from \"misago/services/include\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default function initializer(context) {\n  captcha.init(context, ajax, include, snackbar)\n}\n\nmisago.addInitializer({\n  name: \"captcha\",\n  initializer: initializer,\n})\n","import React from \"react\"\nimport ajax from \"misago/services/ajax\"\n\nexport default class AcceptAgreement extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = { submiting: false }\n  }\n\n  handleDecline = () => {\n    if (this.state.submiting) return\n\n    const confirmation = window.confirm(\n      gettext(\n        \"Declining will result in immediate deactivation and deletion of your account. This action is not reversible.\"\n      )\n    )\n    if (!confirmation) return\n\n    this.setState({ submiting: true })\n\n    ajax.post(this.props.api, { accept: false }).then(() => {\n      window.location.reload(true)\n    })\n  }\n\n  handleAccept = () => {\n    if (this.state.submiting) return\n\n    this.setState({ submiting: true })\n\n    ajax.post(this.props.api, { accept: true }).then(() => {\n      window.location.reload(true)\n    })\n  }\n\n  render() {\n    return (\n      <div>\n        <button\n          className=\"btn btn-default\"\n          disabled={this.state.submiting}\n          type=\"buton\"\n          onClick={this.handleDecline}\n        >\n          {gettext(\"Decline\")}\n        </button>\n        <button\n          className=\"btn btn-primary\"\n          disabled={this.state.submiting}\n          type=\"buton\"\n          onClick={this.handleAccept}\n        >\n          {gettext(\"Accept and continue\")}\n        </button>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport misago from \"misago/index\"\nimport AcceptAgreement from \"misago/components/accept-agreement\"\nimport mount from \"misago/utils/mount-component\"\n\nexport default function initializer(context) {\n  if (document.getElementById(\"required-agreement-mount\")) {\n    mount(\n      <AcceptAgreement api={context.get(\"REQUIRED_AGREEMENT_API\")} />,\n      \"required-agreement-mount\",\n      false\n    )\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:accept-agreement\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import React from \"react\"\n\nexport default class extends React.Component {\n  refresh() {\n    window.location.reload()\n  }\n\n  getMessage() {\n    if (this.props.signedIn) {\n      return interpolate(\n        gettext(\n          \"You have signed in as %(username)s. Please refresh the page before continuing.\"\n        ),\n        { username: this.props.signedIn.username },\n        true\n      )\n    } else if (this.props.signedOut) {\n      return interpolate(\n        gettext(\n          \"%(username)s, you have been signed out. Please refresh the page before continuing.\"\n        ),\n        { username: this.props.user.username },\n        true\n      )\n    }\n  }\n\n  render() {\n    let className = \"auth-message\"\n    if (this.props.signedIn || this.props.signedOut) {\n      className += \" show\"\n    }\n\n    return (\n      <div className={className}>\n        <div className=\"container\">\n          <p className=\"lead\">{this.getMessage()}</p>\n          <p>\n            <button\n              className=\"btn btn-default\"\n              type=\"button\"\n              onClick={this.refresh}\n            >\n              {gettext(\"Reload page\")}\n            </button>\n            <span className=\"hidden-xs hidden-sm\">\n              {\" \" + gettext(\"or press F5 key.\")}\n            </span>\n          </p>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport function select(state) {\n  return {\n    user: state.auth.user,\n    signedIn: state.auth.signedIn,\n    signedOut: state.auth.signedOut,\n  }\n}\n","import { connect } from \"react-redux\"\nimport misago from \"misago/index\"\nimport AuthMessage, { select } from \"misago/components/auth-message\"\nimport mount from \"misago/utils/mount-component\"\n\nexport default function initializer() {\n  mount(connect(select)(AuthMessage), \"auth-message-mount\")\n}\n\nmisago.addInitializer({\n  name: \"component:auth-message\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import misago from \"misago/index\"\nimport showBannedPage from \"misago/utils/banned-page\"\n\nexport default function initializer(context) {\n  if (context.has(\"BAN_MESSAGE\")) {\n    showBannedPage(context.get(\"BAN_MESSAGE\"), false)\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:banmed-page\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import React from \"react\"\n\nexport default function (props) {\n  return (\n    <div className=\"categories-list\">\n      <ul className=\"list-group\">\n        <li className=\"list-group-item empty-message\">\n          <p className=\"lead\">\n            {gettext(\n              \"No categories exist or you don't have permission to see them.\"\n            )}\n          </p>\n        </li>\n      </ul>\n    </div>\n  )\n}\n","import React from \"react\"\n\nexport default function ({ category }) {\n  if (!category.description) return null\n\n  return (\n    <div\n      className=\"category-description\"\n      dangerouslySetInnerHTML={{\n        __html: category.description.html,\n      }}\n    />\n  )\n}\n","import React from \"react\"\n\nexport default function ({ category }) {\n  return (\n    <div className={getClassName(category)} title={getTitle(category)}>\n      <span className=\"material-icon\">{getIcon(category)}</span>\n    </div>\n  )\n}\n\nexport function getClassName(category) {\n  if (category.is_read) {\n    return \"read-status item-read\"\n  }\n\n  return \"read-status item-new\"\n}\n\nexport function getTitle(category) {\n  if (category.is_closed) {\n    if (category.is_read) {\n      return gettext(\"This category has no new posts. (closed)\")\n    }\n\n    return gettext(\"This category has new posts. (closed)\")\n  }\n\n  if (category.is_read) {\n    return gettext(\"This category has no new posts.\")\n  }\n\n  return gettext(\"This category has new posts.\")\n}\n\nexport function getIcon(category) {\n  if (category.is_closed) {\n    if (category.is_read) {\n      return \"lock_outline\"\n    }\n\n    return \"lock\"\n  }\n\n  if (category.is_read) {\n    return \"chat_bubble_outline\"\n  }\n\n  return \"chat_bubble\"\n}\n","import React from \"react\"\nimport Description from \"./description\"\nimport Icon from \"./icon\"\n\nexport default function ({ category }) {\n  return (\n    <div className=\"col-xs-12 col-sm-6 col-md-6 category-main\">\n      <div className=\"media\">\n        <div className=\"media-left\">\n          <Icon category={category} />\n        </div>\n        <div className=\"media-body\">\n          <h4 className=\"media-heading\">\n            <a href={category.url.index}>{category.name}</a>\n          </h4>\n          <Description category={category} />\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\n\nexport default function ({ category }) {\n  return (\n    <div className=\"col-xs-12 col-sm-6 col-md-4 category-last-thread\">\n      <LastThread category={category} />\n      <Empty category={category} />\n      <Private category={category} />\n      <Protected category={category} />\n    </div>\n  )\n}\n\nexport function LastThread({ category }) {\n  if (!category.acl.can_browse) return null\n  if (!category.acl.can_see_all_threads) return null\n  if (!category.last_thread_title) return null\n\n  return (\n    <div className=\"media\">\n      <div className=\"media-left hidden-xs\">\n        <LastPosterAvatar category={category} />\n      </div>\n      <div className=\"media-body\">\n        <div className=\"media-heading\">\n          <a\n            className=\"item-title thread-title\"\n            href={category.url.last_thread_new}\n            title={category.last_thread_title}\n          >\n            {category.last_thread_title}\n          </a>\n        </div>\n        <ul className=\"list-inline\">\n          <li className=\"category-last-thread-poster\">\n            <LastPosterName category={category} />\n          </li>\n          <li className=\"divider\">&#8212;</li>\n          <li className=\"category-last-thread-date\">\n            <a href={category.url.last_post}>\n              {category.last_post_on.fromNow()}\n            </a>\n          </li>\n        </ul>\n      </div>\n    </div>\n  )\n}\n\nexport function LastPosterAvatar({ category }) {\n  if (category.last_poster) {\n    return (\n      <a\n        className=\"last-poster-avatar\"\n        href={category.last_poster.url}\n        title={category.last_poster_name}\n      >\n        <Avatar\n          className=\"media-object\"\n          size={40}\n          user={category.last_poster}\n        />\n      </a>\n    )\n  }\n\n  return (\n    <span className=\"last-poster-avatar\" title={category.last_poster_name}>\n      <Avatar className=\"media-object\" size={40} />\n    </span>\n  )\n}\n\nexport function LastPosterName({ category }) {\n  if (category.last_poster) {\n    return (\n      <a className=\"item-title\" href={category.last_poster.url}>\n        {category.last_poster_name}\n      </a>\n    )\n  }\n\n  return <span className=\"item-title\">{category.last_poster_name}</span>\n}\n\nexport function Empty({ category }) {\n  if (!category.acl.can_browse) return null\n  if (!category.acl.can_see_all_threads) return null\n  if (category.last_thread_title) return null\n\n  return (\n    <Message\n      message={gettext(\n        \"This category is empty. No threads were posted within it so far.\"\n      )}\n    />\n  )\n}\n\nexport function Private({ category }) {\n  if (!category.acl.can_browse) return null\n  if (category.acl.can_see_all_threads) return null\n\n  return (\n    <Message\n      message={gettext(\n        \"This category is private. You can see only your own threads within it.\"\n      )}\n    />\n  )\n}\n\nexport function Protected({ category }) {\n  if (category.acl.can_browse) return null\n\n  return (\n    <Message\n      message={gettext(\n        \"This category is protected. You can't browse its contents.\"\n      )}\n    />\n  )\n}\n\nexport function Message({ message }) {\n  return (\n    <div className=\"media category-thread-message\">\n      <div className=\"media-left\">\n        <span className=\"material-icon\">info_outline</span>\n      </div>\n      <div className=\"media-body\">\n        <p>{message}</p>\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\n\nexport default function ({ category }) {\n  return (\n    <div className=\"col-md-2 hidden-xs hidden-sm\">\n      <ul className=\"list-unstyled category-stats\">\n        <Threads threads={category.threads} />\n        <Posts posts={category.posts} />\n      </ul>\n    </div>\n  )\n}\n\nexport function Threads({ threads }) {\n  const message = ngettext(\"%(threads)s thread\", \"%(threads)s threads\", threads)\n\n  return (\n    <li className=\"category-stat-threads\">\n      {interpolate(\n        message,\n        {\n          threads: threads,\n        },\n        true\n      )}\n    </li>\n  )\n}\n\nexport function Posts({ posts }) {\n  const message = ngettext(\"%(posts)s post\", \"%(posts)s posts\", posts)\n\n  return (\n    <li className=\"category-stat-posts\">\n      {interpolate(\n        message,\n        {\n          posts: posts,\n        },\n        true\n      )}\n    </li>\n  )\n}\n","import React from \"react\"\n\nexport default function ({ category }) {\n  let className = \"btn btn-default btn-block btn-sm btn-subcategory\"\n  if (!category.is_read) {\n    className += \" btn-subcategory-new\"\n  }\n\n  return (\n    <div className=\"col-xs-12 col-sm-4 col-md-3\">\n      <a className={className} href={category.url.index}>\n        <span className=\"material-icon\">{getIcon(category)}</span>\n        <span className=\"icon-text\">{category.name}</span>\n      </a>\n    </div>\n  )\n}\n\nexport function getIcon(category) {\n  if (category.is_closed) {\n    if (category.is_read) {\n      return \"lock_outline\"\n    }\n\n    return \"lock\"\n  }\n\n  if (category.is_read) {\n    return \"chat_bubble_outline\"\n  }\n\n  return \"chat_bubble\"\n}\n","import React from \"react\"\nimport ListItem from \"./list-item\"\n\nexport default function ({ category, isFirst }) {\n  if (isFirst) return null\n  if (category.subcategories.length === 0) return null\n\n  return (\n    <div className=\"row subcategories-list\">\n      {category.subcategories.map((category) => {\n        return <ListItem category={category} key={category.id} />\n      })}\n    </div>\n  )\n}\n","import React from \"react\"\nimport Main from \"./main\"\nimport LastThread from \"./last-thread\"\nimport Stats from \"./stats\"\nimport Subcategories from \"./subcategories\"\n\nexport default function ({ category, isFirst }) {\n  let className = \"list-group-item\"\n\n  if (category.description) {\n    className += \" list-group-category-has-description\"\n  } else {\n    className += \" list-group-category-no-description\"\n  }\n\n  if (isFirst) {\n    className += \" list-group-item-first\"\n  }\n  if (category.css_class) {\n    className += \" list-group-category-has-flavor\"\n    className += \" list-group-item-category-\" + category.css_class\n  }\n\n  return (\n    <li className={className}>\n      <div className=\"row\">\n        <Main category={category} />\n        <Stats category={category} />\n        <LastThread category={category} />\n      </div>\n      <Subcategories category={category} isFirst={isFirst} />\n    </li>\n  )\n}\n","import React from \"react\"\nimport ListItem from \"./list-item\"\n\nexport default function ({ category }) {\n  let className = \"list-group list-group-category\"\n  if (category.css_class) {\n    className += \" list-group-category-has-flavor\"\n    className += \" list-group-category-\" + category.css_class\n  }\n\n  return (\n    <ul className={className}>\n      <ListItem category={category} isFirst={true} />\n      {category.subcategories.map((category) => {\n        return (\n          <ListItem category={category} isFirst={false} key={category.id} />\n        )\n      })}\n    </ul>\n  )\n}\n","import React from \"react\"\nimport Category from \"./category\"\n\nexport default function ({ categories }) {\n  return (\n    <div className=\"categories-list\">\n      {categories.map((category) => {\n        return <Category category={category} key={category.id} />\n      })}\n    </div>\n  )\n}\n","import moment from \"moment\"\nimport React from \"react\"\nimport Blankslate from \"./blankslate\"\nimport CategoriesList from \"./categories-list\"\nimport misago from \"misago/index\"\nimport polls from \"misago/services/polls\"\n\nconst hydrate = function (category) {\n  return Object.assign({}, category, {\n    last_post_on: category.last_post_on ? moment(category.last_post_on) : null,\n    subcategories: category.subcategories.map(hydrate),\n  })\n}\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      categories: misago.get(\"CATEGORIES\").map(hydrate),\n    }\n\n    this.startPolling(misago.get(\"CATEGORIES_API\"))\n  }\n\n  startPolling(api) {\n    polls.start({\n      poll: \"categories\",\n      url: api,\n      frequency: 180 * 1000,\n      update: this.update,\n    })\n  }\n\n  update = (data) => {\n    this.setState({\n      categories: data.map(hydrate),\n    })\n  }\n\n  render() {\n    const { categories } = this.state\n\n    if (categories.length === 0) {\n      return <Blankslate />\n    }\n\n    return <CategoriesList categories={categories} />\n  }\n}\n\nexport function select(store) {\n  return {\n    tick: store.tick.tick,\n  }\n}\n","import { connect } from \"react-redux\"\nimport Categories, { select } from \"misago/components/categories\"\nimport misago from \"misago/index\"\nimport mount from \"misago/utils/mount-component\"\n\nexport default function initializer() {\n  if (document.getElementById(\"categories-mount\")) {\n    mount(connect(select)(Categories), \"categories-mount\")\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:categories\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import React from \"react\"\nimport { Link } from \"react-router\"\nimport Li from \"misago/components/li\"\n\nexport function SideNav(props) {\n  return (\n    <div className=\"list-group nav-side\">\n      {props.options.map((option) => {\n        return (\n          <Link\n            to={props.baseUrl + option.component + \"/\"}\n            className=\"list-group-item\"\n            activeClassName=\"active\"\n            key={option.component}\n          >\n            <span className=\"material-icon\">{option.icon}</span>\n            {option.name}\n          </Link>\n        )\n      })}\n    </div>\n  )\n}\n\nexport function CompactNav(props) {\n  return (\n    <ul className={props.className || \"dropdown-menu\"} role=\"menu\">\n      {props.options.map((option) => {\n        return (\n          <Li\n            path={props.baseUrl + option.component + \"/\"}\n            key={option.component}\n          >\n            <Link\n              to={props.baseUrl + option.component + \"/\"}\n              onClick={props.hideNav}\n            >\n              <span className=\"material-icon hidden-sm\">{option.icon}</span>\n              {option.name}\n            </Link>\n          </Li>\n        )\n      })}\n    </ul>\n  )\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport ajax from \"misago/services/ajax\"\nimport title from \"misago/services/page-title\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport misago from \"misago\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n      password: \"\",\n    }\n  }\n\n  componentDidMount() {\n    title.set({\n      title: gettext(\"Delete account\"),\n      parent: gettext(\"Change your options\"),\n    })\n  }\n\n  onPasswordChange = (event) => {\n    this.setState({ password: event.target.value })\n  }\n\n  handleSubmit = (event) => {\n    event.preventDefault()\n\n    const { isLoading, password } = this.state\n    const { user } = this.props\n\n    if (password.length == 0) {\n      snackbar.error(\n        gettext(\"Enter your password to confirm account deletion.\")\n      )\n      return false\n    }\n\n    if (isLoading) return false\n    this.setState({ isLoading: true })\n\n    ajax.post(user.api.delete, { password }).then(\n      (success) => {\n        window.location.href = misago.get(\"MISAGO_PATH\")\n      },\n      (rejection) => {\n        this.setState({ isLoading: false })\n        if (rejection.password) {\n          snackbar.error(rejection.password[0])\n        } else {\n          snackbar.apiError(rejection)\n        }\n      }\n    )\n  }\n\n  render() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"panel panel-danger panel-form\">\n          <div className=\"panel-heading\">\n            <h3 className=\"panel-title\">{gettext(\"Delete account\")}</h3>\n          </div>\n          <div className=\"panel-body\">\n            <p className=\"lead\">\n              {gettext(\n                \"You are going to delete your account. This action is nonreversible, and will result in following data being deleted:\"\n              )}\n            </p>\n\n            <p>\n              -{\" \"}\n              {gettext(\n                \"Stored IP addresses associated with content that you have posted will be deleted.\"\n              )}\n            </p>\n            <p>\n              -{\" \"}\n              {gettext(\n                \"Your username will become available for other user to rename to or for new user to register their account with.\"\n              )}\n            </p>\n            <p>\n              -{\" \"}\n              {gettext(\n                \"Your e-mail will become available for use in new account registration.\"\n              )}\n            </p>\n\n            <hr />\n\n            <p>\n              {gettext(\n                \"All your posted content will NOT be deleted, but username associated with it will be changed to one shared by all deleted accounts.\"\n              )}\n            </p>\n          </div>\n          <div className=\"panel-footer\">\n            <div className=\"input-group\">\n              <input\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                name=\"password-confirmation\"\n                type=\"password\"\n                placeholder={gettext(\n                  \"Enter your password to confirm account deletion.\"\n                )}\n                value={this.state.password}\n                onChange={this.onPasswordChange}\n              />\n              <span className=\"input-group-btn\">\n                <Button className=\"btn-danger\" loading={this.state.isLoading}>\n                  {gettext(\"Delete my account\")}\n                </Button>\n              </span>\n            </div>\n          </div>\n        </div>\n      </form>\n    )\n  }\n}\n","import React from \"react\"\nimport Form from \"misago/components/edit-details\"\nimport title from \"misago/services/page-title\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends React.Component {\n  componentDidMount() {\n    title.set({\n      title: gettext(\"Edit details\"),\n      parent: gettext(\"Change your options\"),\n    })\n  }\n\n  onSuccess = () => {\n    snackbar.info(gettext(\"Your details have been updated.\"))\n  }\n\n  render() {\n    return (\n      <Form api={this.props.user.api.edit_details} onSuccess={this.onSuccess} />\n    )\n  }\n}\n","import React from \"react\"\nimport moment from \"moment\"\nimport Button from \"misago/components/button\"\nimport ajax from \"misago/services/ajax\"\nimport title from \"misago/services/page-title\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class DownloadData extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n      isSubmiting: false,\n      downloads: [],\n    }\n  }\n\n  componentDidMount() {\n    title.set({\n      title: gettext(\"Download your data\"),\n      parent: gettext(\"Change your options\"),\n    })\n\n    this.handleLoadDownloads()\n  }\n\n  handleLoadDownloads = () => {\n    ajax.get(this.props.user.api.data_downloads).then(\n      (data) => {\n        this.setState({\n          isLoading: false,\n          downloads: data,\n        })\n      },\n      (rejection) => {\n        snackbar.apiError(rejection)\n      }\n    )\n  }\n\n  handleRequestDataDownload = () => {\n    this.setState({ isSubmiting: true })\n    ajax.post(this.props.user.api.request_data_download).then(\n      () => {\n        this.handleLoadDownloads()\n        snackbar.success(\n          gettext(\"Your request for data download has been registered.\")\n        )\n        this.setState({ isSubmiting: false })\n      },\n      (rejection) => {\n        snackbar.apiError(rejection)\n        this.setState({ isSubmiting: false })\n      }\n    )\n  }\n\n  render() {\n    return (\n      <div>\n        <div className=\"panel panel-default panel-form\">\n          <div className=\"panel-heading\">\n            <h3 className=\"panel-title\">{gettext(\"Download your data\")}</h3>\n          </div>\n          <div className=\"panel-body\">\n            <p>\n              {gettext(\n                'To download your data from the site, click the \"Request data download\" button. Depending on amount of data to be archived and number of users wanting to download their data at same time it may take up to few days for your download to be prepared. An e-mail with notification will be sent to you when your data is ready to be downloaded.'\n              )}\n            </p>\n\n            <p>\n              {gettext(\n                \"The download will only be available for limited amount of time, after which it will be deleted from the site and marked as expired.\"\n              )}\n            </p>\n          </div>\n          <table className=\"table\">\n            <thead>\n              <tr>\n                <th>{gettext(\"Requested on\")}</th>\n                <th className=\"col-md-4\">{gettext(\"Download\")}</th>\n              </tr>\n            </thead>\n            <tbody>\n              {this.state.downloads.map((item) => {\n                return (\n                  <tr key={item.id}>\n                    <td style={rowStyle}>\n                      {moment(item.requested_on).fromNow()}\n                    </td>\n                    <td>\n                      <DownloadButton\n                        exportFile={item.file}\n                        status={item.status}\n                      />\n                    </td>\n                  </tr>\n                )\n              })}\n              {this.state.downloads.length == 0 ? (\n                <tr>\n                  <td colSpan=\"2\">{gettext(\"You have no data downloads.\")}</td>\n                </tr>\n              ) : null}\n            </tbody>\n          </table>\n          <div className=\"panel-footer text-right\">\n            <Button\n              className=\"btn-primary\"\n              loading={this.state.isSubmiting}\n              type=\"button\"\n              onClick={this.handleRequestDataDownload}\n            >\n              {gettext(\"Request data download\")}\n            </Button>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n\nconst rowStyle = {\n  verticalAlign: \"middle\",\n}\n\nconst STATUS_PENDING = 0\nconst STATUS_PROCESSING = 1\n\nconst DownloadButton = ({ exportFile, status }) => {\n  if (status === STATUS_PENDING || status === STATUS_PROCESSING) {\n    return (\n      <Button\n        className=\"btn-info btn-sm btn-block\"\n        disabled={true}\n        type=\"button\"\n      >\n        {gettext(\"Download is being prepared\")}\n      </Button>\n    )\n  }\n\n  if (exportFile) {\n    return (\n      <a className=\"btn btn-success btn-sm btn-block\" href={exportFile}>\n        {gettext(\"Download your data\")}\n      </a>\n    )\n  }\n\n  return (\n    <Button\n      className=\"btn-default btn-sm btn-block\"\n      disabled={true}\n      type=\"button\"\n    >\n      {gettext(\"Download is expired\")}\n    </Button>\n  )\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport Select from \"misago/components/select\"\nimport YesNoSwitch from \"misago/components/yes-no-switch\"\nimport { patch } from \"misago/reducers/auth\"\nimport ajax from \"misago/services/ajax\"\nimport title from \"misago/services/page-title\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      is_hiding_presence: props.user.is_hiding_presence,\n      limits_private_thread_invites_to:\n        props.user.limits_private_thread_invites_to,\n      subscribe_to_started_threads: props.user.subscribe_to_started_threads,\n      subscribe_to_replied_threads: props.user.subscribe_to_replied_threads,\n\n      errors: {},\n    }\n\n    this.privateThreadInvitesChoices = [\n      {\n        value: 0,\n        icon: \"help_outline\",\n        label: gettext(\"Everybody\"),\n      },\n      {\n        value: 1,\n        icon: \"done_all\",\n        label: gettext(\"Users I follow\"),\n      },\n      {\n        value: 2,\n        icon: \"highlight_off\",\n        label: gettext(\"Nobody\"),\n      },\n    ]\n\n    this.subscribeToChoices = [\n      {\n        value: 0,\n        icon: \"star_border\",\n        label: gettext(\"No\"),\n      },\n      {\n        value: 1,\n        icon: \"star_half\",\n        label: gettext(\"Notify\"),\n      },\n      {\n        value: 2,\n        icon: \"star\",\n        label: gettext(\"Notify with e-mail\"),\n      },\n    ]\n  }\n\n  send() {\n    return ajax.post(this.props.user.api.options, {\n      is_hiding_presence: this.state.is_hiding_presence,\n      limits_private_thread_invites_to:\n        this.state.limits_private_thread_invites_to,\n      subscribe_to_started_threads: this.state.subscribe_to_started_threads,\n      subscribe_to_replied_threads: this.state.subscribe_to_replied_threads,\n    })\n  }\n\n  handleSuccess() {\n    store.dispatch(\n      patch({\n        is_hiding_presence: this.state.is_hiding_presence,\n        limits_private_thread_invites_to:\n          this.state.limits_private_thread_invites_to,\n        subscribe_to_started_threads: this.state.subscribe_to_started_threads,\n        subscribe_to_replied_threads: this.state.subscribe_to_replied_threads,\n      })\n    )\n    snackbar.success(gettext(\"Your forum options have been changed.\"))\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      snackbar.error(gettext(\"Please reload page and try again.\"))\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  componentDidMount() {\n    title.set({\n      title: gettext(\"Forum options\"),\n      parent: gettext(\"Change your options\"),\n    })\n  }\n\n  render() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"panel panel-default panel-form\">\n          <div className=\"panel-heading\">\n            <h3 className=\"panel-title\">{gettext(\"Change forum options\")}</h3>\n          </div>\n          <div className=\"panel-body\">\n            <fieldset>\n              <legend>{gettext(\"Privacy settings\")}</legend>\n\n              <FormGroup\n                label={gettext(\"Hide my presence\")}\n                helpText={gettext(\n                  \"If you hide your presence, only members with permission to see hidden users will see when you are online.\"\n                )}\n                for=\"id_is_hiding_presence\"\n              >\n                <YesNoSwitch\n                  id=\"id_is_hiding_presence\"\n                  disabled={this.state.isLoading}\n                  iconOn=\"visibility_off\"\n                  iconOff=\"visibility\"\n                  labelOn={gettext(\"Hide my presence from other users\")}\n                  labelOff={gettext(\"Show my presence to other users\")}\n                  onChange={this.bindInput(\"is_hiding_presence\")}\n                  value={this.state.is_hiding_presence}\n                />\n              </FormGroup>\n\n              <FormGroup\n                label={gettext(\"Private thread invitations\")}\n                for=\"id_limits_private_thread_invites_to\"\n              >\n                <Select\n                  id=\"id_limits_private_thread_invites_to\"\n                  disabled={this.state.isLoading}\n                  onChange={this.bindInput(\"limits_private_thread_invites_to\")}\n                  value={this.state.limits_private_thread_invites_to}\n                  choices={this.privateThreadInvitesChoices}\n                />\n              </FormGroup>\n            </fieldset>\n\n            <fieldset>\n              <legend>{gettext(\"Automatic subscriptions\")}</legend>\n\n              <FormGroup\n                label={gettext(\"Threads I start\")}\n                for=\"id_subscribe_to_started_threads\"\n              >\n                <Select\n                  id=\"id_subscribe_to_started_threads\"\n                  disabled={this.state.isLoading}\n                  onChange={this.bindInput(\"subscribe_to_started_threads\")}\n                  value={this.state.subscribe_to_started_threads}\n                  choices={this.subscribeToChoices}\n                />\n              </FormGroup>\n\n              <FormGroup\n                label={gettext(\"Threads I reply to\")}\n                for=\"id_subscribe_to_replied_threads\"\n              >\n                <Select\n                  id=\"id_subscribe_to_replied_threads\"\n                  disabled={this.state.isLoading}\n                  onChange={this.bindInput(\"subscribe_to_replied_threads\")}\n                  value={this.state.subscribe_to_replied_threads}\n                  choices={this.subscribeToChoices}\n                />\n              </FormGroup>\n            </fieldset>\n          </div>\n          <div className=\"panel-footer\">\n            <Button className=\"btn-primary\" loading={this.state.isLoading}>\n              {gettext(\"Save changes\")}\n            </Button>\n          </div>\n        </div>\n      </form>\n    )\n  }\n}\n","import React from \"react\"\nimport PanelLoader from \"misago/components/panel-loader\"\n\nexport default function () {\n  return (\n    <div className=\"panel panel-default panel-form\">\n      <div className=\"panel-heading\">\n        <h3 className=\"panel-title\">{gettext(\"Change username\")}</h3>\n      </div>\n      <PanelLoader />\n    </div>\n  )\n}\n","import React from \"react\"\nimport PanelMessage from \"misago/components/panel-message\"\n\nexport default class extends React.Component {\n  getHelpText() {\n    if (this.props.options.next_on) {\n      return interpolate(\n        gettext(\"You will be able to change your username %(next_change)s.\"),\n        { next_change: this.props.options.next_on.fromNow() },\n        true\n      )\n    } else {\n      return gettext(\"You have used up available name changes.\")\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"panel panel-default panel-form\">\n        <div className=\"panel-heading\">\n          <h3 className=\"panel-title\">{gettext(\"Change username\")}</h3>\n        </div>\n        <PanelMessage\n          helpText={this.getHelpText()}\n          message={gettext(\"You can't change your username at the moment.\")}\n        />\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport * as validators from \"misago/utils/validators\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      username: \"\",\n\n      validators: {\n        username: [\n          validators.usernameContent(),\n          validators.usernameMinLength(props.options.length_min),\n          validators.usernameMaxLength(props.options.length_max),\n        ],\n      },\n\n      isLoading: false,\n    }\n  }\n\n  getHelpText() {\n    let phrases = []\n\n    if (this.props.options.changes_left > 0) {\n      let message = ngettext(\n        \"You can change your username %(changes_left)s more time.\",\n        \"You can change your username %(changes_left)s more times.\",\n        this.props.options.changes_left\n      )\n\n      phrases.push(\n        interpolate(\n          message,\n          {\n            changes_left: this.props.options.changes_left,\n          },\n          true\n        )\n      )\n    }\n\n    if (this.props.user.acl.name_changes_expire > 0) {\n      let message = ngettext(\n        \"Used changes become available again after %(name_changes_expire)s day.\",\n        \"Used changes become available again after %(name_changes_expire)s days.\",\n        this.props.user.acl.name_changes_expire\n      )\n\n      phrases.push(\n        interpolate(\n          message,\n          {\n            name_changes_expire: this.props.user.acl.name_changes_expire,\n          },\n          true\n        )\n      )\n    }\n\n    return phrases.length ? phrases.join(\" \") : null\n  }\n\n  clean() {\n    let errors = this.validate()\n    if (errors.username) {\n      snackbar.error(errors.username[0])\n      return false\n    }\n    if (this.state.username.trim() === this.props.user.username) {\n      snackbar.info(gettext(\"Your new username is same as current one.\"))\n      return false\n    } else {\n      return true\n    }\n  }\n\n  send() {\n    return ajax.post(this.props.user.api.username, {\n      username: this.state.username,\n    })\n  }\n\n  handleSuccess(success) {\n    this.setState({\n      username: \"\",\n    })\n\n    this.props.complete(success.username, success.slug, success.options)\n  }\n\n  handleError(rejection) {\n    snackbar.apiError(rejection)\n  }\n\n  render() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"panel panel-default panel-form\">\n          <div className=\"panel-heading\">\n            <h3 className=\"panel-title\">{gettext(\"Change username\")}</h3>\n          </div>\n          <div className=\"panel-body\">\n            <FormGroup\n              label={gettext(\"New username\")}\n              for=\"id_username\"\n              helpText={this.getHelpText()}\n            >\n              <input\n                type=\"text\"\n                id=\"id_username\"\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                onChange={this.bindInput(\"username\")}\n                value={this.state.username}\n              />\n            </FormGroup>\n          </div>\n          <div className=\"panel-footer\">\n            <Button className=\"btn-primary\" loading={this.state.isLoading}>\n              {gettext(\"Change username\")}\n            </Button>\n          </div>\n        </div>\n      </form>\n    )\n  }\n}\n","import moment from \"moment\"\nimport React from \"react\"\nimport FormLoading from \"misago/components/options/change-username/form-loading\"\nimport FormLocked from \"misago/components/options/change-username/form-locked\"\nimport Form from \"misago/components/options/change-username/form\"\nimport UsernameHistory from \"misago/components/username-history/root\"\nimport misago from \"misago/index\"\nimport { hydrate, addNameChange } from \"misago/reducers/username-history\"\nimport { updateUsername } from \"misago/reducers/users\"\nimport ajax from \"misago/services/ajax\"\nimport title from \"misago/services/page-title\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoaded: false,\n      options: null,\n    }\n  }\n\n  componentDidMount() {\n    title.set({\n      title: gettext(\"Change username\"),\n      parent: gettext(\"Change your options\"),\n    })\n\n    Promise.all([\n      ajax.get(this.props.user.api.username),\n      ajax.get(misago.get(\"USERNAME_CHANGES_API\"), {\n        user: this.props.user.id,\n      }),\n    ]).then((data) => {\n      store.dispatch(hydrate(data[1].results))\n\n      this.setState({\n        isLoaded: true,\n        options: {\n          changes_left: data[0].changes_left,\n          length_min: data[0].length_min,\n          length_max: data[0].length_max,\n          next_on: data[0].next_on ? moment(data[0].next_on) : null,\n        },\n      })\n    })\n  }\n\n  onComplete = (username, slug, options) => {\n    this.setState({\n      options,\n    })\n\n    store.dispatch(\n      addNameChange({ username, slug }, this.props.user, this.props.user)\n    )\n    store.dispatch(updateUsername(this.props.user, username, slug))\n\n    snackbar.success(gettext(\"Your username has been changed successfully.\"))\n  }\n\n  getChangeForm() {\n    if (!this.state.isLoaded) {\n      return <FormLoading />\n    }\n\n    if (this.state.options.changes_left === 0) {\n      return <FormLocked options={this.state.options} />\n    }\n\n    return (\n      <Form\n        complete={this.onComplete}\n        options={this.state.options}\n        user={this.props.user}\n      />\n    )\n  }\n\n  render() {\n    return (\n      <div>\n        {this.getChangeForm()}\n        <UsernameHistory\n          changes={this.props[\"username-history\"]}\n          isLoaded={this.state.isLoaded}\n        />\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport * as validators from \"misago/utils/validators\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      new_email: \"\",\n      password: \"\",\n\n      validators: {\n        new_email: [validators.email()],\n        password: [],\n      },\n\n      isLoading: false,\n    }\n  }\n\n  clean() {\n    let errors = this.validate()\n    let lengths = [\n      this.state.new_email.trim().length,\n      this.state.password.trim().length,\n    ]\n\n    if (lengths.indexOf(0) !== -1) {\n      snackbar.error(gettext(\"Fill out all fields.\"))\n      return false\n    }\n\n    if (errors.new_email) {\n      snackbar.error(errors.new_email[0])\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.post(this.props.user.api.change_email, {\n      new_email: this.state.new_email,\n      password: this.state.password,\n    })\n  }\n\n  handleSuccess(response) {\n    this.setState({\n      new_email: \"\",\n      password: \"\",\n    })\n\n    snackbar.success(response.detail)\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      if (rejection.new_email) {\n        snackbar.error(rejection.new_email)\n      } else {\n        snackbar.error(rejection.password)\n      }\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <input type=\"type\" style={{ display: \"none\" }} />\n        <input type=\"password\" style={{ display: \"none\" }} />\n        <div className=\"panel panel-default panel-form\">\n          <div className=\"panel-heading\">\n            <h3 className=\"panel-title\">{gettext(\"Change e-mail address\")}</h3>\n          </div>\n          <div className=\"panel-body\">\n            <FormGroup label={gettext(\"New e-mail\")} for=\"id_new_email\">\n              <input\n                type=\"text\"\n                id=\"id_new_email\"\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                onChange={this.bindInput(\"new_email\")}\n                value={this.state.new_email}\n              />\n            </FormGroup>\n\n            <hr />\n\n            <FormGroup\n              label={gettext(\"Your current password\")}\n              for=\"id_confirm_email\"\n            >\n              <input\n                type=\"password\"\n                id=\"id_confirm_email\"\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                onChange={this.bindInput(\"password\")}\n                value={this.state.password}\n              />\n            </FormGroup>\n          </div>\n          <div className=\"panel-footer\">\n            <Button className=\"btn-primary\" loading={this.state.isLoading}>\n              {gettext(\"Change e-mail\")}\n            </Button>\n          </div>\n        </div>\n      </form>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      new_password: \"\",\n      repeat_password: \"\",\n      password: \"\",\n\n      validators: {\n        new_password: [],\n        repeat_password: [],\n        password: [],\n      },\n\n      isLoading: false,\n    }\n  }\n\n  clean() {\n    let errors = this.validate()\n    let lengths = [\n      this.state.new_password.trim().length,\n      this.state.repeat_password.trim().length,\n      this.state.password.trim().length,\n    ]\n\n    if (lengths.indexOf(0) !== -1) {\n      snackbar.error(gettext(\"Fill out all fields.\"))\n      return false\n    }\n\n    if (errors.new_password) {\n      snackbar.error(errors.new_password[0])\n      return false\n    }\n\n    if (this.state.new_password !== this.state.repeat_password) {\n      snackbar.error(gettext(\"New passwords are different.\"))\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.post(this.props.user.api.change_password, {\n      new_password: this.state.new_password,\n      password: this.state.password,\n    })\n  }\n\n  handleSuccess(response) {\n    this.setState({\n      new_password: \"\",\n      repeat_password: \"\",\n      password: \"\",\n    })\n\n    snackbar.success(response.detail)\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      if (rejection.new_password) {\n        snackbar.error(rejection.new_password)\n      } else {\n        snackbar.error(rejection.password)\n      }\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <input type=\"type\" style={{ display: \"none\" }} />\n        <input type=\"password\" style={{ display: \"none\" }} />\n        <div className=\"panel panel-default panel-form\">\n          <div className=\"panel-heading\">\n            <h3 className=\"panel-title\">{gettext(\"Change password\")}</h3>\n          </div>\n          <div className=\"panel-body\">\n            <FormGroup label={gettext(\"New password\")} for=\"id_new_password\">\n              <input\n                type=\"password\"\n                id=\"id_new_password\"\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                onChange={this.bindInput(\"new_password\")}\n                value={this.state.new_password}\n              />\n            </FormGroup>\n\n            <FormGroup\n              label={gettext(\"Repeat password\")}\n              for=\"id_repeat_password\"\n            >\n              <input\n                type=\"password\"\n                id=\"id_repeat_password\"\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                onChange={this.bindInput(\"repeat_password\")}\n                value={this.state.repeat_password}\n              />\n            </FormGroup>\n\n            <hr />\n\n            <FormGroup\n              label={gettext(\"Your current password\")}\n              for=\"id_confirm_password\"\n            >\n              <input\n                type=\"password\"\n                id=\"id_confirm_password\"\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                onChange={this.bindInput(\"password\")}\n                value={this.state.password}\n              />\n            </FormGroup>\n          </div>\n          <div className=\"panel-footer\">\n            <Button className=\"btn-primary\" loading={this.state.isLoading}>\n              {gettext(\"Change password\")}\n            </Button>\n          </div>\n        </div>\n      </form>\n    )\n  }\n}\n","import React from \"react\"\nimport misago from \"misago/index\"\n\nconst UnusablePasswordMessage = () => {\n  return (\n    <div className=\"panel panel-default panel-form\">\n      <div className=\"panel-heading\">\n        <h3 className=\"panel-title\">{gettext(\"Change email or password\")}</h3>\n      </div>\n      <div className=\"panel-body panel-message-body\">\n        <div className=\"message-icon\">\n          <span className=\"material-icon\">info_outline</span>\n        </div>\n        <div className=\"message-body\">\n          <p className=\"lead\">\n            {gettext(\n              \"You need to set a password for your account to be able to change your username or email.\"\n            )}\n          </p>\n          <p className=\"help-block\">\n            <a\n              className=\"btn btn-primary\"\n              href={misago.get(\"FORGOTTEN_PASSWORD_URL\")}\n            >\n              {gettext(\"Set password\")}\n            </a>\n          </p>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default UnusablePasswordMessage\n","import React from \"react\"\nimport ChangeEmail from \"misago/components/options/sign-in-credentials/change-email\"\nimport ChangePassword from \"misago/components/options/sign-in-credentials/change-password\"\nimport misago from \"misago/index\"\nimport title from \"misago/services/page-title\"\nimport UnusablePasswordMessage from \"./UnusablePasswordMessage\"\n\nexport default class extends React.Component {\n  componentDidMount() {\n    title.set({\n      title: gettext(\"Change email or password\"),\n      parent: gettext(\"Change your options\"),\n    })\n  }\n\n  render() {\n    if (!this.props.user.has_usable_password) {\n      return <UnusablePasswordMessage />\n    }\n\n    return (\n      <div>\n        <ChangeEmail user={this.props.user} />\n        <ChangePassword user={this.props.user} />\n\n        <p className=\"message-line\">\n          <span className=\"material-icon\">warning</span>\n          <a href={misago.get(\"FORGOTTEN_PASSWORD_URL\")}>\n            {gettext(\"Change forgotten password\")}\n          </a>\n        </p>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport { connect } from \"react-redux\"\nimport { SideNav, CompactNav } from \"misago/components/options/navs\"\nimport DeleteAccount from \"misago/components/options/delete-account\"\nimport EditDetails from \"misago/components/options/edit-details\"\nimport DownloadData from \"misago/components/options/download-data\"\nimport ChangeForumOptions from \"misago/components/options/forum-options\"\nimport ChangeUsername from \"misago/components/options/change-username/root\"\nimport ChangeSignInCredentials from \"misago/components/options/sign-in-credentials/root\"\nimport WithDropdown from \"misago/components/with-dropdown\"\nimport misago from \"misago/index\"\nimport { FlexRow, FlexRowCol, FlexRowSection } from \"../FlexRow\"\nimport PageContainer from \"../PageContainer\"\nimport {\n  PageHeader,\n  PageHeaderBanner,\n  PageHeaderContainer,\n} from \"../PageHeader\"\n\nexport default class extends WithDropdown {\n  render() {\n    const page = misago.get(\"USER_OPTIONS\").filter((page) => {\n      const url = misago.get(\"USERCP_URL\") + page.component + \"/\"\n      return this.props.location.pathname.substr(0, url.length) === url\n    })[0]\n\n    return (\n      <div className=\"page page-options\">\n        <PageHeaderContainer>\n          <PageHeader styleName=\"options\">\n            <PageHeaderBanner styleName=\"options\">\n              <FlexRow>\n                <FlexRowSection auto>\n                  <FlexRowCol auto>\n                    <h1>{gettext(\"Change your options\")}</h1>\n                  </FlexRowCol>\n                  <FlexRowCol className=\"hidden-xs hidden-md hidden-lg\" shrink>\n                    <div className=\"dropdown\">\n                      <button\n                        type=\"button\"\n                        className=\"btn btn-default btn-outline btn-icon dropdown-toggle\"\n                        title={gettext(\"Menu\")}\n                        data-toggle=\"dropdown\"\n                        aria-haspopup=\"true\"\n                        aria-expanded=\"false\"\n                      >\n                        <span className=\"material-icon\">menu</span>\n                      </button>\n                      <CompactNav\n                        className=\"dropdown-menu dropdown-menu-right\"\n                        baseUrl={misago.get(\"USERCP_URL\")}\n                        options={misago.get(\"USER_OPTIONS\")}\n                      />\n                    </div>\n                  </FlexRowCol>\n                </FlexRowSection>\n                <FlexRowSection className=\"hidden-sm hidden-md hidden-lg\">\n                  <FlexRowCol>\n                    <div className=\"dropdown\">\n                      <button\n                        type=\"button\"\n                        className=\"btn btn-default btn-outline btn-block dropdown-toggle\"\n                        data-toggle=\"dropdown\"\n                        aria-haspopup=\"true\"\n                        aria-expanded=\"false\"\n                      >\n                        <span className=\"material-icon\">{page.icon}</span>\n                        {page.name}\n                      </button>\n                      <CompactNav\n                        className=\"dropdown-menu\"\n                        baseUrl={misago.get(\"USERCP_URL\")}\n                        options={misago.get(\"USER_OPTIONS\")}\n                      />\n                    </div>\n                  </FlexRowCol>\n                </FlexRowSection>\n              </FlexRow>\n            </PageHeaderBanner>\n          </PageHeader>\n        </PageHeaderContainer>\n        <PageContainer>\n          <div className=\"row\">\n            <div className=\"col-md-3 hidden-xs hidden-sm\">\n              <SideNav\n                baseUrl={misago.get(\"USERCP_URL\")}\n                options={misago.get(\"USER_OPTIONS\")}\n              />\n            </div>\n            <div className=\"col-md-9\">{this.props.children}</div>\n          </div>\n        </PageContainer>\n      </div>\n    )\n  }\n}\n\nexport function select(store) {\n  return {\n    tick: store.tick.tick,\n    user: store.auth.user,\n    \"username-history\": store[\"username-history\"],\n  }\n}\n\nexport function paths() {\n  const paths = [\n    {\n      path: misago.get(\"USERCP_URL\") + \"forum-options/\",\n      component: connect(select)(ChangeForumOptions),\n    },\n    {\n      path: misago.get(\"USERCP_URL\") + \"edit-details/\",\n      component: connect(select)(EditDetails),\n    },\n  ]\n\n  const delegateAuth = misago.get(\"SETTINGS\").DELEGATE_AUTH\n  if (!delegateAuth)  {\n    paths.push({\n      path: misago.get(\"USERCP_URL\") + \"change-username/\",\n      component: connect(select)(ChangeUsername),\n    })\n    paths.push({\n      path: misago.get(\"USERCP_URL\") + \"sign-in-credentials/\",\n      component: connect(select)(ChangeSignInCredentials),\n    })\n  }\n\n  if (misago.get(\"ENABLE_DOWNLOAD_OWN_DATA\")) {\n    paths.push({\n      path: misago.get(\"USERCP_URL\") + \"download-data/\",\n      component: connect(select)(DownloadData),\n    })\n  }\n\n  if (!delegateAuth && misago.get(\"ENABLE_DELETE_OWN_ACCOUNT\")) {\n    paths.push({\n      path: misago.get(\"USERCP_URL\") + \"delete-account/\",\n      component: connect(select)(DeleteAccount),\n    })\n  }\n\n  return paths\n}\n","import Options, { paths } from \"misago/components/options/root\"\nimport misago from \"misago/index\"\nimport mount from \"misago/utils/routed-component\"\n\nexport default function initializer(context) {\n  if (context.has(\"USER_OPTIONS\")) {\n    mount({\n      root: misago.get(\"USERCP_URL\"),\n      component: Options,\n      paths: paths(),\n    })\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:options\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import moment from \"moment\"\nimport React from \"react\"\nimport PanelLoader from \"misago/components/panel-loader\"\nimport PanelMessage from \"misago/components/panel-message\"\nimport misago from \"misago/index\"\nimport polls from \"misago/services/polls\"\nimport title from \"misago/services/page-title\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    if (misago.has(\"PROFILE_BAN\")) {\n      this.initWithPreloadedData(misago.pop(\"PROFILE_BAN\"))\n    } else {\n      this.initWithoutPreloadedData()\n    }\n\n    this.startPolling(props.profile.api.ban)\n  }\n\n  initWithPreloadedData(ban) {\n    if (ban.expires_on) {\n      ban.expires_on = moment(ban.expires_on)\n    }\n\n    this.state = {\n      isLoaded: true,\n      ban,\n    }\n  }\n\n  initWithoutPreloadedData() {\n    this.state = {\n      isLoaded: false,\n    }\n  }\n\n  startPolling(api) {\n    polls.start({\n      poll: \"ban-details\",\n      url: api,\n      frequency: 90 * 1000,\n      update: this.update,\n      error: this.error,\n    })\n  }\n\n  update = (ban) => {\n    if (ban.expires_on) {\n      ban.expires_on = moment(ban.expires_on)\n    }\n\n    this.setState({\n      isLoaded: true,\n      error: null,\n\n      ban,\n    })\n  }\n\n  error = (error) => {\n    this.setState({\n      isLoaded: true,\n      error: error.detail,\n      ban: null,\n    })\n  }\n\n  componentDidMount() {\n    title.set({\n      title: gettext(\"Ban details\"),\n      parent: this.props.profile.username,\n    })\n  }\n\n  componentWillUnmount() {\n    polls.stop(\"ban-details\")\n  }\n\n  getUserMessage() {\n    if (this.state.ban.user_message) {\n      return (\n        <div className=\"panel-body ban-message ban-user-message\">\n          <h4>{gettext(\"User-shown ban message\")}</h4>\n          <div\n            className=\"lead\"\n            dangerouslySetInnerHTML={{\n              __html: this.state.ban.user_message.html,\n            }}\n          />\n        </div>\n      )\n    } else {\n      return null\n    }\n  }\n\n  getStaffMessage() {\n    if (this.state.ban.staff_message) {\n      return (\n        <div className=\"panel-body ban-message ban-staff-message\">\n          <h4>{gettext(\"Team-shown ban message\")}</h4>\n          <div\n            className=\"lead\"\n            dangerouslySetInnerHTML={{\n              __html: this.state.ban.staff_message.html,\n            }}\n          />\n        </div>\n      )\n    } else {\n      return null\n    }\n  }\n\n  getExpirationMessage() {\n    if (this.state.ban.expires_on) {\n      if (this.state.ban.expires_on.isAfter(moment())) {\n        let title = interpolate(\n          gettext(\"This ban expires on %(expires_on)s.\"),\n          {\n            expires_on: this.state.ban.expires_on.format(\"LL, LT\"),\n          },\n          true\n        )\n\n        let message = interpolate(\n          gettext(\"This ban expires %(expires_on)s.\"),\n          {\n            expires_on: this.state.ban.expires_on.fromNow(),\n          },\n          true\n        )\n\n        return <abbr title={title}>{message}</abbr>\n      } else {\n        return gettext(\"This ban has expired.\")\n      }\n    } else {\n      return interpolate(\n        gettext(\"%(username)s's ban is permanent.\"),\n        {\n          username: this.props.profile.username,\n        },\n        true\n      )\n    }\n  }\n\n  getPanelBody() {\n    if (this.state.ban) {\n      if (Object.keys(this.state.ban).length) {\n        return (\n          <div>\n            {this.getUserMessage()}\n            {this.getStaffMessage()}\n\n            <div className=\"panel-body ban-expires\">\n              <h4>{gettext(\"Ban expiration\")}</h4>\n              <p className=\"lead\">{this.getExpirationMessage()}</p>\n            </div>\n          </div>\n        )\n      } else {\n        return (\n          <div>\n            <PanelMessage\n              message={gettext(\"No ban is active at the moment.\")}\n            />\n          </div>\n        )\n      }\n    } else if (this.state.error) {\n      return (\n        <div>\n          <PanelMessage icon=\"error_outline\" message={this.state.error} />\n        </div>\n      )\n    } else {\n      return (\n        <div>\n          <PanelLoader />\n        </div>\n      )\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"profile-ban-details\">\n        <div className=\"panel panel-default\">\n          <div className=\"panel-heading\">\n            <h3 className=\"panel-title\">{gettext(\"Ban details\")}</h3>\n          </div>\n\n          {this.getPanelBody()}\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Form from \"misago/components/edit-details\"\n\nexport default function ({ api, display, onCancel, onSuccess }) {\n  if (!display) return null\n\n  return <Form api={api} onCancel={onCancel} onSuccess={onSuccess} />\n}\n","import React from \"react\"\n\nexport default function ({ isAuthenticated, profile }) {\n  let message = null\n  if (isAuthenticated) {\n    message = gettext(\"You are not sharing any details with others.\")\n  } else {\n    message = interpolate(\n      gettext(\"%(username)s is not sharing any details with others.\"),\n      {\n        username: profile.username,\n      },\n      true\n    )\n  }\n\n  return (\n    <div className=\"panel panel-default\">\n      <div className=\"panel-body text-center lead\">{message}</div>\n    </div>\n  )\n}\n","import React from \"react\"\n\nexport default function ({ html, text, url }) {\n  if (html) {\n    return (\n      <div\n        className=\"form-control-static col-md-9\"\n        dangerouslySetInnerHTML={{ __html: html }}\n      />\n    )\n  }\n\n  return (\n    <div className=\"form-control-static col-md-9\">\n      <SafeValue text={text} url={url} />\n    </div>\n  )\n}\n\nexport function SafeValue({ text, url }) {\n  if (url) {\n    return (\n      <p>\n        <a href={url} target=\"_blank\" rel=\"nofollow\">\n          {text || url}\n        </a>\n      </p>\n    )\n  }\n\n  if (text) {\n    return <p>{text}</p>\n  }\n\n  return null\n}\n","import React from \"react\"\nimport FieldValue from \"./field-value\"\n\nexport default function (props) {\n  return (\n    <div className=\"form-group\">\n      <strong className=\"control-label col-md-3\">{props.name}:</strong>\n      <FieldValue {...props} />\n    </div>\n  )\n}\n","import React from \"react\"\nimport Field from \"./field\"\n\nexport default function ({ fields, name }) {\n  return (\n    <div className=\"panel panel-default panel-profile-details-group\">\n      <div className=\"panel-heading\">\n        <h3 className=\"panel-title\">{name}</h3>\n      </div>\n      <div className=\"panel-body\">\n        <div className=\"form-horizontal\">\n          {fields.map(({ fieldname, html, name, text, url }) => {\n            return (\n              <Field\n                key={fieldname}\n                name={name}\n                html={html}\n                text={text}\n                url={url}\n              />\n            )\n          })}\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport EmptyMessage from \"./empty-message\"\nimport Group from \"./group\"\nimport Loader from \"misago/components/loader\"\n\nexport default function ({\n  display,\n  groups,\n  isAuthenticated,\n  loading,\n  profile,\n}) {\n  if (!display) return null\n\n  if (loading) {\n    return <Loader />\n  }\n\n  if (!groups.length) {\n    return <EmptyMessage isAuthenticated={isAuthenticated} profile={profile} />\n  }\n\n  return (\n    <div>\n      {groups.map((group, i) => {\n        return <Group fields={group.fields} key={i} name={group.name} />\n      })}\n    </div>\n  )\n}\n","import React from \"react\"\nimport { Toolbar, ToolbarItem, ToolbarSection } from \"../../Toolbar\"\n\nconst ProfileDetailsHeader = ({ onEdit, showEditButton }) => (\n  <Toolbar>\n    <ToolbarSection auto>\n      <ToolbarItem auto>\n        <h3>{gettext(\"Details\")}</h3>\n      </ToolbarItem>\n    </ToolbarSection>\n    {showEditButton && (\n      <ToolbarSection>\n        <ToolbarItem>\n          <button\n            className=\"btn btn-default btn-outline btn-block\"\n            onClick={onEdit}\n            type=\"button\"\n          >\n            {gettext(\"Edit\")}\n          </button>\n        </ToolbarItem>\n      </ToolbarSection>\n    )}\n  </Toolbar>\n)\n\nexport default ProfileDetailsHeader\n","import React from \"react\"\nimport { load } from \"misago/reducers/profile-details\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends React.Component {\n  componentDidMount() {\n    const { data, dispatch, user } = this.props\n    if (data && data.id === user.id) return\n\n    ajax.get(this.props.user.api.details).then(\n      (data) => {\n        dispatch(load(data))\n      },\n      (rejection) => {\n        snackbar.apiError(rejection)\n      }\n    )\n  }\n\n  render() {\n    return this.props.children\n  }\n}\n","import React from \"react\"\nimport Form from \"./form\"\nimport GroupsList from \"./groups-list\"\nimport Header from \"./header\"\nimport ProfileDetailsData from \"misago/data/profile-details\"\nimport { load as loadDetails } from \"misago/reducers/profile-details\"\nimport title from \"misago/services/page-title\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      editing: false,\n    }\n  }\n\n  componentDidMount() {\n    title.set({\n      title: gettext(\"Details\"),\n      parent: this.props.profile.username,\n    })\n  }\n\n  onCancel = () => {\n    this.setState({ editing: false })\n  }\n\n  onEdit = () => {\n    this.setState({ editing: true })\n  }\n\n  onSuccess = (newDetails) => {\n    const { dispatch, isAuthenticated, profile } = this.props\n\n    let message = null\n    if (isAuthenticated) {\n      message = gettext(\"Your details have been updated.\")\n    } else {\n      message = interpolate(\n        gettext(\"%(username)s's details have been updated.\"),\n        {\n          username: profile.username,\n        },\n        true\n      )\n    }\n\n    snackbar.info(message)\n    dispatch(loadDetails(newDetails))\n    this.setState({ editing: false })\n  }\n\n  render() {\n    const { dispatch, isAuthenticated, profile, profileDetails } = this.props\n    const loading = profileDetails.id !== profile.id\n\n    return (\n      <ProfileDetailsData\n        data={profileDetails}\n        dispatch={dispatch}\n        user={profile}\n      >\n        <div className=\"profile-details\">\n          <Header\n            onEdit={this.onEdit}\n            showEditButton={!!profileDetails.edit && !this.state.editing}\n          />\n          <GroupsList\n            display={!this.state.editing}\n            groups={profileDetails.groups}\n            isAuthenticated={isAuthenticated}\n            loading={loading}\n            profile={profile}\n          />\n          <Form\n            api={profile.api.edit_details}\n            dispatch={dispatch}\n            display={this.state.editing}\n            onCancel={this.onCancel}\n            onSuccess={this.onSuccess}\n          />\n        </div>\n      </ProfileDetailsData>\n    )\n  }\n}\n","import React from \"react\"\nimport PostFeed from \"misago/components/post-feed\"\nimport Button from \"misago/components/button\"\nimport * as posts from \"misago/reducers/posts\"\nimport title from \"misago/services/page-title\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport { Toolbar, ToolbarItem, ToolbarSection } from \"../../Toolbar\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n    }\n  }\n\n  loadItems(start = 0) {\n    ajax\n      .get(this.props.api, {\n        start: start || 0,\n      })\n      .then(\n        (data) => {\n          if (start === 0) {\n            store.dispatch(posts.load(data))\n          } else {\n            store.dispatch(posts.append(data))\n          }\n\n          this.setState({\n            isLoading: false,\n          })\n        },\n        (rejection) => {\n          this.setState({\n            isLoading: false,\n          })\n\n          snackbar.apiError(rejection)\n        }\n      )\n  }\n\n  loadMore = () => {\n    this.setState({\n      isLoading: true,\n    })\n\n    this.loadItems(this.props.posts.next)\n  }\n\n  componentDidMount() {\n    title.set({\n      title: this.props.title,\n      parent: this.props.profile.username,\n    })\n\n    this.loadItems()\n  }\n\n  render() {\n    return (\n      <div className=\"profile-feed\">\n        <Toolbar>\n          <ToolbarSection auto>\n            <ToolbarItem auto>\n              <h3>{this.props.header}</h3>\n            </ToolbarItem>\n          </ToolbarSection>\n        </Toolbar>\n        <Feed\n          isLoading={this.state.isLoading}\n          loadMore={this.loadMore}\n          {...this.props}\n        />\n      </div>\n    )\n  }\n}\n\nexport function Feed(props) {\n  if (props.posts.isLoaded && !props.posts.results.length) {\n    return <p className=\"lead\">{props.emptyMessage}</p>\n  }\n\n  return (\n    <div>\n      <PostFeed\n        isReady={props.posts.isLoaded}\n        posts={props.posts.results}\n        poster={props.profile}\n      />\n      <LoadMoreButton\n        isLoading={props.isLoading}\n        loadMore={props.loadMore}\n        next={props.posts.next}\n      />\n    </div>\n  )\n}\n\nexport function LoadMoreButton(props) {\n  if (!props.next) return null\n\n  return (\n    <div className=\"pager-more\">\n      <Button\n        className=\"btn btn-default btn-outline\"\n        loading={props.isLoading}\n        onClick={props.loadMore}\n      >\n        {gettext(\"Show older activity\")}\n      </Button>\n    </div>\n  )\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  getClassName() {\n    if (this.props.className) {\n      return \"form-search \" + this.props.className\n    } else {\n      return \"form-search\"\n    }\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()}>\n        <input\n          type=\"text\"\n          className=\"form-control\"\n          value={this.props.value}\n          onChange={this.props.onChange}\n          placeholder={this.props.placeholder || gettext(\"Search...\")}\n        />\n        <span className=\"material-icon\">search</span>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Search from \"misago/components/quick-search\"\nimport UsersList from \"misago/components/users-list\"\nimport misago from \"misago/index\"\nimport { hydrate, append } from \"misago/reducers/users\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport title from \"misago/services/page-title\"\nimport { Toolbar, ToolbarItem, ToolbarSection } from \"../Toolbar\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.setSpecialProps()\n\n    if (misago.has(this.PRELOADED_DATA_KEY)) {\n      this.initWithPreloadedData(misago.pop(this.PRELOADED_DATA_KEY))\n    } else {\n      this.initWithoutPreloadedData()\n    }\n  }\n\n  setSpecialProps() {\n    this.PRELOADED_DATA_KEY = \"PROFILE_FOLLOWERS\"\n    this.TITLE = gettext(\"Followers\")\n    this.API_FILTER = \"followers\"\n  }\n\n  initWithPreloadedData(data) {\n    this.state = {\n      isLoaded: true,\n      isBusy: false,\n\n      search: \"\",\n\n      count: data.count,\n      more: data.more,\n\n      page: data.page,\n      pages: data.pages,\n    }\n\n    store.dispatch(hydrate(data.results))\n  }\n\n  initWithoutPreloadedData() {\n    this.state = {\n      isLoaded: false,\n      isBusy: false,\n\n      search: \"\",\n\n      count: 0,\n      more: 0,\n\n      page: 1,\n      pages: 1,\n    }\n\n    this.loadUsers()\n  }\n\n  loadUsers(page = 1, search = null) {\n    const apiUrl = this.props.profile.api[this.API_FILTER]\n\n    ajax\n      .get(\n        apiUrl,\n        {\n          search: search,\n          page: page || 1,\n        },\n        \"user-\" + this.API_FILTER\n      )\n      .then(\n        (data) => {\n          if (page === 1) {\n            store.dispatch(hydrate(data.results))\n          } else {\n            store.dispatch(append(data.results))\n          }\n\n          this.setState({\n            isLoaded: true,\n            isBusy: false,\n\n            count: data.count,\n            more: data.more,\n\n            page: data.page,\n            pages: data.pages,\n          })\n        },\n        (rejection) => {\n          snackbar.apiError(rejection)\n        }\n      )\n  }\n\n  componentDidMount() {\n    title.set({\n      title: this.TITLE,\n      parent: this.props.profile.username,\n    })\n  }\n\n  loadMore = () => {\n    this.setState({\n      isBusy: true,\n    })\n\n    this.loadUsers(this.state.page + 1, this.state.search)\n  }\n\n  search = (ev) => {\n    this.setState({\n      isLoaded: false,\n      isBusy: true,\n\n      search: ev.target.value,\n\n      count: 0,\n      more: 0,\n\n      page: 1,\n      pages: 1,\n    })\n\n    this.loadUsers(1, ev.target.value)\n  }\n\n  getLabel() {\n    if (!this.state.isLoaded) {\n      return gettext(\"Loading...\")\n    } else if (this.state.search) {\n      let message = ngettext(\n        \"Found %(users)s user.\",\n        \"Found %(users)s users.\",\n        this.state.count\n      )\n\n      return interpolate(\n        message,\n        {\n          users: this.state.count,\n        },\n        true\n      )\n    } else if (this.props.profile.id === this.props.user.id) {\n      let message = ngettext(\n        \"You have %(users)s follower.\",\n        \"You have %(users)s followers.\",\n        this.state.count\n      )\n\n      return interpolate(\n        message,\n        {\n          users: this.state.count,\n        },\n        true\n      )\n    } else {\n      let message = ngettext(\n        \"%(username)s has %(users)s follower.\",\n        \"%(username)s has %(users)s followers.\",\n        this.state.count\n      )\n\n      return interpolate(\n        message,\n        {\n          username: this.props.profile.username,\n          users: this.state.count,\n        },\n        true\n      )\n    }\n  }\n\n  getEmptyMessage() {\n    if (this.state.search) {\n      return gettext(\"Search returned no users matching specified criteria.\")\n    } else if (this.props.user.id === this.props.profile.id) {\n      return gettext(\"You have no followers.\")\n    } else {\n      return interpolate(\n        gettext(\"%(username)s has no followers.\"),\n        {\n          username: this.props.profile.username,\n        },\n        true\n      )\n    }\n  }\n\n  getMoreButton() {\n    if (!this.state.more) return null\n\n    return (\n      <div className=\"pager-more\">\n        <Button\n          className=\"btn btn-default btn-outline\"\n          loading={this.state.isBusy}\n          onClick={this.loadMore}\n        >\n          {interpolate(\n            gettext(\"Show more (%(more)s)\"),\n            {\n              more: this.state.more,\n            },\n            true\n          )}\n        </Button>\n      </div>\n    )\n  }\n\n  getListBody() {\n    if (this.state.isLoaded && this.state.count === 0) {\n      return <p className=\"lead\">{this.getEmptyMessage()}</p>\n    }\n\n    return (\n      <div>\n        <UsersList\n          cols={3}\n          isReady={this.state.isLoaded}\n          users={this.props.users}\n        />\n\n        {this.getMoreButton()}\n      </div>\n    )\n  }\n\n  getClassName() {\n    return \"profile-\" + this.API_FILTER\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()}>\n        <Toolbar>\n          <ToolbarSection auto>\n            <ToolbarItem auto>\n              <h3>{this.getLabel()}</h3>\n            </ToolbarItem>\n          </ToolbarSection>\n          <ToolbarSection>\n            <ToolbarItem>\n              <Search\n                value={this.state.search}\n                onChange={this.search}\n                placeholder={gettext(\"Search users...\")}\n              />\n            </ToolbarItem>\n          </ToolbarSection>\n        </Toolbar>\n\n        {this.getListBody()}\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Followers from \"misago/components/profile/followers\"\n\nexport default class extends Followers {\n  setSpecialProps() {\n    this.PRELOADED_DATA_KEY = \"PROFILE_FOLLOWS\"\n    this.TITLE = gettext(\"Follows\")\n    this.API_FILTER = \"follows\"\n  }\n\n  getLabel() {\n    if (!this.state.isLoaded) {\n      return gettext(\"Loading...\")\n    } else if (this.state.search) {\n      let message = ngettext(\n        \"Found %(users)s user.\",\n        \"Found %(users)s users.\",\n        this.state.count\n      )\n\n      return interpolate(\n        message,\n        {\n          users: this.state.count,\n        },\n        true\n      )\n    } else if (this.props.profile.id === this.props.user.id) {\n      let message = ngettext(\n        \"You are following %(users)s user.\",\n        \"You are following %(users)s users.\",\n        this.state.count\n      )\n\n      return interpolate(\n        message,\n        {\n          users: this.state.count,\n        },\n        true\n      )\n    } else {\n      let message = ngettext(\n        \"%(username)s is following %(users)s user.\",\n        \"%(username)s is following %(users)s users.\",\n        this.state.count\n      )\n\n      return interpolate(\n        message,\n        {\n          username: this.props.profile.username,\n          users: this.state.count,\n        },\n        true\n      )\n    }\n  }\n\n  getEmptyMessage() {\n    if (this.state.search) {\n      return gettext(\"Search returned no users matching specified criteria.\")\n    } else if (this.props.user.id === this.props.profile.id) {\n      return gettext(\"You are not following any users.\")\n    } else {\n      return interpolate(\n        gettext(\"%(username)s is not following any users.\"),\n        {\n          username: this.props.profile.username,\n        },\n        true\n      )\n    }\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Search from \"misago/components/quick-search\"\nimport UsernameHistory from \"misago/components/username-history/root\"\nimport misago from \"misago/index\"\nimport { hydrate, append } from \"misago/reducers/username-history\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport title from \"misago/services/page-title\"\nimport { Toolbar, ToolbarItem, ToolbarSection } from \"../Toolbar\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    if (misago.has(\"PROFILE_NAME_HISTORY\")) {\n      this.initWithPreloadedData(misago.pop(\"PROFILE_NAME_HISTORY\"))\n    } else {\n      this.initWithoutPreloadedData()\n    }\n  }\n\n  initWithPreloadedData(data) {\n    this.state = {\n      isLoaded: true,\n      isBusy: false,\n\n      search: \"\",\n\n      count: data.count,\n      more: data.more,\n\n      page: data.page,\n      pages: data.pages,\n    }\n\n    store.dispatch(hydrate(data.results))\n  }\n\n  initWithoutPreloadedData() {\n    this.state = {\n      isLoaded: false,\n      isBusy: false,\n\n      search: \"\",\n\n      count: 0,\n      more: 0,\n\n      page: 1,\n      pages: 1,\n    }\n\n    this.loadChanges()\n  }\n\n  loadChanges(page = 1, search = null) {\n    ajax\n      .get(\n        misago.get(\"USERNAME_CHANGES_API\"),\n        {\n          user: this.props.profile.id,\n          search: search,\n          page: page || 1,\n        },\n        \"search-username-history\"\n      )\n      .then(\n        (data) => {\n          if (page === 1) {\n            store.dispatch(hydrate(data.results))\n          } else {\n            store.dispatch(append(data.results))\n          }\n\n          this.setState({\n            isLoaded: true,\n            isBusy: false,\n\n            count: data.count,\n            more: data.more,\n\n            page: data.page,\n            pages: data.pages,\n          })\n        },\n        (rejection) => {\n          snackbar.apiError(rejection)\n        }\n      )\n  }\n\n  componentDidMount() {\n    title.set({\n      title: gettext(\"Username history\"),\n      parent: this.props.profile.username,\n    })\n  }\n\n  loadMore = () => {\n    this.setState({\n      isBusy: true,\n    })\n\n    this.loadChanges(this.state.page + 1, this.state.search)\n  }\n\n  search = (ev) => {\n    this.setState({\n      isLoaded: false,\n      isBusy: true,\n\n      search: ev.target.value,\n\n      count: 0,\n      more: 0,\n\n      page: 1,\n      pages: 1,\n    })\n\n    this.loadChanges(1, ev.target.value)\n  }\n\n  getLabel() {\n    if (!this.state.isLoaded) {\n      return gettext(\"Loading...\")\n    } else if (this.state.search) {\n      let message = ngettext(\n        \"Found %(changes)s username change.\",\n        \"Found %(changes)s username changes.\",\n        this.state.count\n      )\n\n      return interpolate(\n        message,\n        {\n          changes: this.state.count,\n        },\n        true\n      )\n    } else if (this.props.profile.id === this.props.user.id) {\n      let message = ngettext(\n        \"Your username was changed %(changes)s time.\",\n        \"Your username was changed %(changes)s times.\",\n        this.state.count\n      )\n\n      return interpolate(\n        message,\n        {\n          changes: this.state.count,\n        },\n        true\n      )\n    } else {\n      let message = ngettext(\n        \"%(username)s's username was changed %(changes)s time.\",\n        \"%(username)s's username was changed %(changes)s times.\",\n        this.state.count\n      )\n\n      return interpolate(\n        message,\n        {\n          username: this.props.profile.username,\n          changes: this.state.count,\n        },\n        true\n      )\n    }\n  }\n\n  getEmptyMessage() {\n    if (this.state.search) {\n      return gettext(\n        \"Search returned no username changes matching specified criteria.\"\n      )\n    } else if (this.props.user.id === this.props.profile.id) {\n      return gettext(\"No name changes have been recorded for your account.\")\n    } else {\n      return interpolate(\n        gettext(\"%(username)s's username was never changed.\"),\n        {\n          username: this.props.profile.username,\n        },\n        true\n      )\n    }\n  }\n\n  getMoreButton() {\n    if (!this.state.more) return null\n\n    return (\n      <div className=\"pager-more\">\n        <Button\n          className=\"btn btn-default btn-outline\"\n          loading={this.state.isBusy}\n          onClick={this.loadMore}\n        >\n          {interpolate(\n            gettext(\"Show older (%(more)s)\"),\n            {\n              more: this.state.more,\n            },\n            true\n          )}\n        </Button>\n      </div>\n    )\n  }\n\n  render() {\n    return (\n      <div className=\"profile-username-history\">\n        <Toolbar>\n          <ToolbarSection auto>\n            <ToolbarItem auto>\n              <h3>{this.getLabel()}</h3>\n            </ToolbarItem>\n          </ToolbarSection>\n          <ToolbarSection>\n            <ToolbarItem>\n              <Search\n                value={this.state.search}\n                onChange={this.search}\n                placeholder={gettext(\"Search history...\")}\n              />\n            </ToolbarItem>\n          </ToolbarSection>\n        </Toolbar>\n\n        <UsernameHistory\n          isLoaded={this.state.isLoaded}\n          emptyMessage={this.getEmptyMessage()}\n          changes={this.props[\"username-history\"]}\n        />\n\n        {this.getMoreButton()}\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport { patch } from \"misago/reducers/profile\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n    }\n  }\n\n  getClassName() {\n    if (this.props.profile.is_followed) {\n      return this.props.className + \" btn-default btn-following\"\n    } else {\n      return this.props.className + \" btn-default btn-follow\"\n    }\n  }\n\n  getIcon() {\n    if (this.props.profile.is_followed) {\n      return \"favorite\"\n    } else {\n      return \"favorite_border\"\n    }\n  }\n\n  getLabel() {\n    if (this.props.profile.is_followed) {\n      return gettext(\"Following\")\n    } else {\n      return gettext(\"Follow\")\n    }\n  }\n\n  action = () => {\n    this.setState({\n      isLoading: true,\n    })\n\n    if (this.props.profile.is_followed) {\n      store.dispatch(\n        patch({\n          is_followed: false,\n          followers: this.props.profile.followers - 1,\n        })\n      )\n    } else {\n      store.dispatch(\n        patch({\n          is_followed: true,\n          followers: this.props.profile.followers + 1,\n        })\n      )\n    }\n\n    ajax.post(this.props.profile.api.follow).then(\n      (data) => {\n        this.setState({\n          isLoading: false,\n        })\n\n        store.dispatch(patch(data))\n      },\n      (rejection) => {\n        this.setState({\n          isLoading: false,\n        })\n        snackbar.apiError(rejection)\n      }\n    )\n  }\n\n  render() {\n    return (\n      <Button\n        className={this.getClassName()}\n        disabled={this.state.isLoading}\n        onClick={this.action}\n      >\n        <span className=\"material-icon\">{this.getIcon()}</span>\n        {this.getLabel()}\n      </Button>\n    )\n  }\n}\n","import React from \"react\"\nimport posting from \"misago/services/posting\"\nimport misago from \"misago\"\n\nexport default class extends React.Component {\n  onClick = () => {\n    posting.open({\n      mode: \"START_PRIVATE\",\n      submit: misago.get(\"PRIVATE_THREADS_API\"),\n\n      to: [this.props.profile],\n    })\n  }\n\n  render() {\n    const canMessage = this.props.user.acl.can_start_private_threads\n    const isProfileOwner = this.props.user.id === this.props.profile.id\n\n    if (!canMessage || isProfileOwner) return null\n\n    return (\n      <button\n        className={this.props.className}\n        onClick={this.onClick}\n        type=\"button\"\n      >\n        <span className=\"material-icon\">comment</span>\n        {gettext(\"Message\")}\n      </button>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport Loader from \"misago/components/modal-loader\"\nimport YesNoSwitch from \"misago/components/yes-no-switch\"\nimport ModalMessage from \"misago/components/modal-message\"\nimport { updateAvatar } from \"misago/reducers/users\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoaded: false,\n      isLoading: false,\n      error: null,\n\n      is_avatar_locked: \"\",\n      avatar_lock_user_message: \"\",\n      avatar_lock_staff_message: \"\",\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(this.props.profile.api.moderate_avatar).then(\n      (options) => {\n        this.setState({\n          isLoaded: true,\n\n          is_avatar_locked: options.is_avatar_locked,\n          avatar_lock_user_message: options.avatar_lock_user_message || \"\",\n          avatar_lock_staff_message: options.avatar_lock_staff_message || \"\",\n        })\n      },\n      (rejection) => {\n        this.setState({\n          isLoaded: true,\n          error: rejection.detail,\n        })\n      }\n    )\n  }\n\n  clean() {\n    if (this.isValid()) {\n      return true\n    } else {\n      snackbar.error(this.validate().username[0])\n      return false\n    }\n  }\n\n  send() {\n    return ajax.post(this.props.profile.api.moderate_avatar, {\n      is_avatar_locked: this.state.is_avatar_locked,\n      avatar_lock_user_message: this.state.avatar_lock_user_message,\n      avatar_lock_staff_message: this.state.avatar_lock_staff_message,\n    })\n  }\n\n  handleSuccess(apiResponse) {\n    store.dispatch(updateAvatar(this.props.profile, apiResponse.avatar_hash))\n    snackbar.success(gettext(\"Avatar controls have been changed.\"))\n  }\n\n  getFormBody() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"modal-body\">\n          <FormGroup\n            label={gettext(\"Lock avatar\")}\n            helpText={gettext(\n              \"Locking user avatar will prohibit user from changing his avatar and will reset his/her avatar to default one.\"\n            )}\n            for=\"id_is_avatar_locked\"\n          >\n            <YesNoSwitch\n              id=\"id_is_avatar_locked\"\n              disabled={this.state.isLoading}\n              iconOn=\"lock_outline\"\n              iconOff=\"lock_open\"\n              labelOn={gettext(\"Disallow user from changing avatar\")}\n              labelOff={gettext(\"Allow user to change avatar\")}\n              onChange={this.bindInput(\"is_avatar_locked\")}\n              value={this.state.is_avatar_locked}\n            />\n          </FormGroup>\n\n          <FormGroup\n            label={gettext(\"User message\")}\n            helpText={gettext(\n              \"Optional message for user explaining why he/she is prohibited form changing avatar.\"\n            )}\n            for=\"id_avatar_lock_user_message\"\n          >\n            <textarea\n              id=\"id_avatar_lock_user_message\"\n              className=\"form-control\"\n              rows=\"4\"\n              disabled={this.state.isLoading}\n              onChange={this.bindInput(\"avatar_lock_user_message\")}\n              value={this.state.avatar_lock_user_message}\n            />\n          </FormGroup>\n\n          <FormGroup\n            label={gettext(\"Staff message\")}\n            helpText={gettext(\n              \"Optional message for forum team members explaining why user is prohibited form changing avatar.\"\n            )}\n            for=\"id_avatar_lock_staff_message\"\n          >\n            <textarea\n              id=\"id_avatar_lock_staff_message\"\n              className=\"form-control\"\n              rows=\"4\"\n              disabled={this.state.isLoading}\n              onChange={this.bindInput(\"avatar_lock_staff_message\")}\n              value={this.state.avatar_lock_staff_message}\n            />\n          </FormGroup>\n        </div>\n        <div className=\"modal-footer\">\n          <button\n            type=\"button\"\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n          >\n            {gettext(\"Close\")}\n          </button>\n          <Button className=\"btn-primary\" loading={this.state.isLoading}>\n            {gettext(\"Save changes\")}\n          </Button>\n        </div>\n      </form>\n    )\n  }\n\n  getModalBody() {\n    if (this.state.error) {\n      return (\n        <ModalMessage icon=\"remove_circle_outline\" message={this.state.error} />\n      )\n    } else if (this.state.isLoaded) {\n      return this.getFormBody()\n    } else {\n      return <Loader />\n    }\n  }\n\n  getClassName() {\n    if (this.state.error) {\n      return \"modal-dialog modal-message modal-avatar-controls\"\n    } else {\n      return \"modal-dialog modal-avatar-controls\"\n    }\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()} role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              type=\"button\"\n              className=\"close\"\n              data-dismiss=\"modal\"\n              aria-label={gettext(\"Close\")}\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Avatar controls\")}</h4>\n          </div>\n          {this.getModalBody()}\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport Loader from \"misago/components/modal-loader\"\nimport ModalMessage from \"misago/components/modal-message\"\nimport { addNameChange } from \"misago/reducers/username-history\"\nimport { updateUsername } from \"misago/reducers/users\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport * as validators from \"misago/utils/validators\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoaded: false,\n      isLoading: false,\n      error: null,\n\n      username: \"\",\n      validators: {\n        username: [validators.usernameContent()],\n      },\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(this.props.profile.api.moderate_username).then(\n      () => {\n        this.setState({\n          isLoaded: true,\n        })\n      },\n      (rejection) => {\n        this.setState({\n          isLoaded: true,\n          error: rejection.detail,\n        })\n      }\n    )\n  }\n\n  clean() {\n    if (this.isValid()) {\n      return true\n    } else {\n      snackbar.error(this.validate().username[0])\n      return false\n    }\n  }\n\n  send() {\n    return ajax.post(this.props.profile.api.moderate_username, {\n      username: this.state.username,\n    })\n  }\n\n  handleSuccess(apiResponse) {\n    this.setState({\n      username: \"\",\n    })\n\n    store.dispatch(\n      addNameChange(apiResponse, this.props.profile, this.props.user)\n    )\n    store.dispatch(\n      updateUsername(this.props.profile, apiResponse.username, apiResponse.slug)\n    )\n\n    snackbar.success(gettext(\"Username has been changed.\"))\n  }\n\n  getFormBody() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"modal-body\">\n          <FormGroup label={gettext(\"New username\")} for=\"id_username\">\n            <input\n              type=\"text\"\n              id=\"id_username\"\n              className=\"form-control\"\n              disabled={this.state.isLoading}\n              onChange={this.bindInput(\"username\")}\n              value={this.state.username}\n            />\n          </FormGroup>\n        </div>\n        <div className=\"modal-footer\">\n          <button\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n            disabled={this.state.isLoading}\n            type=\"button\"\n          >\n            {gettext(\"Cancel\")}\n          </button>\n          <Button className=\"btn-primary\" loading={this.state.isLoading}>\n            {gettext(\"Change username\")}\n          </Button>\n        </div>\n      </form>\n    )\n  }\n\n  getModalBody() {\n    if (this.state.error) {\n      return (\n        <ModalMessage icon=\"remove_circle_outline\" message={this.state.error} />\n      )\n    } else if (this.state.isLoaded) {\n      return this.getFormBody()\n    } else {\n      return <Loader />\n    }\n  }\n\n  getClassName() {\n    if (this.state.error) {\n      return \"modal-dialog modal-message modal-rename-user\"\n    } else {\n      return \"modal-dialog modal-rename-user\"\n    }\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()} role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              type=\"button\"\n              className=\"close\"\n              data-dismiss=\"modal\"\n              aria-label={gettext(\"Close\")}\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Change username\")}</h4>\n          </div>\n          {this.getModalBody()}\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport Loader from \"misago/components/modal-loader\"\nimport ModalMessage from \"misago/components/modal-message\"\nimport YesNoSwitch from \"misago/components/yes-no-switch\"\nimport misago from \"misago/index\"\nimport ajax from \"misago/services/ajax\"\nimport polls from \"misago/services/polls\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoaded: false,\n      isLoading: false,\n      isDeleted: false,\n      error: null,\n\n      countdown: 5,\n      confirm: false,\n\n      with_content: false,\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(this.props.profile.api.delete).then(\n      () => {\n        this.setState({\n          isLoaded: true,\n        })\n\n        this.countdown()\n      },\n      (rejection) => {\n        this.setState({\n          isLoaded: true,\n          error: rejection.detail,\n        })\n      }\n    )\n  }\n\n  countdown = () => {\n    window.setTimeout(() => {\n      if (this.state.countdown > 1) {\n        this.setState({\n          countdown: this.state.countdown - 1,\n        })\n        this.countdown()\n      } else if (!this.state.confirm) {\n        this.setState({\n          confirm: true,\n        })\n      }\n    }, 1000)\n  }\n\n  send() {\n    return ajax.post(this.props.profile.api.delete, {\n      with_content: this.state.with_content,\n    })\n  }\n\n  handleSuccess() {\n    polls.stop(\"user-profile\")\n\n    if (this.state.with_content) {\n      this.setState({\n        isDeleted: interpolate(\n          gettext(\n            \"%(username)s's account, threads, posts and other content has been deleted.\"\n          ),\n          {\n            username: this.props.profile.username,\n          },\n          true\n        ),\n      })\n    } else {\n      this.setState({\n        isDeleted: interpolate(\n          gettext(\n            \"%(username)s's account has been deleted and other content has been hidden.\"\n          ),\n          {\n            username: this.props.profile.username,\n          },\n          true\n        ),\n      })\n    }\n  }\n\n  getButtonLabel() {\n    if (this.state.confirm) {\n      return interpolate(\n        gettext(\"Delete %(username)s\"),\n        {\n          username: this.props.profile.username,\n        },\n        true\n      )\n    } else {\n      return interpolate(\n        gettext(\"Please wait... (%(countdown)ss)\"),\n        {\n          countdown: this.state.countdown,\n        },\n        true\n      )\n    }\n  }\n\n  getForm() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"modal-body\">\n          <FormGroup label={gettext(\"User content\")} for=\"id_with_content\">\n            <YesNoSwitch\n              id=\"id_with_content\"\n              disabled={this.state.isLoading}\n              labelOn={gettext(\"Delete together with user's account\")}\n              labelOff={gettext(\"Hide after deleting user's account\")}\n              onChange={this.bindInput(\"with_content\")}\n              value={this.state.with_content}\n            />\n          </FormGroup>\n        </div>\n        <div className=\"modal-footer\">\n          <button\n            type=\"button\"\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n          >\n            {gettext(\"Cancel\")}\n          </button>\n\n          <Button\n            className=\"btn-danger\"\n            loading={this.state.isLoading}\n            disabled={!this.state.confirm}\n          >\n            {this.getButtonLabel()}\n          </Button>\n        </div>\n      </form>\n    )\n  }\n\n  getDeletedBody() {\n    return (\n      <div className=\"modal-body\">\n        <div className=\"message-icon\">\n          <span className=\"material-icon\">info_outline</span>\n        </div>\n        <div className=\"message-body\">\n          <p className=\"lead\">{this.state.isDeleted}</p>\n          <p>\n            <a href={misago.get(\"USERS_LIST_URL\")}>\n              {gettext(\"Return to users list\")}\n            </a>\n          </p>\n        </div>\n      </div>\n    )\n  }\n\n  getModalBody() {\n    if (this.state.error) {\n      return (\n        <ModalMessage icon=\"remove_circle_outline\" message={this.state.error} />\n      )\n    } else if (this.state.isLoaded) {\n      if (this.state.isDeleted) {\n        return this.getDeletedBody()\n      } else {\n        return this.getForm()\n      }\n    } else {\n      return <Loader />\n    }\n  }\n\n  getClassName() {\n    if (this.state.error || this.state.isDeleted) {\n      return \"modal-dialog modal-message modal-delete-account\"\n    } else {\n      return \"modal-dialog modal-delete-account\"\n    }\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()} role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              type=\"button\"\n              className=\"close\"\n              data-dismiss=\"modal\"\n              aria-label={gettext(\"Close\")}\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Delete user account\")}</h4>\n          </div>\n          {this.getModalBody()}\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport { connect } from \"react-redux\"\nimport AvatarControls from \"misago/components/profile/moderation/avatar-controls\"\nimport ChangeUsername from \"misago/components/profile/moderation/change-username\"\nimport DeleteAccount from \"misago/components/profile/moderation/delete-account\"\nimport modal from \"misago/services/modal\"\n\nlet select = function (store) {\n  return {\n    tick: store.tick,\n    user: store.auth,\n    profile: store.profile,\n  }\n}\n\nexport default class extends React.Component {\n  showAvatarDialog = () => {\n    modal.show(connect(select)(AvatarControls))\n  }\n\n  showRenameDialog = () => {\n    modal.show(connect(select)(ChangeUsername))\n  }\n\n  showDeleteDialog = () => {\n    modal.show(connect(select)(DeleteAccount))\n  }\n\n  render() {\n    const { moderation } = this.props\n\n    return (\n      <ul className=\"dropdown-menu dropdown-menu-right\" role=\"menu\">\n        {!!moderation.avatar && (\n          <li>\n            <button\n              type=\"button\"\n              className=\"btn btn-link\"\n              onClick={this.showAvatarDialog}\n            >\n              <span className=\"material-icon\">portrait</span>\n              {gettext(\"Avatar controls\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.rename && (\n          <li>\n            <button\n              type=\"button\"\n              className=\"btn btn-link\"\n              onClick={this.showRenameDialog}\n            >\n              <span className=\"material-icon\">credit_card</span>\n              {gettext(\"Change username\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.delete && (\n          <li>\n            <button\n              type=\"button\"\n              className=\"btn btn-link\"\n              onClick={this.showDeleteDialog}\n            >\n              <span className=\"material-icon\">clear</span>\n              {gettext(\"Delete account\")}\n            </button>\n          </li>\n        )}\n      </ul>\n    )\n  }\n}\n","import React from \"react\"\nimport Status, { StatusIcon, StatusLabel } from \"../user-status\"\n\nconst ProfileDataList = ({ profile }) => (\n  <ul className=\"profile-data-list\">\n    {profile.is_active === false && (\n      <li className=\"user-account-disabled\">\n        <abbr\n          title={gettext(\n            \"This user's account has been disabled by administrator.\"\n          )}\n        >\n          {gettext(\"Account disabled\")}\n        </abbr>\n      </li>\n    )}\n    <li className=\"user-status-display\">\n      <Status user={profile} status={profile.status}>\n        <StatusIcon user={profile} status={profile.status} />\n        <StatusLabel\n          user={profile}\n          status={profile.status}\n          className=\"status-label\"\n        />\n      </Status>\n    </li>\n    {profile.rank.is_tab ? (\n      <li className=\"user-rank\">\n        <a href={profile.rank.url} className=\"item-title\">\n          {profile.rank.name}\n        </a>\n      </li>\n    ) : (\n      <li className=\"user-rank\">\n        <span className=\"item-title\">{profile.rank.name}</span>\n      </li>\n    )}\n    {(profile.title || profile.rank.title) && (\n      <li className=\"user-title\">{profile.title || profile.rank.title}</li>\n    )}\n    <li className=\"user-joined-on\">\n      <abbr\n        title={interpolate(\n          gettext(\"Joined on %(joined_on)s\"),\n          {\n            joined_on: profile.joined_on.format(\"LL, LT\"),\n          },\n          true\n        )}\n      >\n        {interpolate(\n          gettext(\"Joined %(joined_on)s\"),\n          {\n            joined_on: profile.joined_on.fromNow(),\n          },\n          true\n        )}\n      </abbr>\n    </li>\n    {profile.email && (\n      <li className=\"user-email\">\n        <a href={\"mailto:\" + profile.email} className=\"item-title\">\n          {profile.email}\n        </a>\n      </li>\n    )}\n  </ul>\n)\n\nexport default ProfileDataList\n","import React from \"react\"\nimport Avatar from \"../avatar\"\nimport { FlexRow, FlexRowCol, FlexRowSection } from \"../FlexRow\"\nimport {\n  PageHeader,\n  PageHeaderBanner,\n  PageHeaderContainer,\n  PageHeaderDetails,\n} from \"../PageHeader\"\nimport FollowButton from \"./follow-button\"\nimport MessageButton from \"./message-button\"\nimport ModerationOptions from \"./moderation/nav\"\nimport ProfileDataList from \"./ProfileDataList\"\n\nconst ProfileHeader = ({ profile, user, moderation, message, follow }) => (\n  <PageHeaderContainer>\n    <PageHeader\n      styleName={\n        profile.rank.css_class ? \"rank-\" + profile.rank.css_class : \"profile\"\n      }\n    >\n      <PageHeaderBanner\n        styleName={\n          profile.rank.css_class ? \"rank-\" + profile.rank.css_class : \"profile\"\n        }\n      >\n        <div className=\"profile-page-header\">\n          <div className=\"profile-page-header-avatar\">\n            <Avatar\n              className=\"user-avatar hidden-sm hidden-md hidden-lg\"\n              user={profile}\n              size={200}\n              size2x={400}\n            />\n            <Avatar\n              className=\"user-avatar hidden-xs hidden-md hidden-lg\"\n              user={profile}\n              size={64}\n              size2x={128}\n            />\n            <Avatar\n              className=\"user-avatar hidden-xs hidden-sm\"\n              user={profile}\n              size={128}\n              size2x={256}\n            />\n          </div>\n          <h1>{profile.username}</h1>\n        </div>\n      </PageHeaderBanner>\n      <PageHeaderDetails className=\"profile-page-header-details\">\n        <FlexRow>\n          <FlexRowSection auto>\n            <FlexRowCol>\n              <ProfileDataList profile={profile} />\n            </FlexRowCol>\n          </FlexRowSection>\n          {message && (\n            <FlexRowSection>\n              <FlexRowCol>\n                <MessageButton\n                  className=\"btn btn-default btn-block btn-outline\"\n                  profile={profile}\n                  user={user}\n                />\n              </FlexRowCol>\n              {moderation.available && !follow && (\n                <FlexRowCol shrink>\n                  <div className=\"dropdown\">\n                    <ProfileModerationButton />\n                    <ModerationOptions\n                      profile={profile}\n                      moderation={moderation}\n                    />\n                  </div>\n                </FlexRowCol>\n              )}\n            </FlexRowSection>\n          )}\n          {follow && (\n            <FlexRowSection>\n              <FlexRowCol>\n                <FollowButton\n                  className=\"btn btn-block btn-outline\"\n                  profile={profile}\n                />\n              </FlexRowCol>\n              {moderation.available && (\n                <FlexRowCol shrink>\n                  <div className=\"dropdown\">\n                    <ProfileModerationButton />\n                    <ModerationOptions\n                      profile={profile}\n                      moderation={moderation}\n                    />\n                  </div>\n                </FlexRowCol>\n              )}\n            </FlexRowSection>\n          )}\n          {moderation.available && !follow && !message && (\n            <FlexRowSection>\n              <FlexRowCol className=\"hidden-xs\" shrink>\n                <div className=\"dropdown\">\n                  <ProfileModerationButton />\n                  <ModerationOptions\n                    profile={profile}\n                    moderation={moderation}\n                  />\n                </div>\n              </FlexRowCol>\n              <FlexRowCol className=\"hidden-sm hidden-md hidden-lg\">\n                <div className=\"dropdown\">\n                  <button\n                    className=\"btn btn-default btn-block btn-outline dropdown-toggle\"\n                    type=\"button\"\n                    data-toggle=\"dropdown\"\n                    aria-haspopup=\"true\"\n                    aria-expanded=\"false\"\n                  >\n                    <span className=\"material-icon\">settings</span>\n                    {gettext(\"Options\")}\n                  </button>\n                  <ModerationOptions\n                    profile={profile}\n                    moderation={moderation}\n                  />\n                </div>\n              </FlexRowCol>\n            </FlexRowSection>\n          )}\n        </FlexRow>\n      </PageHeaderDetails>\n    </PageHeader>\n  </PageHeaderContainer>\n)\n\nconst ProfileModerationButton = () => (\n  <button\n    className=\"btn btn-default btn-icon btn-outline dropdown-toggle\"\n    type=\"button\"\n    title={gettext(\"Options\")}\n    data-toggle=\"dropdown\"\n    aria-haspopup=\"true\"\n    aria-expanded=\"false\"\n  >\n    <span className=\"material-icon\">settings</span>\n  </button>\n)\n\nexport default ProfileHeader\n","import React from \"react\"\nimport { Link } from \"react-router\"\nimport Li from \"misago/components/li\"\n\nconst ProfileNav = ({ baseUrl, page, pages }) => (\n  <div className=\"nav-container\">\n    <div className=\"dropdown hidden-sm hidden-md hidden-lg\">\n      <button\n        className=\"btn btn-default btn-block btn-outline dropdown-toggle\"\n        type=\"button\"\n        data-toggle=\"dropdown\"\n        aria-haspopup=\"true\"\n        aria-expanded=\"false\"\n      >\n        <span className=\"material-icon\">{page.icon}</span>\n        {page.name}\n      </button>\n      <ul className=\"dropdown-menu stick-to-bottom\">\n        {pages.map((page) => (\n          <li key={page.component}>\n            <Link to={baseUrl + page.component + \"/\"}>\n              <span className=\"material-icon\">{page.icon}</span>\n              {page.name}\n            </Link>\n          </li>\n        ))}\n      </ul>\n    </div>\n    <ul className=\"nav nav-pills hidden-xs\" role=\"menu\">\n      {pages.map((page) => (\n        <Li path={baseUrl + page.component + \"/\"} key={page.component}>\n          <Link to={baseUrl + page.component + \"/\"}>\n            <span className=\"material-icon\">{page.icon}</span>\n            {page.name}\n          </Link>\n        </Li>\n      ))}\n    </ul>\n  </div>\n)\n\nexport default ProfileNav\n","import React from \"react\"\nimport { connect } from \"react-redux\"\nimport BanDetails from \"./ban-details\"\nimport Details from \"./details\"\nimport { Posts, Threads } from \"./feed\"\nimport Followers from \"./followers\"\nimport Follows from \"./follows\"\nimport UsernameHistory from \"./username-history\"\nimport WithDropdown from \"misago/components/with-dropdown\"\nimport misago from \"misago\"\nimport { hydrate } from \"misago/reducers/profile\"\nimport polls from \"misago/services/polls\"\nimport store from \"misago/services/store\"\nimport PageContainer from \"../PageContainer\"\nimport ProfileHeader from \"./ProfileHeader\"\nimport ProfileNav from \"./ProfileNav\"\n\nexport default class extends WithDropdown {\n  constructor(props) {\n    super(props)\n\n    this.startPolling(props.profile.api.index)\n  }\n\n  startPolling(api) {\n    polls.start({\n      poll: \"user-profile\",\n      url: api,\n      frequency: 90 * 1000,\n      update: this.update,\n    })\n  }\n\n  update = (data) => {\n    store.dispatch(hydrate(data))\n  }\n\n  render() {\n    const baseUrl = misago.get(\"PROFILE\").url\n    const pages = misago.get(\"PROFILE_PAGES\")\n    const page = pages.filter((page) => {\n      const url = baseUrl + page.component + \"/\"\n      return this.props.location.pathname === url\n    })[0]\n    const { profile, user } = this.props\n    const moderation = getModeration(profile, user)\n    const message = user.acl.can_start_private_threads && profile.id !== user.id\n    const follow = profile.acl.can_follow && profile.id !== user.id\n\n    return (\n      <div className=\"page page-user-profile\">\n        <ProfileHeader\n          profile={this.props.profile}\n          user={this.props.user}\n          moderation={moderation}\n          message={message}\n          follow={follow}\n        />\n        <PageContainer>\n          <ProfileNav baseUrl={baseUrl} page={page} pages={pages} />\n\n          {this.props.children}\n        </PageContainer>\n      </div>\n    )\n  }\n}\n\nconst getModeration = (profile, user) => {\n  const moderation = {\n    available: false,\n    rename: false,\n    avatar: false,\n    delete: false,\n  }\n\n  if (user.is_anonumous) return moderation\n\n  moderation.rename = profile.acl.can_rename\n  moderation.avatar = profile.acl.can_moderate_avatar\n  moderation.delete = profile.acl.can_delete\n  moderation.available =\n    moderation.rename || moderation.avatar || moderation.delete\n\n  return moderation\n}\n\nexport function select(store) {\n  return {\n    isAuthenticated: store.auth.user.id === store.profile.id,\n\n    tick: store.tick.tick,\n    user: store.auth.user,\n    users: store.users,\n    posts: store.posts,\n    profile: store.profile,\n    profileDetails: store[\"profile-details\"],\n    \"username-history\": store[\"username-history\"],\n  }\n}\n\nconst COMPONENTS = {\n  posts: Posts,\n  threads: Threads,\n  followers: Followers,\n  follows: Follows,\n  details: Details,\n  \"username-history\": UsernameHistory,\n  \"ban-details\": BanDetails,\n}\n\nexport function paths() {\n  let paths = []\n  misago.get(\"PROFILE_PAGES\").forEach(function (item) {\n    paths.push(\n      Object.assign({}, item, {\n        path: misago.get(\"PROFILE\").url + item.component + \"/\",\n        component: connect(select)(COMPONENTS[item.component]),\n      })\n    )\n  })\n\n  return paths\n}\n","import React from \"react\"\nimport Route from \"./route\"\n\nexport function Threads(props) {\n  let emptyMessage = null\n  if (props.user.id === props.profile.id) {\n    emptyMessage = gettext(\"You have no started threads.\")\n  } else {\n    emptyMessage = interpolate(\n      gettext(\"%(username)s started no threads.\"),\n      {\n        username: props.profile.username,\n      },\n      true\n    )\n  }\n\n  let header = null\n  if (!props.posts.isLoaded) {\n    header = gettext(\"Loading...\")\n  } else if (props.profile.id === props.user.id) {\n    const message = ngettext(\n      \"You have started %(threads)s thread.\",\n      \"You have started %(threads)s threads.\",\n      props.profile.threads\n    )\n\n    header = interpolate(\n      message,\n      {\n        threads: props.profile.threads,\n      },\n      true\n    )\n  } else {\n    const message = ngettext(\n      \"%(username)s has started %(threads)s thread.\",\n      \"%(username)s has started %(threads)s threads.\",\n      props.profile.threads\n    )\n\n    header = interpolate(\n      message,\n      {\n        username: props.profile.username,\n        threads: props.profile.threads,\n      },\n      true\n    )\n  }\n\n  return (\n    <Route\n      api={props.profile.api.threads}\n      emptyMessage={emptyMessage}\n      header={header}\n      title={gettext(\"Threads\")}\n      {...props}\n    />\n  )\n}\n\nexport function Posts(props) {\n  let emptyMessage = null\n  if (props.user.id === props.profile.id) {\n    emptyMessage = gettext(\"You have posted no messages.\")\n  } else {\n    emptyMessage = interpolate(\n      gettext(\"%(username)s posted no messages.\"),\n      {\n        username: props.profile.username,\n      },\n      true\n    )\n  }\n\n  let header = null\n  if (!props.posts.isLoaded) {\n    header = gettext(\"Loading...\")\n  } else if (props.profile.id === props.user.id) {\n    const message = ngettext(\n      \"You have posted %(posts)s message.\",\n      \"You have posted %(posts)s messages.\",\n      props.profile.posts\n    )\n\n    header = interpolate(\n      message,\n      {\n        posts: props.profile.posts,\n      },\n      true\n    )\n  } else {\n    const message = ngettext(\n      \"%(username)s has posted %(posts)s message.\",\n      \"%(username)s has posted %(posts)s messages.\",\n      props.profile.posts\n    )\n\n    header = interpolate(\n      message,\n      {\n        username: props.profile.username,\n        posts: props.profile.posts,\n      },\n      true\n    )\n  }\n\n  return (\n    <Route\n      api={props.profile.api.posts}\n      emptyMessage={emptyMessage}\n      header={header}\n      title={gettext(\"Posts\")}\n      {...props}\n    />\n  )\n}\n","import { connect } from \"react-redux\"\nimport Profile, { paths, select } from \"misago/components/profile/root\"\nimport misago from \"misago/index\"\nimport mount from \"misago/utils/routed-component\"\n\nexport default function initializer(context) {\n  if (context.has(\"PROFILE\") && context.has(\"PROFILE_PAGES\")) {\n    mount({\n      root: misago.get(\"PROFILE\").url,\n      component: connect(select)(Profile),\n      paths: paths(),\n    })\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:profile\",\n  initializer: initializer,\n  after: \"reducer:profile-hydrate\",\n})\n","import React from \"react\"\nimport misago from \"misago/index\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport * as validators from \"misago/utils/validators\"\nimport showBannedPage from \"misago/utils/banned-page\"\n\nexport class RequestLinkForm extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      email: \"\",\n\n      validators: {\n        email: [validators.email()],\n      },\n    }\n  }\n\n  clean() {\n    if (this.isValid()) {\n      return true\n    } else {\n      snackbar.error(gettext(\"Enter a valid email address.\"))\n      return false\n    }\n  }\n\n  send() {\n    return ajax.post(misago.get(\"SEND_ACTIVATION_API\"), {\n      email: this.state.email,\n    })\n  }\n\n  handleSuccess(apiResponse) {\n    this.props.callback(apiResponse)\n  }\n\n  handleError(rejection) {\n    if ([\"already_active\", \"inactive_admin\"].indexOf(rejection.code) > -1) {\n      snackbar.info(rejection.detail)\n    } else if (rejection.status === 403 && rejection.ban) {\n      showBannedPage(rejection.ban)\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"well well-form well-form-request-activation-link\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"form-group\">\n            <div className=\"control-input\">\n              <input\n                type=\"text\"\n                className=\"form-control\"\n                placeholder={gettext(\"Your e-mail address\")}\n                disabled={this.state.isLoading}\n                onChange={this.bindInput(\"email\")}\n                value={this.state.email}\n              />\n            </div>\n          </div>\n\n          <Button\n            className=\"btn-primary btn-block\"\n            loading={this.state.isLoading}\n          >\n            {gettext(\"Send link\")}\n          </Button>\n        </form>\n      </div>\n    )\n  }\n}\n\nexport class LinkSent extends React.Component {\n  getMessage() {\n    return interpolate(\n      gettext(\"Activation link was sent to %(email)s\"),\n      {\n        email: this.props.user.email,\n      },\n      true\n    )\n  }\n\n  render() {\n    return (\n      <div className=\"well well-form well-form-request-activation-link well-done\">\n        <div className=\"done-message\">\n          <div className=\"message-icon\">\n            <span className=\"material-icon\">check</span>\n          </div>\n          <div className=\"message-body\">\n            <p>{this.getMessage()}</p>\n          </div>\n          <button\n            className=\"btn btn-primary btn-block\"\n            type=\"button\"\n            onClick={this.props.callback}\n          >\n            {gettext(\"Request another link\")}\n          </button>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      complete: false,\n    }\n  }\n\n  complete = (apiResponse) => {\n    this.setState({\n      complete: apiResponse,\n    })\n  }\n\n  reset = () => {\n    this.setState({\n      complete: false,\n    })\n  }\n\n  render() {\n    if (this.state.complete) {\n      return <LinkSent user={this.state.complete} callback={this.reset} />\n    } else {\n      return <RequestLinkForm callback={this.complete} />\n    }\n  }\n}\n","import misago from \"misago/index\"\nimport RequestActivationLink from \"misago/components/request-activation-link\"\nimport mount from \"misago/utils/mount-component\"\n\nexport default function initializer() {\n  if (document.getElementById(\"request-activation-link-mount\")) {\n    mount(RequestActivationLink, \"request-activation-link-mount\", false)\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:request-activation-link\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport misago from \"misago/index\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport * as validators from \"misago/utils/validators\"\nimport showBannedPage from \"misago/utils/banned-page\"\n\nexport class RequestResetForm extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      email: \"\",\n\n      validators: {\n        email: [validators.email()],\n      },\n    }\n  }\n\n  clean() {\n    if (this.isValid()) {\n      return true\n    } else {\n      snackbar.error(gettext(\"Enter a valid email address.\"))\n      return false\n    }\n  }\n\n  send() {\n    return ajax.post(misago.get(\"SEND_PASSWORD_RESET_API\"), {\n      email: this.state.email,\n    })\n  }\n\n  handleSuccess(apiResponse) {\n    this.props.callback(apiResponse)\n  }\n\n  handleError(rejection) {\n    if ([\"inactive_user\", \"inactive_admin\"].indexOf(rejection.code) > -1) {\n      this.props.showInactivePage(rejection)\n    } else if (rejection.status === 403 && rejection.ban) {\n      showBannedPage(rejection.ban)\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"well well-form well-form-request-password-reset\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"form-group\">\n            <div className=\"control-input\">\n              <input\n                type=\"text\"\n                className=\"form-control\"\n                placeholder={gettext(\"Your e-mail address\")}\n                disabled={this.state.isLoading}\n                onChange={this.bindInput(\"email\")}\n                value={this.state.email}\n              />\n            </div>\n          </div>\n\n          <Button\n            className=\"btn-primary btn-block\"\n            loading={this.state.isLoading}\n          >\n            {gettext(\"Send link\")}\n          </Button>\n        </form>\n      </div>\n    )\n  }\n}\n\nexport class LinkSent extends React.Component {\n  getMessage() {\n    return interpolate(\n      gettext(\"Reset password link was sent to %(email)s\"),\n      {\n        email: this.props.user.email,\n      },\n      true\n    )\n  }\n\n  render() {\n    return (\n      <div className=\"well well-form well-form-request-password-reset well-done\">\n        <div className=\"done-message\">\n          <div className=\"message-icon\">\n            <span className=\"material-icon\">check</span>\n          </div>\n          <div className=\"message-body\">\n            <p>{this.getMessage()}</p>\n          </div>\n          <button\n            type=\"button\"\n            className=\"btn btn-primary btn-block\"\n            onClick={this.props.callback}\n          >\n            {gettext(\"Request another link\")}\n          </button>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport class AccountInactivePage extends React.Component {\n  getActivateButton() {\n    if (this.props.activation === \"inactive_user\") {\n      return (\n        <p>\n          <a href={misago.get(\"REQUEST_ACTIVATION_URL\")}>\n            {gettext(\"Activate your account.\")}\n          </a>\n        </p>\n      )\n    } else {\n      return null\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"page page-message page-message-info page-forgotten-password-inactive\">\n        <div className=\"container\">\n          <div className=\"message-panel\">\n            <div className=\"message-icon\">\n              <span className=\"material-icon\">info_outline</span>\n            </div>\n\n            <div className=\"message-body\">\n              <p className=\"lead\">{gettext(\"Your account is inactive.\")}</p>\n              <p>{this.props.message}</p>\n              {this.getActivateButton()}\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      complete: false,\n    }\n  }\n\n  complete = (apiResponse) => {\n    this.setState({\n      complete: apiResponse,\n    })\n  }\n\n  reset = () => {\n    this.setState({\n      complete: false,\n    })\n  }\n\n  showInactivePage(apiResponse) {\n    ReactDOM.render(\n      <AccountInactivePage\n        activation={apiResponse.code}\n        message={apiResponse.detail}\n      />,\n      document.getElementById(\"page-mount\")\n    )\n  }\n\n  render() {\n    if (this.state.complete) {\n      return <LinkSent callback={this.reset} user={this.state.complete} />\n    }\n\n    return (\n      <RequestResetForm\n        callback={this.complete}\n        showInactivePage={this.showInactivePage}\n      />\n    )\n  }\n}\n","import misago from \"misago/index\"\nimport RequestPasswordReset from \"misago/components/request-password-reset\"\nimport mount from \"misago/utils/mount-component\"\n\nexport default function initializer() {\n  if (document.getElementById(\"request-password-reset-mount\")) {\n    mount(RequestPasswordReset, \"request-password-reset-mount\", false)\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:request-password-reset\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport misago from \"misago/index\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport SignInModal from \"misago/components/sign-in.js\"\nimport ajax from \"misago/services/ajax\"\nimport auth from \"misago/services/auth\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport showBannedPage from \"misago/utils/banned-page\"\n\nexport class ResetPasswordForm extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      password: \"\",\n    }\n  }\n\n  clean() {\n    if (this.state.password.trim().length) {\n      return true\n    } else {\n      snackbar.error(gettext(\"Enter new password.\"))\n      return false\n    }\n  }\n\n  send() {\n    return ajax.post(misago.get(\"CHANGE_PASSWORD_API\"), {\n      password: this.state.password,\n    })\n  }\n\n  handleSuccess(apiResponse) {\n    this.props.callback(apiResponse)\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 403 && rejection.ban) {\n      showBannedPage(rejection.ban)\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"well well-form well-form-reset-password\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"form-group\">\n            <div className=\"control-input\">\n              <input\n                type=\"password\"\n                className=\"form-control\"\n                placeholder={gettext(\"Enter new password\")}\n                disabled={this.state.isLoading}\n                onChange={this.bindInput(\"password\")}\n                value={this.state.password}\n              />\n            </div>\n          </div>\n\n          <Button\n            className=\"btn-primary btn-block\"\n            loading={this.state.isLoading}\n          >\n            {gettext(\"Change password\")}\n          </Button>\n        </form>\n      </div>\n    )\n  }\n}\n\nexport class PasswordChangedPage extends React.Component {\n  getMessage() {\n    return interpolate(\n      gettext(\"%(username)s, your password has been changed successfully.\"),\n      {\n        username: this.props.user.username,\n      },\n      true\n    )\n  }\n\n  showSignIn() {\n    modal.show(SignInModal)\n  }\n\n  render() {\n    return (\n      <div className=\"page page-message page-message-success page-forgotten-password-changed\">\n        <div className=\"container\">\n          <div className=\"message-panel\">\n            <div className=\"message-icon\">\n              <span className=\"material-icon\">check</span>\n            </div>\n\n            <div className=\"message-body\">\n              <p className=\"lead\">{this.getMessage()}</p>\n              <p>\n                {gettext(\n                  \"You will have to sign in using new password before continuing.\"\n                )}\n              </p>\n              <p>\n                <button\n                  type=\"button\"\n                  className=\"btn btn-primary\"\n                  onClick={this.showSignIn}\n                >\n                  {gettext(\"Sign in\")}\n                </button>\n              </p>\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default class extends React.Component {\n  complete = (apiResponse) => {\n    auth.softSignOut()\n\n    // nuke \"redirect_to\" field so we don't end\n    // coming back to error page after sign in\n    $('#hidden-login-form input[name=\"redirect_to\"]').remove()\n\n    ReactDOM.render(\n      <PasswordChangedPage user={apiResponse} />,\n      document.getElementById(\"page-mount\")\n    )\n  }\n\n  render() {\n    return <ResetPasswordForm callback={this.complete} />\n  }\n}\n","import misago from \"misago\"\nimport ResetPasswordForm from \"misago/components/reset-password-form\"\nimport mount from \"misago/utils/mount-component\"\n\nexport default function initializer() {\n  if (document.getElementById(\"reset-password-form-mount\")) {\n    mount(ResetPasswordForm, \"reset-password-form-mount\", false)\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:reset-password-form\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import React from \"react\"\nimport misago from \"misago\"\nimport Form from \"misago/components/form\"\nimport { load as updatePosts } from \"misago/reducers/posts\"\nimport { update as updateSearch } from \"misago/reducers/search\"\nimport { hydrate as updateUsers } from \"misago/reducers/users\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport { FlexRow, FlexRowCol, FlexRowSection } from \"../FlexRow\"\nimport {\n  PageHeader,\n  PageHeaderContainer,\n  PageHeaderBanner,\n  PageHeaderDetails,\n} from \"../PageHeader\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n      query: props.search.query,\n    }\n  }\n\n  componentDidMount() {\n    if (this.state.query.length) {\n      this.handleSubmit()\n    }\n  }\n\n  onQueryChange = (event) => {\n    this.changeValue(\"query\", event.target.value)\n  }\n\n  clean() {\n    if (!this.state.query.trim().length) {\n      snackbar.error(gettext(\"You have to enter search query.\"))\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    store.dispatch(\n      updateSearch({\n        isLoading: true,\n      })\n    )\n\n    const query = this.state.query.trim()\n\n    let url = window.location.href\n    const urlQuery = url.indexOf(\"?q=\")\n    if (urlQuery > 0) {\n      url = url.substring(0, urlQuery + 3)\n    }\n    window.history.pushState({}, \"\", url + encodeURIComponent(query))\n\n    return ajax.get(misago.get(\"SEARCH_API\"), { q: query })\n  }\n\n  handleSuccess(providers) {\n    store.dispatch(\n      updateSearch({\n        query: this.state.query.trim(),\n        isLoading: false,\n        providers,\n      })\n    )\n\n    providers.forEach((provider) => {\n      if (provider.id === \"users\") {\n        store.dispatch(updateUsers(provider.results.results))\n      } else if (provider.id === \"threads\") {\n        store.dispatch(updatePosts(provider.results))\n      }\n    })\n  }\n\n  handleError(rejection) {\n    snackbar.apiError(rejection)\n\n    store.dispatch(\n      updateSearch({\n        isLoading: false,\n      })\n    )\n  }\n\n  render() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <PageHeaderContainer>\n          <PageHeader styleName=\"site-search\">\n            <PageHeaderBanner styleName=\"site-search\">\n              <h1>{gettext(\"Search\")}</h1>\n            </PageHeaderBanner>\n            <PageHeaderDetails className=\"page-header-search-form\">\n              <FlexRow>\n                <FlexRowSection auto>\n                  <FlexRowCol>\n                    <input\n                      className=\"form-control\"\n                      disabled={this.state.isLoading}\n                      type=\"text\"\n                      value={this.state.query}\n                      placeholder={gettext(\"Search\")}\n                      onChange={this.onQueryChange}\n                    />\n                  </FlexRowCol>\n                  <FlexRowCol shrink>\n                    <button\n                      className=\"btn btn-secondary btn-icon btn-outline\"\n                      disabled={this.state.isLoading}\n                    >\n                      <span className=\"material-icon\">search</span>\n                    </button>\n                  </FlexRowCol>\n                </FlexRowSection>\n              </FlexRow>\n            </PageHeaderDetails>\n          </PageHeader>\n        </PageHeaderContainer>\n      </form>\n    )\n  }\n}\n","import React from \"react\"\nimport { Link } from \"react-router\"\n\nexport default function (props) {\n  return (\n    <div className=\"list-group nav-side\">\n      {props.providers.map((provider) => {\n        return (\n          <Link\n            activeClassName=\"active\"\n            className=\"list-group-item\"\n            key={provider.id}\n            to={provider.url}\n          >\n            <span className=\"material-icon\">{provider.icon}</span>\n            {provider.name}\n            <Badge results={provider.results} />\n          </Link>\n        )\n      })}\n    </div>\n  )\n}\n\nexport function Badge(props) {\n  if (!props.results) return null\n\n  let count = props.results.count\n  if (count > 1000000) {\n    count = Math.ceil(count / 1000000) + \"KK\"\n  } else if (count > 1000) {\n    count = Math.ceil(count / 1000) + \"K\"\n  }\n\n  return <span className=\"badge\">{count}</span>\n}\n","import React from \"react\"\nimport PageContainer from \"../PageContainer\"\nimport SearchForm from \"./form\"\nimport SideNav from \"./sidenav\"\n\nexport default function (props) {\n  return (\n    <div className=\"page page-search\">\n      <SearchForm provider={props.provider} search={props.search} />\n      <PageContainer>\n        <div className=\"row\">\n          <div className=\"col-md-3\">\n            <SideNav providers={props.search.providers} />\n          </div>\n          <div className=\"col-md-9\">\n            {props.children}\n            <SearchTime provider={props.provider} search={props.search} />\n          </div>\n        </div>\n      </PageContainer>\n    </div>\n  )\n}\n\nexport function SearchTime(props) {\n  let time = null\n  props.search.providers.forEach((p) => {\n    if (p.id === props.provider.id) {\n      time = p.time\n    }\n  })\n\n  if (time === null) return null\n\n  const copy = gettext(\"Search took %(time)s s to complete\")\n\n  return (\n    <footer className=\"search-footer\">\n      <p>{interpolate(copy, { time }, true)}</p>\n    </footer>\n  )\n}\n","import React from \"react\"\nimport PostFeed from \"misago/components/post-feed\"\nimport Button from \"misago/components/button\"\nimport MisagoMarkup from \"misago/components/misago-markup\"\nimport {\n  update as updatePosts,\n  append as appendPosts,\n} from \"misago/reducers/posts\"\nimport { updateProvider } from \"misago/reducers/search\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default function (props) {\n  return (\n    <div>\n      <PostFeed isReady={true} posts={props.results} />\n      <LoadMore {...props} />\n    </div>\n  )\n}\n\nexport class LoadMore extends React.Component {\n  onClick = () => {\n    store.dispatch(\n      updatePosts({\n        isBusy: true,\n      })\n    )\n\n    ajax\n      .get(this.props.provider.api, {\n        q: this.props.query,\n        page: this.props.next,\n      })\n      .then(\n        (providers) => {\n          providers.forEach((provider) => {\n            if (provider.id !== \"threads\") return\n            store.dispatch(appendPosts(provider.results))\n            store.dispatch(updateProvider(provider))\n          })\n\n          store.dispatch(\n            updatePosts({\n              isBusy: false,\n            })\n          )\n        },\n        (rejection) => {\n          snackbar.apiError(rejection)\n\n          store.dispatch(\n            updatePosts({\n              isBusy: false,\n            })\n          )\n        }\n      )\n  }\n\n  render() {\n    if (!this.props.more) return null\n\n    return (\n      <div className=\"pager-more\">\n        <Button\n          className=\"btn btn-default btn-outline\"\n          loading={this.props.isBusy}\n          onClick={this.onClick}\n        >\n          {gettext(\"Show more\")}\n        </Button>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport SearchPage from \"../page\"\nimport Results from \"./results\"\n\nexport default function (props) {\n  return (\n    <SearchPage provider={props.route.provider} search={props.search}>\n      <Blankslate\n        loading={props.search.isLoading}\n        query={props.search.query}\n        posts={props.posts}\n      >\n        <Results\n          provider={props.route.provider}\n          query={props.search.query}\n          {...props.posts}\n        />\n      </Blankslate>\n    </SearchPage>\n  )\n}\n\nexport function Blankslate({ children, loading, posts, query }) {\n  if (posts && posts.count) return children\n\n  if (query.length) {\n    return (\n      <p className=\"lead\">\n        {loading\n          ? gettext(\"Loading results...\")\n          : gettext(\"No threads matching search query have been found.\")}\n      </p>\n    )\n  }\n\n  return (\n    <p className=\"lead\">\n      {gettext(\"Enter at least two characters to search threads.\")}\n    </p>\n  )\n}\n","import React from \"react\"\nimport SearchPage from \"../page\"\nimport UsersList from \"misago/components/users-list\"\n\nexport default function (props) {\n  return (\n    <SearchPage provider={props.route.provider} search={props.search}>\n      <Blankslate\n        loading={props.search.isLoading}\n        query={props.search.query}\n        users={props.users}\n      >\n        <UsersList\n          cols={3}\n          isReady={!props.search.isLoading}\n          users={props.users}\n        />\n      </Blankslate>\n    </SearchPage>\n  )\n}\n\nexport function Blankslate({ children, loading, query, users }) {\n  if (users.length) return children\n\n  if (query.length) {\n    return (\n      <p className=\"lead\">\n        {loading\n          ? gettext(\"Loading results...\")\n          : gettext(\"No users matching search query have been found.\")}\n      </p>\n    )\n  }\n\n  return (\n    <p className=\"lead\">\n      {gettext(\"Enter at least two characters to search users.\")}\n    </p>\n  )\n}\n","import { connect } from \"react-redux\"\nimport SearchThreads from \"./threads\"\nimport SearchUsers from \"./users\"\n\nconst components = {\n  threads: SearchThreads,\n  users: SearchUsers,\n}\n\nexport function select(store) {\n  return {\n    posts: store.posts,\n    search: store.search,\n    tick: store.tick.tick,\n    user: store.auth.user,\n    users: store.users,\n  }\n}\n\nexport default function (providers) {\n  return providers.map((provider) => {\n    return {\n      path: provider.url,\n      component: connect(select)(components[provider.id]),\n      provider: provider,\n    }\n  })\n}\n","import paths from \"misago/components/search\"\nimport misago from \"misago\"\nimport mount from \"misago/utils/routed-component\"\n\nexport default function initializer(context) {\n  if (context.get(\"CURRENT_LINK\") === \"misago:search\") {\n    mount({\n      paths: paths(misago.get(\"SEARCH_PROVIDERS\")),\n    })\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:search\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import React from \"react\"\n\nconst TYPES_CLASSES = {\n  info: \"alert-info\",\n  success: \"alert-success\",\n  warning: \"alert-warning\",\n  error: \"alert-danger\",\n}\n\nexport class Snackbar extends React.Component {\n  getSnackbarClass() {\n    let snackbarClass = \"alerts-snackbar\"\n    if (this.props.isVisible) {\n      snackbarClass += \" in\"\n    } else {\n      snackbarClass += \" out\"\n    }\n    return snackbarClass\n  }\n\n  render() {\n    return (\n      <div className={this.getSnackbarClass()}>\n        <p className={\"alert \" + TYPES_CLASSES[this.props.type]}>\n          {this.props.message}\n        </p>\n      </div>\n    )\n  }\n}\n\nexport function select(state) {\n  return state.snackbar\n}\n","import { connect } from \"react-redux\"\nimport misago from \"misago/index\"\nimport { Snackbar, select } from \"misago/components/snackbar\"\nimport mount from \"misago/utils/mount-component\"\n\nexport default function initializer() {\n  mount(connect(select)(Snackbar), \"snackbar-mount\")\n}\n\nmisago.addInitializer({\n  name: \"component:snackbar\",\n  initializer: initializer,\n  after: \"snackbar\",\n})\n","import React from \"react\"\n\nconst Header = ({ backendName }) => {\n  const pageTitleTpl = gettext(\"Sign in with %(backend)s\")\n  const pageTitle = interpolate(pageTitleTpl, { backend: backendName }, true)\n\n  return (\n    <div className=\"page-header-bg\">\n      <div className=\"page-header\">\n        <div className=\"container\">\n          <h1>{pageTitle}</h1>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default Header\n","import React from \"react\"\nimport misago from \"misago\"\nimport RegisterLegalFootnote from \"misago/components/RegisterLegalFootnote\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport * as validators from \"misago/utils/validators\"\nimport Header from \"./header\"\n\nexport default class Register extends Form {\n  constructor(props) {\n    super(props)\n\n    const formValidators = {\n      email: [validators.email()],\n      username: [validators.usernameContent()],\n    }\n\n    if (!!misago.get(\"TERMS_OF_SERVICE_ID\")) {\n      formValidators.termsOfService = [validators.requiredTermsOfService()]\n    }\n\n    if (!!misago.get(\"PRIVACY_POLICY_ID\")) {\n      formValidators.privacyPolicy = [validators.requiredPrivacyPolicy()]\n    }\n\n    this.state = {\n      email: props.email || \"\",\n      emailProtected: !!props.email,\n      username: props.username || \"\",\n\n      termsOfService: null,\n      privacyPolicy: null,\n\n      validators: formValidators,\n      errors: {},\n\n      isLoading: false,\n    }\n  }\n\n  clean() {\n    let errors = this.validate()\n    let lengths = [\n      this.state.email.trim().length,\n      this.state.username.trim().length,\n    ]\n\n    if (lengths.indexOf(0) !== -1) {\n      snackbar.error(gettext(\"Fill out all fields.\"))\n      return false\n    }\n\n    const { validators } = this.state\n\n    const checkTermsOfService = !!misago.get(\"TERMS_OF_SERVICE_ID\")\n    if (checkTermsOfService && this.state.termsOfService === null) {\n      snackbar.error(validators.termsOfService[0](null))\n      return false\n    }\n\n    const checkPrivacyPolicy = !!misago.get(\"PRIVACY_POLICY_ID\")\n    if (checkPrivacyPolicy && this.state.privacyPolicy === null) {\n      snackbar.error(validators.privacyPolicy[0](null))\n      snackbar.error(gettext(\"You need to accept the privacy policy.\"))\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.post(this.props.url, {\n      email: this.state.email,\n      username: this.state.username,\n      terms_of_service: this.state.termsOfService,\n      privacy_policy: this.state.privacyPolicy,\n    })\n  }\n\n  handleSuccess(response) {\n    const { onRegistrationComplete } = this.props\n    onRegistrationComplete(response)\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 200) {\n      // We've entered \"errored\" state because response is HTML instead of exptected JSON\n      const { onRegistrationComplete } = this.props\n      const { username } = this.state\n      onRegistrationComplete({ activation: \"active\", step: \"done\", username })\n    } else if (rejection.status === 400) {\n      const stateUpdate = { errors: rejection }\n      if (rejection.email) {\n        stateUpdate.emailProtected = false\n      }\n      this.setState(stateUpdate)\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  handlePrivacyPolicyChange = (event) => {\n    const value = event.target.value\n    this.handleToggleAgreement(\"privacyPolicy\", value)\n  }\n\n  handleTermsOfServiceChange = (event) => {\n    const value = event.target.value\n    this.handleToggleAgreement(\"termsOfService\", value)\n  }\n\n  handleToggleAgreement = (agreement, value) => {\n    this.setState((prevState, props) => {\n      if (prevState[agreement] === null) {\n        const errors = { ...prevState.errors, [agreement]: null }\n        return { errors, [agreement]: value }\n      }\n\n      const validator = this.state.validators[agreement][0]\n      const errors = { ...prevState.errors, [agreement]: [validator(null)] }\n      return { errors, [agreement]: null }\n    })\n  }\n\n  render() {\n    const { backend_name } = this.props\n    const { email, emailProtected, username, isLoading } = this.state\n\n    let emailHelpText = null\n    if (emailProtected) {\n      const emailHelpTextTpl = gettext(\n        \"Your e-mail address has been verified by %(backend)s.\"\n      )\n      emailHelpText = interpolate(\n        emailHelpTextTpl,\n        { backend: backend_name },\n        true\n      )\n    }\n\n    return (\n      <div className=\"page page-social-auth page-social-sauth-register\">\n        <Header backendName={backend_name} />\n        <div className=\"container\">\n          <div className=\"row\">\n            <div className=\"col-md-6 col-md-offset-3\">\n              <form onSubmit={this.handleSubmit}>\n                <div className=\"panel panel-default panel-form\">\n                  <div className=\"panel-heading\">\n                    <h3 className=\"panel-title\">\n                      {gettext(\"Complete your details\")}\n                    </h3>\n                  </div>\n                  <div className=\"panel-body\">\n                    <FormGroup\n                      for=\"id_username\"\n                      label={gettext(\"Username\")}\n                      validation={this.state.errors.username}\n                    >\n                      <input\n                        type=\"text\"\n                        id=\"id_username\"\n                        className=\"form-control\"\n                        disabled={isLoading}\n                        onChange={this.bindInput(\"username\")}\n                        value={username}\n                      />\n                    </FormGroup>\n                    <FormGroup\n                      for=\"id_email\"\n                      label={gettext(\"E-mail address\")}\n                      helpText={emailHelpText}\n                      validation={\n                        emailProtected ? null : this.state.errors.email\n                      }\n                    >\n                      <input\n                        type=\"email\"\n                        id=\"id_email\"\n                        className=\"form-control\"\n                        disabled={isLoading || emailProtected}\n                        onChange={this.bindInput(\"email\")}\n                        value={email}\n                      />\n                    </FormGroup>\n                    <RegisterLegalFootnote\n                      errors={this.state.errors}\n                      privacyPolicy={this.state.privacyPolicy}\n                      termsOfService={this.state.termsOfService}\n                      onPrivacyPolicyChange={this.handlePrivacyPolicyChange}\n                      onTermsOfServiceChange={this.handleTermsOfServiceChange}\n                    />\n                  </div>\n                  <div className=\"panel-footer\">\n                    <Button\n                      className=\"btn-primary\"\n                      loading={this.state.isLoading}\n                    >\n                      {gettext(\"Sign in\")}\n                    </Button>\n                  </div>\n                </div>\n              </form>\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Header from \"./header\"\nimport misago from \"misago\"\n\nconst Complete = ({ activation, backend_name, username }) => {\n  let icon = \"\"\n  let message = \"\"\n  if (activation === \"user\") {\n    message = gettext(\n      \"%(username)s, your account has been created but you need to activate it before you will be able to sign in.\"\n    )\n  } else if (activation === \"admin\") {\n    message = gettext(\n      \"%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in.\"\n    )\n  } else {\n    message = gettext(\n      \"%(username)s, your account has been created and you have been signed in to it.\"\n    )\n  }\n\n  if (activation === \"active\") {\n    icon = \"check\"\n  } else {\n    icon = \"info_outline\"\n  }\n\n  return (\n    <div className=\"page page-social-auth page-social-sauth-register\">\n      <Header backendName={backend_name} />\n      <div className=\"container\">\n        <div className=\"row\">\n          <div className=\"col-md-6 col-md-offset-3\">\n            <div className=\"panel panel-default panel-form\">\n              <div className=\"panel-heading\">\n                <h3 className=\"panel-title\">\n                  {gettext(\"Registration completed!\")}\n                </h3>\n              </div>\n              <div className=\"panel-body panel-message-body\">\n                <div className=\"message-icon\">\n                  <span className=\"material-icon\">{icon}</span>\n                </div>\n                <div className=\"message-body\">\n                  <p className=\"lead\">\n                    {interpolate(message, { username }, true)}\n                  </p>\n                  <p className=\"help-block\">\n                    <a\n                      className=\"btn btn-default\"\n                      href={misago.get(\"MISAGO_PATH\")}\n                    >\n                      {gettext(\"Return to forum index\")}\n                    </a>\n                  </p>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default Complete\n","import React from \"react\"\nimport Register from \"./register\"\nimport Complete from \"./complete\"\n\nexport default class SocialAuth extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      step: props.step,\n\n      activation: props.activation || \"\",\n      email: props.email || \"\",\n      username: props.username || \"\",\n    }\n  }\n\n  handleRegistrationComplete = ({ activation, email, step, username }) => {\n    this.setState({ activation, email, step, username })\n  }\n\n  render() {\n    const { backend_name, url } = this.props\n    const { activation, email, step, username } = this.state\n\n    if (step === \"register\") {\n      return (\n        <Register\n          backend_name={backend_name}\n          email={email}\n          url={url}\n          username={username}\n          onRegistrationComplete={this.handleRegistrationComplete}\n        />\n      )\n    }\n\n    return (\n      <Complete\n        activation={activation}\n        backend_name={backend_name}\n        email={email}\n        url={url}\n        username={username}\n      />\n    )\n  }\n}\n","import React from \"react\"\nimport SocialAuth from \"misago/components/social-auth\"\nimport misago from \"misago\"\nimport mount from \"misago/utils/mount-component\"\n\nexport default function initializer(context) {\n  if (context.get(\"CURRENT_LINK\") === \"misago:social-complete\") {\n    const props = context.get(\"SOCIAL_AUTH_FORM\")\n    mount(<SocialAuth {...props} />, \"page-mount\")\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:social-auth\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import React from \"react\"\nimport Form from \"./form\"\nimport FormGroup from \"misago/components/form-group\"\nimport * as participants from \"misago/reducers/participants\"\nimport { updateAcl } from \"misago/reducers/thread\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      username: \"\",\n    }\n  }\n\n  onUsernameChange = (event) => {\n    this.changeValue(\"username\", event.target.value)\n  }\n\n  clean() {\n    if (!this.state.username.trim().length) {\n      snackbar.error(gettext(\"You have to enter user name.\"))\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.patch(this.props.thread.api.index, [\n      { op: \"add\", path: \"participants\", value: this.state.username },\n      { op: \"add\", path: \"acl\", value: 1 },\n    ])\n  }\n\n  handleSuccess(data) {\n    store.dispatch(updateAcl(data))\n    store.dispatch(participants.replace(data.participants))\n\n    snackbar.success(gettext(\"New participant has been added to thread.\"))\n\n    modal.hide()\n  }\n\n  render() {\n    return (\n      <div className=\"modal-dialog modal-sm\" role=\"document\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"modal-content\">\n            <ModalHeader />\n            <div className=\"modal-body\">\n              <FormGroup for=\"id_username\" label={gettext(\"User to add\")}>\n                <input\n                  id=\"id_username\"\n                  className=\"form-control\"\n                  disabled={this.state.isLoading}\n                  onChange={this.onUsernameChange}\n                  type=\"text\"\n                  value={this.state.username}\n                />\n              </FormGroup>\n            </div>\n            <div className=\"modal-footer\">\n              <button\n                className=\"btn btn-block btn-primary\"\n                disabled={this.state.isLoading}\n              >\n                {gettext(\"Add participant\")}\n              </button>\n              <button\n                className=\"btn btn-block btn-default\"\n                data-dismiss=\"modal\"\n                disabled={this.state.isLoading}\n                type=\"button\"\n              >\n                {gettext(\"Cancel\")}\n              </button>\n            </div>\n          </div>\n        </form>\n      </div>\n    )\n  }\n}\n\nexport function ModalHeader(props) {\n  return (\n    <div className=\"modal-header\">\n      <button\n        aria-label={gettext(\"Close\")}\n        className=\"close\"\n        data-dismiss=\"modal\"\n        type=\"button\"\n      >\n        <span aria-hidden=\"true\">&times;</span>\n      </button>\n      <h4 className=\"modal-title\">{gettext(\"Add participant\")}</h4>\n    </div>\n  )\n}\n","import React from \"react\"\nimport AddParticipantModal from \"misago/components/add-participant\"\nimport modal from \"misago/services/modal\"\n\nexport default class extends React.Component {\n  onClick = () => {\n    modal.show(<AddParticipantModal thread={this.props.thread} />)\n  }\n\n  render() {\n    if (!this.props.thread.acl.can_add_participants) return null\n\n    return (\n      <div className=\"col-xs-12 col-sm-3\">\n        <button\n          className=\"btn btn-default btn-block\"\n          onClick={this.onClick}\n          type=\"button\"\n        >\n          <span className=\"material-icon\">person_add</span>\n          {gettext(\"Add participant\")}\n        </button>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport { changeOwner } from \"./actions\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.isUser = props.participant.id === props.user.id\n  }\n\n  onClick = () => {\n    let confirmed = false\n    if (this.isUser) {\n      confirmed = window.confirm(\n        gettext(\"Are you sure you want to take over this thread?\")\n      )\n    } else {\n      const message = gettext(\n        \"Are you sure you want to change thread owner to %(user)s?\"\n      )\n      confirmed = window.confirm(\n        interpolate(\n          message,\n          {\n            user: this.props.participant.username,\n          },\n          true\n        )\n      )\n    }\n\n    if (!confirmed) return\n\n    changeOwner(this.props.thread, this.props.participant)\n  }\n\n  render() {\n    if (this.props.participant.is_owner) return null\n    if (!this.props.thread.acl.can_change_owner) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          {gettext(\"Make owner\")}\n        </button>\n      </li>\n    )\n  }\n}\n","import * as participants from \"misago/reducers/participants\"\nimport { updateAcl } from \"misago/reducers/thread\"\nimport misago from \"misago\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport function leave(thread, participant) {\n  ajax\n    .patch(thread.api.index, [\n      { op: \"remove\", path: \"participants\", value: participant.id },\n    ])\n    .then(\n      () => {\n        snackbar.success(gettext(\"You have left this thread.\"))\n        window.setTimeout(() => {\n          window.location = misago.get(\"PRIVATE_THREADS_URL\")\n        }, 3 * 1000)\n      },\n      (rejection) => {\n        snackbar.apiError(rejection)\n      }\n    )\n}\n\nexport function remove(thread, participant) {\n  ajax\n    .patch(thread.api.index, [\n      { op: \"remove\", path: \"participants\", value: participant.id },\n      { op: \"add\", path: \"acl\", value: 1 },\n    ])\n    .then(\n      (data) => {\n        store.dispatch(updateAcl(data))\n        store.dispatch(participants.replace(data.participants))\n\n        const message = gettext(\"%(user)s has been removed from this thread.\")\n        snackbar.success(\n          interpolate(\n            message,\n            {\n              user: participant.username,\n            },\n            true\n          )\n        )\n      },\n      (rejection) => {\n        snackbar.apiError(rejection)\n      }\n    )\n}\n\nexport function changeOwner(thread, participant) {\n  ajax\n    .patch(thread.api.index, [\n      { op: \"replace\", path: \"owner\", value: participant.id },\n      { op: \"add\", path: \"acl\", value: 1 },\n    ])\n    .then(\n      (data) => {\n        store.dispatch(updateAcl(data))\n        store.dispatch(participants.replace(data.participants))\n\n        const message = gettext(\"%(user)s has been made new thread owner.\")\n        snackbar.success(\n          interpolate(\n            message,\n            {\n              user: participant.username,\n            },\n            true\n          )\n        )\n      },\n      (rejection) => {\n        snackbar.apiError(rejection)\n      }\n    )\n}\n","import React from \"react\"\nimport { remove, leave } from \"./actions\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.isUser = props.participant.id === props.user.id\n  }\n\n  onClick = () => {\n    let confirmed = false\n    if (this.isUser) {\n      confirmed = window.confirm(\n        gettext(\"Are you sure you want to leave this thread?\")\n      )\n    } else {\n      const message = gettext(\n        \"Are you sure you want to remove %(user)s from this thread?\"\n      )\n      confirmed = window.confirm(\n        interpolate(\n          message,\n          {\n            user: this.props.participant.username,\n          },\n          true\n        )\n      )\n    }\n\n    if (!confirmed) return\n\n    if (this.isUser) {\n      leave(this.props.thread, this.props.participant)\n    } else {\n      remove(this.props.thread, this.props.participant)\n    }\n  }\n\n  render() {\n    const isModerator = this.props.user.acl.can_moderate_private_threads\n\n    if (!(this.props.userIsOwner || this.isUser || isModerator)) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          {this.isUser ? gettext(\"Leave thread\") : gettext(\"Remove\")}\n        </button>\n      </li>\n    )\n  }\n}\n","import React from \"react\"\nimport MakeOwner from \"./make-owner\"\nimport Remove from \"./remove\"\nimport Avatar from \"misago/components/avatar\"\n\nexport default function (props) {\n  const participant = props.participant\n\n  let className = \"btn btn-default\"\n  if (participant.is_owner) {\n    className = \"btn btn-primary\"\n  }\n  className += \" btn-user btn-block\"\n\n  return (\n    <div className=\"col-xs-12 col-sm-3 col-md-2 participant-card\">\n      <div className=\"dropdown\">\n        <button\n          aria-haspopup=\"true\"\n          aria-expanded=\"false\"\n          className={className}\n          data-toggle=\"dropdown\"\n          type=\"button\"\n        >\n          <Avatar size=\"34\" user={participant} />\n          <span className=\"btn-text\">{participant.username}</span>\n        </button>\n        <ul className=\"dropdown-menu stick-to-bottom\">\n          <UserStatus isOwner={participant.is_owner} />\n          <li className=\"dropdown-header\" />\n          <li>\n            <a href={participant.url}>{gettext(\"See profile\")}</a>\n          </li>\n          <li role=\"separator\" className=\"divider\" />\n          <MakeOwner {...props} />\n          <Remove {...props} />\n        </ul>\n      </div>\n    </div>\n  )\n}\n\nexport function UserStatus({ isOwner }) {\n  if (!isOwner) return null\n\n  return (\n    <li className=\"dropdown-header dropdown-header-owner\">\n      <span className=\"material-icon\">start</span>\n      <span className=\"icon-text\">{gettext(\"Thread owner\")}</span>\n    </li>\n  )\n}\n","import React from \"react\"\nimport Card from \"./card\"\n\nexport default function ({ participants, thread, user, userIsOwner }) {\n  return (\n    <div className=\"participants-cards\">\n      <div className=\"row\">\n        {participants.map((participant) => {\n          return (\n            <Card\n              key={participant.id}\n              participant={participant}\n              thread={thread}\n              user={user}\n              userIsOwner={userIsOwner}\n            />\n          )\n        })}\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport AddParticipant from \"./add-participant\"\nimport CardsList from \"./cards-list\"\nimport * as utils from \"./utils\"\n\nexport default function (props) {\n  if (!props.participants.length) return null\n\n  return (\n    <div className=\"panel panel-default panel-participants\">\n      <div className=\"panel-body\">\n        <CardsList\n          userIsOwner={getUserIsOwner(props.user, props.participants)}\n          {...props}\n        />\n        <div className=\"row\">\n          <AddParticipant thread={props.thread} />\n          <div className=\"col-xs-12 col-sm-9\">\n            <p>{utils.getParticipantsCopy(props.participants)}</p>\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport function getUserIsOwner(user, participants) {\n  return participants[0].id === user.id\n}\n","export function getParticipantsCopy(participants) {\n  const count = participants.length\n  const message = ngettext(\n    \"This thread has %(users)s participant.\",\n    \"This thread has %(users)s participants.\",\n    count\n  )\n\n  return interpolate(\n    message,\n    {\n      users: count,\n    },\n    true\n  )\n}\n","import React from \"react\"\n\nconst ICON = {\n  changed_title: \"edit\",\n\n  pinned_globally: \"bookmark\",\n  pinned_locally: \"bookmark_border\",\n  unpinned: \"panorama_fish_eye\",\n\n  moved: \"arrow_forward\",\n  merged: \"call_merge\",\n\n  approved: \"done\",\n\n  opened: \"lock_open\",\n  closed: \"lock_outline\",\n\n  unhid: \"visibility\",\n  hid: \"visibility_off\",\n\n  changed_owner: \"grade\",\n  tookover: \"grade\",\n\n  added_participant: \"person_add\",\n\n  owner_left: \"person_outline\",\n  participant_left: \"person_outline\",\n  removed_participant: \"remove_circle_outline\",\n}\n\nconst EventIcon = (props) => (\n  <span className=\"event-icon-bg\">\n    <span className=\"material-icon\">{ICON[props.post.event_type]}</span>\n  </span>\n)\n\nexport default EventIcon\n","import React from \"react\"\nimport moment from \"moment\"\nimport * as post from \"misago/reducers/post\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default function (props) {\n  if (isVisible(props.post.acl)) {\n    return (\n      <li className=\"event-controls\">\n        <Hide {...props} />\n        <Unhide {...props} />\n        <Delete {...props} />\n      </li>\n    )\n  } else {\n    return null\n  }\n}\n\nexport function isVisible(acl) {\n  return acl.can_hide\n}\n\nexport class Hide extends React.Component {\n  onClick = () => {\n    store.dispatch(\n      post.patch(this.props.post, {\n        is_hidden: true,\n        hidden_on: moment(),\n        hidden_by_name: this.props.user.username,\n        url: Object.assign(this.props.post.url, {\n          hidden_by: this.props.user.url,\n        }),\n      })\n    )\n\n    const op = { op: \"replace\", path: \"is-hidden\", value: true }\n\n    ajax.patch(this.props.post.api.index, [op]).then(\n      (patch) => {\n        store.dispatch(post.patch(this.props.post, patch))\n      },\n      (rejection) => {\n        if (rejection.status === 400) {\n          snackbar.error(rejection.detail[0])\n        } else {\n          snackbar.apiError(rejection)\n        }\n\n        store.dispatch(\n          post.patch(this.props.post, {\n            is_hidden: false,\n          })\n        )\n      }\n    )\n  }\n\n  render() {\n    if (!this.props.post.is_hidden) {\n      return (\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          {gettext(\"Hide\")}\n        </button>\n      )\n    } else {\n      return null\n    }\n  }\n}\n\nexport class Unhide extends React.Component {\n  onClick = () => {\n    store.dispatch(\n      post.patch(this.props.post, {\n        is_hidden: false,\n      })\n    )\n\n    const op = { op: \"replace\", path: \"is-hidden\", value: false }\n\n    ajax.patch(this.props.post.api.index, [op]).then(\n      (patch) => {\n        store.dispatch(post.patch(this.props.post, patch))\n      },\n      (rejection) => {\n        if (rejection.status === 400) {\n          snackbar.error(rejection.detail[0])\n        } else {\n          snackbar.apiError(rejection)\n        }\n\n        store.dispatch(\n          post.patch(this.props.post, {\n            is_hidden: true,\n          })\n        )\n      }\n    )\n  }\n\n  render() {\n    if (this.props.post.is_hidden) {\n      return (\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          {gettext(\"Unhide\")}\n        </button>\n      )\n    } else {\n      return null\n    }\n  }\n}\n\nexport class Delete extends React.Component {\n  onClick = () => {\n    const decision = window.confirm(\n      gettext(\n        \"Are you sure you wish to delete this event? This action is not reversible!\"\n      )\n    )\n    if (decision) {\n      this.delete()\n    }\n  }\n\n  delete = () => {\n    store.dispatch(\n      post.patch(this.props.post, {\n        isDeleted: true,\n      })\n    )\n\n    ajax.delete(this.props.post.api.index).then(\n      () => {\n        snackbar.success(gettext(\"Event has been deleted.\"))\n      },\n      (rejection) => {\n        if (rejection.status === 400) {\n          snackbar.error(rejection.detail[0])\n        } else {\n          snackbar.apiError(rejection)\n        }\n\n        store.dispatch(\n          post.patch(this.props.post, {\n            isDeleted: false,\n          })\n        )\n      }\n    )\n  }\n\n  render() {\n    return (\n      <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n        {gettext(\"Delete\")}\n      </button>\n    )\n  }\n}\n","import React from \"react\"\nimport escapeHtml from \"misago/utils/escape-html\"\nimport Controls from \"./controls\"\n\nconst DATE_ABBR = '<abbr title=\"%(absolute)s\">%(relative)s</abbr>'\nconst DATE_URL = '<a href=\"%(url)s\" title=\"%(absolute)s\">%(relative)s</a>'\nconst USER_SPAN = '<span class=\"item-title\">%(user)s</span>'\nconst USER_URL = '<a href=\"%(url)s\" class=\"item-title\">%(user)s</a>'\n\nexport default function (props) {\n  return (\n    <ul className=\"list-inline event-info\">\n      <Hidden {...props} />\n      <Poster {...props} />\n      <Controls {...props} />\n    </ul>\n  )\n}\n\nexport function Hidden(props) {\n  if (props.post.is_hidden) {\n    let user = null\n    if (props.post.url.hidden_by) {\n      user = interpolate(\n        USER_URL,\n        {\n          url: escapeHtml(props.post.url.hidden_by),\n          user: escapeHtml(props.post.hidden_by_name),\n        },\n        true\n      )\n    } else {\n      user = interpolate(\n        USER_SPAN,\n        {\n          user: escapeHtml(props.post.hidden_by_name),\n        },\n        true\n      )\n    }\n\n    const date = interpolate(\n      DATE_ABBR,\n      {\n        absolute: escapeHtml(props.post.hidden_on.format(\"LLL\")),\n        relative: escapeHtml(props.post.hidden_on.fromNow()),\n      },\n      true\n    )\n\n    const message = interpolate(\n      escapeHtml(gettext(\"Hidden by %(event_by)s %(event_on)s.\")),\n      {\n        event_by: user,\n        event_on: date,\n      },\n      true\n    )\n\n    return (\n      <li\n        className=\"event-hidden-message\"\n        dangerouslySetInnerHTML={{ __html: message }}\n      />\n    )\n  } else {\n    return null\n  }\n}\n\nexport function Poster(props) {\n  let user = null\n  if (props.post.poster) {\n    user = interpolate(\n      USER_URL,\n      {\n        url: escapeHtml(props.post.poster.url),\n        user: escapeHtml(props.post.poster_name),\n      },\n      true\n    )\n  } else {\n    user = interpolate(\n      USER_SPAN,\n      {\n        user: escapeHtml(props.post.poster_name),\n      },\n      true\n    )\n  }\n\n  const date = interpolate(\n    DATE_URL,\n    {\n      url: escapeHtml(props.post.url.index),\n      absolute: escapeHtml(props.post.posted_on.format(\"LLL\")),\n      relative: escapeHtml(props.post.posted_on.fromNow()),\n    },\n    true\n  )\n\n  const message = interpolate(\n    escapeHtml(gettext(\"By %(event_by)s %(event_on)s.\")),\n    {\n      event_by: user,\n      event_on: date,\n    },\n    true\n  )\n\n  return (\n    <li\n      className=\"event-posters\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n","import React from \"react\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nconst MESSAGE = {\n  pinned_globally: gettext(\"Thread has been pinned globally.\"),\n  pinned_locally: gettext(\"Thread has been pinned locally.\"),\n  unpinned: gettext(\"Thread has been unpinned.\"),\n\n  approved: gettext(\"Thread has been approved.\"),\n\n  opened: gettext(\"Thread has been opened.\"),\n  closed: gettext(\"Thread has been closed.\"),\n\n  unhid: gettext(\"Thread has been revealed.\"),\n  hid: gettext(\"Thread has been made hidden.\"),\n\n  tookover: gettext(\"Took thread over.\"),\n\n  owner_left: gettext(\"Owner has left thread. This thread is now closed.\"),\n  participant_left: gettext(\"Participant has left thread.\"),\n}\n\nconst ITEM_LINK = '<a href=\"%(url)s\" class=\"item-title\">%(name)s</a>'\nconst ITEM_SPAN = '<span class=\"item-title\">%(name)s</span>'\n\nexport default function (props) {\n  if (MESSAGE[props.post.event_type]) {\n    return <p className=\"event-message\">{MESSAGE[props.post.event_type]}</p>\n  } else if (props.post.event_type === \"changed_title\") {\n    return <ChangedTitle {...props} />\n  } else if (props.post.event_type === \"moved\") {\n    return <Moved {...props} />\n  } else if (props.post.event_type === \"merged\") {\n    return <Merged {...props} />\n  } else if (props.post.event_type === \"changed_owner\") {\n    return <ChangedOwner {...props} />\n  } else if (props.post.event_type === \"added_participant\") {\n    return <AddedParticipant {...props} />\n  } else if (props.post.event_type === \"removed_participant\") {\n    return <RemovedParticipant {...props} />\n  } else {\n    return null\n  }\n}\n\nexport function ChangedTitle(props) {\n  const msgstring = escapeHtml(\n    gettext(\"Thread title has been changed from %(old_title)s.\")\n  )\n  const oldTitle = interpolate(\n    ITEM_SPAN,\n    {\n      name: escapeHtml(props.post.event_context.old_title),\n    },\n    true\n  )\n  const message = interpolate(\n    msgstring,\n    {\n      old_title: oldTitle,\n    },\n    true\n  )\n\n  return (\n    <p\n      className=\"event-message\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n\nexport function Moved(props) {\n  const msgstring = escapeHtml(\n    gettext(\"Thread has been moved from %(from_category)s.\")\n  )\n  const fromCategory = interpolate(\n    ITEM_LINK,\n    {\n      url: escapeHtml(props.post.event_context.from_category.url),\n      name: escapeHtml(props.post.event_context.from_category.name),\n    },\n    true\n  )\n\n  const message = interpolate(\n    msgstring,\n    {\n      from_category: fromCategory,\n    },\n    true\n  )\n\n  return (\n    <p\n      className=\"event-message\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n\nexport function Merged(props) {\n  const msgstring = escapeHtml(\n    gettext(\"The %(merged_thread)s thread has been merged into this thread.\")\n  )\n  const mergedThread = interpolate(\n    ITEM_SPAN,\n    {\n      name: escapeHtml(props.post.event_context.merged_thread),\n    },\n    true\n  )\n\n  const message = interpolate(\n    msgstring,\n    {\n      merged_thread: mergedThread,\n    },\n    true\n  )\n\n  return (\n    <p\n      className=\"event-message\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n\nexport function ChangedOwner(props) {\n  const msgstring = escapeHtml(gettext(\"Changed thread owner to %(user)s.\"))\n  const newOwner = interpolate(\n    ITEM_LINK,\n    {\n      url: escapeHtml(props.post.event_context.user.url),\n      name: escapeHtml(props.post.event_context.user.username),\n    },\n    true\n  )\n\n  const message = interpolate(\n    msgstring,\n    {\n      user: newOwner,\n    },\n    true\n  )\n\n  return (\n    <p\n      className=\"event-message\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n\nexport function AddedParticipant(props) {\n  const msgstring = escapeHtml(gettext(\"Added %(user)s to thread.\"))\n  const newOwner = interpolate(\n    ITEM_LINK,\n    {\n      url: escapeHtml(props.post.event_context.user.url),\n      name: escapeHtml(props.post.event_context.user.username),\n    },\n    true\n  )\n\n  const message = interpolate(\n    msgstring,\n    {\n      user: newOwner,\n    },\n    true\n  )\n\n  return (\n    <p\n      className=\"event-message\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n\nexport function RemovedParticipant(props) {\n  const msgstring = escapeHtml(gettext(\"Removed %(user)s from thread.\"))\n  const newOwner = interpolate(\n    ITEM_LINK,\n    {\n      url: escapeHtml(props.post.event_context.user.url),\n      name: escapeHtml(props.post.event_context.user.username),\n    },\n    true\n  )\n\n  const message = interpolate(\n    msgstring,\n    {\n      user: newOwner,\n    },\n    true\n  )\n\n  return (\n    <p\n      className=\"event-message\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n","import React from \"react\"\n\nexport default function ({ post }) {\n  if (post.is_read) return null\n\n  return (\n    <div className=\"event-label\">\n      <span className=\"label label-unread\">{gettext(\"New event\")}</span>\n    </div>\n  )\n}\n","import React from \"react\"\nimport * as post from \"misago/reducers/post\"\nimport * as thread from \"misago/reducers/thread\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends React.Component {\n  /*\n  Super naive and de-facto placeholder implementation for reading posts on scroll\n  */\n  componentDidMount() {\n    if (this.props.post.is_read) return // don't register read tracker\n\n    $(this.element).waypoint({\n      handler: (direction) => {\n        if (direction !== \"down\" || this.props.post.is_read) return\n\n        // after 1500ms run flag post as read logic\n        window.setTimeout(() => {\n          // check if post's bottom edge is still in viewport\n          const boundingClientRect = this.element.getBoundingClientRect()\n          const offsetBottom =\n            boundingClientRect.height + boundingClientRect.top\n          const clientHeight = document.documentElement.clientHeight\n\n          if (offsetBottom < 5) return // scrolled past the post\n          if (offsetBottom > clientHeight) return // scrolled back up\n\n          // mark post as read\n          store.dispatch(\n            post.patch(this.props.post, {\n              is_read: true,\n            })\n          )\n\n          // call API to let it know we have unread post\n          ajax.post(this.props.post.api.read).then(\n            (data) => {\n              store.dispatch(\n                thread.update(this.props.thread, {\n                  is_read: data.thread_is_read,\n                })\n              )\n            },\n            (rejection) => {\n              snackbar.apiError(rejection)\n            }\n          )\n        }, 1000)\n      },\n      offset: \"bottom-in-view\",\n    })\n  }\n\n  render() {\n    return (\n      <div\n        className={this.props.className}\n        ref={(node) => {\n          if (node) this.element = node\n        }}\n      >\n        {this.props.children}\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Icon from \"./icon\"\nimport Info from \"./info\"\nimport Message from \"./message\"\nimport UnreadLabel from \"./unread-label\"\nimport Waypoint from \"../waypoint\"\n\nexport default function (props) {\n  let className = \"event\"\n  if (props.post.isDeleted) {\n    className = \"hide\"\n  } else if (props.post.is_hidden) {\n    className = \"event post-hidden\"\n  }\n\n  return (\n    <li id={\"post-\" + props.post.id} className={className}>\n      <UnreadLabel post={props.post} />\n      <div className=\"event-body\">\n        <div className=\"event-icon\">\n          <Icon {...props} />\n        </div>\n        <Waypoint className=\"event-content\" post={props.post}>\n          <Message {...props} />\n          <Info {...props} />\n        </Waypoint>\n      </div>\n    </li>\n  )\n}\n","import React from \"react\"\nimport misago from \"misago\"\nimport escapeHtml from \"misago/utils/escape-html\"\nimport formatFilesize from \"misago/utils/file-size\"\n\nconst DATE_ABBR = '<abbr title=\"%(absolute)s\">%(relative)s</abbr>'\nconst USER_SPAN = '<span class=\"item-title\">%(user)s</span>'\nconst USER_URL = '<a href=\"%(url)s\" class=\"item-title\">%(user)s</a>'\n\nexport default function (props) {\n  return (\n    <div className=\"col-xs-12 col-md-6\">\n      <AttachmentPreview {...props} />\n      <div className=\"post-attachment\">\n        <a\n          href={props.attachment.url.index}\n          className=\"attachment-name item-title\"\n        >\n          {props.attachment.filename}\n        </a>\n        <AttachmentDetails {...props} />\n      </div>\n    </div>\n  )\n}\n\nexport function AttachmentPreview(props) {\n  if (props.attachment.is_image) {\n    return (\n      <div className=\"post-attachment-preview\">\n        <AttachmentThumbnail {...props} />\n      </div>\n    )\n  } else {\n    return (\n      <div className=\"post-attachment-preview\">\n        <AttachmentIcon {...props} />\n      </div>\n    )\n  }\n}\n\nexport function AttachmentIcon(props) {\n  return (\n    <a href={props.attachment.url.index} className=\"material-icon\">\n      insert_drive_file\n    </a>\n  )\n}\n\nexport function AttachmentThumbnail(props) {\n  const url = props.attachment.url.thumb || props.attachment.url.index\n  return (\n    <a\n      className=\"post-thumbnail\"\n      href={props.attachment.url.index}\n      style={{ backgroundImage: 'url(\"' + escapeHtml(url) + '\")' }}\n    />\n  )\n}\n\nexport function AttachmentDetails(props) {\n  let user = null\n  if (props.attachment.url.uploader) {\n    user = interpolate(\n      USER_URL,\n      {\n        url: escapeHtml(props.attachment.url.uploader),\n        user: escapeHtml(props.attachment.uploader_name),\n      },\n      true\n    )\n  } else {\n    user = interpolate(\n      USER_SPAN,\n      {\n        user: escapeHtml(props.attachment.uploader_name),\n      },\n      true\n    )\n  }\n\n  const date = interpolate(\n    DATE_ABBR,\n    {\n      absolute: escapeHtml(props.attachment.uploaded_on.format(\"LLL\")),\n      relative: escapeHtml(props.attachment.uploaded_on.fromNow()),\n    },\n    true\n  )\n\n  const message = interpolate(\n    escapeHtml(\n      gettext(\n        \"%(filetype)s, %(size)s, uploaded by %(uploader)s %(uploaded_on)s.\"\n      )\n    ),\n    {\n      filetype: props.attachment.filetype,\n      size: formatFilesize(props.attachment.size),\n      uploader: user,\n      uploaded_on: date,\n    },\n    true\n  )\n\n  return (\n    <p\n      className=\"post-attachment-description\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n","import React from \"react\"\nimport batch from \"misago/utils/batch\"\nimport Attachment from \"./attachment\"\n\nexport default function (props) {\n  if (!isVisible(props.post)) {\n    return null\n  }\n\n  return (\n    <div className=\"post-attachments\">\n      {batch(props.post.attachments, 2).map((row) => {\n        const key = row\n          .map((a) => {\n            return a ? a.id : 0\n          })\n          .join(\"_\")\n        return <Row key={key} row={row} />\n      })}\n    </div>\n  )\n}\n\nexport function isVisible(post) {\n  return (!post.is_hidden || post.acl.can_see_hidden) && post.attachments\n}\n\nexport function Row(props) {\n  return (\n    <div className=\"row\">\n      {props.row.map((attachment) => {\n        return (\n          <Attachment\n            attachment={attachment}\n            key={attachment ? attachment.id : 0}\n          />\n        )\n      })}\n    </div>\n  )\n}\n","import React from \"react\"\nimport Waypoint from \"../waypoint\"\nimport MisagoMarkup from \"misago/components/misago-markup\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nconst HIDDEN_BY_URL = '<a href=\"%(url)s\" class=\"item-title\">%(user)s</a>'\nconst HIDDEN_BY_SPAN = '<span class=\"item-title\">%(user)s</span>'\nconst HIDDEN_ON =\n  '<abbr class=\"last-title\" title=\"%(absolute)s\">%(relative)s</abbr>'\n\nexport default function (props) {\n  if (props.post.is_hidden && !props.post.acl.can_see_hidden) {\n    return <Hidden {...props} />\n  } else if (props.post.content) {\n    return <Default {...props} />\n  } else {\n    return <Invalid {...props} />\n  }\n}\n\nexport function Default(props) {\n  return (\n    <Waypoint className=\"post-body\" post={props.post}>\n      <MisagoMarkup markup={props.post.content} />\n    </Waypoint>\n  )\n}\n\nexport function Hidden(props) {\n  let user = null\n  if (props.post.hidden_by) {\n    user = interpolate(\n      HIDDEN_BY_URL,\n      {\n        url: escapeHtml(props.post.url.hidden_by),\n        user: escapeHtml(props.post.hidden_by_name),\n      },\n      true\n    )\n  } else {\n    user = interpolate(\n      HIDDEN_BY_SPAN,\n      {\n        user: escapeHtml(props.post.hidden_by_name),\n      },\n      true\n    )\n  }\n\n  const date = interpolate(\n    HIDDEN_ON,\n    {\n      absolute: escapeHtml(props.post.hidden_on.format(\"LLL\")),\n      relative: escapeHtml(props.post.hidden_on.fromNow()),\n    },\n    true\n  )\n\n  const message = interpolate(\n    escapeHtml(gettext(\"Hidden by %(hidden_by)s %(hidden_on)s.\")),\n    {\n      hidden_by: user,\n      hidden_on: date,\n    },\n    true\n  )\n\n  return (\n    <Waypoint className=\"post-body post-body-hidden\" post={props.post}>\n      <p className=\"lead\">\n        {gettext(\"This post is hidden. You cannot see its contents.\")}\n      </p>\n      <p className=\"text-muted\" dangerouslySetInnerHTML={{ __html: message }} />\n    </Waypoint>\n  )\n}\n\nexport function Invalid(props) {\n  return (\n    <Waypoint className=\"post-body post-body-invalid\" post={props.post}>\n      <p className=\"lead\">\n        {gettext(\"This post's contents cannot be displayed.\")}\n      </p>\n      <p className=\"text-muted\">\n        {gettext(\"This error is caused by invalid post content manipulation.\")}\n      </p>\n    </Waypoint>\n  )\n}\n","import React from \"react\"\n\nexport function FlagBestAnswer({ post, thread, user }) {\n  if (!(isVisible(post) && post.id === thread.best_answer)) {\n    return null\n  }\n\n  let message = null\n  if (user.id && thread.best_answer_marked_by === user.id) {\n    message = interpolate(\n      gettext(\"Marked as best answer by you %(marked_on)s.\"),\n      {\n        marked_on: thread.best_answer_marked_on.fromNow(),\n      },\n      true\n    )\n  } else {\n    message = interpolate(\n      gettext(\"Marked as best answer by %(marked_by)s %(marked_on)s.\"),\n      {\n        marked_by: thread.best_answer_marked_by_name,\n        marked_on: thread.best_answer_marked_on.fromNow(),\n      },\n      true\n    )\n  }\n\n  return (\n    <div className=\"post-status-message post-status-best-answer\">\n      <span className=\"material-icon\">check_box</span>\n      <p>{message}</p>\n    </div>\n  )\n}\n\nexport function FlagHidden(props) {\n  if (!(isVisible(props.post) && props.post.is_hidden)) {\n    return null\n  }\n\n  return (\n    <div className=\"post-status-message post-status-hidden\">\n      <span className=\"material-icon\">visibility_off</span>\n      <p>\n        {gettext(\n          \"This post is hidden. Only users with permission may see its contents.\"\n        )}\n      </p>\n    </div>\n  )\n}\n\nexport function FlagUnapproved(props) {\n  if (!(isVisible(props.post) && props.post.is_unapproved)) {\n    return null\n  }\n\n  return (\n    <div className=\"post-status-message post-status-unapproved\">\n      <span className=\"material-icon\">remove_circle_outline</span>\n      <p>\n        {gettext(\n          \"This post is unapproved. Only users with permission to approve posts and its author may see its contents.\"\n        )}\n      </p>\n    </div>\n  )\n}\n\nexport function FlagProtected(props) {\n  if (!(isVisible(props.post) && props.post.is_protected)) {\n    return null\n  }\n\n  return (\n    <div className=\"post-status-message post-status-protected visible-xs-block\">\n      <span className=\"material-icon\">lock_outline</span>\n      <p>{gettext(\"This post is protected. Only moderators may change it.\")}</p>\n    </div>\n  )\n}\n\nexport function isVisible(post) {\n  return !post.is_hidden || post.acl.can_see_hidden\n}\n","import moment from \"moment\"\nimport * as thread from \"misago/reducers/thread\"\nimport * as post from \"misago/reducers/post\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport function approve(props) {\n  store.dispatch(\n    post.patch(props.post, {\n      is_unapproved: false,\n    })\n  )\n\n  const ops = [{ op: \"replace\", path: \"is-unapproved\", value: false }]\n\n  const previousState = {\n    is_unapproved: props.post.is_unapproved,\n  }\n\n  patch(props, ops, previousState)\n}\n\nexport function protect(props) {\n  store.dispatch(\n    post.patch(props.post, {\n      is_protected: true,\n    })\n  )\n\n  const ops = [{ op: \"replace\", path: \"is-protected\", value: true }]\n\n  const previousState = {\n    is_protected: props.post.is_protected,\n  }\n\n  patch(props, ops, previousState)\n}\n\nexport function unprotect(props) {\n  store.dispatch(\n    post.patch(props.post, {\n      is_protected: false,\n    })\n  )\n\n  const ops = [{ op: \"replace\", path: \"is-protected\", value: false }]\n\n  const previousState = {\n    is_protected: props.post.is_protected,\n  }\n\n  patch(props, ops, previousState)\n}\n\nexport function hide(props) {\n  store.dispatch(\n    post.patch(props.post, {\n      is_hidden: true,\n      hidden_on: moment(),\n      hidden_by_name: props.user.username,\n      url: Object.assign(props.post.url, {\n        hidden_by: props.user.url,\n      }),\n    })\n  )\n\n  const ops = [{ op: \"replace\", path: \"is-hidden\", value: true }]\n\n  const previousState = {\n    is_hidden: props.post.is_hidden,\n    hidden_on: props.post.hidden_on,\n    hidden_by_name: props.post.hidden_by_name,\n    url: props.post.url,\n  }\n\n  patch(props, ops, previousState)\n}\n\nexport function unhide(props) {\n  store.dispatch(\n    post.patch(props.post, {\n      is_hidden: false,\n    })\n  )\n\n  const ops = [{ op: \"replace\", path: \"is-hidden\", value: false }]\n\n  const previousState = {\n    is_hidden: props.post.is_hidden,\n  }\n\n  patch(props, ops, previousState)\n}\n\nexport function like(props) {\n  const lastLikes = props.post.last_likes || []\n  const concatedLikes = [props.user].concat(lastLikes)\n  const finalLikes =\n    concatedLikes.length > 3 ? concatedLikes.slice(0, -1) : concatedLikes\n\n  store.dispatch(\n    post.patch(props.post, {\n      is_liked: true,\n      likes: props.post.likes + 1,\n      last_likes: finalLikes,\n    })\n  )\n\n  const ops = [{ op: \"replace\", path: \"is-liked\", value: true }]\n\n  const previousState = {\n    is_liked: props.post.is_liked,\n    likes: props.post.likes,\n    last_likes: props.post.last_likes,\n  }\n\n  patch(props, ops, previousState)\n}\n\nexport function unlike(props) {\n  store.dispatch(\n    post.patch(props.post, {\n      is_liked: false,\n      likes: props.post.likes - 1,\n      last_likes: props.post.last_likes.filter((user) => {\n        return !user.id || user.id !== props.user.id\n      }),\n    })\n  )\n\n  const ops = [{ op: \"replace\", path: \"is-liked\", value: false }]\n\n  const previousState = {\n    is_liked: props.post.is_liked,\n    likes: props.post.likes,\n    last_likes: props.post.last_likes,\n  }\n\n  patch(props, ops, previousState)\n}\n\nexport function patch(props, ops, previousState) {\n  ajax.patch(props.post.api.index, ops).then(\n    (newState) => {\n      store.dispatch(post.patch(props.post, newState))\n    },\n    (rejection) => {\n      if (rejection.status === 400) {\n        snackbar.error(rejection.detail[0])\n      } else {\n        snackbar.apiError(rejection)\n      }\n\n      store.dispatch(post.patch(props.post, previousState))\n    }\n  )\n}\n\nexport function remove(props) {\n  let confirmed = window.confirm(\n    gettext(\n      \"Are you sure you want to delete this post? This action is not reversible!\"\n    )\n  )\n  if (!confirmed) {\n    return\n  }\n\n  store.dispatch(\n    post.patch(props.post, {\n      isDeleted: true,\n    })\n  )\n\n  ajax.delete(props.post.api.index).then(\n    () => {\n      snackbar.success(gettext(\"Post has been deleted.\"))\n    },\n    (rejection) => {\n      if (rejection.status === 400) {\n        snackbar.error(rejection.detail)\n      } else {\n        snackbar.apiError(rejection)\n      }\n\n      store.dispatch(\n        post.patch(props.post, {\n          isDeleted: false,\n        })\n      )\n    }\n  )\n}\n\nexport function markAsBestAnswer(props) {\n  const { post, user } = props\n\n  store.dispatch(\n    thread.update({\n      best_answer: post.id,\n      best_answer_is_protected: post.is_protected,\n      best_answer_marked_on: moment(),\n      best_answer_marked_by: user.id,\n      best_answer_marked_by_name: user.username,\n      best_answer_marked_by_slug: user.slug,\n    })\n  )\n\n  const ops = [\n    { op: \"replace\", path: \"best-answer\", value: post.id },\n    { op: \"add\", path: \"acl\", value: true },\n  ]\n\n  const previousState = {\n    best_answer: props.thread.best_answer,\n    best_answer_is_protected: props.thread.best_answer_is_protected,\n    best_answer_marked_on: props.thread.best_answer_marked_on,\n    best_answer_marked_by: props.thread.best_answer_marked_by,\n    best_answer_marked_by_name: props.thread.best_answer_marked_by_name,\n    best_answer_marked_by_slug: props.thread.best_answer_marked_by_slug,\n  }\n\n  patchThread(props, ops, previousState)\n}\n\nexport function unmarkBestAnswer(props) {\n  const { post } = props\n\n  store.dispatch(\n    thread.update({\n      best_answer: null,\n      best_answer_is_protected: false,\n      best_answer_marked_on: null,\n      best_answer_marked_by: null,\n      best_answer_marked_by_name: null,\n      best_answer_marked_by_slug: null,\n    })\n  )\n\n  const ops = [\n    { op: \"remove\", path: \"best-answer\", value: post.id },\n    { op: \"add\", path: \"acl\", value: true },\n  ]\n\n  const previousState = {\n    best_answer: props.thread.best_answer,\n    best_answer_is_protected: props.thread.best_answer_is_protected,\n    best_answer_marked_on: props.thread.best_answer_marked_on,\n    best_answer_marked_by: props.thread.best_answer_marked_by,\n    best_answer_marked_by_name: props.thread.best_answer_marked_by_name,\n    best_answer_marked_by_slug: props.thread.best_answer_marked_by_slug,\n  }\n\n  patchThread(props, ops, previousState)\n}\n\nexport function patchThread(props, ops, previousState) {\n  ajax.patch(props.thread.api.index, ops).then(\n    (newState) => {\n      if (newState.best_answer_marked_on) {\n        newState.best_answer_marked_on = moment(newState.best_answer_marked_on)\n      }\n      store.dispatch(thread.update(newState))\n    },\n    (rejection) => {\n      if (rejection.status === 400) {\n        snackbar.error(rejection.detail[0])\n      } else {\n        snackbar.apiError(rejection)\n      }\n\n      store.dispatch(thread.update(previousState))\n    }\n  )\n}\n","import React from \"react\"\nimport moment from \"moment\"\nimport Avatar from \"misago/components/avatar\"\nimport Message from \"misago/components/modal-message\"\nimport Loader from \"misago/components/modal-loader\"\nimport ajax from \"misago/services/ajax\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isReady: false,\n\n      error: null,\n      likes: [],\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(this.props.post.api.likes).then(\n      (data) => {\n        this.setState({\n          isReady: true,\n          likes: data.map(hydrateLike),\n        })\n      },\n      (rejection) => {\n        this.setState({\n          isReady: true,\n          error: rejection.detail,\n        })\n      }\n    )\n  }\n\n  render() {\n    if (this.state.error) {\n      return (\n        <ModalDialog className=\"modal-message\">\n          <Message message={this.state.error} />\n        </ModalDialog>\n      )\n    } else if (this.state.isReady) {\n      if (this.state.likes.length) {\n        return (\n          <ModalDialog className=\"modal-sm\" likes={this.state.likes}>\n            <LikesList likes={this.state.likes} />\n          </ModalDialog>\n        )\n      }\n\n      return (\n        <ModalDialog className=\"modal-message\">\n          <Message message={gettext(\"No users have liked this post.\")} />\n        </ModalDialog>\n      )\n    }\n\n    return (\n      <ModalDialog className=\"modal-sm\">\n        <Loader />\n      </ModalDialog>\n    )\n  }\n}\n\nexport function hydrateLike(data) {\n  return Object.assign({}, data, {\n    liked_on: moment(data.liked_on),\n  })\n}\n\nexport function ModalDialog({ className, children, likes }) {\n  let title = gettext(\"Post Likes\")\n  if (likes) {\n    const likesCount = likes.length\n    const message = ngettext(\"%(likes)s like\", \"%(likes)s likes\", likesCount)\n\n    title = interpolate(message, { likes: likesCount }, true)\n  }\n\n  return (\n    <div className={\"modal-dialog \" + (className || \"\")} role=\"document\">\n      <div className=\"modal-content\">\n        <div className=\"modal-header\">\n          <button\n            aria-label={gettext(\"Close\")}\n            className=\"close\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            <span aria-hidden=\"true\">&times;</span>\n          </button>\n          <h4 className=\"modal-title\">{title}</h4>\n        </div>\n        {children}\n      </div>\n    </div>\n  )\n}\n\nexport function LikesList(props) {\n  return (\n    <div className=\"modal-body modal-post-likers\">\n      <ul className=\"media-list\">\n        {props.likes.map((like) => {\n          return <LikeDetails key={like.id} {...like} />\n        })}\n      </ul>\n    </div>\n  )\n}\n\nexport function LikeDetails(props) {\n  if (props.url) {\n    const user = {\n      id: props.liker_id,\n      avatars: props.avatars,\n    }\n\n    return (\n      <li className=\"media\">\n        <div className=\"media-left\">\n          <a className=\"user-avatar\" href={props.url}>\n            <Avatar size=\"50\" user={user} />\n          </a>\n        </div>\n        <div className=\"media-body\">\n          <a className=\"item-title\" href={props.url}>\n            {props.username}\n          </a>{\" \"}\n          <LikeDate likedOn={props.liked_on} />\n        </div>\n      </li>\n    )\n  }\n\n  return (\n    <li className=\"media\">\n      <div className=\"media-left\">\n        <span className=\"user-avatar\">\n          <Avatar size=\"50\" />\n        </span>\n      </div>\n      <div className=\"media-body\">\n        <strong>{props.username}</strong> <LikeDate likedOn={props.liked_on} />\n      </div>\n    </li>\n  )\n}\n\nexport function LikeDate(props) {\n  return (\n    <span className=\"text-muted\" title={props.likedOn.format(\"LLL\")}>\n      {props.likedOn.fromNow()}\n    </span>\n  )\n}\n","import React from \"react\"\nimport * as actions from \"./controls/actions\"\nimport LikesModal from \"misago/components/post-likes\"\nimport modal from \"misago/services/modal\"\nimport posting from \"misago/services/posting\"\n\nexport default function (props) {\n  if (!isVisible(props.post)) return null\n\n  return (\n    <div className=\"post-footer\">\n      <MarkAsBestAnswer {...props} />\n      <MarkAsBestAnswerCompact {...props} />\n      <Like {...props} />\n      <Likes\n        lastLikes={props.post.last_likes}\n        likes={props.post.likes}\n        {...props}\n      />\n      <LikesCompact likes={props.post.likes} {...props} />\n      <Reply {...props} />\n      <Edit {...props} />\n    </div>\n  )\n}\n\nexport function isVisible(post) {\n  return (\n    (!post.is_hidden || post.acl.can_see_hidden) &&\n    (post.acl.can_reply ||\n      post.acl.can_edit ||\n      (post.acl.can_see_likes && (post.last_likes || []).length) ||\n      post.acl.can_like)\n  )\n}\n\nexport class MarkAsBestAnswer extends React.Component {\n  onClick = () => {\n    actions.markAsBestAnswer(this.props)\n  }\n\n  render() {\n    const { post, thread } = this.props\n\n    if (!thread.acl.can_mark_best_answer) return null\n    if (!post.acl.can_mark_as_best_answer) return null\n    if (thread.best_answer && !thread.acl.can_change_best_answer) return null\n\n    return (\n      <button\n        className=\"hidden-xs btn btn-default btn-sm pull-left\"\n        disabled={this.props.post.isBusy || post.id === thread.best_answer}\n        onClick={this.onClick}\n        type=\"button\"\n      >\n        <span className=\"material-icon\">check_box</span>\n        {gettext(\"Best answer\")}\n      </button>\n    )\n  }\n}\n\nexport class MarkAsBestAnswerCompact extends React.Component {\n  onClick = () => {\n    actions.markAsBestAnswer(this.props)\n  }\n\n  render() {\n    const { post, thread } = this.props\n\n    if (!thread.acl.can_mark_best_answer) return null\n    if (!post.acl.can_mark_as_best_answer) return null\n    if (thread.best_answer && !thread.acl.can_change_best_answer) return null\n\n    return (\n      <button\n        className=\"visible-xs-inline-block btn btn-default btn-sm pull-left\"\n        disabled={this.props.post.isBusy || post.id === thread.best_answer}\n        onClick={this.onClick}\n        type=\"button\"\n      >\n        <span className=\"material-icon\">check_box</span>\n      </button>\n    )\n  }\n}\n\nexport class Like extends React.Component {\n  onClick = () => {\n    if (this.props.post.is_liked) {\n      actions.unlike(this.props)\n    } else {\n      actions.like(this.props)\n    }\n  }\n\n  render() {\n    if (!this.props.post.acl.can_like) return null\n\n    let className = \"btn btn-default btn-sm pull-left\"\n    if (this.props.post.is_liked) {\n      className = \"btn btn-success btn-sm pull-left\"\n    }\n\n    return (\n      <button\n        className={className}\n        disabled={this.props.post.isBusy}\n        onClick={this.onClick}\n        type=\"button\"\n      >\n        {this.props.post.is_liked ? gettext(\"Liked\") : gettext(\"Like\")}\n      </button>\n    )\n  }\n}\n\nexport class Likes extends React.Component {\n  onClick = () => {\n    modal.show(<LikesModal post={this.props.post} />)\n  }\n\n  render() {\n    const hasLikes = (this.props.post.last_likes || []).length > 0\n    if (!this.props.post.acl.can_see_likes || !hasLikes) return null\n\n    if (this.props.post.acl.can_see_likes === 2) {\n      return (\n        <button\n          className=\"btn btn-link btn-sm pull-left hidden-xs\"\n          onClick={this.onClick}\n          type=\"button\"\n        >\n          {getLikesMessage(this.props.likes, this.props.lastLikes)}\n        </button>\n      )\n    }\n\n    return (\n      <p className=\"pull-left hidden-xs\">\n        {getLikesMessage(this.props.likes, this.props.lastLikes)}\n      </p>\n    )\n  }\n}\n\nexport class LikesCompact extends Likes {\n  render() {\n    const hasLikes = (this.props.post.last_likes || []).length > 0\n    if (!this.props.post.acl.can_see_likes || !hasLikes) return null\n\n    if (this.props.post.acl.can_see_likes === 2) {\n      return (\n        <button\n          className=\"btn btn-link btn-sm likes-compact pull-left visible-xs-block\"\n          onClick={this.onClick}\n          type=\"button\"\n        >\n          <span className=\"material-icon\">favorite</span>\n          {this.props.likes}\n        </button>\n      )\n    }\n\n    return (\n      <p className=\"likes-compact pull-left visible-xs-block\">\n        <span className=\"material-icon\">favorite</span>\n        {this.props.likes}\n      </p>\n    )\n  }\n}\n\nexport function getLikesMessage(likes, users) {\n  const usernames = users.slice(0, 3).map((u) => u.username)\n\n  if (usernames.length == 1) {\n    return interpolate(\n      gettext(\"%(user)s likes this.\"),\n      {\n        user: usernames[0],\n      },\n      true\n    )\n  }\n\n  const hiddenLikes = likes - usernames.length\n\n  const otherUsers = usernames.slice(0, -1).join(\", \")\n  const lastUser = usernames.slice(-1)[0]\n\n  const usernamesList = interpolate(\n    gettext(\"%(users)s and %(last_user)s\"),\n    {\n      users: otherUsers,\n      last_user: lastUser,\n    },\n    true\n  )\n\n  if (hiddenLikes === 0) {\n    return interpolate(\n      gettext(\"%(users)s like this.\"),\n      {\n        users: usernamesList,\n      },\n      true\n    )\n  }\n\n  const message = ngettext(\n    \"%(users)s and %(likes)s other user like this.\",\n    \"%(users)s and %(likes)s other users like this.\",\n    hiddenLikes\n  )\n\n  return interpolate(\n    message,\n    {\n      users: usernames.join(\", \"),\n      likes: hiddenLikes,\n    },\n    true\n  )\n}\n\nexport class Reply extends React.Component {\n  onClick = () => {\n    posting.open({\n      mode: \"REPLY\",\n\n      config: this.props.thread.api.editor,\n      submit: this.props.thread.api.posts.index,\n\n      context: {\n        reply: this.props.post.id,\n      },\n    })\n  }\n\n  render() {\n    if (this.props.post.acl.can_reply) {\n      return (\n        <button\n          className=\"btn btn-primary btn-sm pull-right\"\n          type=\"button\"\n          onClick={this.onClick}\n        >\n          {gettext(\"Reply\")}\n        </button>\n      )\n    } else {\n      return null\n    }\n  }\n}\n\nexport class Edit extends React.Component {\n  onClick = () => {\n    posting.open({\n      mode: \"EDIT\",\n\n      config: this.props.post.api.editor,\n      submit: this.props.post.api.index,\n    })\n  }\n\n  render() {\n    if (this.props.post.acl.can_edit) {\n      return (\n        <button\n          className=\"hidden-xs btn btn-default btn-sm pull-right\"\n          type=\"button\"\n          onClick={this.onClick}\n        >\n          {gettext(\"Edit\")}\n        </button>\n      )\n    } else {\n      return null\n    }\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport * as post from \"misago/reducers/post\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      url: \"\",\n\n      validators: {\n        url: [],\n      },\n      errors: {},\n    }\n  }\n\n  clean() {\n    if (!this.state.url.trim().length) {\n      snackbar.error(gettext(\"You have to enter link to the other thread.\"))\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.post(this.props.thread.api.posts.move, {\n      new_thread: this.state.url,\n      posts: [this.props.post.id],\n    })\n  }\n\n  handleSuccess(success) {\n    store.dispatch(\n      post.patch(this.props.post, {\n        isDeleted: true,\n      })\n    )\n\n    modal.hide()\n\n    snackbar.success(gettext(\"Selected post was moved to the other thread.\"))\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      snackbar.error(rejection.detail)\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  onUrlChange = (event) => {\n    this.changeValue(\"url\", event.target.value)\n  }\n\n  render() {\n    return (\n      <div className=\"modal-dialog\" role=\"document\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"modal-content\">\n            <ModalHeader />\n            <div className=\"modal-body\">\n              <FormGroup\n                for=\"id_url\"\n                label={gettext(\"Link to thread you want to move post to\")}\n              >\n                <input\n                  className=\"form-control\"\n                  disabled={this.state.isLoading}\n                  id=\"id_url\"\n                  onChange={this.onUrlChange}\n                  value={this.state.url}\n                />\n              </FormGroup>\n            </div>\n            <div className=\"modal-footer\">\n              <button\n                className=\"btn btn-primary\"\n                disabled={this.state.isLoading}\n              >\n                {gettext(\"Move post\")}\n              </button>\n            </div>\n          </div>\n        </form>\n      </div>\n    )\n  }\n}\n\nexport function ModalHeader(props) {\n  return (\n    <div className=\"modal-header\">\n      <button\n        aria-label={gettext(\"Close\")}\n        className=\"close\"\n        data-dismiss=\"modal\"\n        type=\"button\"\n      >\n        <span aria-hidden=\"true\">&times;</span>\n      </button>\n      <h4 className=\"modal-title\">{gettext(\"Move post\")}</h4>\n    </div>\n  )\n}\n","import React from \"react\"\n\nexport default function (props) {\n  return (\n    <div className=\"modal-body post-changelog-diff\">\n      <ul className=\"list-unstyled\">\n        {props.diff.map((item, i) => {\n          return <DiffItem item={item} key={i} />\n        })}\n      </ul>\n    </div>\n  )\n}\n\nexport function DiffItem(props) {\n  if (props.item[0] === \"?\") return null\n\n  return (\n    <li className={getItemClassName(props.item)}>{cleanItem(props.item)}</li>\n  )\n}\n\nexport function getItemClassName(item) {\n  let className = \"diff-item\"\n  if (item[0] === \"-\") {\n    className += \" diff-item-sub\"\n  } else if (item[0] === \"+\") {\n    className += \" diff-item-add\"\n  }\n  return className\n}\n\nexport function cleanItem(item) {\n  return item.substr(2)\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\n\nexport default class extends React.Component {\n  onClick = () => {\n    this.props.revertEdit(this.props.edit.id)\n  }\n\n  render() {\n    if (!this.props.canRevert) return null\n\n    return (\n      <div className=\"modal-footer visible-xs-block\">\n        <Button\n          className=\"btn-default btn-sm btn-block\"\n          disabled={this.props.disabled}\n          onClick={this.onClick}\n          title={gettext(\"Revert post to state from before this edit.\")}\n        >\n          {gettext(\"Revert\")}\n        </Button>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nconst DATE_ABBR = '<abbr title=\"%(absolute)s\">%(relative)s</abbr>'\nconst USER_SPAN = '<span class=\"item-title\">%(user)s</span>'\nconst USER_URL = '<a href=\"%(url)s\" class=\"item-title\">%(user)s</a>'\n\nexport default class extends React.Component {\n  goLast = () => {\n    this.props.goToEdit()\n  }\n\n  goForward = () => {\n    this.props.goToEdit(this.props.edit.next)\n  }\n\n  goBack = () => {\n    this.props.goToEdit(this.props.edit.previous)\n  }\n\n  revertEdit = () => {\n    this.props.revertEdit(this.props.edit.id)\n  }\n\n  render() {\n    return (\n      <div className=\"modal-toolbar post-changelog-toolbar\">\n        <div className=\"row\">\n          <div className=\"col-xs-12 col-sm-4\">\n            <div className=\"row\">\n              <div className=\"col-xs-4\">\n                <GoBackBtn\n                  disabled={this.props.disabled}\n                  edit={this.props.edit}\n                  onClick={this.goBack}\n                />\n              </div>\n              <div className=\"col-xs-4\">\n                <GoForwardBtn\n                  disabled={this.props.disabled}\n                  edit={this.props.edit}\n                  onClick={this.goForward}\n                />\n              </div>\n              <div className=\"col-xs-4\">\n                <GoLastBtn\n                  disabled={this.props.disabled}\n                  edit={this.props.edit}\n                  onClick={this.goLast}\n                />\n              </div>\n            </div>\n          </div>\n          <div className=\"col-xs-12 col-sm-5 xs-margin-top-half post-change-label\">\n            <Label edit={this.props.edit} />\n          </div>\n          <RevertBtn\n            canRevert={this.props.canRevert}\n            disabled={this.props.disabled}\n            onClick={this.revertEdit}\n          />\n        </div>\n      </div>\n    )\n  }\n}\n\nexport function GoBackBtn(props) {\n  return (\n    <Button\n      className=\"btn-default btn-block btn-icon btn-sm\"\n      disabled={props.disabled || !props.edit.previous}\n      onClick={props.onClick}\n      title={gettext(\"See previous change\")}\n    >\n      <span className=\"material-icon\">chevron_left</span>\n    </Button>\n  )\n}\n\nexport function GoForwardBtn(props) {\n  return (\n    <Button\n      className=\"btn-default btn-block btn-icon btn-sm\"\n      disabled={props.disabled || !props.edit.next}\n      onClick={props.onClick}\n      title={gettext(\"See next change\")}\n    >\n      <span className=\"material-icon\">chevron_right</span>\n    </Button>\n  )\n}\n\nexport function GoLastBtn(props) {\n  return (\n    <Button\n      className=\"btn-default btn-block btn-icon btn-sm\"\n      disabled={props.disabled || !props.edit.next}\n      onClick={props.onClick}\n      title={gettext(\"See previous change\")}\n    >\n      <span className=\"material-icon\">last_page</span>\n    </Button>\n  )\n}\n\nexport function RevertBtn(props) {\n  if (!props.canRevert) return null\n\n  return (\n    <div className=\"col-sm-3 hidden-xs\">\n      <Button\n        className=\"btn-default btn-sm btn-block\"\n        disabled={props.disabled}\n        onClick={props.onClick}\n        title={gettext(\"Revert post to state from before this edit.\")}\n      >\n        {gettext(\"Revert\")}\n      </Button>\n    </div>\n  )\n}\n\nexport function Label(props) {\n  let user = null\n  if (props.edit.url.editor) {\n    user = interpolate(\n      USER_URL,\n      {\n        url: escapeHtml(props.edit.url.editor),\n        user: escapeHtml(props.edit.editor_name),\n      },\n      true\n    )\n  } else {\n    user = interpolate(\n      USER_SPAN,\n      {\n        user: escapeHtml(props.edit.editor_name),\n      },\n      true\n    )\n  }\n\n  const date = interpolate(\n    DATE_ABBR,\n    {\n      absolute: escapeHtml(props.edit.edited_on.format(\"LLL\")),\n      relative: escapeHtml(props.edit.edited_on.fromNow()),\n    },\n    true\n  )\n\n  const message = interpolate(\n    escapeHtml(gettext(\"By %(edited_by)s %(edited_on)s.\")),\n    {\n      edited_by: user,\n      edited_on: date,\n    },\n    true\n  )\n\n  return <p dangerouslySetInnerHTML={{ __html: message }} />\n}\n","import moment from \"moment\"\n\nexport function hydrateEdit(json) {\n  return Object.assign({}, json, {\n    edited_on: moment(json.edited_on),\n  })\n}\n","import React from \"react\"\nimport Diff from \"./diff\"\nimport Footer from \"./footer\"\nimport Toolbar from \"./toolbar\"\nimport { hydrateEdit } from \"./utils\"\nimport Message from \"misago/components/modal-message\"\nimport Loader from \"misago/components/modal-loader\"\nimport * as post from \"misago/reducers/post\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isReady: false,\n      isBusy: true,\n\n      canRevert: props.post.acl.can_edit,\n\n      error: null,\n      edit: null,\n    }\n  }\n\n  componentDidMount() {\n    this.goToEdit()\n  }\n\n  goToEdit = (edit = null) => {\n    this.setState({\n      isBusy: true,\n    })\n\n    let url = this.props.post.api.edits\n    if (edit !== null) {\n      url += \"?edit=\" + edit\n    }\n\n    ajax.get(url).then(\n      (data) => {\n        this.setState({\n          isReady: true,\n          isBusy: false,\n          edit: hydrateEdit(data),\n        })\n      },\n      (rejection) => {\n        this.setState({\n          isReady: true,\n          isBusy: false,\n          error: rejection.detail,\n        })\n      }\n    )\n  }\n\n  revertEdit = (edit) => {\n    if (this.state.isBusy) return\n\n    const confirmation = window.confirm(\n      gettext(\n        \"Are you sure you with to revert this post to the state from before this edit?\"\n      )\n    )\n    if (!confirmation) return\n\n    this.setState({\n      isBusy: true,\n    })\n\n    const url = this.props.post.api.edits + \"?edit=\" + edit\n    ajax.post(url).then(\n      (data) => {\n        const hydratedPost = post.hydrate(data)\n        store.dispatch(post.patch(data, hydratedPost))\n\n        snackbar.success(gettext(\"Post has been reverted to previous state.\"))\n        modal.hide()\n      },\n      (rejection) => {\n        snackbar.apiError(rejection)\n\n        this.setState({\n          isBusy: false,\n        })\n      }\n    )\n  }\n\n  render() {\n    if (this.state.error) {\n      return (\n        <ModalDialog className=\"modal-dialog modal-message\">\n          <Message message={this.state.error} />\n        </ModalDialog>\n      )\n    } else if (this.state.isReady) {\n      return (\n        <ModalDialog>\n          <Toolbar\n            canRevert={this.state.canRevert}\n            disabled={this.state.isBusy}\n            edit={this.state.edit}\n            goToEdit={this.goToEdit}\n            revertEdit={this.revertEdit}\n          />\n          <Diff diff={this.state.edit.diff} />\n          <Footer\n            canRevert={this.state.canRevert}\n            disabled={this.state.isBusy}\n            edit={this.state.edit}\n            revertEdit={this.revertEdit}\n          />\n        </ModalDialog>\n      )\n    }\n\n    return (\n      <ModalDialog>\n        <Loader />\n      </ModalDialog>\n    )\n  }\n}\n\nexport function ModalDialog(props) {\n  return (\n    <div className={props.className || \"modal-dialog\"} role=\"document\">\n      <div className=\"modal-content\">\n        <div className=\"modal-header\">\n          <button\n            aria-label={gettext(\"Close\")}\n            className=\"close\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            <span aria-hidden=\"true\">&times;</span>\n          </button>\n          <h4 className=\"modal-title\">{gettext(\"Post edits history\")}</h4>\n        </div>\n        {props.children}\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport CategorySelect from \"misago/components/category-select\"\nimport ModalLoader from \"misago/components/modal-loader\"\nimport Select from \"misago/components/select\"\nimport * as post from \"misago/reducers/post\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport * as validators from \"misago/utils/validators\"\n\nexport default function (props) {\n  return <PostingConfig {...props} Form={ModerationForm} />\n}\n\nexport class PostingConfig extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoaded: false,\n      isError: false,\n\n      categories: [],\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(misago.get(\"THREAD_EDITOR_API\")).then(\n      (data) => {\n        // hydrate categories, extract posting options\n        const categories = data.map((item) => {\n          return Object.assign(item, {\n            disabled: item.post === false,\n            label: item.name,\n            value: item.id,\n            post: item.post,\n          })\n        })\n\n        this.setState({\n          isLoaded: true,\n          categories,\n        })\n      },\n      (rejection) => {\n        this.setState({\n          isError: rejection.detail,\n        })\n      }\n    )\n  }\n\n  render() {\n    if (this.state.isError) {\n      return <Error message={this.state.isError} />\n    } else if (this.state.isLoaded) {\n      return (\n        <ModerationForm {...this.props} categories={this.state.categories} />\n      )\n    } else {\n      return <Loader />\n    }\n  }\n}\n\nexport class ModerationForm extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      title: \"\",\n      category: null,\n      categories: props.categories,\n      weight: 0,\n      is_hidden: 0,\n      is_closed: false,\n\n      validators: {\n        title: [validators.required()],\n      },\n\n      errors: {},\n    }\n\n    this.isHiddenChoices = [\n      {\n        value: 0,\n        icon: \"visibility\",\n        label: gettext(\"No\"),\n      },\n      {\n        value: 1,\n        icon: \"visibility_off\",\n        label: gettext(\"Yes\"),\n      },\n    ]\n\n    this.isClosedChoices = [\n      {\n        value: false,\n        icon: \"lock_outline\",\n        label: gettext(\"No\"),\n      },\n      {\n        value: true,\n        icon: \"lock\",\n        label: gettext(\"Yes\"),\n      },\n    ]\n\n    this.acl = {}\n    this.props.categories.forEach((category) => {\n      if (category.post) {\n        if (!this.state.category) {\n          this.state.category = category.id\n        }\n\n        this.acl[category.id] = {\n          can_pin_threads: category.post.pin,\n          can_close_threads: category.post.close,\n          can_hide_threads: category.post.hide,\n        }\n      }\n    })\n  }\n\n  clean() {\n    if (this.isValid()) {\n      return true\n    } else {\n      snackbar.error(gettext(\"Form contains errors.\"))\n      this.setState({\n        errors: this.validate(),\n      })\n      return false\n    }\n  }\n\n  send() {\n    return ajax.post(this.props.thread.api.posts.split, {\n      title: this.state.title,\n      category: this.state.category,\n      weight: this.state.weight,\n      is_hidden: this.state.is_hidden,\n      is_closed: this.state.is_closed,\n      posts: [this.props.post.id],\n    })\n  }\n\n  handleSuccess(apiResponse) {\n    store.dispatch(\n      post.patch(this.props.post, {\n        isDeleted: true,\n      })\n    )\n\n    modal.hide()\n\n    snackbar.success(gettext(\"Selected post was split into new thread.\"))\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      this.setState({\n        errors: Object.assign({}, this.state.errors, rejection),\n      })\n      snackbar.error(gettext(\"Form contains errors.\"))\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  onCategoryChange = (ev) => {\n    const categoryId = ev.target.value\n    const newState = {\n      category: categoryId,\n    }\n\n    if (this.acl[categoryId].can_pin_threads < newState.weight) {\n      newState.weight = 0\n    }\n\n    if (!this.acl[categoryId].can_hide_threads) {\n      newState.is_hidden = 0\n    }\n\n    if (!this.acl[categoryId].can_close_threads) {\n      newState.is_closed = false\n    }\n\n    this.setState(newState)\n  }\n\n  getWeightChoices() {\n    const choices = [\n      {\n        value: 0,\n        icon: \"remove\",\n        label: gettext(\"Not pinned\"),\n      },\n      {\n        value: 1,\n        icon: \"bookmark_border\",\n        label: gettext(\"Pinned locally\"),\n      },\n    ]\n\n    if (this.acl[this.state.category].can_pin_threads == 2) {\n      choices.push({\n        value: 2,\n        icon: \"bookmark\",\n        label: gettext(\"Pinned globally\"),\n      })\n    }\n\n    return choices\n  }\n\n  renderWeightField() {\n    if (this.acl[this.state.category].can_pin_threads) {\n      return (\n        <FormGroup\n          label={gettext(\"Thread weight\")}\n          for=\"id_weight\"\n          labelClass=\"col-sm-4\"\n          controlClass=\"col-sm-8\"\n        >\n          <Select\n            id=\"id_weight\"\n            onChange={this.bindInput(\"weight\")}\n            value={this.state.weight}\n            choices={this.getWeightChoices()}\n          />\n        </FormGroup>\n      )\n    } else {\n      return null\n    }\n  }\n\n  renderHiddenField() {\n    if (this.acl[this.state.category].can_hide_threads) {\n      return (\n        <FormGroup\n          label={gettext(\"Hide thread\")}\n          for=\"id_is_hidden\"\n          labelClass=\"col-sm-4\"\n          controlClass=\"col-sm-8\"\n        >\n          <Select\n            id=\"id_is_closed\"\n            onChange={this.bindInput(\"is_hidden\")}\n            value={this.state.is_hidden}\n            choices={this.isHiddenChoices}\n          />\n        </FormGroup>\n      )\n    } else {\n      return null\n    }\n  }\n\n  renderClosedField() {\n    if (this.acl[this.state.category].can_close_threads) {\n      return (\n        <FormGroup\n          label={gettext(\"Close thread\")}\n          for=\"id_is_closed\"\n          labelClass=\"col-sm-4\"\n          controlClass=\"col-sm-8\"\n        >\n          <Select\n            id=\"id_is_closed\"\n            onChange={this.bindInput(\"is_closed\")}\n            value={this.state.is_closed}\n            choices={this.isClosedChoices}\n          />\n        </FormGroup>\n      )\n    } else {\n      return null\n    }\n  }\n\n  render() {\n    return (\n      <Modal className=\"modal-dialog\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"modal-body\">\n            <FormGroup\n              label={gettext(\"Thread title\")}\n              for=\"id_title\"\n              labelClass=\"col-sm-4\"\n              controlClass=\"col-sm-8\"\n              validation={this.state.errors.title}\n            >\n              <input\n                id=\"id_title\"\n                className=\"form-control\"\n                type=\"text\"\n                onChange={this.bindInput(\"title\")}\n                value={this.state.title}\n              />\n            </FormGroup>\n            <div className=\"clearfix\" />\n\n            <FormGroup\n              label={gettext(\"Category\")}\n              for=\"id_category\"\n              labelClass=\"col-sm-4\"\n              controlClass=\"col-sm-8\"\n              validation={this.state.errors.category}\n            >\n              <CategorySelect\n                id=\"id_category\"\n                onChange={this.onCategoryChange}\n                value={this.state.category}\n                choices={this.state.categories}\n              />\n            </FormGroup>\n            <div className=\"clearfix\" />\n\n            {this.renderWeightField()}\n            {this.renderHiddenField()}\n            {this.renderClosedField()}\n          </div>\n          <div className=\"modal-footer\">\n            <Button className=\"btn-primary\" loading={this.state.isLoading}>\n              {gettext(\"Split post\")}\n            </Button>\n          </div>\n        </form>\n      </Modal>\n    )\n  }\n}\n\nexport function Loader() {\n  return (\n    <Modal className=\"modal-dialog\">\n      <ModalLoader />\n    </Modal>\n  )\n}\n\nexport function Error(props) {\n  return (\n    <Modal className=\"modal-dialog modal-message\">\n      <div className=\"message-icon\">\n        <span className=\"material-icon\">info_outline</span>\n      </div>\n      <div className=\"message-body\">\n        <p className=\"lead\">\n          {gettext(\"You can't move this post at the moment.\")}\n        </p>\n        <p>{props.message}</p>\n      </div>\n    </Modal>\n  )\n}\n\nexport function Modal(props) {\n  return (\n    <div className={props.className} role=\"document\">\n      <div className=\"modal-content\">\n        <div className=\"modal-header\">\n          <button\n            aria-label={gettext(\"Close\")}\n            className=\"close\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            <span aria-hidden=\"true\">&times;</span>\n          </button>\n          <h4 className=\"modal-title\">\n            {gettext(\"Split post into new thread\")}\n          </h4>\n        </div>\n        {props.children}\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport modal from \"misago/services/modal\"\nimport posting from \"misago/services/posting\"\nimport * as moderation from \"./actions\"\nimport MoveModal from \"./move\"\nimport PostChangelog from \"misago/components/post-changelog\"\nimport SplitModal from \"./split\"\n\nexport default function (props) {\n  return (\n    <ul className=\"dropdown-menu dropdown-menu-right stick-to-bottom\">\n      <Permalink {...props} />\n      <Edit {...props} />\n      <MarkAsBestAnswer {...props} />\n      <UnmarkMarkBestAnswer {...props} />\n      <PostEdits {...props} />\n      <Approve {...props} />\n      <Move {...props} />\n      <Split {...props} />\n      <Protect {...props} />\n      <Unprotect {...props} />\n      <Hide {...props} />\n      <Unhide {...props} />\n      <Delete {...props} />\n    </ul>\n  )\n}\n\nexport class Permalink extends React.Component {\n  onClick = () => {\n    let permaUrl = window.location.protocol + \"//\"\n    permaUrl += window.location.host\n    permaUrl += this.props.post.url.index\n\n    prompt(gettext(\"Permament link to this post:\"), permaUrl)\n  }\n\n  render() {\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">link</span>\n          {gettext(\"Permament link\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Edit extends React.Component {\n  onClick = () => {\n    posting.open({\n      mode: \"EDIT\",\n\n      config: this.props.post.api.editor,\n      submit: this.props.post.api.index,\n    })\n  }\n\n  render() {\n    if (!this.props.post.acl.can_edit) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">edit</span>\n          {gettext(\"Edit\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class MarkAsBestAnswer extends React.Component {\n  onClick = () => {\n    moderation.markAsBestAnswer(this.props)\n  }\n\n  render() {\n    const { post, thread } = this.props\n\n    if (!thread.acl.can_mark_best_answer) return null\n    if (!post.acl.can_mark_as_best_answer) return null\n    if (post.id === thread.best_answer) return null\n    if (thread.best_answer && !thread.acl.can_change_best_answer) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">check_box</span>\n          {gettext(\"Mark as best answer\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class UnmarkMarkBestAnswer extends React.Component {\n  onClick = () => {\n    moderation.unmarkBestAnswer(this.props)\n  }\n\n  render() {\n    const { post, thread } = this.props\n\n    if (post.id !== thread.best_answer) return null\n    if (!thread.acl.can_unmark_best_answer) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">check_box_outline_blank</span>\n          {gettext(\"Unmark best answer\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class PostEdits extends React.Component {\n  onClick = () => {\n    modal.show(<PostChangelog post={this.props.post} />)\n  }\n\n  render() {\n    const isHidden =\n      this.props.post.is_hidden && !this.props.post.acl.can_see_hidden\n    const isUnedited = this.props.post.edits === 0\n    if (isHidden || isUnedited) return null\n\n    const message = ngettext(\n      \"This post was edited %(edits)s time.\",\n      \"This post was edited %(edits)s times.\",\n      this.props.post.edits\n    )\n\n    const title = interpolate(\n      message,\n      {\n        edits: this.props.post.edits,\n      },\n      true\n    )\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">edit</span>\n          {gettext(\"Changes history\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Approve extends React.Component {\n  onClick = () => {\n    moderation.approve(this.props)\n  }\n\n  render() {\n    if (!this.props.post.acl.can_approve) return null\n    if (!this.props.post.is_unapproved) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">done</span>\n          {gettext(\"Approve\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Move extends React.Component {\n  onClick = () => {\n    modal.show(<MoveModal {...this.props} />)\n  }\n\n  render() {\n    if (!this.props.post.acl.can_move) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">arrow_forward</span>\n          {gettext(\"Move\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Split extends React.Component {\n  onClick = () => {\n    modal.show(<SplitModal {...this.props} />)\n  }\n\n  render() {\n    if (!this.props.post.acl.can_move) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">call_split</span>\n          {gettext(\"Split\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Protect extends React.Component {\n  onClick = () => {\n    moderation.protect(this.props)\n  }\n\n  render() {\n    if (!this.props.post.acl.can_protect) return null\n    if (this.props.post.is_protected) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">lock_outline</span>\n          {gettext(\"Protect\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Unprotect extends React.Component {\n  onClick = () => {\n    moderation.unprotect(this.props)\n  }\n\n  render() {\n    if (!this.props.post.acl.can_protect) return null\n    if (!this.props.post.is_protected) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">lock_open</span>\n          {gettext(\"Remove protection\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Hide extends React.Component {\n  onClick = () => {\n    moderation.hide(this.props)\n  }\n\n  render() {\n    const { post, thread } = this.props\n\n    if (post.id === thread.best_answer) return null\n    if (!post.acl.can_hide) return null\n    if (post.is_hidden) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">visibility_off</span>\n          {gettext(\"Hide\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Unhide extends React.Component {\n  onClick = () => {\n    moderation.unhide(this.props)\n  }\n\n  render() {\n    if (!this.props.post.acl.can_unhide) return null\n    if (!this.props.post.is_hidden) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">visibility</span>\n          {gettext(\"Unhide\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Delete extends React.Component {\n  onClick = () => {\n    moderation.remove(this.props)\n  }\n\n  render() {\n    const { post, thread } = this.props\n\n    if (post.id === thread.best_answer) return null\n    if (!post.acl.can_delete) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">clear</span>\n          {gettext(\"Delete\")}\n        </button>\n      </li>\n    )\n  }\n}\n","import React from \"react\"\nimport Dropdown from \"./dropdown\"\n\nexport default function (props) {\n  return (\n    <div className=\"pull-right dropdown\">\n      <button\n        aria-expanded=\"true\"\n        aria-haspopup=\"true\"\n        className=\"btn btn-default btn-icon dropdown-toggle\"\n        data-toggle=\"dropdown\"\n        type=\"button\"\n      >\n        <span className=\"material-icon\">expand_more</span>\n      </button>\n      <Dropdown {...props} />\n    </div>\n  )\n}\n","import React from \"react\"\nimport * as posts from \"misago/reducers/posts\"\nimport store from \"misago/services/store\"\n\nexport default class extends React.Component {\n  onClick = () => {\n    if (this.props.post.isSelected) {\n      store.dispatch(posts.deselect(this.props.post))\n    } else {\n      store.dispatch(posts.select(this.props.post))\n    }\n  }\n\n  render() {\n    if (\n      !(this.props.thread.acl.can_merge_posts || isVisible(this.props.post.acl))\n    ) {\n      return null\n    }\n\n    return (\n      <div className=\"pull-right\">\n        <button\n          className=\"btn btn-default btn-icon\"\n          onClick={this.onClick}\n          type=\"button\"\n        >\n          <span className=\"material-icon\">\n            {this.props.post.isSelected\n              ? \"check_box\"\n              : \"check_box_outline_blank\"}\n          </span>\n        </button>\n      </div>\n    )\n  }\n}\n\nexport function isVisible(acl) {\n  return (\n    acl.can_approve ||\n    acl.can_hide ||\n    acl.can_protect ||\n    acl.can_unhide ||\n    acl.can_delete ||\n    acl.can_move\n  )\n}\n","import React from \"react\"\nimport Controls from \"./controls\"\nimport Select from \"./select\"\nimport {\n  StatusIcon,\n  getStatusClassName,\n  getStatusDescription,\n} from \"misago/components/user-status\"\nimport PostChangelog from \"misago/components/post-changelog\"\nimport modal from \"misago/services/modal\"\n\nexport default function (props) {\n  return (\n    <div className=\"post-heading\">\n      <UnreadLabel {...props} />\n      <UnreadCompact {...props} />\n      <PostedOn {...props} />\n      <PostedOnCompact {...props} />\n      <PostEdits {...props} />\n      <PostEditsCompacts {...props} />\n      <ProtectedLabel {...props} />\n      <Select {...props} />\n      <Controls {...props} />\n    </div>\n  )\n}\n\nexport function UnreadLabel(props) {\n  if (props.post.is_read) return null\n\n  return (\n    <span className=\"label label-unread hidden-xs\">{gettext(\"New post\")}</span>\n  )\n}\n\nexport function UnreadCompact(props) {\n  if (props.post.is_read) return null\n\n  return (\n    <span className=\"label label-unread visible-xs-inline-block\">\n      {gettext(\"New\")}\n    </span>\n  )\n}\n\nexport function PostedOn(props) {\n  const tooltip = interpolate(\n    gettext(\"posted %(posted_on)s\"),\n    {\n      posted_on: props.post.posted_on.format(\"LL, LT\"),\n    },\n    true\n  )\n\n  return (\n    <a\n      href={props.post.url.index}\n      className=\"btn btn-link posted-on hidden-xs\"\n      title={tooltip}\n    >\n      {props.post.posted_on.fromNow()}\n    </a>\n  )\n}\n\nexport function PostedOnCompact(props) {\n  return (\n    <a\n      href={props.post.url.index}\n      className=\"btn btn-link posted-on visible-xs-inline-block\"\n    >\n      {props.post.posted_on.fromNow()}\n    </a>\n  )\n}\n\nexport class PostEdits extends React.Component {\n  onClick = () => {\n    modal.show(<PostChangelog post={this.props.post} />)\n  }\n\n  render() {\n    const isHidden =\n      this.props.post.is_hidden && !this.props.post.acl.can_see_hidden\n    const isUnedited = this.props.post.edits === 0\n    if (isHidden || isUnedited) return null\n\n    const tooltip = ngettext(\n      \"This post was edited %(edits)s time.\",\n      \"This post was edited %(edits)s times.\",\n      this.props.post.edits\n    )\n\n    const title = interpolate(\n      tooltip,\n      {\n        edits: this.props.post.edits,\n      },\n      true\n    )\n\n    const label = ngettext(\n      \"edited %(edits)s time\",\n      \"edited %(edits)s times\",\n      this.props.post.edits\n    )\n\n    return (\n      <button\n        className=\"btn btn-link btn-see-edits hidden-xs\"\n        onClick={this.onClick}\n        title={title}\n        type=\"button\"\n      >\n        {interpolate(\n          label,\n          {\n            edits: this.props.post.edits,\n          },\n          true\n        )}\n      </button>\n    )\n  }\n}\n\nexport class PostEditsCompacts extends PostEdits {\n  render() {\n    const isHidden =\n      this.props.post.is_hidden && !this.props.post.acl.can_see_hidden\n    const isUnedited = this.props.post.edits === 0\n    if (isHidden || isUnedited) return null\n\n    const label = ngettext(\n      \"%(edits)s edit\",\n      \"%(edits)s edits\",\n      this.props.post.edits\n    )\n\n    return (\n      <button\n        className=\"btn btn-link btn-see-edits visible-xs-inline-block\"\n        onClick={this.onClick}\n        type=\"button\"\n      >\n        {interpolate(\n          label,\n          {\n            edits: this.props.post.edits,\n          },\n          true\n        )}\n      </button>\n    )\n  }\n}\n\nexport function ProtectedLabel(props) {\n  const postAuthor = props.post.poster && props.post.poster.id === props.user.id\n  const hasAcl = props.post.acl.can_protect\n  const isVisible =\n    props.user.id && props.post.is_protected && (postAuthor || hasAcl)\n\n  if (!isVisible) {\n    return null\n  }\n\n  return (\n    <span\n      className=\"label label-protected hidden-xs\"\n      title={gettext(\"This post is protected and may not be edited.\")}\n    >\n      <span className=\"material-icon\">lock_outline</span>\n      {gettext(\"protected\")}\n    </span>\n  )\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport Controls from \"misago/components/posts-list/post/controls\"\nimport Select from \"misago/components/posts-list/post/select\"\n\nexport default function ({ post, thread }) {\n  return (\n    <div className=\"post-side post-side-anonymous\">\n      <Select post={post} thread={thread} />\n      <Controls post={post} thread={thread} />\n      <div className=\"media\">\n        <div className=\"media-left\">\n          <span>\n            <Avatar className=\"poster-avatar\" size={100} />\n          </span>\n        </div>\n        <div className=\"media-body\">\n          <span className=\"media-heading item-title\">{post.poster_name}</span>\n\n          <span className=\"user-title user-title-anonymous\">\n            {gettext(\"Removed user\")}\n          </span>\n        </div>\n      </div>\n    </div>\n  )\n}\n","export default function ({ title, rank }) {\n  return rank.is_tab || !!title || !!rank.title\n}\n","import React from \"react\"\nimport hasVisibleTitle from \"./has-visible-title\"\n\nexport default function ({ poster }) {\n  const message = ngettext(\"%(posts)s post\", \"%(posts)s posts\", poster.posts)\n\n  let className = \"user-postcount\"\n  if (hasVisibleTitle(poster)) {\n    className += \" hidden-xs hidden-sm\"\n  }\n\n  return (\n    <span className={className}>\n      {interpolate(\n        message,\n        {\n          posts: poster.posts,\n        },\n        true\n      )}\n    </span>\n  )\n}\n","import React from \"react\"\nimport UserStatus, { StatusLabel } from \"misago/components/user-status\"\nimport hasVisibleTitle from \"./has-visible-title\"\n\nexport default function ({ poster }) {\n  let className = \"hidden-xs\"\n  if (hasVisibleTitle(poster)) {\n    className += \" hidden-sm\"\n  }\n\n  return (\n    <span className={className}>\n      <UserStatus status={poster.status}>\n        <StatusLabel status={poster.status} user={poster} />\n      </UserStatus>\n    </span>\n  )\n}\n","import React from \"react\"\n\nexport default function ({ rank, title }) {\n  let userTitle = title || rank.title\n  if (!userTitle && rank.is_tab) {\n    userTitle = rank.name\n  }\n\n  if (!userTitle) return null\n\n  let className = \"user-title\"\n  if (rank.css_class) {\n    className += \" user-title-\" + rank.css_class\n  }\n\n  if (rank.is_tab) {\n    return (\n      <div className={className}>\n        <a href={rank.url}>{userTitle}</a>\n      </div>\n    )\n  }\n\n  return <div className={className}>{userTitle}</div>\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport Controls from \"misago/components/posts-list/post/controls\"\nimport Select from \"misago/components/posts-list/post/select\"\nimport UserStatus, { StatusIcon } from \"misago/components/user-status\"\nimport UserPostcount from \"./user-postcount\"\nimport UserStatusLabel from \"./user-status\"\nimport UserTitle from \"./user-title\"\n\nexport default function ({ post, thread }) {\n  const { poster } = post\n\n  return (\n    <div className=\"post-side post-side-registered\">\n      <Select post={post} thread={thread} />\n      <Controls post={post} thread={thread} />\n      <div className=\"media\">\n        <div className=\"media-left\">\n          <a href={poster.url}>\n            <Avatar className=\"poster-avatar\" size={100} user={poster} />\n          </a>\n        </div>\n        <div className=\"media-body\">\n          <div className=\"media-heading\">\n            <a className=\"item-title\" href={poster.url}>\n              {poster.username}\n            </a>\n            <UserStatus status={poster.status}>\n              <StatusIcon status={poster.status} />\n            </UserStatus>\n          </div>\n\n          <UserTitle rank={poster.rank} title={poster.title} />\n\n          <UserStatusLabel poster={poster} />\n          <UserPostcount poster={poster} />\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Anonymous from \"./anonymous\"\nimport Registered from \"./registered\"\n\nexport default function (props) {\n  if (props.post.poster) {\n    return <Registered {...props} />\n  }\n\n  return <Anonymous {...props} />\n}\n","import React from \"react\"\nimport Attachments from \"./attachments\"\nimport Body from \"./body\"\nimport {\n  FlagBestAnswer,\n  FlagHidden,\n  FlagUnapproved,\n  FlagProtected,\n} from \"./flags\"\nimport Footer from \"./footer\"\nimport Header from \"./header\"\nimport PostSide from \"./post-side\"\n\nexport default function (props) {\n  let className = \"post\"\n  if (props.post.isDeleted) {\n    className = \"hide\"\n  } else if (props.post.is_hidden && !props.post.acl.can_see_hidden) {\n    className = \"post post-hidden\"\n  }\n\n  if (props.post.poster && props.post.poster.rank.css_class) {\n    className += \" post-\" + props.post.poster.rank.css_class\n  }\n\n  if (!props.post.is_read) {\n    className += \" post-new\"\n  }\n\n  return (\n    <li id={\"post-\" + props.post.id} className={className}>\n      <div className=\"panel panel-default panel-post\">\n        <div className=\"panel-body\">\n          <PostSide {...props} />\n          <div className=\"panel-content\">\n            <Header {...props} />\n            <FlagBestAnswer {...props} />\n            <FlagUnapproved {...props} />\n            <FlagProtected {...props} />\n            <FlagHidden {...props} />\n            <Body {...props} />\n            <Attachments {...props} />\n            <Footer {...props} />\n          </div>\n        </div>\n      </div>\n    </li>\n  )\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport * as random from \"misago/utils/random\"\n\nconst PostPreview = () => (\n  <li className=\"post\">\n    <div className=\"panel panel-default panel-post\">\n      <div className=\"panel-body\">\n        <div className=\"post-side post-side-registered\">\n          <div className=\"media\">\n            <div className=\"media-left\">\n              <span>\n                <Avatar className=\"poster-avatar\" size=\"100\" />\n              </span>\n            </div>\n            <div className=\"media-body\">\n              <span className=\"media-heading item-title\">\n                <span className=\"ui-preview-text\" style={{ width: \"80px\" }}>\n                  &nbsp;\n                </span>\n              </span>\n              <span className=\"user-title user-title-anonymous\">\n                <span className=\"ui-preview-text\" style={{ width: \"60px\" }}>\n                  &nbsp;\n                </span>\n              </span>\n            </div>\n          </div>\n        </div>\n        <div className=\"panel-content\">\n          <div className=\"post-body\">\n            <article className=\"misago-markup\">\n              <p className=\"ui-preview-text\" style={{ width: \"100%\" }}>\n                &nbsp;\n              </p>\n              <p className=\"ui-preview-text\" style={{ width: \"70%\" }}>\n                &nbsp;\n              </p>\n              <p\n                className=\"ui-preview-text hidden-xs hidden-sm\"\n                style={{ width: \"85%\" }}\n              >\n                &nbsp;\n              </p>\n            </article>\n          </div>\n        </div>\n      </div>\n    </div>\n  </li>\n)\n\nexport default PostPreview\n","import React from \"react\"\nimport Event from \"./event\"\nimport Post from \"./post\"\nimport PostPreview from \"./post/preview\"\n\nexport default function (props) {\n  if (!props.posts.isLoaded) {\n    return (\n      <ul className=\"posts-list ui-preview\">\n        <PostPreview />\n      </ul>\n    )\n  }\n\n  return (\n    <ul className=\"posts-list ui-ready\">\n      {props.posts.results.map((post) => {\n        return <ListItem key={post.id} post={post} {...props} />\n      })}\n    </ul>\n  )\n}\n\nexport function ListItem(props) {\n  if (props.post.is_event) {\n    return <Event {...props} />\n  }\n\n  return <Post {...props} />\n}\n","import React from \"react\"\nimport Avatar from \"./avatar\"\n\nconst ThreadStarterCard = ({ thread }) => (\n  <div className=\"thread-user-card\">\n    <div className=\"thread-user-card-media\">\n      {thread.starter ? (\n        <a href={thread.url.starter}>\n          <Avatar size={40} user={thread.starter} />\n        </a>\n      ) : (\n        <Avatar size={40} />\n      )}\n    </div>\n    <div className=\"thread-user-card-body\">\n      <div className=\"thread-user-card-header\">\n        {thread.starter ? (\n          <a\n            className=\"item-title\"\n            href={thread.url.starter}\n            title={gettext(\"Thread author\")}\n          >\n            {thread.starter.username}\n          </a>\n        ) : (\n          <span className=\"item-title\" title={gettext(\"Thread author\")}>\n            {thread.starter_name}\n          </span>\n        )}\n      </div>\n      <div>\n        <span\n          className=\"text-muted\"\n          title={interpolate(\n            gettext(\"Started on: %(timestamp)s\"),\n            {\n              timestamp: thread.started_on.format(\"LLL\"),\n            },\n            true\n          )}\n        >\n          {thread.started_on.fromNow()}\n        </span>\n      </div>\n    </div>\n  </div>\n)\n\nexport default ThreadStarterCard\n","import React from \"react\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport { getTitleValidators } from \"misago/components/posting/utils/validators\"\nimport * as thread from \"misago/reducers/thread\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      title: props.thread.title,\n\n      validators: {\n        title: getTitleValidators(),\n      },\n      errors: {},\n    }\n  }\n\n  clean() {\n    if (!this.state.title.trim().length) {\n      snackbar.error(gettext(\"You have to enter thread title.\"))\n      return false\n    }\n\n    const errors = this.validate()\n\n    if (errors.title) {\n      snackbar.error(errors.title[0])\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    // freeze thread\n    store.dispatch(thread.busy())\n\n    return ajax.patch(this.props.thread.api.index, [\n      { op: \"replace\", path: \"title\", value: this.state.title },\n    ])\n  }\n\n  handleSuccess = (data) => {\n    this.handleSuccessUnmounted(data)\n\n    // keep form loading\n    this.setState({\n      isLoading: true,\n    })\n\n    modal.hide()\n  }\n\n  handleSuccessUnmounted = (data) => {\n    store.dispatch(thread.release())\n    store.dispatch(thread.update(data))\n  }\n\n  handleError = (rejection) => {\n    store.dispatch(thread.release())\n\n    if (rejection.status === 400) {\n      snackbar.error(rejection.detail[0])\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  onChange = (event) => {\n    this.changeValue(\"title\", event.target.value)\n  }\n\n  render() {\n    return (\n      <div className=\"modal-dialog\" role=\"document\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"modal-content\">\n            <ModalHeader />\n            <div className=\"modal-body\">\n              <FormGroup for=\"id_modal_title\" label={gettext(\"Thread title\")}>\n                <input\n                  className=\"form-control\"\n                  disabled={this.state.isLoading || this.props.thread.isBusy}\n                  id=\"id_modal_title\"\n                  onChange={this.onChange}\n                  value={this.state.title}\n                />\n              </FormGroup>\n            </div>\n            <div className=\"modal-footer\">\n              <button\n                className=\"btn btn-default\"\n                data-dismiss=\"modal\"\n                disabled={this.state.isLoading}\n                type=\"button\"\n              >\n                {gettext(\"Cancel\")}\n              </button>\n              <button\n                className=\"btn btn-primary\"\n                disabled={this.state.isLoading || this.props.thread.isBusy}\n              >\n                {gettext(\"Change title\")}\n              </button>\n            </div>\n          </div>\n        </form>\n      </div>\n    )\n  }\n}\n\nexport function ModalHeader(props) {\n  return (\n    <div className=\"modal-header\">\n      <button\n        aria-label={gettext(\"Close\")}\n        className=\"close\"\n        data-dismiss=\"modal\"\n        type=\"button\"\n      >\n        <span aria-hidden=\"true\">&times;</span>\n      </button>\n      <h4 className=\"modal-title\">{gettext(\"Change title\")}</h4>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport MergeConflict from \"misago/components/merge-conflict\"\nimport * as thread from \"misago/reducers/thread\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      url: \"\",\n\n      validators: {\n        url: [],\n      },\n      errors: {},\n    }\n  }\n\n  clean() {\n    if (!this.state.url.trim().length) {\n      snackbar.error(gettext(\"You have to enter link to the other thread.\"))\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    // freeze thread\n    store.dispatch(thread.busy())\n\n    return ajax.post(this.props.thread.api.merge, {\n      other_thread: this.state.url,\n    })\n  }\n\n  handleSuccess = (success) => {\n    this.handleSuccessUnmounted(success)\n\n    // keep form loading\n    this.setState({\n      isLoading: true,\n    })\n  }\n\n  handleSuccessUnmounted = (success) => {\n    snackbar.success(gettext(\"Thread has been merged with other one.\"))\n    window.location = success.url\n  }\n\n  handleError = (rejection) => {\n    store.dispatch(thread.release())\n\n    if (rejection.status === 400) {\n      if (rejection.best_answers || rejection.polls) {\n        modal.show(\n          <MergeConflict\n            api={this.props.thread.api.merge}\n            bestAnswers={rejection.best_answers}\n            data={{ other_thread: this.state.url }}\n            polls={rejection.polls}\n            onError={this.handleError}\n            onSuccess={this.handleSuccessUnmounted}\n          />\n        )\n      } else if (rejection.best_answer) {\n        snackbar.error(rejection.best_answer[0])\n      } else if (rejection.poll) {\n        snackbar.error(rejection.poll[0])\n      } else {\n        snackbar.error(rejection.detail)\n      }\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  onUrlChange = (event) => {\n    this.changeValue(\"url\", event.target.value)\n  }\n\n  render() {\n    return (\n      <div className=\"modal-dialog\" role=\"document\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"modal-content\">\n            <ModalHeader />\n            <div className=\"modal-body\">\n              <FormGroup\n                for=\"id_url\"\n                label={gettext(\"Link to thread you want to merge with\")}\n                help_text={gettext(\n                  \"Merge will delete current thread and move its contents to the thread specified here.\"\n                )}\n              >\n                <input\n                  className=\"form-control\"\n                  disabled={this.state.isLoading || this.props.thread.isBusy}\n                  id=\"id_url\"\n                  onChange={this.onUrlChange}\n                  value={this.state.url}\n                />\n              </FormGroup>\n            </div>\n            <div className=\"modal-footer\">\n              <button\n                className=\"btn btn-default\"\n                data-dismiss=\"modal\"\n                disabled={this.state.isLoading}\n                type=\"button\"\n              >\n                {gettext(\"Cancel\")}\n              </button>\n              <button\n                className=\"btn btn-primary\"\n                disabled={this.state.isLoading || this.props.thread.isBusy}\n              >\n                {gettext(\"Merge thread\")}\n              </button>\n            </div>\n          </div>\n        </form>\n      </div>\n    )\n  }\n}\n\nexport function ModalHeader(props) {\n  return (\n    <div className=\"modal-header\">\n      <button\n        aria-label={gettext(\"Close\")}\n        className=\"close\"\n        data-dismiss=\"modal\"\n        type=\"button\"\n      >\n        <span aria-hidden=\"true\">&times;</span>\n      </button>\n      <h4 className=\"modal-title\">{gettext(\"Merge thread\")}</h4>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport CategorySelect from \"misago/components/category-select\"\nimport ModalLoader from \"misago/components/modal-loader\"\nimport * as posts from \"misago/reducers/posts\"\nimport * as thread from \"misago/reducers/thread\"\nimport misago from \"misago\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isReady: false,\n      isLoading: false,\n      isError: false,\n\n      category: null,\n      categories: [],\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(misago.get(\"THREAD_EDITOR_API\")).then(\n      (data) => {\n        let category = null\n\n        // hydrate categories, extract posting options\n        const categories = data.map((item) => {\n          // pick first category that allows posting and if it may, override it with initial one\n          if (item.post !== false && !category) {\n            category = item.id\n          }\n\n          return Object.assign(item, {\n            disabled: item.post === false,\n            label: item.name,\n            value: item.id,\n          })\n        })\n\n        this.setState({\n          isReady: true,\n\n          category,\n          categories,\n        })\n      },\n      (rejection) => {\n        this.setState({\n          isError: rejection.detail,\n        })\n      }\n    )\n  }\n\n  send() {\n    // freeze thread\n    store.dispatch(thread.busy())\n\n    return ajax.patch(this.props.thread.api.index, [\n      { op: \"replace\", path: \"category\", value: this.state.category },\n    ])\n  }\n\n  handleSuccess() {\n    // refresh thread and displayed posts\n    ajax\n      .get(this.props.thread.api.posts.index, { page: this.props.posts.page })\n      .then(\n        (data) => {\n          store.dispatch(thread.replace(data))\n          store.dispatch(posts.load(data.post_set))\n          store.dispatch(thread.release())\n\n          snackbar.success(gettext(\"Thread has been moved.\"))\n          modal.hide()\n        },\n        (rejection) => {\n          store.dispatch(thread.release())\n          snackbar.apiError(rejection)\n        }\n      )\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      snackbar.error(rejection.detail[0])\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  onCategoryChange = (event) => {\n    this.changeValue(\"category\", event.target.value)\n  }\n\n  render() {\n    if (this.state.isReady) {\n      return (\n        <div className=\"modal-dialog\" role=\"document\">\n          <form onSubmit={this.handleSubmit}>\n            <div className=\"modal-content\">\n              <ModalHeader />\n              <div className=\"modal-body\">\n                <FormGroup for=\"id_category\" label={gettext(\"New category\")}>\n                  <CategorySelect\n                    choices={this.state.categories}\n                    disabled={this.state.isLoading || this.props.thread.isBusy}\n                    id=\"id_category\"\n                    onChange={this.onCategoryChange}\n                    value={this.state.category}\n                  />\n                </FormGroup>\n              </div>\n              <div className=\"modal-footer\">\n                <button\n                  className=\"btn btn-default\"\n                  data-dismiss=\"modal\"\n                  disabled={this.state.isLoading}\n                  type=\"button\"\n                >\n                  {gettext(\"Cancel\")}\n                </button>\n                <button\n                  className=\"btn btn-primary\"\n                  disabled={this.state.isLoading || this.props.thread.isBusy}\n                >\n                  {gettext(\"Move thread\")}\n                </button>\n              </div>\n            </div>\n          </form>\n        </div>\n      )\n    } else if (this.state.isError) {\n      return <ModalMessage message={this.state.isError} />\n    } else {\n      return <ModalLoading />\n    }\n  }\n}\n\nexport function ModalHeader(props) {\n  return (\n    <div className=\"modal-header\">\n      <button\n        aria-label={gettext(\"Close\")}\n        className=\"close\"\n        data-dismiss=\"modal\"\n        type=\"button\"\n      >\n        <span aria-hidden=\"true\">&times;</span>\n      </button>\n      <h4 className=\"modal-title\">{gettext(\"Move thread\")}</h4>\n    </div>\n  )\n}\n\nexport function ModalLoading(props) {\n  return (\n    <div className=\"modal-dialog\" role=\"document\">\n      <div className=\"modal-content\">\n        <ModalHeader />\n        <ModalLoader />\n      </div>\n    </div>\n  )\n}\n\nexport function ModalMessage(props) {\n  return (\n    <div className=\"modal-dialog modal-message\" role=\"document\">\n      <div className=\"modal-content\">\n        <ModalHeader />\n        <div className=\"message-icon\">\n          <span className=\"material-icon\">info_outline</span>\n        </div>\n        <div className=\"message-body\">\n          <p className=\"lead\">\n            {gettext(\"You can't move this thread at the moment.\")}\n          </p>\n          <p>{props.message}</p>\n          <button\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            {gettext(\"Ok\")}\n          </button>\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport * as thread from \"misago/reducers/thread\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport ThreadChangeTitleModal from \"./ThreadChangeTitleModal\"\nimport MergeModal from \"./merge\"\nimport MoveModal from \"./move\"\n\nexport default class extends React.Component {\n  callApi = (ops, successMessage) => {\n    store.dispatch(thread.busy())\n\n    // by the chance update thread acl too\n    ops.push({ op: \"add\", path: \"acl\", value: true })\n\n    ajax.patch(this.props.thread.api.index, ops).then(\n      (data) => {\n        store.dispatch(thread.update(data))\n        store.dispatch(thread.release())\n        snackbar.success(successMessage)\n      },\n      (rejection) => {\n        store.dispatch(thread.release())\n        if (rejection.status === 400) {\n          snackbar.error(rejection.detail[0])\n        } else {\n          snackbar.apiError(rejection)\n        }\n      }\n    )\n  }\n\n  changeTitle = () => {\n    modal.show(<ThreadChangeTitleModal thread={this.props.thread} />)\n  }\n\n  pinGlobally = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"weight\",\n          value: 2,\n        },\n      ],\n      gettext(\"Thread has been pinned globally.\")\n    )\n  }\n\n  pinLocally = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"weight\",\n          value: 1,\n        },\n      ],\n      gettext(\"Thread has been pinned locally.\")\n    )\n  }\n\n  unpin = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"weight\",\n          value: 0,\n        },\n      ],\n      gettext(\"Thread has been unpinned.\")\n    )\n  }\n\n  approve = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-unapproved\",\n          value: false,\n        },\n      ],\n      gettext(\"Thread has been approved.\")\n    )\n  }\n\n  open = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-closed\",\n          value: false,\n        },\n      ],\n      gettext(\"Thread has been opened.\")\n    )\n  }\n\n  close = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-closed\",\n          value: true,\n        },\n      ],\n      gettext(\"Thread has been closed.\")\n    )\n  }\n\n  unhide = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-hidden\",\n          value: false,\n        },\n      ],\n      gettext(\"Thread has been made visible.\")\n    )\n  }\n\n  hide = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-hidden\",\n          value: true,\n        },\n      ],\n      gettext(\"Thread has been made hidden.\")\n    )\n  }\n\n  move = () => {\n    modal.show(\n      <MoveModal posts={this.props.posts} thread={this.props.thread} />\n    )\n  }\n\n  merge = () => {\n    modal.show(<MergeModal thread={this.props.thread} />)\n  }\n\n  delete = () => {\n    if (\n      !window.confirm(gettext(\"Are you sure you want to delete this thread?\"))\n    ) {\n      return\n    }\n\n    store.dispatch(thread.busy())\n\n    ajax.delete(this.props.thread.api.index).then(\n      (data) => {\n        snackbar.success(gettext(\"Thread has been deleted.\"))\n        window.location = this.props.thread.category.url.index\n      },\n      (rejection) => {\n        store.dispatch(thread.release())\n        snackbar.apiError(rejection)\n      }\n    )\n  }\n\n  render() {\n    const { moderation } = this.props\n\n    return (\n      <ul className=\"dropdown-menu dropdown-menu-right stick-to-bottom\">\n        {!!moderation.edit && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              onClick={this.changeTitle}\n              type=\"button\"\n            >\n              <span className=\"material-icon\">edit</span>\n              {gettext(\"Change title\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.pinGlobally && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              onClick={this.pinGlobally}\n              type=\"button\"\n            >\n              <span className=\"material-icon\">bookmark</span>\n              {gettext(\"Pin globally\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.pinLocally && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              onClick={this.pinLocally}\n              type=\"button\"\n            >\n              <span className=\"material-icon\">bookmark_border</span>\n              {gettext(\"Pin locally\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.unpin && (\n          <li>\n            <button className=\"btn btn-link\" onClick={this.unpin} type=\"button\">\n              <span className=\"material-icon\">panorama_fish_eye</span>\n              {gettext(\"Unpin\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.move && (\n          <li>\n            <button className=\"btn btn-link\" onClick={this.move} type=\"button\">\n              <span className=\"material-icon\">arrow_forward</span>\n              {gettext(\"Move\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.merge && (\n          <li>\n            <button className=\"btn btn-link\" onClick={this.merge} type=\"button\">\n              <span className=\"material-icon\">call_merge</span>\n              {gettext(\"Merge\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.approve && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              onClick={this.approve}\n              type=\"button\"\n            >\n              <span className=\"material-icon\">done</span>\n              {gettext(\"Approve\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.open && (\n          <li>\n            <button className=\"btn btn-link\" onClick={this.open} type=\"button\">\n              <span className=\"material-icon\">lock_open</span>\n              {gettext(\"Open\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.close && (\n          <li>\n            <button className=\"btn btn-link\" onClick={this.close} type=\"button\">\n              <span className=\"material-icon\">lock_outline</span>\n              {gettext(\"Close\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.unhide && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              onClick={this.unhide}\n              type=\"button\"\n            >\n              <span className=\"material-icon\">visibility</span>\n              {gettext(\"Unhide\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.hide && (\n          <li>\n            <button className=\"btn btn-link\" onClick={this.hide} type=\"button\">\n              <span className=\"material-icon\">visibility_off</span>\n              {gettext(\"Hide\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.delete && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              onClick={this.delete}\n              type=\"button\"\n            >\n              <span className=\"material-icon\">clear</span>\n              {gettext(\"Delete\")}\n            </button>\n          </li>\n        )}\n      </ul>\n    )\n  }\n}\n","import ThreadModerationOptions from \"./controls\"\n\nexport default ThreadModerationOptions\n","import React from \"react\"\nimport ThreadModerationOptions from \"./moderation/thread\"\n\nconst ThreadModeration = ({ thread, posts, moderation }) => (\n  <div className=\"dropdown\">\n    <button\n      type=\"button\"\n      className=\"btn btn-default btn-outline btn-icon dropdown-toggle\"\n      title={gettext(\"Thread options\")}\n      data-toggle=\"dropdown\"\n      aria-haspopup=\"true\"\n      aria-expanded=\"false\"\n      disabled={thread.isBusy}\n    >\n      <span className=\"material-icon\">settings</span>\n    </button>\n    <ThreadModerationOptions\n      thread={thread}\n      posts={posts}\n      moderation={moderation}\n    />\n  </div>\n)\n\nexport default ThreadModeration\n","import classnames from \"classnames\"\nimport React from \"react\"\nimport * as actions from \"../../reducers/thread\"\nimport ajax from \"../../services/ajax\"\nimport snackbar from \"../../services/snackbar\"\nimport store from \"../../services/store\"\n\nconst ThreadSubscriptionButton = ({ stickToBottom, thread }) => (\n  <div className=\"dropdown\">\n    <button\n      className=\"btn btn-default btn-outline btn-block\"\n      aria-expanded=\"true\"\n      aria-haspopup=\"true\"\n      data-toggle=\"dropdown\"\n      type=\"button\"\n    >\n      <span className=\"material-icon\">{getIcon(thread.subscription)}</span>\n      {getLabel(thread.subscription)}\n    </button>\n    <ul\n      className={classnames(\"dropdown-menu dropdown-menu-right\", {\n        \"stick-to-bottom\": stickToBottom,\n      })}\n    >\n      <li>\n        <button className=\"btn btn-link\" onClick={() => unsubscribe(thread)}>\n          <span className=\"material-icon\">star_border</span>\n          {gettext(\"Unsubscribe\")}\n        </button>\n      </li>\n      <li>\n        <button className=\"btn btn-link\" onClick={() => alert(thread)}>\n          <span className=\"material-icon\">star_half</span>\n          {gettext(\"Subscribe\")}\n        </button>\n      </li>\n      <li>\n        <button className=\"btn btn-link\" onClick={() => email(thread)}>\n          <span className=\"material-icon\">star</span>\n          {gettext(\"Subscribe with e-mail\")}\n        </button>\n      </li>\n    </ul>\n  </div>\n)\n\nfunction getIcon(subscription) {\n  if (subscription === true) return \"star\"\n  if (subscription === false) return \"star_half\"\n\n  return \"star_border\"\n}\n\nfunction getLabel(subscription) {\n  if (subscription === true) return gettext(\"E-mail\")\n  if (subscription === false) return gettext(\"Enabled\")\n\n  return gettext(\"Disabled\")\n}\n\nfunction alert(thread) {\n  if (thread.subscription !== false) {\n    update(thread, false, \"notify\")\n  }\n}\n\nfunction email(thread) {\n  if (thread.subscription !== true) {\n    update(thread, true, \"email\")\n  }\n}\n\nfunction unsubscribe(thread) {\n  if (thread.subscription !== null) {\n    update(thread, null, \"unsubscribe\")\n  }\n}\n\nfunction update(thread, newState, value) {\n  const oldState = {\n    subscription: thread.subscription,\n  }\n\n  store.dispatch(\n    actions.update({\n      subscription: newState,\n    })\n  )\n\n  ajax\n    .patch(thread.api.index, [\n      { op: \"replace\", path: \"subscription\", value: value },\n    ])\n    .then(\n      (finalState) => {\n        store.dispatch(actions.update(finalState))\n      },\n      (rejection) => {\n        if (rejection.status === 400) {\n          snackbar.error(rejection.detail[0])\n        } else {\n          snackbar.apiError(rejection)\n        }\n\n        store.dispatch(actions.update(oldState))\n      }\n    )\n}\n\nexport default ThreadSubscriptionButton\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst Breadcrumbs = ({ children, className }) => (\n  <ul className={classnames(\"breadcrumbs\", className)}>{children}</ul>\n)\n\nexport default Breadcrumbs\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst BreadcrumbsCategory = ({ category, className }) => (\n  <li className={classnames(\"breadcrumbs-item\", className)}>\n    <a href={category.url.index}>\n      <span\n        className=\"material-icon\"\n        style={{ color: category.color || \"inherit\" }}\n      >\n        label\n      </span>\n      {!!category.short_name && (\n        <span\n          className=\"breadcrumbs-item-name hidden-sm hidden-md hidden-lg\"\n          title={category.name}\n        >\n          {category.short_name}\n        </span>\n      )}\n      {!!category.short_name && (\n        <span className=\"breadcrumbs-item-name hidden-xs\">{category.name}</span>\n      )}\n      {!category.short_name && (\n        <span className=\"breadcrumbs-item-name\">{category.name}</span>\n      )}\n    </a>\n  </li>\n)\n\nexport default BreadcrumbsCategory\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst BreadcrumbsRootCategory = ({ category, className }) => (\n  <li className={classnames(\"breadcrumbs-item\", className)}>\n    <a href={category.url.index}>\n      <span className=\"material-icon\">chevron_right</span>\n      <span className=\"breadcrumbs-item-name\">\n        {category.special_role === \"root_category\"\n          ? gettext(\"Threads\")\n          : gettext(\"Private threads\")}\n      </span>\n    </a>\n  </li>\n)\n\nexport default BreadcrumbsRootCategory\n","import React from \"react\"\nimport {\n  Breadcrumbs,\n  BreadcrumbsCategory,\n  BreadcrumbsRootCategory,\n} from \"../../Breadcrumbs\"\n\nconst ThreadHeaderBreadcrumbs = ({ breadcrumbs }) => (\n  <Breadcrumbs>\n    {breadcrumbs.map((category) =>\n      category.special_role ? (\n        <BreadcrumbsRootCategory key={category.id} category={category} />\n      ) : (\n        <BreadcrumbsCategory key={category.id} category={category} />\n      )\n    )}\n  </Breadcrumbs>\n)\n\nexport default ThreadHeaderBreadcrumbs\n","import ThreadHeader from \"./ThreadHeader\"\n\nexport default ThreadHeader\n","import React from \"react\"\nimport { FlexRow, FlexRowCol, FlexRowSection } from \"../../FlexRow\"\nimport ThreadFlags from \"../../ThreadFlags\"\nimport ThreadReplies from \"../../ThreadReplies\"\nimport ThreadStarterCard from \"../../ThreadStarterCard\"\nimport {\n  PageHeader,\n  PageHeaderBanner,\n  PageHeaderContainer,\n  PageHeaderDetails,\n} from \"../../PageHeader\"\nimport ThreadModeration from \"../ThreadModeration\"\nimport ThreadSubscriptionButton from \"../ThreadSubscriptionButton\"\nimport ThreadHeaderBreadcrumbs from \"./ThreadHeaderBreadcrumbs\"\n\nconst ThreadHeader = ({ styleName, thread, posts, user, moderation }) => (\n  <PageHeaderContainer>\n    <PageHeader styleName={styleName}>\n      <PageHeaderBanner styleName={styleName}>\n        <ThreadHeaderBreadcrumbs breadcrumbs={thread.path} />\n        <h1>{thread.title}</h1>\n      </PageHeaderBanner>\n      <PageHeaderDetails className=\"page-header-thread-details\">\n        <FlexRow>\n          <FlexRowSection auto>\n            <FlexRowCol shrink>\n              <ThreadStarterCard thread={thread} />\n            </FlexRowCol>\n            <FlexRowCol auto />\n            {thread.replies > 0 && (\n              <FlexRowCol shrink>\n                <ThreadReplies thread={thread} />\n              </FlexRowCol>\n            )}\n            {hasFlags(thread) && (\n              <FlexRowCol shrink>\n                <ThreadFlags thread={thread} />\n              </FlexRowCol>\n            )}\n          </FlexRowSection>\n          {user.is_authenticated && (\n            <FlexRowSection>\n              <FlexRowCol>\n                <ThreadSubscriptionButton thread={thread} />\n              </FlexRowCol>\n              {moderation.enabled && (\n                <FlexRowCol shrink>\n                  <ThreadModeration\n                    thread={thread}\n                    posts={posts}\n                    moderation={moderation}\n                  />\n                </FlexRowCol>\n              )}\n            </FlexRowSection>\n          )}\n        </FlexRow>\n      </PageHeaderDetails>\n    </PageHeader>\n  </PageHeaderContainer>\n)\n\nconst hasFlags = (thread) => {\n  return (\n    thread.is_closed ||\n    thread.is_hidden ||\n    thread.is_unapproved ||\n    thread.weight > 0 ||\n    thread.best_answer ||\n    thread.has_poll ||\n    thread.has_unapproved_posts\n  )\n}\n\nexport default ThreadHeader\n","import React from \"react\"\nimport { Link } from \"react-router\"\n\nconst ThreadPagination = ({ baseUrl, posts }) => (\n  <div className=\"misago-pagination\">\n    {posts.isLoaded && posts.first ? (\n      <Link\n        className=\"btn btn-default btn-outline btn-icon\"\n        to={baseUrl}\n        title={gettext(\"Go to first page\")}\n      >\n        <span className=\"material-icon\">first_page</span>\n      </Link>\n    ) : (\n      <button\n        className=\"btn btn-default btn-outline btn-icon\"\n        title={gettext(\"Go to first page\")}\n        type=\"button\"\n        disabled\n      >\n        <span className=\"material-icon\">first_page</span>\n      </button>\n    )}\n    {posts.isLoaded && posts.previous ? (\n      <Link\n        className=\"btn btn-default btn-outline btn-icon\"\n        to={baseUrl + (posts.previous > 1 ? posts.previous + \"/\" : \"\")}\n        title={gettext(\"Go to previous page\")}\n      >\n        <span className=\"material-icon\">chevron_left</span>\n      </Link>\n    ) : (\n      <button\n        className=\"btn btn-default btn-outline btn-icon\"\n        title={gettext(\"Go to previous page\")}\n        type=\"button\"\n        disabled\n      >\n        <span className=\"material-icon\">chevron_left</span>\n      </button>\n    )}\n    {posts.isLoaded && posts.next ? (\n      <Link\n        className=\"btn btn-default btn-outline btn-icon\"\n        to={baseUrl + posts.next + \"/\"}\n        title={gettext(\"Go to next page\")}\n      >\n        <span className=\"material-icon\">chevron_right</span>\n      </Link>\n    ) : (\n      <button\n        className=\"btn btn-default btn-outline btn-icon\"\n        title={gettext(\"Go to next page\")}\n        type=\"button\"\n        disabled\n      >\n        <span className=\"material-icon\">chevron_right</span>\n      </button>\n    )}\n    {posts.isLoaded && posts.last ? (\n      <Link\n        className=\"btn btn-default btn-outline btn-icon\"\n        to={baseUrl + posts.last + \"/\"}\n        title={gettext(\"Go to last page\")}\n      >\n        <span className=\"material-icon\">last_page</span>\n      </Link>\n    ) : (\n      <button\n        className=\"btn btn-default btn-outline btn-icon\"\n        title={gettext(\"Go to last page\")}\n        type=\"button\"\n        disabled\n      >\n        <span className=\"material-icon\">last_page</span>\n      </button>\n    )}\n  </div>\n)\n\nexport default ThreadPagination\n","import React from \"react\"\n\nconst ThreadPostsLeft = ({ posts }) => {\n  if (posts.more) {\n    return (\n      <p>\n        {interpolate(\n          ngettext(\n            \"There is %(more)s more post in this thread.\",\n            \"There are %(more)s more posts in this thread.\",\n            posts.more\n          ),\n          { more: posts.more },\n          true\n        )}\n      </p>\n    )\n  }\n\n  return <p>{gettext(\"There are no more posts in this thread.\")}</p>\n}\n\nexport default ThreadPostsLeft\n","import React from \"react\"\n\nexport default function ({ errors, posts }) {\n  return (\n    <div className=\"modal-dialog\" role=\"document\">\n      <div className=\"modal-content\">\n        <div className=\"modal-header\">\n          <button\n            aria-label={gettext(\"Close\")}\n            className=\"close\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            <span aria-hidden=\"true\">&times;</span>\n          </button>\n          <h4 className=\"modal-title\">{gettext(\"Moderation\")}</h4>\n        </div>\n        <div className=\"modal-body\">\n          <p className=\"lead\">\n            {gettext(\"One or more posts could not be changed:\")}\n          </p>\n\n          <ul className=\"list-unstyled list-errored-items\">\n            {errors.map((post) => {\n              return (\n                <PostErrors\n                  errors={post.detail}\n                  key={post.id}\n                  post={posts[post.id]}\n                />\n              )\n            })}\n          </ul>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport function PostErrors({ errors, post }) {\n  const heading = interpolate(\n    gettext(\"%(username)s on %(posted_on)s\"),\n    {\n      posted_on: post.posted_on.format(\"LL, LT\"),\n      username: post.poster_name,\n    },\n    true\n  )\n\n  return (\n    <li>\n      <h5>{heading}:</h5>\n      {errors.map((error, i) => {\n        return <p key={i}>{error}</p>\n      })}\n    </li>\n  )\n}\n","import moment from \"moment\"\nimport React from \"react\"\nimport * as post from \"misago/reducers/post\"\nimport * as posts from \"misago/reducers/posts\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport ErrorsList from \"./errors-list\"\n\nexport function approve(props) {\n  const { selection } = props\n\n  const ops = [{ op: \"replace\", path: \"is-unapproved\", value: false }]\n\n  const newState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_unapproved: false,\n    }\n  })\n\n  const previousState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_unapproved: post.is_unapproved,\n    }\n  })\n\n  patch(props, ops, newState, previousState)\n}\n\nexport function protect(props) {\n  const { selection } = props\n\n  const ops = [{ op: \"replace\", path: \"is-protected\", value: true }]\n\n  const newState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_protected: true,\n    }\n  })\n\n  const previousState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_protected: post.is_protected,\n    }\n  })\n\n  patch(props, ops, newState, previousState)\n}\n\nexport function unprotect(props) {\n  const { selection } = props\n\n  const ops = [{ op: \"replace\", path: \"is-protected\", value: false }]\n\n  const newState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_protected: false,\n    }\n  })\n\n  const previousState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_protected: post.is_protected,\n    }\n  })\n\n  patch(props, ops, newState, previousState)\n}\n\nexport function hide(props) {\n  const { selection } = props\n\n  const ops = [{ op: \"replace\", path: \"is-hidden\", value: true }]\n\n  const newState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_hidden: true,\n      hidden_on: moment(),\n      hidden_by_name: props.user.username,\n      url: Object.assign(post.url, {\n        hidden_by: props.user.url,\n      }),\n    }\n  })\n\n  const previousState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_hidden: post.is_hidden,\n      hidden_on: post.hidden_on,\n      hidden_by_name: post.hidden_by_name,\n      url: post.url,\n    }\n  })\n\n  patch(props, ops, newState, previousState)\n}\n\nexport function unhide(props) {\n  const { selection } = props\n\n  const ops = [{ op: \"replace\", path: \"is-hidden\", value: false }]\n\n  const newState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_hidden: false,\n      hidden_on: moment(),\n      hidden_by_name: props.user.username,\n      url: Object.assign(post.url, {\n        hidden_by: props.user.url,\n      }),\n    }\n  })\n\n  const previousState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_hidden: post.is_hidden,\n      hidden_on: post.hidden_on,\n      hidden_by_name: post.hidden_by_name,\n      url: post.url,\n    }\n  })\n\n  patch(props, ops, newState, previousState)\n}\n\nexport function patch(props, ops, newState, previousState) {\n  const { selection, thread } = props\n\n  // patch selected items\n  newState.forEach((item) => {\n    post.patch(item, item)\n  })\n\n  // deselect all the things\n  store.dispatch(posts.deselectAll())\n\n  // call ajax\n  const data = {\n    ops,\n\n    ids: selection.map((post) => {\n      return post.id\n    }),\n  }\n\n  ajax.patch(thread.api.posts.index, data).then(\n    (data) => {\n      data.forEach((item) => {\n        store.dispatch(post.patch(item, item))\n      })\n    },\n    (rejection) => {\n      if (rejection.status !== 400) {\n        // rollback all\n        previousState.forEach((item) => {\n          store.dispatch(post.patch(item, item))\n        })\n        return snackbar.apiError(rejection)\n      }\n\n      let errors = []\n      let rollback = []\n\n      rejection.forEach((item) => {\n        if (item.detail) {\n          errors.push(item)\n          rollback.push(item.id)\n        } else {\n          store.dispatch(post.patch(item, item))\n        }\n\n        previousState.forEach((item) => {\n          if (rollback.indexOf(item) !== -1) {\n            store.dispatch(post.patch(item, item))\n          }\n        })\n      })\n\n      let posts = {}\n      selection.forEach((item) => {\n        posts[item.id] = item\n      })\n\n      modal.show(<ErrorsList errors={errors} posts={posts} />)\n    }\n  )\n}\n\nexport function merge(props) {\n  let confirmed = window.confirm(\n    gettext(\n      \"Are you sure you want to merge selected posts? This action is not reversible!\"\n    )\n  )\n  if (!confirmed) {\n    return\n  }\n\n  props.selection.slice(1).map((selection) => {\n    store.dispatch(\n      post.patch(selection, {\n        isDeleted: true,\n      })\n    )\n  })\n\n  ajax\n    .post(props.thread.api.posts.merge, {\n      posts: props.selection.map((post) => post.id),\n    })\n    .then(\n      (data) => {\n        store.dispatch(post.patch(data, post.hydrate(data)))\n      },\n      (rejection) => {\n        if (rejection.status === 400) {\n          snackbar.error(rejection.detail)\n        } else {\n          snackbar.apiError(rejection)\n        }\n\n        props.selection.slice(1).map((selection) => {\n          store.dispatch(\n            post.patch(selection, {\n              isDeleted: false,\n            })\n          )\n        })\n      }\n    )\n\n  store.dispatch(posts.deselectAll())\n}\n\nexport function remove(props) {\n  let confirmed = window.confirm(\n    gettext(\n      \"Are you sure you want to delete selected posts? This action is not reversible!\"\n    )\n  )\n  if (!confirmed) {\n    return\n  }\n\n  props.selection.map((selection) => {\n    store.dispatch(\n      post.patch(selection, {\n        isDeleted: true,\n      })\n    )\n  })\n\n  const ids = props.selection.map((post) => {\n    return post.id\n  })\n\n  ajax.delete(props.thread.api.posts.index, ids).then(\n    () => {\n      return\n    },\n    (rejection) => {\n      if (rejection.status === 400) {\n        snackbar.error(rejection.detail)\n      } else {\n        snackbar.apiError(rejection)\n      }\n\n      props.selection.map((selection) => {\n        store.dispatch(\n          post.patch(selection, {\n            isDeleted: false,\n          })\n        )\n      })\n    }\n  )\n\n  store.dispatch(posts.deselectAll())\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport * as post from \"misago/reducers/post\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      url: \"\",\n\n      validators: {\n        url: [],\n      },\n      errors: {},\n    }\n  }\n\n  clean() {\n    if (!this.state.url.trim().length) {\n      snackbar.error(gettext(\"You have to enter link to the other thread.\"))\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.post(this.props.thread.api.posts.move, {\n      new_thread: this.state.url,\n      posts: this.props.selection.map((post) => post.id),\n    })\n  }\n\n  handleSuccess(success) {\n    this.props.selection.forEach((selection) => {\n      store.dispatch(\n        post.patch(selection, {\n          isDeleted: true,\n        })\n      )\n    })\n\n    modal.hide()\n\n    snackbar.success(gettext(\"Selected posts were moved to the other thread.\"))\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      snackbar.error(rejection.detail)\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  onUrlChange = (event) => {\n    this.changeValue(\"url\", event.target.value)\n  }\n\n  render() {\n    return (\n      <div className=\"modal-dialog\" role=\"document\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"modal-content\">\n            <ModalHeader />\n            <div className=\"modal-body\">\n              <FormGroup\n                for=\"id_url\"\n                label={gettext(\"Link to thread you want to move posts to\")}\n              >\n                <input\n                  className=\"form-control\"\n                  disabled={this.state.isLoading}\n                  id=\"id_url\"\n                  onChange={this.onUrlChange}\n                  value={this.state.url}\n                />\n              </FormGroup>\n            </div>\n            <div className=\"modal-footer\">\n              <button\n                className=\"btn btn-default\"\n                data-dismiss=\"modal\"\n                disabled={this.state.isLoading}\n                type=\"button\"\n              >\n                {gettext(\"Cancel\")}\n              </button>\n              <button\n                className=\"btn btn-primary\"\n                disabled={this.state.isLoading}\n              >\n                {gettext(\"Move posts\")}\n              </button>\n            </div>\n          </div>\n        </form>\n      </div>\n    )\n  }\n}\n\nexport function ModalHeader(props) {\n  return (\n    <div className=\"modal-header\">\n      <button\n        aria-label={gettext(\"Close\")}\n        className=\"close\"\n        data-dismiss=\"modal\"\n        type=\"button\"\n      >\n        <span aria-hidden=\"true\">&times;</span>\n      </button>\n      <h4 className=\"modal-title\">{gettext(\"Move posts\")}</h4>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport CategorySelect from \"misago/components/category-select\"\nimport ModalLoader from \"misago/components/modal-loader\"\nimport Select from \"misago/components/select\"\nimport * as post from \"misago/reducers/post\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport * as validators from \"misago/utils/validators\"\nimport ErrorsModal from \"./errors-list\"\n\nexport default function (props) {\n  return <PostingConfig {...props} Form={ModerationForm} />\n}\n\nexport class PostingConfig extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoaded: false,\n      isError: false,\n\n      categories: [],\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(misago.get(\"THREAD_EDITOR_API\")).then(\n      (data) => {\n        // hydrate categories, extract posting options\n        const categories = data.map((item) => {\n          return Object.assign(item, {\n            disabled: item.post === false,\n            label: item.name,\n            value: item.id,\n            post: item.post,\n          })\n        })\n\n        this.setState({\n          isLoaded: true,\n          categories,\n        })\n      },\n      (rejection) => {\n        this.setState({\n          isError: rejection.detail,\n        })\n      }\n    )\n  }\n\n  render() {\n    if (this.state.isError) {\n      return <Error message={this.state.isError} />\n    } else if (this.state.isLoaded) {\n      return (\n        <ModerationForm {...this.props} categories={this.state.categories} />\n      )\n    } else {\n      return <Loader />\n    }\n  }\n}\n\nexport class ModerationForm extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      title: \"\",\n      category: null,\n      categories: props.categories,\n      weight: 0,\n      is_hidden: 0,\n      is_closed: false,\n\n      validators: {\n        title: [validators.required()],\n      },\n\n      errors: {},\n    }\n\n    this.isHiddenChoices = [\n      {\n        value: 0,\n        icon: \"visibility\",\n        label: gettext(\"No\"),\n      },\n      {\n        value: 1,\n        icon: \"visibility_off\",\n        label: gettext(\"Yes\"),\n      },\n    ]\n\n    this.isClosedChoices = [\n      {\n        value: false,\n        icon: \"lock_outline\",\n        label: gettext(\"No\"),\n      },\n      {\n        value: true,\n        icon: \"lock\",\n        label: gettext(\"Yes\"),\n      },\n    ]\n\n    this.acl = {}\n    this.props.categories.forEach((category) => {\n      if (category.post) {\n        if (!this.state.category) {\n          this.state.category = category.id\n        }\n\n        this.acl[category.id] = {\n          can_pin_threads: category.post.pin,\n          can_close_threads: category.post.close,\n          can_hide_threads: category.post.hide,\n        }\n      }\n    })\n  }\n\n  clean() {\n    if (this.isValid()) {\n      return true\n    } else {\n      snackbar.error(gettext(\"Form contains errors.\"))\n      this.setState({\n        errors: this.validate(),\n      })\n      return false\n    }\n  }\n\n  send() {\n    return ajax.post(this.props.thread.api.posts.split, {\n      title: this.state.title,\n      category: this.state.category,\n      weight: this.state.weight,\n      is_hidden: this.state.is_hidden,\n      is_closed: this.state.is_closed,\n      posts: this.props.selection.map((post) => post.id),\n    })\n  }\n\n  handleSuccess(apiResponse) {\n    this.props.selection.forEach((selection) => {\n      store.dispatch(\n        post.patch(selection, {\n          isDeleted: true,\n        })\n      )\n    })\n\n    modal.hide()\n\n    snackbar.success(gettext(\"Selected posts were split into new thread.\"))\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      this.setState({\n        errors: Object.assign({}, this.state.errors, rejection),\n      })\n      snackbar.error(gettext(\"Form contains errors.\"))\n    } else if (rejection.status === 403 && Array.isArray(rejection)) {\n      modal.show(<ErrorsModal errors={rejection} />)\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  onCategoryChange = (ev) => {\n    const categoryId = ev.target.value\n    const newState = {\n      category: categoryId,\n    }\n\n    if (this.acl[categoryId].can_pin_threads < newState.weight) {\n      newState.weight = 0\n    }\n\n    if (!this.acl[categoryId].can_hide_threads) {\n      newState.is_hidden = 0\n    }\n\n    if (!this.acl[categoryId].can_close_threads) {\n      newState.is_closed = false\n    }\n\n    this.setState(newState)\n  }\n\n  getWeightChoices() {\n    const choices = [\n      {\n        value: 0,\n        icon: \"remove\",\n        label: gettext(\"Not pinned\"),\n      },\n      {\n        value: 1,\n        icon: \"bookmark_border\",\n        label: gettext(\"Pinned locally\"),\n      },\n    ]\n\n    if (this.acl[this.state.category].can_pin_threads == 2) {\n      choices.push({\n        value: 2,\n        icon: \"bookmark\",\n        label: gettext(\"Pinned globally\"),\n      })\n    }\n\n    return choices\n  }\n\n  renderWeightField() {\n    if (this.acl[this.state.category].can_pin_threads) {\n      return (\n        <FormGroup\n          label={gettext(\"Thread weight\")}\n          for=\"id_weight\"\n          labelClass=\"col-sm-4\"\n          controlClass=\"col-sm-8\"\n        >\n          <Select\n            id=\"id_weight\"\n            onChange={this.bindInput(\"weight\")}\n            value={this.state.weight}\n            choices={this.getWeightChoices()}\n          />\n        </FormGroup>\n      )\n    } else {\n      return null\n    }\n  }\n\n  renderHiddenField() {\n    if (this.acl[this.state.category].can_hide_threads) {\n      return (\n        <FormGroup\n          label={gettext(\"Hide thread\")}\n          for=\"id_is_hidden\"\n          labelClass=\"col-sm-4\"\n          controlClass=\"col-sm-8\"\n        >\n          <Select\n            id=\"id_is_closed\"\n            onChange={this.bindInput(\"is_hidden\")}\n            value={this.state.is_hidden}\n            choices={this.isHiddenChoices}\n          />\n        </FormGroup>\n      )\n    } else {\n      return null\n    }\n  }\n\n  renderClosedField() {\n    if (this.acl[this.state.category].can_close_threads) {\n      return (\n        <FormGroup\n          label={gettext(\"Close thread\")}\n          for=\"id_is_closed\"\n          labelClass=\"col-sm-4\"\n          controlClass=\"col-sm-8\"\n        >\n          <Select\n            id=\"id_is_closed\"\n            onChange={this.bindInput(\"is_closed\")}\n            value={this.state.is_closed}\n            choices={this.isClosedChoices}\n          />\n        </FormGroup>\n      )\n    } else {\n      return null\n    }\n  }\n\n  render() {\n    return (\n      <Modal className=\"modal-dialog\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"modal-body\">\n            <FormGroup\n              label={gettext(\"Thread title\")}\n              for=\"id_title\"\n              labelClass=\"col-sm-4\"\n              controlClass=\"col-sm-8\"\n              validation={this.state.errors.title}\n            >\n              <input\n                id=\"id_title\"\n                className=\"form-control\"\n                type=\"text\"\n                onChange={this.bindInput(\"title\")}\n                value={this.state.title}\n              />\n            </FormGroup>\n            <div className=\"clearfix\" />\n\n            <FormGroup\n              label={gettext(\"Category\")}\n              for=\"id_category\"\n              labelClass=\"col-sm-4\"\n              controlClass=\"col-sm-8\"\n              validation={this.state.errors.category}\n            >\n              <CategorySelect\n                id=\"id_category\"\n                onChange={this.onCategoryChange}\n                value={this.state.category}\n                choices={this.state.categories}\n              />\n            </FormGroup>\n            <div className=\"clearfix\" />\n\n            {this.renderWeightField()}\n            {this.renderHiddenField()}\n            {this.renderClosedField()}\n          </div>\n          <div className=\"modal-footer\">\n            <button\n              className=\"btn btn-default\"\n              data-dismiss=\"modal\"\n              disabled={this.state.isLoading}\n              type=\"button\"\n            >\n              {gettext(\"Cancel\")}\n            </button>\n            <Button className=\"btn-primary\" loading={this.state.isLoading}>\n              {gettext(\"Split posts\")}\n            </Button>\n          </div>\n        </form>\n      </Modal>\n    )\n  }\n}\n\nexport function Loader() {\n  return (\n    <Modal className=\"modal-dialog\">\n      <ModalLoader />\n    </Modal>\n  )\n}\n\nexport function Error(props) {\n  return (\n    <Modal className=\"modal-dialog modal-message\">\n      <div className=\"message-icon\">\n        <span className=\"material-icon\">info_outline</span>\n      </div>\n      <div className=\"message-body\">\n        <p className=\"lead\">\n          {gettext(\"You can't move selected posts at the moment.\")}\n        </p>\n        <p>{props.message}</p>\n        <button className=\"btn btn-default\" data-dismiss=\"modal\" type=\"button\">\n          {gettext(\"Ok\")}\n        </button>\n      </div>\n    </Modal>\n  )\n}\n\nexport function Modal(props) {\n  return (\n    <div className={props.className} role=\"document\">\n      <div className=\"modal-content\">\n        <div className=\"modal-header\">\n          <button\n            aria-label={gettext(\"Close\")}\n            className=\"close\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            <span aria-hidden=\"true\">&times;</span>\n          </button>\n          <h4 className=\"modal-title\">\n            {gettext(\"Split posts into new thread\")}\n          </h4>\n        </div>\n        {props.children}\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport modal from \"misago/services/modal\"\nimport * as moderation from \"./actions\"\nimport MoveModal from \"./move\"\nimport SplitModal from \"./split\"\n\nexport default function (props) {\n  return (\n    <ul className=\"dropdown-menu dropdown-menu-right stick-to-bottom\">\n      <Approve {...props} />\n      <Merge {...props} />\n      <Move {...props} />\n      <Split {...props} />\n      <Protect {...props} />\n      <Unprotect {...props} />\n      <Unhide {...props} />\n      <Hide {...props} />\n      <Delete {...props} />\n    </ul>\n  )\n}\n\nexport class Approve extends React.Component {\n  onClick = () => {\n    moderation.approve(this.props)\n  }\n\n  render() {\n    const isVisible = this.props.selection.find((post) => {\n      return post.acl.can_approve && post.is_unapproved\n    })\n\n    if (!isVisible) return null\n\n    return (\n      <li>\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          <span className=\"material-icon\">done</span>\n          {gettext(\"Approve\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Merge extends React.Component {\n  onClick = () => {\n    moderation.merge(this.props)\n  }\n\n  render() {\n    const isVisible =\n      this.props.selection.length > 1 &&\n      this.props.selection.find((post) => {\n        return post.acl.can_merge\n      })\n\n    if (!isVisible) return null\n\n    return (\n      <li>\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          <span className=\"material-icon\">call_merge</span>\n          {gettext(\"Merge\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Move extends React.Component {\n  onClick = () => {\n    modal.show(<MoveModal {...this.props} />)\n  }\n\n  render() {\n    const isVisible = this.props.selection.find((post) => {\n      return post.acl.can_move\n    })\n\n    if (!isVisible) return null\n\n    return (\n      <li>\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          <span className=\"material-icon\">arrow_forward</span>\n          {gettext(\"Move\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Split extends React.Component {\n  onClick = () => {\n    modal.show(<SplitModal {...this.props} />)\n  }\n\n  render() {\n    const isVisible = this.props.selection.find((post) => {\n      return post.acl.can_move\n    })\n\n    if (!isVisible) return null\n\n    return (\n      <li>\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          <span className=\"material-icon\">call_split</span>\n          {gettext(\"Split\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Protect extends React.Component {\n  onClick = () => {\n    moderation.protect(this.props)\n  }\n\n  render() {\n    const isVisible = this.props.selection.find((post) => {\n      return !post.is_protected && post.acl.can_protect\n    })\n\n    if (!isVisible) return null\n\n    return (\n      <li>\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          <span className=\"material-icon\">lock_outline</span>\n          {gettext(\"Protect\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Unprotect extends React.Component {\n  onClick = () => {\n    moderation.unprotect(this.props)\n  }\n\n  render() {\n    const isVisible = this.props.selection.find((post) => {\n      return post.is_protected && post.acl.can_protect\n    })\n\n    if (!isVisible) return null\n\n    return (\n      <li>\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          <span className=\"material-icon\">lock_open</span>\n          {gettext(\"Unprotect\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Hide extends React.Component {\n  onClick = () => {\n    moderation.hide(this.props)\n  }\n\n  render() {\n    const isVisible = this.props.selection.find((post) => {\n      return post.acl.can_hide && !post.is_hidden\n    })\n\n    if (!isVisible) return null\n\n    return (\n      <li>\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          <span className=\"material-icon\">visibility_off</span>\n          {gettext(\"Hide\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Unhide extends React.Component {\n  onClick = () => {\n    moderation.unhide(this.props)\n  }\n\n  render() {\n    const isVisible = this.props.selection.find((post) => {\n      return post.acl.can_unhide && post.is_hidden\n    })\n\n    if (!isVisible) return null\n\n    return (\n      <li>\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          <span className=\"material-icon\">visibility</span>\n          {gettext(\"Unhide\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Delete extends React.Component {\n  onClick = () => {\n    moderation.remove(this.props)\n  }\n\n  render() {\n    const isVisible = this.props.selection.find((post) => {\n      return post.acl.can_delete\n    })\n\n    if (!isVisible) return null\n\n    return (\n      <li>\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          <span className=\"material-icon\">clear</span>\n          {gettext(\"Delete\")}\n        </button>\n      </li>\n    )\n  }\n}\n","import React from \"react\"\nimport { ThreadPostsModerationOptions } from \"./moderation/posts\"\n\nconst ThreadPostsModeration = ({ thread, user, selection, dropup }) => (\n  <div className={dropup ? \"dropup\" : \"dropdown\"}>\n    <button\n      type=\"button\"\n      className=\"btn btn-default btn-outline btn-icon dropdown-toggle\"\n      title={gettext(\"Posts options\")}\n      data-toggle=\"dropdown\"\n      aria-haspopup=\"true\"\n      aria-expanded=\"false\"\n      disabled={selection.length === 0}\n    >\n      <span className=\"material-icon\">settings</span>\n    </button>\n    <ThreadPostsModerationOptions\n      thread={thread}\n      user={user}\n      selection={selection}\n    />\n  </div>\n)\n\nexport default ThreadPostsModeration\n","import React from \"react\"\n\nconst ThreadReplyButton = ({ onClick }) => (\n  <button\n    className=\"btn btn-primary btn-outline btn-block\"\n    type=\"button\"\n    onClick={onClick}\n  >\n    <span className=\"material-icon\">chat</span>\n    {gettext(\"Reply\")}\n  </button>\n)\n\nexport default ThreadReplyButton\n","import React from \"react\"\nimport { Toolbar, ToolbarItem, ToolbarSection, ToolbarSpacer } from \"../Toolbar\"\nimport ThreadPagination from \"./ThreadPagination\"\nimport ThreadPostsLeft from \"./ThreadPostsLeft\"\nimport ThreadPostsModeration from \"./ThreadPostsModeration\"\nimport ThreadReplyButton from \"./ThreadReplyButton\"\nimport ThreadSubscriptionButton from \"./ThreadSubscriptionButton\"\n\nconst ThreadToolbarBottom = ({\n  thread,\n  posts,\n  user,\n  selection,\n  moderation,\n  onReply,\n}) => (\n  <Toolbar>\n    <ToolbarSection>\n      <ToolbarItem>\n        <ThreadPagination baseUrl={thread.url.index} posts={posts} />\n      </ToolbarItem>\n      <ToolbarItem className=\"hidden-sm hidden-md hidden-lg\" shrink>\n        <ThreadPostsModeration\n          thread={thread}\n          user={user}\n          selection={selection}\n          dropup\n        />\n      </ToolbarItem>\n    </ToolbarSection>\n    <ToolbarSection className=\"hidden-xs hidden-sm\" auto>\n      <ToolbarItem>\n        <ThreadPostsLeft posts={posts} />\n      </ToolbarItem>\n    </ToolbarSection>\n    <ToolbarSpacer className=\"hidden-md hidden-lg\" />\n    {user.is_authenticated && (\n      <ToolbarSection>\n        <ToolbarItem>\n          <ThreadSubscriptionButton thread={thread} />\n        </ToolbarItem>\n        {thread.acl.can_reply && (\n          <ToolbarItem>\n            <ThreadReplyButton onClick={onReply} />\n          </ToolbarItem>\n        )}\n        {moderation.enabled && (\n          <ToolbarItem className=\"hidden-xs\" shrink>\n            <ThreadPostsModeration\n              thread={thread}\n              user={user}\n              selection={selection}\n              dropup\n            />\n          </ToolbarItem>\n        )}\n      </ToolbarSection>\n    )}\n  </Toolbar>\n)\n\nexport default ThreadToolbarBottom\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst ThreadPollButton = ({ compact, onClick }) => (\n  <button\n    className={classnames(\"btn btn-default btn-outline\", {\n      \"btn-block\": !compact,\n      \"btn-icon\": compact,\n    })}\n    type=\"button\"\n    title={compact ? gettext(\"Add poll\") : null}\n    onClick={onClick}\n  >\n    <span className=\"material-icon\">poll</span>\n    {!compact && gettext(\"Add poll\")}\n  </button>\n)\n\nexport default ThreadPollButton\n","import React from \"react\"\n\nconst ThreadShortcutsButton = ({ user, thread }) => (\n  <div className=\"dropdown\">\n    <button\n      className=\"btn btn-default btn-outline btn-icon\"\n      title={gettext(\"Shortcuts\")}\n      aria-expanded=\"true\"\n      aria-haspopup=\"true\"\n      data-toggle=\"dropdown\"\n      type=\"button\"\n    >\n      <span className=\"material-icon\">bookmark</span>\n    </button>\n    <ul className=\"dropdown-menu\">\n      {user.is_authenticated && thread.is_new && (\n        <li>\n          <a className=\"btn btn-link\" href={thread.url.new_post}>\n            <span className=\"material-icon\">comment</span>\n            {gettext(\"Go to new post\")}\n          </a>\n        </li>\n      )}\n      {thread.best_answer && (\n        <li>\n          <a className=\"btn btn-link\" href={thread.url.best_answer}>\n            <span className=\"material-icon\">check_circle</span>\n            {gettext(\"Go to best answer\")}\n          </a>\n        </li>\n      )}\n      {thread.has_unapproved_posts && thread.acl.can_approve && (\n        <li>\n          <a className=\"btn btn-link\" href={thread.url.unapproved_post}>\n            <span className=\"material-icon\">visibility</span>\n            {gettext(\"Go to unapproved post\")}\n          </a>\n        </li>\n      )}\n      <li>\n        <a className=\"btn btn-link\" href={thread.url.last_post}>\n          <span className=\"material-icon\">reply</span>\n          {gettext(\"Go to last post\")}\n        </a>\n      </li>\n    </ul>\n  </div>\n)\n\nexport default ThreadShortcutsButton\n","import React from \"react\"\nimport { Toolbar, ToolbarItem, ToolbarSection, ToolbarSpacer } from \"../Toolbar\"\nimport ThreadPagination from \"./ThreadPagination\"\nimport ThreadPollButton from \"./ThreadPollButton\"\nimport ThreadPostsModeration from \"./ThreadPostsModeration\"\nimport ThreadReplyButton from \"./ThreadReplyButton\"\nimport ThreadShortcutsButton from \"./ThreadShortcutsButton\"\n\nconst ThreadToolbarTop = ({\n  thread,\n  posts,\n  user,\n  selection,\n  moderation,\n  onPoll,\n  onReply,\n}) => (\n  <Toolbar>\n    <ToolbarSection className=\"hidden-xs\">\n      <ToolbarItem>\n        <ThreadShortcutsButton thread={thread} user={user} />\n      </ToolbarItem>\n      <ToolbarItem className=\"hidden-xs hidden-sm\">\n        <ThreadPagination baseUrl={thread.url.index} posts={posts} />\n      </ToolbarItem>\n    </ToolbarSection>\n    <ToolbarSpacer />\n    {thread.acl.can_start_poll && !thread.poll && (\n      <ToolbarSection className=\"hidden-xs\">\n        <ToolbarItem>\n          <ThreadPollButton onClick={onPoll} />\n        </ToolbarItem>\n      </ToolbarSection>\n    )}\n    {thread.acl.can_reply ? (\n      <ToolbarSection>\n        <ToolbarItem className=\"hidden-sm hidden-md hidden-lg\" shrink>\n          <ThreadShortcutsButton thread={thread} user={user} />\n        </ToolbarItem>\n        <ToolbarItem>\n          <ThreadReplyButton onClick={onReply} />\n        </ToolbarItem>\n        {thread.acl.can_start_poll && !thread.poll && (\n          <ToolbarItem className=\"hidden-sm hidden-md hidden-lg\" shrink>\n            <ThreadPollButton onClick={onPoll} compact />\n          </ToolbarItem>\n        )}\n        {moderation.enabled && (\n          <ToolbarItem className=\"hidden-xs\" shrink>\n            <ThreadPostsModeration\n              thread={thread}\n              user={user}\n              selection={selection}\n            />\n          </ToolbarItem>\n        )}\n      </ToolbarSection>\n    ) : (\n      <ToolbarSection>\n        <ToolbarItem className=\"hidden-sm hidden-md hidden-lg\" shrink>\n          <ThreadShortcutsButton thread={thread} user={user} />\n        </ToolbarItem>\n        {thread.acl.can_start_poll && !thread.poll && (\n          <ToolbarItem>\n            <ThreadPollButton onClick={onPoll} />\n          </ToolbarItem>\n        )}\n        {moderation.enabled && (\n          <ToolbarItem shrink>\n            <ThreadPostsModeration\n              thread={thread}\n              user={user}\n              selection={selection}\n            />\n          </ToolbarItem>\n        )}\n      </ToolbarSection>\n    )}\n  </Toolbar>\n)\n\nexport default ThreadToolbarTop\n","import React from \"react\"\nimport Participants from \"misago/components/participants\"\nimport { Poll } from \"misago/components/poll\"\nimport PostsList from \"misago/components/posts-list\"\nimport * as participants from \"misago/reducers/participants\"\nimport * as poll from \"misago/reducers/poll\"\nimport * as posts from \"misago/reducers/posts\"\nimport * as thread from \"misago/reducers/thread\"\nimport ajax from \"misago/services/ajax\"\nimport polls from \"misago/services/polls\"\nimport snackbar from \"misago/services/snackbar\"\nimport posting from \"misago/services/posting\"\nimport store from \"misago/services/store\"\nimport title from \"misago/services/page-title\"\nimport PageContainer from \"../PageContainer\"\nimport ThreadHeader from \"./ThreadHeader\"\nimport ThreadToolbarBottom from \"./ThreadToolbarBottom\"\nimport ThreadToolbarTop from \"./ThreadToolbarTop\"\n\nexport default class extends React.Component {\n  componentDidMount() {\n    if (this.shouldFetchData()) {\n      this.fetchData()\n      this.setPageTitle()\n    }\n\n    this.startPollingApi()\n  }\n\n  componentDidUpdate() {\n    if (this.shouldFetchData()) {\n      this.fetchData()\n      this.startPollingApi()\n      this.setPageTitle()\n    }\n  }\n\n  componentWillUnmount() {\n    this.stopPollingApi()\n  }\n\n  shouldFetchData() {\n    if (this.props.posts.isLoaded) {\n      const page = (this.props.params.page || 1) * 1\n      return page != this.props.posts.page\n    } else {\n      return false\n    }\n  }\n\n  fetchData() {\n    store.dispatch(posts.unload())\n\n    ajax\n      .get(\n        this.props.thread.api.posts.index,\n        {\n          page: this.props.params.page || 1,\n        },\n        \"posts\"\n      )\n      .then(\n        (data) => {\n          this.update(data)\n        },\n        (rejection) => {\n          snackbar.apiError(rejection)\n        }\n      )\n  }\n\n  startPollingApi() {\n    polls.start({\n      poll: \"thread-posts\",\n\n      url: this.props.thread.api.posts.index,\n      data: {\n        page: this.props.params.page || 1,\n      },\n      update: this.update,\n\n      frequency: 120 * 1000,\n      delayed: true,\n    })\n  }\n\n  stopPollingApi() {\n    polls.stop(\"thread-posts\")\n  }\n\n  setPageTitle() {\n    title.set({\n      title: this.props.thread.title,\n      parent: this.props.thread.category.name,\n      page: (this.props.params.page || 1) * 1,\n    })\n  }\n\n  update = (data) => {\n    store.dispatch(thread.replace(data))\n    store.dispatch(posts.load(data.post_set))\n\n    if (data.participants) {\n      store.dispatch(participants.replace(data.participants))\n    }\n\n    if (data.poll) {\n      store.dispatch(poll.replace(data.poll))\n    }\n\n    this.setPageTitle()\n  }\n\n  openPollForm = () => {\n    posting.open({\n      mode: \"POLL\",\n      submit: this.props.thread.api.poll,\n\n      thread: this.props.thread,\n      poll: null,\n    })\n  }\n\n  openReplyForm = () => {\n    posting.open({\n      mode: \"REPLY\",\n\n      config: this.props.thread.api.editor,\n      submit: this.props.thread.api.posts.index,\n    })\n  }\n\n  render() {\n    const category = this.props.thread.category\n\n    let className = \"page page-thread\"\n    if (category.css_class) {\n      className += \" page-thread-\" + category.css_class\n    }\n\n    const styleName =\n      category.special_role === \"private_threads\"\n        ? \"private-threads\"\n        : category.css_class || \"category-threads\"\n\n    const threadModeration = getThreadModeration(\n      this.props.thread,\n      this.props.user\n    )\n\n    const postsModeration = getPostsModeration(\n      this.props.posts.results,\n      this.props.user\n    )\n    const selection = this.props.posts.results.filter((post) => post.isSelected)\n\n    return (\n      <div className={className}>\n        <ThreadHeader\n          styleName={styleName}\n          thread={this.props.thread}\n          posts={this.props.posts}\n          user={this.props.user}\n          moderation={threadModeration}\n        />\n        <PageContainer>\n          <Participants\n            participants={this.props.participants}\n            thread={this.props.thread}\n            user={this.props.user}\n          />\n          <ThreadToolbarTop\n            thread={this.props.thread}\n            posts={this.props.posts}\n            user={this.props.user}\n            selection={selection}\n            moderation={postsModeration}\n            onPoll={this.openPollForm}\n            onReply={this.openReplyForm}\n          />\n          <Poll\n            poll={this.props.poll}\n            thread={this.props.thread}\n            user={this.props.user}\n          />\n          <PostsList {...this.props} />\n          <ThreadToolbarBottom\n            thread={this.props.thread}\n            posts={this.props.posts}\n            user={this.props.user}\n            selection={selection}\n            moderation={postsModeration}\n            onReply={this.openReplyForm}\n          />\n        </PageContainer>\n      </div>\n    )\n  }\n}\n\nconst getThreadModeration = (thread, user) => {\n  const moderation = {\n    enabled: false,\n    edit: false,\n    approve: false,\n    close: false,\n    open: false,\n    hide: false,\n    unhide: false,\n    move: false,\n    merge: false,\n    pinGlobally: false,\n    pinLocally: false,\n    unpin: false,\n    delete: false,\n  }\n\n  if (!user.is_authenticated) return moderation\n\n  moderation.edit = thread.acl.can_edit\n  moderation.approve = thread.acl.can_approve && thread.is_unapproved\n  moderation.close = thread.acl.can_close && !thread.is_closed\n  moderation.open = thread.acl.can_close && thread.is_closed\n  moderation.hide = thread.acl.can_hide && !thread.is_hidden\n  moderation.unhide = thread.acl.can_unhide && thread.is_hidden\n  moderation.move = thread.acl.can_move\n  moderation.merge = thread.acl.can_merge\n  moderation.pinGlobally = thread.acl.can_pin_globally && thread.weight < 2\n  moderation.pinLocally = thread.acl.can_pin && thread.weight !== 1\n  moderation.unpin =\n    (thread.acl.can_pin && thread.weight === 1) ||\n    (thread.acl.can_pin_globally && thread.weight === 2)\n  moderation.delete = thread.acl.can_delete\n\n  moderation.enabled =\n    moderation.edit ||\n    moderation.approve ||\n    moderation.close ||\n    moderation.open ||\n    moderation.hide ||\n    moderation.unhide ||\n    moderation.move ||\n    moderation.merge ||\n    moderation.pinGlobally ||\n    moderation.pinLocally ||\n    moderation.unpin ||\n    moderation.delete\n\n  return moderation\n}\n\nconst getPostsModeration = (posts, user) => {\n  const moderation = {\n    enabled: false,\n    approve: false,\n    move: false,\n    merge: false,\n    protect: false,\n    hide: false,\n    delete: false,\n  }\n\n  if (!user.is_authenticated) return moderation\n\n  posts.forEach((post) => {\n    if (!post.is_event) {\n      if (post.acl.can_approve && post.is_unapproved) {\n        moderation.approve = true\n      }\n      if (post.acl.can_move) moderation.move = true\n      if (post.acl.can_merge) moderation.merge = true\n      if (post.acl.can_protect || post.acl.can_unprotect) {\n        moderation.protect = true\n      }\n      if (post.acl.can_hide || post.acl.can_unhide) {\n        moderation.hide = true\n      }\n      if (post.acl.can_delete) moderation.delete = true\n\n      if (\n        moderation.approve ||\n        moderation.move ||\n        moderation.merge ||\n        moderation.protect ||\n        moderation.hide ||\n        moderation.delete\n      ) {\n        moderation.enabled = true\n      }\n    }\n  })\n\n  return moderation\n}\n","import { connect } from \"react-redux\"\nimport Route from \"misago/components/thread/route\"\nimport misago from \"misago/index\"\n\nexport function select(store) {\n  return {\n    participants: store.participants,\n    poll: store.poll,\n    posts: store.posts,\n    thread: store.thread,\n    tick: store.tick.tick,\n    user: store.auth.user,\n  }\n}\n\nexport function paths() {\n  const thread = misago.get(\"THREAD\")\n  const basePath = thread.url.index.replace(\n    thread.slug + \"-\" + thread.pk,\n    \":slug\"\n  )\n\n  return [\n    {\n      path: basePath,\n      component: connect(select)(Route),\n    },\n    {\n      path: basePath + \":page/\",\n      component: connect(select)(Route),\n    },\n  ]\n}\n","import { paths } from \"misago/components/thread/root\"\nimport misago from \"misago/index\"\nimport mount from \"misago/utils/routed-component\"\n\nexport default function initializer(context) {\n  if (context.has(\"THREAD\") && context.has(\"POSTS\")) {\n    mount({\n      paths: paths(),\n    })\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:thread\",\n  initializer: initializer,\n  after: \"store\",\n})\n","export function compareLastPostAge(a, b) {\n  if (a.last_post > b.last_post) {\n    return -1\n  } else if (a.last_post < b.last_post) {\n    return 1\n  } else {\n    return 0\n  }\n}\n\nexport function compareGlobalWeight(a, b) {\n  if (a.weight === 2 && a.weight > b.weight) {\n    return -1\n  } else if (b.weight === 2 && a.weight < b.weight) {\n    return 1\n  } else {\n    return compareLastPostAge(a, b)\n  }\n}\n\nexport function compareWeight(a, b) {\n  if (a.weight > b.weight) {\n    return -1\n  } else if (a.weight < b.weight) {\n    return 1\n  } else {\n    return compareLastPostAge(a, b)\n  }\n}\n","import React from \"react\"\nimport { Link } from \"react-router\"\n\nconst ThreadsCategoryPicker = ({\n  allItems,\n  parentUrl,\n  category,\n  categories,\n  list,\n}) => (\n  <div className=\"dropdown threads-category-picker\">\n    <button\n      type=\"button\"\n      className=\"btn btn-default btn-outline dropdown-toggle btn-block text-ellipsis\"\n      data-toggle=\"dropdown\"\n      aria-haspopup=\"true\"\n      aria-expanded=\"false\"\n    >\n      {category && (\n        <span\n          className=\"material-icon\"\n          style={{ color: category.color || \"inherit\" }}\n        >\n          label\n        </span>\n      )}\n      {category && category.short_name && (\n        <span className={category.short_name && \"hidden-md hidden-lg\"}>\n          {category.short_name}\n        </span>\n      )}\n      {category ? (\n        <span className={category.short_name && \"hidden-xs hidden-sm\"}>\n          {category.name}\n        </span>\n      ) : (\n        allItems\n      )}\n    </button>\n    <ul className=\"dropdown-menu\">\n      <li>\n        <Link to={parentUrl + list.path}>{allItems}</Link>\n      </li>\n      <li role=\"separator\" className=\"divider\" />\n      {categories.map((choice) => (\n        <li key={choice.id}>\n          <Link to={choice.url.index + list.path}>\n            <span\n              className=\"material-icon\"\n              style={{ color: choice.color || \"inherit\" }}\n            >\n              label\n            </span>\n            {choice.name}\n          </Link>\n        </li>\n      ))}\n    </ul>\n  </div>\n)\n\nexport default ThreadsCategoryPicker\n","import React from \"react\"\nimport { Link } from \"react-router\"\n\nconst ThreadsListPicker = ({ baseUrl, list, lists }) => (\n  <div className=\"dropdown threads-list-picker\">\n    <button\n      type=\"button\"\n      className=\"btn btn-default btn-outline dropdown-toggle btn-block\"\n      data-toggle=\"dropdown\"\n      aria-haspopup=\"true\"\n      aria-expanded=\"false\"\n    >\n      {list.longName}\n    </button>\n    <ul className=\"dropdown-menu stick-to-bottom\">\n      {lists.map((choice) => (\n        <li key={choice.type}>\n          <Link to={baseUrl + choice.path}>{choice.longName}</Link>\n        </li>\n      ))}\n    </ul>\n  </div>\n)\n\nexport default ThreadsListPicker\n","import React from \"react\"\n\nexport default class extends React.Component {\n  render() {\n    return (\n      <div className=\"modal-dialog\" role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              aria-label={gettext(\"Close\")}\n              className=\"close\"\n              data-dismiss=\"modal\"\n              type=\"button\"\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Threads moderation\")}</h4>\n          </div>\n          <div className=\"modal-body\">\n            <p className=\"lead\">\n              {gettext(\"One or more threads could not be deleted:\")}\n            </p>\n\n            <ul className=\"list-unstyled list-errored-items\">\n              {this.props.errors.map((item) => {\n                return (\n                  <ThreadErrors\n                    errors={item.errors}\n                    key={item.thread.id}\n                    thread={item.thread}\n                  />\n                )\n              })}\n            </ul>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport function ThreadErrors({ errors, thread }) {\n  return (\n    <li>\n      <h5>{thread.title}</h5>\n      {errors.map((message, i) => {\n        return <p>{message}</p>\n      })}\n    </li>\n  )\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport CategorySelect from \"misago/components/category-select\"\nimport Select from \"misago/components/select\"\nimport misago from \"misago/index\"\nimport { filterThreads } from \"misago/reducers/threads\"\nimport * as select from \"misago/reducers/selection\"\nimport ErrorsModal from \"misago/components/threads/moderation/errors-list\"\nimport MergeConflict from \"misago/components/merge-conflict\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport * as validators from \"misago/utils/validators\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      title: \"\",\n      category: null,\n      weight: 0,\n      is_hidden: 0,\n      is_closed: false,\n\n      validators: {\n        title: [validators.required()],\n      },\n\n      errors: {},\n    }\n\n    this.acl = {}\n    for (const i in props.user.acl.categories) {\n      if (!props.user.acl.categories.hasOwnProperty(i)) {\n        continue\n      }\n\n      const acl = props.user.acl.categories[i]\n      this.acl[acl.id] = acl\n    }\n\n    this.categoryChoices = []\n    props.categories.forEach((category) => {\n      if (category.level > 0) {\n        const acl = this.acl[category.id]\n        const disabled =\n          !acl.can_start_threads ||\n          (category.is_closed && !acl.can_close_threads)\n\n        this.categoryChoices.push({\n          value: category.id,\n          disabled: disabled,\n          level: category.level - 1,\n          label: category.name,\n        })\n\n        if (!disabled && !this.state.category) {\n          this.state.category = category.id\n        }\n      }\n    })\n\n    this.isHiddenChoices = [\n      {\n        value: 0,\n        icon: \"visibility\",\n        label: gettext(\"No\"),\n      },\n      {\n        value: 1,\n        icon: \"visibility_off\",\n        label: gettext(\"Yes\"),\n      },\n    ]\n\n    this.isClosedChoices = [\n      {\n        value: false,\n        icon: \"lock_outline\",\n        label: gettext(\"No\"),\n      },\n      {\n        value: true,\n        icon: \"lock\",\n        label: gettext(\"Yes\"),\n      },\n    ]\n  }\n\n  clean() {\n    if (this.isValid()) {\n      return true\n    } else {\n      snackbar.error(gettext(\"Form contains errors.\"))\n      this.setState({\n        errors: this.validate(),\n      })\n      return false\n    }\n  }\n\n  send() {\n    return ajax.post(misago.get(\"MERGE_THREADS_API\"), this.getFormdata())\n  }\n\n  getFormdata = () => {\n    return {\n      threads: this.props.threads.map((thread) => thread.id),\n      title: this.state.title,\n      category: this.state.category,\n      weight: this.state.weight,\n      is_hidden: this.state.is_hidden,\n      is_closed: this.state.is_closed,\n    }\n  }\n\n  handleSuccess = (apiResponse) => {\n    // unfreeze and remove merged threads\n    this.props.threads.forEach((thread) => {\n      this.props.freezeThread(thread.id)\n      this.props.deleteThread(thread)\n    })\n\n    // deselect all threads\n    store.dispatch(select.none())\n\n    // append merged thread, filter threads\n    this.props.addThreads([apiResponse])\n    store.dispatch(\n      filterThreads(this.props.route.category, this.props.categoriesMap)\n    )\n\n    // hide modal\n    modal.hide()\n  }\n\n  handleError = (rejection) => {\n    if (rejection.status === 400) {\n      if (rejection.best_answers || rejection.polls) {\n        modal.show(\n          <MergeConflict\n            api={misago.get(\"MERGE_THREADS_API\")}\n            bestAnswers={rejection.best_answers}\n            data={this.getFormdata()}\n            polls={rejection.polls}\n            onError={this.handleError}\n            onSuccess={this.handleSuccess}\n          />\n        )\n      } else {\n        this.setState({\n          errors: Object.assign({}, this.state.errors, rejection),\n        })\n        snackbar.error(gettext(\"Form contains errors.\"))\n      }\n    } else if (rejection.status === 403 && Array.isArray(rejection)) {\n      modal.show(<ErrorsModal errors={rejection} />)\n    } else if (rejection.best_answer) {\n      snackbar.error(rejection.best_answer[0])\n    } else if (rejection.poll) {\n      snackbar.error(rejection.poll[0])\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  onCategoryChange = (ev) => {\n    const categoryId = ev.target.value\n    const newState = {\n      category: categoryId,\n    }\n\n    if (this.acl[categoryId].can_pin_threads < newState.weight) {\n      newState.weight = 0\n    }\n\n    if (!this.acl[categoryId].can_hide_threads) {\n      newState.is_hidden = 0\n    }\n\n    if (!this.acl[categoryId].can_close_threads) {\n      newState.is_closed = false\n    }\n\n    this.setState(newState)\n  }\n\n  getWeightChoices() {\n    const choices = [\n      {\n        value: 0,\n        icon: \"remove\",\n        label: gettext(\"Not pinned\"),\n      },\n      {\n        value: 1,\n        icon: \"bookmark_border\",\n        label: gettext(\"Pinned locally\"),\n      },\n    ]\n\n    if (this.acl[this.state.category].can_pin_threads == 2) {\n      choices.push({\n        value: 2,\n        icon: \"bookmark\",\n        label: gettext(\"Pinned globally\"),\n      })\n    }\n\n    return choices\n  }\n\n  renderWeightField() {\n    if (this.acl[this.state.category].can_pin_threads) {\n      return (\n        <FormGroup label={gettext(\"Thread weight\")} for=\"id_weight\">\n          <Select\n            id=\"id_weight\"\n            onChange={this.bindInput(\"weight\")}\n            value={this.state.weight}\n            choices={this.getWeightChoices()}\n          />\n        </FormGroup>\n      )\n    } else {\n      return null\n    }\n  }\n\n  renderHiddenField() {\n    if (this.acl[this.state.category].can_hide_threads) {\n      return (\n        <FormGroup label={gettext(\"Hide thread\")} for=\"id_is_hidden\">\n          <Select\n            id=\"id_is_closed\"\n            onChange={this.bindInput(\"is_hidden\")}\n            value={this.state.is_hidden}\n            choices={this.isHiddenChoices}\n          />\n        </FormGroup>\n      )\n    } else {\n      return null\n    }\n  }\n\n  renderClosedField() {\n    if (this.acl[this.state.category].can_close_threads) {\n      return (\n        <FormGroup label={gettext(\"Close thread\")} for=\"id_is_closed\">\n          <Select\n            id=\"id_is_closed\"\n            onChange={this.bindInput(\"is_closed\")}\n            value={this.state.is_closed}\n            choices={this.isClosedChoices}\n          />\n        </FormGroup>\n      )\n    } else {\n      return null\n    }\n  }\n\n  renderForm() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"modal-body\">\n          <FormGroup\n            label={gettext(\"Thread title\")}\n            for=\"id_title\"\n            validation={this.state.errors.title}\n          >\n            <input\n              id=\"id_title\"\n              className=\"form-control\"\n              type=\"text\"\n              onChange={this.bindInput(\"title\")}\n              value={this.state.title}\n            />\n          </FormGroup>\n          <div className=\"clearfix\" />\n\n          <FormGroup\n            label={gettext(\"Category\")}\n            for=\"id_category\"\n            validation={this.state.errors.category}\n          >\n            <CategorySelect\n              id=\"id_category\"\n              onChange={this.onCategoryChange}\n              value={this.state.category}\n              choices={this.categoryChoices}\n            />\n          </FormGroup>\n          <div className=\"clearfix\" />\n\n          {this.renderWeightField()}\n          {this.renderHiddenField()}\n          {this.renderClosedField()}\n        </div>\n        <div className=\"modal-footer\">\n          <button\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n            disabled={this.state.isLoading}\n            type=\"button\"\n          >\n            {gettext(\"Cancel\")}\n          </button>\n          <Button className=\"btn-primary\" loading={this.state.isLoading}>\n            {gettext(\"Merge threads\")}\n          </Button>\n        </div>\n      </form>\n    )\n  }\n\n  renderCantMergeMessage() {\n    return (\n      <div className=\"modal-body\">\n        <div className=\"message-icon\">\n          <span className=\"material-icon\">info_outline</span>\n        </div>\n        <div className=\"message-body\">\n          <p className=\"lead\">\n            {gettext(\n              \"You can't move threads because there are no categories you are allowed to move them to.\"\n            )}\n          </p>\n          <p>\n            {gettext(\n              \"You need permission to start threads in category to be able to merge threads to it.\"\n            )}\n          </p>\n          <button\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            {gettext(\"Ok\")}\n          </button>\n        </div>\n      </div>\n    )\n  }\n\n  getClassName() {\n    if (!this.state.category) {\n      return \"modal-dialog modal-message\"\n    } else {\n      return \"modal-dialog\"\n    }\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()} role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              type=\"button\"\n              className=\"close\"\n              data-dismiss=\"modal\"\n              aria-label={gettext(\"Close\")}\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Merge threads\")}</h4>\n          </div>\n          {this.state.category\n            ? this.renderForm()\n            : this.renderCantMergeMessage()}\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport CategorySelect from \"misago/components/category-select\"\nimport * as select from \"misago/reducers/selection\"\nimport { filterThreads } from \"misago/reducers/threads\"\nimport modal from \"misago/services/modal\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      category: null,\n    }\n\n    const acls = {}\n    for (const i in props.user.acl.categories) {\n      if (!props.user.acl.categories.hasOwnProperty(i)) {\n        continue\n      }\n\n      const acl = props.user.acl.categories[i]\n      acls[acl.id] = acl\n    }\n\n    this.categoryChoices = []\n    props.categories.forEach((category) => {\n      if (category.level > 0) {\n        const acl = acls[category.id]\n        const disabled =\n          !acl.can_start_threads ||\n          (category.is_closed && !acl.can_close_threads)\n\n        this.categoryChoices.push({\n          value: category.id,\n          disabled: disabled,\n          level: category.level - 1,\n          label: category.name,\n        })\n\n        if (!disabled && !this.state.category) {\n          this.state.category = category.id\n        }\n      }\n    })\n  }\n\n  handleSubmit = (event) => {\n    // we don't reload page on submissions\n    event.preventDefault()\n\n    modal.hide()\n\n    const onSuccess = () => {\n      store.dispatch(\n        filterThreads(this.props.route.category, this.props.categoriesMap)\n      )\n\n      // deselect threads moved outside of visible scope\n      const storeState = store.getState()\n      const leftThreads = storeState.threads.map((thread) => thread.id)\n      store.dispatch(\n        select.all(\n          storeState.selection.filter((thread) => {\n            return leftThreads.indexOf(thread) !== -1\n          })\n        )\n      )\n    }\n\n    this.props.callApi(\n      [\n        { op: \"replace\", path: \"category\", value: this.state.category },\n        { op: \"replace\", path: \"flatten-categories\", value: null },\n        { op: \"add\", path: \"acl\", value: true },\n      ],\n      gettext(\"Selected threads were moved.\"),\n      onSuccess\n    )\n  }\n\n  getClassName() {\n    if (!this.state.category) {\n      return \"modal-dialog modal-message\"\n    } else {\n      return \"modal-dialog\"\n    }\n  }\n\n  renderForm() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"modal-body\">\n          <FormGroup label={gettext(\"New category\")} for=\"id_new_category\">\n            <CategorySelect\n              id=\"id_new_category\"\n              onChange={this.bindInput(\"category\")}\n              value={this.state.category}\n              choices={this.categoryChoices}\n            />\n          </FormGroup>\n        </div>\n        <div className=\"modal-footer\">\n          <button\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n            disabled={this.state.isLoading}\n            type=\"button\"\n          >\n            {gettext(\"Cancel\")}\n          </button>\n          <button className=\"btn btn-primary\">{gettext(\"Move threads\")}</button>\n        </div>\n      </form>\n    )\n  }\n\n  renderCantMoveMessage() {\n    return (\n      <div className=\"modal-body\">\n        <div className=\"message-icon\">\n          <span className=\"material-icon\">info_outline</span>\n        </div>\n        <div className=\"message-body\">\n          <p className=\"lead\">\n            {gettext(\n              \"You can't move threads because there are no categories you are allowed to move them to.\"\n            )}\n          </p>\n          <p>\n            {gettext(\n              \"You need permission to start threads in category to be able to move threads to it.\"\n            )}\n          </p>\n          <button\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            {gettext(\"Ok\")}\n          </button>\n        </div>\n      </div>\n    )\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()} role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              type=\"button\"\n              className=\"close\"\n              data-dismiss=\"modal\"\n              aria-label={gettext(\"Close\")}\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Move threads\")}</h4>\n          </div>\n          {this.state.category\n            ? this.renderForm()\n            : this.renderCantMoveMessage()}\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport ErrorsModal from \"misago/components/threads/moderation/errors-list\"\nimport MergeThreads from \"misago/components/threads/moderation/merge\"\nimport MoveThreads from \"misago/components/threads/moderation/move\"\nimport * as select from \"misago/reducers/selection\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends React.Component {\n  callApi = (ops, successMessage, onSuccess = null) => {\n    // freeze threads\n    this.props.threads.forEach((thread) => {\n      this.props.freezeThread(thread.id)\n    })\n\n    // list ids\n    const ids = this.props.threads.map((thread) => {\n      return thread.id\n    })\n\n    // always return current acl\n    ops.push({ op: \"add\", path: \"acl\", value: true })\n\n    ajax.patch(this.props.api, { ids, ops }).then(\n      (data) => {\n        // unfreeze\n        this.props.threads.forEach((thread) => {\n          this.props.freezeThread(thread.id)\n        })\n\n        // update threads\n        data.forEach((thread) => {\n          this.props.updateThread(thread)\n        })\n\n        // show success message and call callback\n        snackbar.success(successMessage)\n        if (onSuccess) {\n          onSuccess()\n        }\n      },\n      (rejection) => {\n        // unfreeze\n        this.props.threads.forEach((thread) => {\n          this.props.freezeThread(thread.id)\n        })\n\n        // escape on non-400 error\n        if (rejection.status !== 400) {\n          return snackbar.apiError(rejection)\n        }\n\n        // build errors list\n        let errors = []\n        let threadsMap = {}\n\n        this.props.threads.forEach((thread) => {\n          threadsMap[thread.id] = thread\n        })\n\n        rejection.forEach(({ id, detail }) => {\n          if (typeof threadsMap[id] !== \"undefined\") {\n            errors.push({\n              errors: detail,\n              thread: threadsMap[id],\n            })\n          }\n        })\n\n        modal.show(<ErrorsModal errors={errors} />)\n      }\n    )\n  }\n\n  pinGlobally = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"weight\",\n          value: 2,\n        },\n      ],\n      gettext(\"Selected threads were pinned globally.\")\n    )\n  }\n\n  pinLocally = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"weight\",\n          value: 1,\n        },\n      ],\n      gettext(\"Selected threads were pinned locally.\")\n    )\n  }\n\n  unpin = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"weight\",\n          value: 0,\n        },\n      ],\n      gettext(\"Selected threads were unpinned.\")\n    )\n  }\n\n  approve = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-unapproved\",\n          value: false,\n        },\n      ],\n      gettext(\"Selected threads were approved.\")\n    )\n  }\n\n  open = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-closed\",\n          value: false,\n        },\n      ],\n      gettext(\"Selected threads were opened.\")\n    )\n  }\n\n  close = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-closed\",\n          value: true,\n        },\n      ],\n      gettext(\"Selected threads were closed.\")\n    )\n  }\n\n  unhide = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-hidden\",\n          value: false,\n        },\n      ],\n      gettext(\"Selected threads were unhidden.\")\n    )\n  }\n\n  hide = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-hidden\",\n          value: true,\n        },\n      ],\n      gettext(\"Selected threads were hidden.\")\n    )\n  }\n\n  move = () => {\n    modal.show(\n      <MoveThreads\n        callApi={this.callApi}\n        categories={this.props.categories}\n        categoriesMap={this.props.categoriesMap}\n        route={this.props.route}\n        user={this.props.user}\n      />\n    )\n  }\n\n  merge = () => {\n    const errors = []\n    this.props.threads.forEach((thread) => {\n      if (!thread.acl.can_merge) {\n        errors.append({\n          id: thread.id,\n          title: thread.title,\n          errors: [\n            gettext(\n              \"You don't have permission to merge this thread with others.\"\n            ),\n          ],\n        })\n      }\n    })\n\n    if (this.props.threads.length < 2) {\n      snackbar.info(\n        gettext(\"You have to select at least two threads to merge.\")\n      )\n    } else if (errors.length) {\n      modal.show(<ErrorsModal errors={errors} />)\n      return\n    } else {\n      modal.show(<MergeThreads {...this.props} />)\n    }\n  }\n\n  delete = () => {\n    if (\n      !window.confirm(\n        gettext(\"Are you sure you want to delete selected threads?\")\n      )\n    ) {\n      return\n    }\n\n    this.props.threads.map((thread) => {\n      this.props.freezeThread(thread.id)\n    })\n\n    const ids = this.props.threads.map((thread) => {\n      return thread.id\n    })\n\n    ajax.delete(this.props.api, ids).then(\n      () => {\n        this.props.threads.map((thread) => {\n          this.props.freezeThread(thread.id)\n          this.props.deleteThread(thread)\n        })\n\n        snackbar.success(gettext(\"Selected threads were deleted.\"))\n      },\n      (rejection) => {\n        if (rejection.status === 400) {\n          const failedThreads = rejection.map((thread) => {\n            return thread.id\n          })\n\n          this.props.threads.map((thread) => {\n            this.props.freezeThread(thread.id)\n            if (failedThreads.indexOf(thread.id) === -1) {\n              this.props.deleteThread(thread)\n            }\n          })\n\n          modal.show(<ErrorsModal errors={rejection} />)\n        } else {\n          snackbar.apiError(rejection)\n        }\n      }\n    )\n  }\n\n  render() {\n    const { moderation, threads } = this.props\n    const noSelection = this.props.selection.length == 0\n\n    return (\n      <ul className=\"dropdown-menu dropdown-menu-right stick-to-bottom\">\n        <li>\n          <button\n            className=\"btn btn-link\"\n            type=\"button\"\n            onClick={() => store.dispatch(select.all(threads.map((t) => t.id)))}\n          >\n            <span className=\"material-icon\">check_box</span>\n            {gettext(\"Select all\")}\n          </button>\n        </li>\n        <li>\n          <button\n            className=\"btn btn-link\"\n            type=\"button\"\n            disabled={noSelection}\n            onClick={() => store.dispatch(select.none())}\n          >\n            <span className=\"material-icon\">check_box_outline_blank</span>\n            {gettext(\"Select none\")}\n          </button>\n        </li>\n        <li role=\"separator\" className=\"divider\" />\n        {!!moderation.can_pin_globally && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.pinGlobally}\n            >\n              <span className=\"material-icon\">bookmark</span>\n              {gettext(\"Pin threads globally\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_pin && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.pinLocally}\n            >\n              <span className=\"material-icon\">bookmark_border</span>\n              {gettext(\"Pin threads locally\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_pin && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.unpin}\n            >\n              <span className=\"material-icon\">panorama_fish_eye</span>\n              {gettext(\"Unpin threads\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_move && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.move}\n            >\n              <span className=\"material-icon\">arrow_forward</span>\n              {gettext(\"Move threads\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_merge && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.merge}\n            >\n              <span className=\"material-icon\">call_merge</span>\n              {gettext(\"Merge threads\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_approve && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.approve}\n            >\n              <span className=\"material-icon\">done</span>\n              {gettext(\"Approve threads\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_close && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.open}\n            >\n              <span className=\"material-icon\">lock_open</span>\n              {gettext(\"Open threads\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_close && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.close}\n            >\n              <span className=\"material-icon\">lock_outline</span>\n              {gettext(\"Close threads\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_unhide && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.unhide}\n            >\n              <span className=\"material-icon\">visibility</span>\n              {gettext(\"Unhide threads\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_hide && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.hide}\n            >\n              <span className=\"material-icon\">visibility_off</span>\n              {gettext(\"Hide threads\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_delete && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.delete}\n            >\n              <span className=\"material-icon\">clear</span>\n              {gettext(\"Delete threads\")}\n            </button>\n          </li>\n        )}\n      </ul>\n    )\n  }\n}\n","import React from \"react\"\nimport ModerationControls from \"./moderation/controls\"\n\nconst ThreadsToolbarModeration = ({\n  api,\n  categoriesMap,\n  categories,\n  threads,\n  addThreads,\n  freezeThread,\n  updateThread,\n  deleteThread,\n  selection,\n  moderation,\n  route,\n  user,\n  disabled,\n}) => (\n  <div className=\"dropdown threads-moderation\">\n    <button\n      type=\"button\"\n      className=\"btn btn-default btn-outline btn-icon dropdown-toggle\"\n      title={gettext(\"Moderation\")}\n      data-toggle=\"dropdown\"\n      aria-haspopup=\"true\"\n      aria-expanded=\"false\"\n      disabled={disabled}\n    >\n      <span className=\"material-icon\">settings</span>\n    </button>\n    <ModerationControls\n      api={api}\n      categories={categories}\n      categoriesMap={categoriesMap}\n      threads={threads}\n      addThreads={addThreads}\n      freezeThread={freezeThread}\n      updateThread={updateThread}\n      deleteThread={deleteThread}\n      selection={selection}\n      moderation={moderation}\n      route={route}\n      user={user}\n      disabled={disabled}\n    />\n  </div>\n)\n\nexport default ThreadsToolbarModeration\n","import React from \"react\"\nimport posting from \"../../services/posting\"\nimport Button from \"../button\"\nimport { Toolbar, ToolbarItem, ToolbarSection, ToolbarSpacer } from \"../Toolbar\"\nimport ThreadsCategoryPicker from \"./ThreadsCategoryPicker\"\nimport ThreadsListPicker from \"./ThreadsListPicker\"\nimport ThreadsToolbarModeration from \"./ThreadsToolbarModeration\"\n\nconst ThreadsToolbar = ({\n  api,\n  baseUrl,\n  category,\n  categories,\n  categoriesMap,\n  topCategory,\n  topCategories,\n  subCategory,\n  subCategories,\n  list,\n  lists,\n  threads,\n  addThreads,\n  startThread,\n  freezeThread,\n  updateThread,\n  deleteThread,\n  selection,\n  moderation,\n  route,\n  user,\n  disabled,\n}) => (\n  <Toolbar>\n    {topCategories.length > 0 && (\n      <ToolbarSection>\n        <ToolbarItem>\n          <ThreadsCategoryPicker\n            allItems={gettext(\"All categories\")}\n            parentUrl={list.path}\n            category={topCategory}\n            categories={topCategories}\n            list={list}\n          />\n        </ToolbarItem>\n        {topCategory && subCategories.length > 0 && (\n          <ToolbarItem>\n            <ThreadsCategoryPicker\n              allItems={gettext(\"All subcategories\")}\n              parentUrl={topCategory.url.index}\n              category={subCategory}\n              categories={subCategories}\n              list={list}\n            />\n          </ToolbarItem>\n        )}\n      </ToolbarSection>\n    )}\n    {lists.length > 1 && (\n      <ToolbarSection className=\"hidden-xs\">\n        <ToolbarItem>\n          <ThreadsListPicker baseUrl={baseUrl} list={list} lists={lists} />\n        </ToolbarItem>\n      </ToolbarSection>\n    )}\n    <ToolbarSpacer />\n    {!!user.id && (\n      <ToolbarSection>\n        <ToolbarItem>\n          <Button\n            className=\"btn-primary btn-outline btn-block\"\n            disabled={disabled}\n            onClick={() => {\n              posting.open(\n                startThread || {\n                  mode: \"START\",\n\n                  config: misago.get(\"THREAD_EDITOR_API\"),\n                  submit: misago.get(\"THREADS_API\"),\n\n                  category: category.id,\n                }\n              )\n            }}\n          >\n            <span className=\"material-icon\">chat</span>\n            {gettext(\"Start thread\")}\n          </Button>\n        </ToolbarItem>\n        {!!moderation.allow && (\n          <ToolbarItem shrink>\n            <ThreadsToolbarModeration\n              api={api}\n              categories={categories}\n              categoriesMap={categoriesMap}\n              threads={threads.filter(\n                (thread) => selection.indexOf(thread.id) !== -1\n              )}\n              addThreads={addThreads}\n              freezeThread={freezeThread}\n              updateThread={updateThread}\n              deleteThread={deleteThread}\n              selection={selection}\n              moderation={moderation}\n              route={route}\n              user={user}\n              disabled={disabled}\n            />\n          </ToolbarItem>\n        )}\n      </ToolbarSection>\n    )}\n  </Toolbar>\n)\n\nexport default ThreadsToolbar\n","import React from \"react\"\nimport PageContainer from \"../PageContainer\"\nimport ThreadsToolbar from \"./ThreadsToolbar\"\n\nexport default class extends React.Component {\n  render() {\n    const { root } = this.props\n    const { category, categories, categoriesMap } = this.props.route\n    const topCategory = getTopCategory(root, category, categoriesMap)\n\n    return (\n      <PageContainer>\n        <ThreadsToolbar\n          api={this.props.api}\n          baseUrl={category.url.index}\n          category={category}\n          categories={categories}\n          categoriesMap={categoriesMap}\n          topCategory={topCategory}\n          topCategories={categories.filter((cat) => cat.parent === root.id)}\n          subCategories={\n            !!topCategory\n              ? categories.filter((cat) => cat.parent === topCategory.id)\n              : []\n          }\n          subCategory={category.level === 2 ? category : null}\n          subcategories={this.props.subcategories}\n          list={this.props.route.list}\n          lists={this.props.route.lists}\n          threads={this.props.threads}\n          addThreads={this.props.addThreads}\n          startThread={this.props.startThread}\n          freezeThread={this.props.freezeThread}\n          deleteThread={this.props.deleteThread}\n          updateThread={this.props.updateThread}\n          selection={this.props.selection}\n          moderation={this.props.moderation}\n          route={this.props.route}\n          user={this.props.user}\n          disabled={\n            !this.props.isLoaded ||\n            this.props.isBusy ||\n            this.props.busyThreads.length\n          }\n        />\n        {this.props.children}\n      </PageContainer>\n    )\n  }\n}\n\nconst getTopCategory = (root, category, categoriesMap) => {\n  if (!category.parent) return null\n  if (category.parent === root.id) return category\n  return categoriesMap[category.parent]\n}\n","import misago from \"misago/index\"\n\nexport function getPageTitle(route) {\n  if (route.category.level) {\n    if (route.list.path) {\n      return {\n        title: route.list.longName,\n        parent: route.category.name,\n      }\n    } else {\n      return {\n        title: route.category.name,\n      }\n    }\n  } else if (misago.get(\"THREADS_ON_INDEX\")) {\n    if (route.list.path) {\n      return {\n        title: route.list.longName,\n      }\n    } else {\n      return null\n    }\n  } else {\n    if (route.list.path) {\n      return {\n        title: route.list.longName,\n        parent: gettext(\"Threads\"),\n      }\n    } else {\n      return {\n        title: gettext(\"Threads\"),\n      }\n    }\n  }\n}\n\nexport function getTitle(route) {\n  if (route.category.level) {\n    return route.category.name\n  } else if (misago.get(\"THREADS_ON_INDEX\")) {\n    if (misago.get(\"SETTINGS\").index_header) {\n      return misago.get(\"SETTINGS\").index_header\n    } else {\n      return misago.get(\"SETTINGS\").forum_name\n    }\n  } else {\n    return gettext(\"Threads\")\n  }\n}\n\nexport function isThreadChanged(current, fromDb) {\n  return (\n    [\n      current.title === fromDb.title,\n      current.weight === fromDb.weight,\n      current.category === fromDb.category,\n      current.last_post === fromDb.last_post,\n      current.last_poster_name === fromDb.last_poster_name,\n    ].indexOf(false) >= 0\n  )\n}\n\nexport function diffThreads(current, fromDb) {\n  let currentMap = {}\n  current.forEach(function (thread) {\n    currentMap[thread.id] = thread\n  })\n\n  return fromDb.filter(function (thread) {\n    if (currentMap[thread.id]) {\n      return isThreadChanged(currentMap[thread.id], thread)\n    } else {\n      return true\n    }\n  })\n}\n\nexport function getModerationActions(threads) {\n  let moderation = {\n    allow: false,\n\n    can_approve: 0,\n    can_close: 0,\n    can_delete: 0,\n    can_hide: 0,\n    can_merge: 0,\n    can_move: 0,\n    can_pin: 0,\n    can_pin_globally: 0,\n    can_unhide: 0,\n  }\n\n  threads.forEach(function (thread) {\n    if (\n      thread.is_unapproved &&\n      thread.acl.can_approve > moderation.can_approve\n    ) {\n      moderation.can_approve = thread.acl.can_approve\n    }\n\n    if (thread.acl.can_close > moderation.can_close) {\n      moderation.can_close = thread.acl.can_close\n    }\n\n    if (thread.acl.can_delete > moderation.can_delete) {\n      moderation.can_delete = thread.acl.can_delete\n    }\n\n    if (thread.acl.can_hide > moderation.can_hide) {\n      moderation.can_hide = thread.acl.can_hide\n    }\n\n    if (thread.acl.can_merge > moderation.can_merge) {\n      moderation.can_merge = thread.acl.can_merge\n    }\n\n    if (thread.acl.can_move > moderation.can_move) {\n      moderation.can_move = thread.acl.can_move\n    }\n\n    if (thread.acl.can_pin > moderation.can_pin) {\n      moderation.can_pin = thread.acl.can_pin\n    }\n\n    if (thread.acl.can_pin_globally > moderation.can_pin_globally) {\n      moderation.can_pin_globally = thread.acl.can_pin_globally\n    }\n\n    if (thread.is_hidden && thread.acl.can_unhide > moderation.can_unhide) {\n      moderation.can_unhide = thread.acl.can_unhide\n    }\n\n    moderation.allow =\n      moderation.can_approve ||\n      moderation.can_close ||\n      moderation.can_delete ||\n      moderation.can_hide ||\n      moderation.can_merge ||\n      moderation.can_move ||\n      moderation.can_pin ||\n      moderation.can_pin_globally ||\n      moderation.can_unhide\n  })\n\n  return moderation\n}\n","import React from \"react\"\n\nconst ThreadsListEmpty = ({ category, list, message }) => {\n  if (list.type === \"all\") {\n    if (message) {\n      return (\n        <li className=\"list-group-item empty-message\">\n          <p className=\"lead\">{message}</p>\n          <p>{gettext(\"Why not start one yourself?\")}</p>\n        </li>\n      )\n    }\n\n    return (\n      <li className=\"list-group-item empty-message\">\n        <p className=\"lead\">\n          {category.special_role\n            ? gettext(\"There are no threads on this forum... yet!\")\n            : gettext(\"There are no threads in this category.\")}\n        </p>\n        <p>{gettext(\"Why not start one yourself?\")}</p>\n      </li>\n    )\n  }\n\n  return (\n    <li className=\"list-group-item empty-message\">\n      <p className=\"lead\">\n        {gettext(\"No threads matching specified criteria were found.\")}\n      </p>\n    </li>\n  )\n}\n\nexport default ThreadsListEmpty\n","import React from \"react\"\n\nconst ThreadsListItemActivity = ({ thread }) => (\n  <a\n    href={thread.url.last_post}\n    className=\"threads-list-item-last-activity\"\n    title={interpolate(\n      gettext(\"Last activity: %(timestamp)s\"),\n      {\n        timestamp: thread.last_post_on.format(\"LLL\"),\n      },\n      true\n    )}\n  >\n    {thread.last_post_on.fromNow(true)}\n  </a>\n)\n\nexport default ThreadsListItemActivity\n","import React from \"react\"\n\nconst ThreadsListItemCategory = ({ parent, category }) => (\n  <span>\n    {parent && (\n      <a\n        href={parent.url.index}\n        className={getClassName(parent) + \" threads-list-item-parent-category\"}\n        style={parent.color ? { \"--label-color\": parent.color } : null}\n        title={!!parent.short_name ? parent.name : null}\n      >\n        {parent.short_name || parent.name}\n      </a>\n    )}\n    <a\n      href={category.url.index}\n      className={getClassName(category)}\n      style={category.color ? { \"--label-color\": category.color } : null}\n      title={!!category.short_name ? category.name : null}\n    >\n      {category.short_name || category.name}\n    </a>\n  </span>\n)\n\nconst getClassName = (category) => {\n  let className = \"threads-list-item-category threads-list-category-label\"\n\n  if (category.color) {\n    className += \" threads-list-category-label-color\"\n  }\n\n  return className\n}\n\nexport default ThreadsListItemCategory\n","import React from \"react\"\nimport * as select from \"../../reducers/selection\"\nimport store from \"../../services/store\"\n\nconst ThreadsListItemCheckbox = ({ checked, disabled, thread }) => (\n  <button\n    className=\"btn btn-default btn-icon\"\n    type=\"button\"\n    disabled={disabled}\n    onClick={() => store.dispatch(select.item(thread.id))}\n  >\n    <span className=\"material-icon\">\n      {checked ? \"check_box\" : \"check_box_outline_blank\"}\n    </span>\n  </button>\n)\n\nexport default ThreadsListItemCheckbox\n","import React from \"react\"\n\nconst ThreadsListItemIcon = ({ thread }) => {\n  let className = \"threads-list-icon\"\n  if (!thread.is_read) className += \" threads-list-icon-new\"\n\n  return (\n    <a\n      title={thread.is_read ? gettext(\"No new posts\") : gettext(\"New posts\")}\n      href={thread.is_read ? thread.url.last_post : thread.url.new_post}\n      className={className}\n    >\n      <span className=\"material-icon\">\n        {thread.is_read ? \"chat_bubble_outline\" : \"chat_bubble\"}\n      </span>\n    </a>\n  )\n}\n\nexport default ThreadsListItemIcon\n","import React from \"react\"\nimport Avatar from \"../avatar\"\n\nconst ThreadsListItemLastPoster = ({ thread }) =>\n  !!thread.last_poster ? (\n    <a\n      href={thread.url.last_poster}\n      className=\"threads-list-item-last-poster\"\n      title={interpolate(\n        gettext(\"Last post by: %(poster)s\"),\n        { poster: thread.last_poster.username },\n        true\n      )}\n    >\n      <Avatar size={32} user={thread.last_poster} />\n    </a>\n  ) : (\n    <span\n      className=\"threads-list-item-last-poster\"\n      title={interpolate(\n        gettext(\"Last post by: %(poster)s\"),\n        { poster: thread.last_poster_name },\n        true\n      )}\n    >\n      <Avatar size={32} />\n    </span>\n  )\n\nexport default ThreadsListItemLastPoster\n","import React from \"react\"\nimport { patch } from \"../../reducers/threads\"\nimport ajax from \"../../services/ajax\"\nimport snackbar from \"../../services/snackbar\"\nimport store from \"../../services/store\"\n\nconst SUBSCRIPTION = {\n  unsubscribe: null,\n  notify: false,\n  email: true,\n}\n\nclass ThreadsListItemSubscriptionOptions extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      loading: false,\n    }\n  }\n\n  update = (value) => {\n    const { thread } = this.props\n\n    this.setState({ loading: true })\n    store.dispatch(patch(thread, { subscription: SUBSCRIPTION[value] }))\n\n    ajax\n      .patch(thread.api.index, [{ op: \"replace\", path: \"subscription\", value }])\n      .then(\n        () => {},\n        (rejection) => {\n          store.dispatch(\n            patch(thread, {\n              subscription: SUBSCRIPTION[thread.subscription],\n            })\n          )\n          snackbar.apiError(rejection)\n        }\n      )\n      .then(() => this.setState({ loading: false }))\n  }\n\n  render = () => {\n    const { loading } = this.state\n    const { disabled, thread } = this.props\n\n    return (\n      <ul className=\"dropdown-menu dropdown-menu-right\">\n        <li>\n          <button\n            className=\"btn-link\"\n            disabled={disabled || loading || thread.subscription === null}\n            onClick={() => this.update(\"unsubscribe\")}\n          >\n            <span className=\"material-icon\">star_border</span>\n            {gettext(\"Unsubscribe\")}\n          </button>\n        </li>\n        <li>\n          <button\n            className=\"btn-link\"\n            disabled={disabled || loading || thread.subscription === false}\n            onClick={() => this.update(\"notify\")}\n          >\n            <span className=\"material-icon\">star_half</span>\n            {gettext(\"Subscribe with alert\")}\n          </button>\n        </li>\n        <li>\n          <button\n            className=\"btn-link\"\n            disabled={disabled || loading || thread.subscription === true}\n            onClick={() => this.update(\"email\")}\n          >\n            <span className=\"material-icon\">star</span>\n            {gettext(\"Subscribe with e-mail\")}\n          </button>\n        </li>\n      </ul>\n    )\n  }\n}\n\nexport default ThreadsListItemSubscriptionOptions\n","import React from \"react\"\nimport ThreadsListItemSubscriptionOptions from \"./ThreadsListItemSubscriptionOptions\"\n\nconst ThreadsListItemSubscription = ({ disabled, thread }) => (\n  <div className=\"dropdown\">\n    <button\n      className=\"btn btn-default btn-icon\"\n      type=\"button\"\n      title={getSubscriptionTitle(thread.subscription)}\n      disabled={disabled}\n      data-toggle=\"dropdown\"\n      aria-haspopup=\"true\"\n      aria-expanded=\"false\"\n    >\n      <span className=\"material-icon\">\n        {getSubscriptionIcon(thread.subscription)}\n      </span>\n    </button>\n    <ThreadsListItemSubscriptionOptions disabled={disabled} thread={thread} />\n  </div>\n)\n\nconst getSubscriptionTitle = (subscription) => {\n  if (subscription === true) return gettext(\"Subscribed to e-mails\")\n  if (subscription === false) return gettext(\"Subscribed to alerts\")\n  return gettext(\"Not subscribed\")\n}\n\nconst getSubscriptionIcon = (subscription) => {\n  if (subscription === true) return \"star\"\n  if (subscription === false) return \"star_half\"\n  return \"star_border\"\n}\n\nexport default ThreadsListItemSubscription\n","import React from \"react\"\nimport ThreadFlags from \"../ThreadFlags\"\nimport ThreadReplies from \"../ThreadReplies\"\nimport ThreadsListItemActivity from \"./ThreadsListItemActivity\"\nimport ThreadsListItemCategory from \"./ThreadsListItemCategory\"\nimport ThreadsListItemCheckbox from \"./ThreadsListItemCheckbox\"\nimport ThreadsListItemIcon from \"./ThreadsListItemIcon\"\nimport ThreadsListItemLastPoster from \"./ThreadsListItemLastPoster\"\nimport ThreadsListItemSubscription from \"./ThreadsListItemSubscription\"\n\nconst ThreadsListItem = ({\n  activeCategory,\n  categories,\n  showOptions,\n  showSubscription,\n  thread,\n  isBusy,\n  isSelected,\n}) => {\n  let parent = null\n  let category = null\n\n  if (activeCategory.id !== thread.category) {\n    category = categories[thread.category]\n\n    if (\n      category.parent &&\n      category.parent !== activeCategory.id &&\n      categories[category.parent] &&\n      !categories[category.parent].special_role\n    ) {\n      parent = categories[category.parent]\n    }\n  }\n\n  const hasFlags =\n    thread.is_closed ||\n    thread.is_hidden ||\n    thread.is_unapproved ||\n    thread.weight > 0 ||\n    thread.best_answer ||\n    thread.has_poll ||\n    thread.has_unapproved_posts\n\n  const isNew = showOptions ? thread.is_new : true\n\n  return (\n    <li\n      className={\n        \"list-group-item threads-list-item\" +\n        (isBusy ? \" threads-list-item-is-busy\" : \"\")\n      }\n    >\n      <div className=\"threads-list-item-top-row\">\n        {showOptions && (\n          <div className=\"threads-list-item-col-icon\">\n            <ThreadsListItemIcon thread={thread} />\n          </div>\n        )}\n        <div className=\"threads-list-item-col-title\">\n          <a href={thread.url.index} className=\"threads-list-item-title\">\n            {thread.title}\n          </a>\n          <a\n            href={isNew ? thread.url.new_post : thread.url.index}\n            className={\n              \"threads-list-item-title-sm\" +\n              (isNew ? \" threads-list-item-title-new\" : \"\")\n            }\n          >\n            {thread.title}\n          </a>\n        </div>\n        {showOptions && thread.moderation.length > 0 && (\n          <div className=\"threads-list-item-col-checkbox-sm\">\n            <ThreadsListItemCheckbox\n              checked={isSelected}\n              disabled={isBusy}\n              thread={thread}\n            />\n          </div>\n        )}\n      </div>\n      <div className=\"threads-list-item-bottom-row\">\n        {hasFlags && (\n          <div className=\"threads-list-item-col-flags\">\n            <ThreadFlags thread={thread} />\n          </div>\n        )}\n        {!!category && (\n          <div className=\"threads-list-item-col-category\">\n            <ThreadsListItemCategory parent={parent} category={category} />\n          </div>\n        )}\n        <div className=\"threads-list-item-col-replies\">\n          <ThreadReplies thread={thread} />\n        </div>\n        <div className=\"threads-list-item-col-last-poster\">\n          <ThreadsListItemLastPoster thread={thread} />\n        </div>\n        <div className=\"threads-list-item-col-last-activity\">\n          <ThreadsListItemActivity thread={thread} />\n        </div>\n        {showOptions && showSubscription && (\n          <div className=\"threads-list-item-col-subscription\">\n            <ThreadsListItemSubscription disabled={isBusy} thread={thread} />\n          </div>\n        )}\n        {showOptions && thread.moderation.length > 0 && (\n          <div className=\"threads-list-item-col-checkbox\">\n            <ThreadsListItemCheckbox\n              checked={isSelected}\n              disabled={isBusy}\n              thread={thread}\n            />\n          </div>\n        )}\n      </div>\n    </li>\n  )\n}\n\nexport default ThreadsListItem\n","import React from \"react\"\n\nconst UIPreviewText = ({ width }) => (\n  <span className=\"ui-preview-text\" style={{ width: width + \"px\" }}>\n    &nbsp;\n  </span>\n)\n\nexport default UIPreviewText\n","import React from \"react\"\nimport Avatar from \"../avatar\"\nimport { UIPreviewText } from \"../UIPreview\"\n\nconst ThreadsListLoader = ({ showOptions }) => (\n  <div className=\"threads-list threads-list-loader\">\n    <ul className=\"list-group\">\n      <li className=\"list-group-item threads-list-item\">\n        <div className=\"threads-list-item-top-row\">\n          {showOptions && (\n            <div className=\"threads-list-item-col-icon\">\n              <span className=\"threads-list-icon ui-preview-img\"></span>\n            </div>\n          )}\n          <div className=\"threads-list-item-col-title\">\n            <span className=\"threads-list-item-title\">\n              <UIPreviewText width=\"90\" /> <UIPreviewText width=\"40\" />{\" \"}\n              <UIPreviewText width=\"120\" />\n            </span>\n            <span className=\"threads-list-item-title-sm\">\n              <UIPreviewText width=\"90\" /> <UIPreviewText width=\"40\" />{\" \"}\n              <UIPreviewText width=\"120\" />\n            </span>\n          </div>\n        </div>\n        <div className=\"threads-list-item-bottom-row\">\n          <div className=\"threads-list-item-col-category\">\n            <UIPreviewText width=\"70\" />\n          </div>\n          <div className=\"threads-list-item-col-replies\">\n            <UIPreviewText width=\"50\" />\n          </div>\n          <div className=\"threads-list-item-col-last-poster\">\n            <span className=\"threads-list-item-last-poster\">\n              <Avatar size={32} />\n            </span>\n          </div>\n          <div className=\"threads-list-item-col-last-activity\">\n            <span className=\"threads-list-item-last-activity\">\n              <UIPreviewText width=\"50\" />\n            </span>\n          </div>\n        </div>\n      </li>\n      <li className=\"list-group-item threads-list-item\">\n        <div className=\"threads-list-item-top-row\">\n          {showOptions && (\n            <div className=\"threads-list-item-col-icon\">\n              <span className=\"threads-list-icon ui-preview-img\"></span>\n            </div>\n          )}\n          <div className=\"threads-list-item-col-title\">\n            <span className=\"threads-list-item-title\">\n              <UIPreviewText width=\"120\" /> <UIPreviewText width=\"30\" />{\" \"}\n              <UIPreviewText width=\"60\" />\n            </span>\n            <span className=\"threads-list-item-title-sm\">\n              <UIPreviewText width=\"120\" /> <UIPreviewText width=\"30\" />{\" \"}\n              <UIPreviewText width=\"60\" />\n            </span>\n          </div>\n        </div>\n        <div className=\"threads-list-item-bottom-row\">\n          <div className=\"threads-list-item-col-category\">\n            <UIPreviewText width=\"55\" />\n          </div>\n          <div className=\"threads-list-item-col-replies\">\n            <UIPreviewText width=\"60\" />\n          </div>\n          <div className=\"threads-list-item-col-last-poster\">\n            <span className=\"threads-list-item-last-poster\">\n              <Avatar size={32} />\n            </span>\n          </div>\n          <div className=\"threads-list-item-col-last-activity\">\n            <span className=\"threads-list-item-last-activity\">\n              <UIPreviewText width=\"70\" />\n            </span>\n          </div>\n        </div>\n      </li>\n      <li className=\"list-group-item threads-list-item\">\n        <div className=\"threads-list-item-top-row\">\n          {showOptions && (\n            <div className=\"threads-list-item-col-icon\">\n              <span className=\"threads-list-icon ui-preview-img\"></span>\n            </div>\n          )}\n          <div className=\"threads-list-item-col-title\">\n            <span className=\"threads-list-item-title\">\n              <UIPreviewText width=\"40\" /> <UIPreviewText width=\"120\" />{\" \"}\n              <UIPreviewText width=\"80\" />\n            </span>\n            <span className=\"threads-list-item-title-sm\">\n              <UIPreviewText width=\"40\" /> <UIPreviewText width=\"120\" />{\" \"}\n              <UIPreviewText width=\"80\" />\n            </span>\n          </div>\n        </div>\n        <div className=\"threads-list-item-bottom-row\">\n          <div className=\"threads-list-item-col-category\">\n            <UIPreviewText width=\"75\" />\n          </div>\n          <div className=\"threads-list-item-col-replies\">\n            <UIPreviewText width=\"40\" />\n          </div>\n          <div className=\"threads-list-item-col-last-poster\">\n            <span className=\"threads-list-item-last-poster\">\n              <Avatar size={32} />\n            </span>\n          </div>\n          <div className=\"threads-list-item-col-last-activity\">\n            <span className=\"threads-list-item-last-activity\">\n              <UIPreviewText width=\"60\" />\n            </span>\n          </div>\n        </div>\n      </li>\n    </ul>\n  </div>\n)\n\nexport default ThreadsListLoader\n","import React from \"react\"\n\nconst ThreadsListUpdatePrompt = ({ threads, onClick }) => (\n  <li className=\"list-group-item threads-list-update-prompt\">\n    <button\n      type=\"button\"\n      className=\"btn btn-block threads-list-update-prompt-btn\"\n      onClick={onClick}\n    >\n      <span className=\"material-icon\">cached</span>\n      <span className=\"threads-list-update-prompt-message\">\n        {interpolate(\n          ngettext(\n            \"There is %(threads)s new or updated thread. Click here to show it.\",\n            \"There are %(threads)s new or updated threads. Click here to show them.\",\n            threads\n          ),\n          { threads },\n          true\n        )}\n      </span>\n    </button>\n  </li>\n)\n\nexport default ThreadsListUpdatePrompt\n","import ThreadsList from \"./ThreadsList\"\n\nexport default ThreadsList\n","import React from \"react\"\nimport ThreadsListEmpty from \"./ThreadsListEmpty\"\nimport ThreadsListItem from \"./ThreadsListItem\"\nimport ThreadsListLoader from \"./ThreadsListLoader\"\nimport ThreadsListUpdatePrompt from \"./ThreadsListUpdatePrompt\"\n\nconst ThreadsList = ({\n  list,\n  categories,\n  category,\n  threads,\n  busyThreads,\n  selection,\n  isLoaded,\n  showOptions,\n  updatedThreads,\n  applyUpdate,\n  emptyMessage,\n}) => {\n  if (!isLoaded) {\n    return <ThreadsListLoader showOptions={showOptions} />\n  }\n\n  return (\n    <div className=\"threads-list\">\n      {threads.length > 0 ? (\n        <ul className=\"list-group\">\n          {updatedThreads > 0 && (\n            <ThreadsListUpdatePrompt\n              threads={updatedThreads}\n              onClick={applyUpdate}\n            />\n          )}\n          {threads.map((thread) => (\n            <ThreadsListItem\n              key={thread.id}\n              activeCategory={category}\n              categories={categories}\n              thread={thread}\n              showOptions={showOptions}\n              showSubscription={showOptions && list.type === \"subscribed\"}\n              isBusy={busyThreads.indexOf(thread.id) >= 0}\n              isSelected={selection.indexOf(thread.id) >= 0}\n            />\n          ))}\n        </ul>\n      ) : (\n        <ul className=\"list-group\">\n          {updatedThreads > 0 && (\n            <ThreadsListUpdatePrompt\n              threads={updatedThreads}\n              onClick={applyUpdate}\n            />\n          )}\n          <ThreadsListEmpty\n            category={category}\n            list={list}\n            message={emptyMessage}\n          />\n        </ul>\n      )}\n    </div>\n  )\n}\n\nexport default ThreadsList\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport {\n  compareGlobalWeight,\n  compareWeight,\n} from \"misago/components/threads/compare\"\nimport Container from \"misago/components/threads/container\"\nimport {\n  diffThreads,\n  getModerationActions,\n  getPageTitle,\n  getTitle,\n} from \"misago/components/threads/utils\"\nimport ThreadsList from \"misago/components/ThreadsList\"\nimport WithDropdown from \"misago/components/with-dropdown\"\nimport misago from \"misago/index\"\nimport * as select from \"misago/reducers/selection\"\nimport { append, deleteThread, hydrate, patch } from \"misago/reducers/threads\"\nimport ajax from \"misago/services/ajax\"\nimport polls from \"misago/services/polls\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport title from \"misago/services/page-title\"\nimport * as sets from \"misago/utils/sets\"\nimport {\n  PageHeaderHTMLMessage,\n  PageHeaderMessage,\n  PageHeaderPlain,\n} from \"../PageHeader\"\n\nexport default class extends WithDropdown {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isMounted: true,\n\n      isLoaded: false,\n      isBusy: false,\n\n      diff: {\n        results: [],\n      },\n\n      moderation: [],\n      busyThreads: [],\n\n      dropdown: false,\n      subcategories: [],\n\n      next: 0,\n    }\n\n    let category = this.getCategory()\n\n    if (misago.has(\"THREADS\")) {\n      this.initWithPreloadedData(category, misago.get(\"THREADS\"))\n    } else {\n      this.initWithoutPreloadedData(category)\n    }\n  }\n\n  getCategory() {\n    if (!this.props.route.category.special_role) {\n      return this.props.route.category.id\n    } else {\n      return null\n    }\n  }\n\n  initWithPreloadedData(category, data) {\n    this.state = Object.assign(this.state, {\n      moderation: getModerationActions(data.results),\n      subcategories: data.subcategories,\n      next: data.next,\n    })\n\n    this.startPolling(category)\n  }\n\n  initWithoutPreloadedData(category) {\n    this.loadThreads(category)\n  }\n\n  loadThreads(category, next = 0) {\n    ajax\n      .get(\n        this.props.options.api,\n        {\n          category: category,\n          list: this.props.route.list.type,\n          start: next || 0,\n        },\n        \"threads\"\n      )\n      .then(\n        (data) => {\n          if (!this.state.isMounted) {\n            // user changed route before loading completion\n            return\n          }\n\n          if (next === 0) {\n            store.dispatch(hydrate(data.results))\n          } else {\n            store.dispatch(append(data.results, this.getSorting()))\n          }\n\n          this.setState({\n            isLoaded: true,\n            isBusy: false,\n\n            moderation: getModerationActions(store.getState().threads),\n\n            subcategories: data.subcategories,\n\n            next: data.next,\n          })\n\n          this.startPolling(category)\n        },\n        (rejection) => {\n          snackbar.apiError(rejection)\n        }\n      )\n  }\n\n  startPolling(category) {\n    polls.start({\n      poll: \"threads\",\n      url: this.props.options.api,\n      data: {\n        category: category,\n        list: this.props.route.list.type,\n      },\n      frequency: 120 * 1000,\n      update: this.pollResponse,\n    })\n  }\n\n  componentDidMount() {\n    this.setPageTitle()\n\n    if (misago.has(\"THREADS\")) {\n      // unlike in other components, routes are root components for threads\n      // so we can't dispatch store action from constructor\n      store.dispatch(hydrate(misago.pop(\"THREADS\").results))\n\n      this.setState({\n        isLoaded: true,\n      })\n    }\n\n    store.dispatch(select.none())\n  }\n\n  componentWillUnmount() {\n    this.state.isMounted = false\n    polls.stop(\"threads\")\n  }\n\n  getTitle() {\n    if (this.props.options.title) {\n      return this.props.options.title\n    }\n\n    return getTitle(this.props.route)\n  }\n\n  setPageTitle() {\n    if (this.props.route.category.level || !misago.get(\"THREADS_ON_INDEX\")) {\n      title.set(getPageTitle(this.props.route))\n    } else if (this.props.options.title) {\n      title.set(this.props.options.title)\n    } else {\n      if (misago.get(\"SETTINGS\").index_title) {\n        document.title = misago.get(\"SETTINGS\").index_title\n      } else {\n        document.title = misago.get(\"SETTINGS\").forum_name\n      }\n    }\n  }\n\n  getSorting() {\n    if (this.props.route.category.level) {\n      return compareWeight\n    } else {\n      return compareGlobalWeight\n    }\n  }\n\n  // AJAX\n\n  loadMore = () => {\n    this.setState({\n      isBusy: true,\n    })\n\n    this.loadThreads(this.getCategory(), this.state.next)\n  }\n\n  pollResponse = (data) => {\n    this.setState({\n      diff: Object.assign({}, data, {\n        results: diffThreads(this.props.threads, data.results),\n      }),\n    })\n  }\n\n  addThreads = (threads) => {\n    store.dispatch(append(threads, this.getSorting()))\n  }\n\n  applyDiff = () => {\n    this.addThreads(this.state.diff.results)\n\n    this.setState(\n      Object.assign({}, this.state.diff, {\n        moderation: getModerationActions(store.getState().threads),\n\n        diff: {\n          results: [],\n        },\n      })\n    )\n  }\n\n  // Thread state utils\n\n  freezeThread = (thread) => {\n    this.setState(function (currentState) {\n      return {\n        busyThreads: sets.toggle(currentState.busyThreads, thread),\n      }\n    })\n  }\n\n  updateThread = (thread) => {\n    store.dispatch(patch(thread, thread, this.getSorting()))\n  }\n\n  deleteThread = (thread) => {\n    store.dispatch(deleteThread(thread))\n  }\n\n  getMoreButton() {\n    if (!this.state.next) return null\n\n    return (\n      <div className=\"pager-more\">\n        <Button\n          className=\"btn btn-default btn-outline\"\n          loading={this.state.isBusy || this.state.busyThreads.length}\n          onClick={this.loadMore}\n        >\n          {gettext(\"Show more\")}\n        </Button>\n      </div>\n    )\n  }\n\n  getClassName() {\n    let className = \"page page-threads\"\n    className += \" page-threads-\" + this.props.route.list.type\n    if (isIndex(this.props)) {\n      className += \" page-threads-index\"\n    }\n    if (this.props.route.category.css_class) {\n      className += \" page-threads-\" + this.props.route.category.css_class\n    }\n    return className\n  }\n\n  render() {\n    const root = this.props.route.categories[0]\n    const { category, list } = this.props.route\n    const specialRole = category.special_role\n\n    return (\n      <div className={this.getClassName()}>\n        {specialRole == \"root_category\" &&\n          misago.get(\"THREADS_ON_INDEX\") &&\n          misago.get(\"SETTINGS\").index_header && (\n            <PageHeaderPlain\n              header={misago.get(\"SETTINGS\").index_header}\n              message={\n                category.description && (\n                  <PageHeaderHTMLMessage message={category.description.html} />\n                )\n              }\n              styleName=\"forum-index\"\n            />\n          )}\n        {specialRole == \"root_category\" && !misago.get(\"THREADS_ON_INDEX\") && (\n          <PageHeaderPlain header={gettext(\"Threads\")} styleName=\"threads\" />\n        )}\n        {specialRole == \"private_threads\" && (\n          <PageHeaderPlain\n            header={this.props.options.title}\n            message={\n              this.props.options.pageLead && (\n                <PageHeaderMessage>\n                  <p>{this.props.options.pageLead}</p>\n                </PageHeaderMessage>\n              )\n            }\n            styleName=\"private-threads\"\n          />\n        )}\n        {!specialRole && (\n          <PageHeaderPlain\n            header={category.name}\n            message={\n              category.description && (\n                <PageHeaderHTMLMessage message={category.description.html} />\n              )\n            }\n            styleName={category.css_class || \"category-threads\"}\n          />\n        )}\n        <Container\n          api={this.props.options.api}\n          root={root}\n          route={this.props.route}\n          user={this.props.user}\n          pageLead={this.props.options.pageLead}\n          threads={this.props.threads}\n          threadsCount={this.state.count}\n          moderation={this.state.moderation}\n          selection={this.props.selection}\n          busyThreads={this.state.busyThreads}\n          addThreads={this.addThreads}\n          startThread={this.props.options.startThread}\n          freezeThread={this.freezeThread}\n          deleteThread={this.deleteThread}\n          updateThread={this.updateThread}\n          isLoaded={this.state.isLoaded}\n          isBusy={this.state.isBusy}\n        >\n          <ThreadsList\n            category={category}\n            categories={this.props.route.categoriesMap}\n            list={list}\n            selection={this.props.selection}\n            threads={this.props.threads}\n            updatedThreads={this.state.diff.results.length}\n            applyUpdate={this.applyDiff}\n            showOptions={!!this.props.user.id}\n            isLoaded={this.state.isLoaded}\n            busyThreads={this.state.busyThreads}\n            emptyMessage={this.props.options.emptyMessage}\n          />\n          {this.getMoreButton()}\n        </Container>\n      </div>\n    )\n  }\n}\n\nfunction isIndex(props) {\n  if (props.route.category.level || !misago.get(\"THREADS_ON_INDEX\"))\n    return false\n  if (props.options.title) return false\n\n  return true\n}\n","import { paths } from \"misago/components/threads/root\"\nimport misago from \"misago/index\"\nimport mount from \"misago/utils/routed-component\"\n\nconst PRIVATE_THREADS_LIST = \"misago:private-threads\"\n\nexport default function initializer(context) {\n  if (context.has(\"THREADS\") && context.has(\"CATEGORIES\")) {\n    mount({\n      paths: paths(context.get(\"user\"), getListOptions(context)),\n    })\n  }\n}\n\nexport function getListOptions(context) {\n  const currentLink = context.get(\"CURRENT_LINK\")\n  if (\n    currentLink.substr(0, PRIVATE_THREADS_LIST.length) === PRIVATE_THREADS_LIST\n  ) {\n    return {\n      api: context.get(\"PRIVATE_THREADS_API\"),\n      startThread: {\n        mode: \"START_PRIVATE\",\n        submit: misago.get(\"PRIVATE_THREADS_API\"),\n      },\n      title: gettext(\"Private threads\"),\n      pageLead: gettext(\n        \"Private threads are threads which only those that started them and those they have invited may see and participate in.\"\n      ),\n      emptyMessage: gettext(\"You aren't participating in any private threads.\"),\n    }\n  }\n\n  return {\n    api: context.get(\"THREADS_API\"),\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:threads\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import { connect } from \"react-redux\"\nimport Route from \"misago/components/threads/route\"\nimport misago from \"misago/index\"\n\nexport function getSelect(options) {\n  return function (store) {\n    return {\n      options: options,\n      selection: store.selection,\n      threads: store.threads,\n      tick: store.tick.tick,\n      user: store.auth.user,\n    }\n  }\n}\n\nexport function getLists(user) {\n  let lists = [\n    {\n      type: \"all\",\n      path: \"\",\n      name: gettext(\"All\"),\n      longName: gettext(\"All threads\"),\n    },\n  ]\n\n  if (user.id) {\n    lists.push({\n      type: \"my\",\n      path: \"my/\",\n      name: gettext(\"My\"),\n      longName: gettext(\"My threads\"),\n    })\n    lists.push({\n      type: \"new\",\n      path: \"new/\",\n      name: gettext(\"New\"),\n      longName: gettext(\"New threads\"),\n    })\n    lists.push({\n      type: \"unread\",\n      path: \"unread/\",\n      name: gettext(\"Unread\"),\n      longName: gettext(\"Unread threads\"),\n    })\n    lists.push({\n      type: \"subscribed\",\n      path: \"subscribed/\",\n      name: gettext(\"Subscribed\"),\n      longName: gettext(\"Subscribed threads\"),\n    })\n\n    if (user.acl.can_see_unapproved_content_lists) {\n      lists.push({\n        type: \"unapproved\",\n        path: \"unapproved/\",\n        name: gettext(\"Unapproved\"),\n        longName: gettext(\"Unapproved content\"),\n      })\n    }\n  }\n\n  return lists\n}\n\nexport function paths(user, mode) {\n  let lists = getLists(user)\n  let routes = []\n  let categoriesMap = {}\n\n  misago.get(\"CATEGORIES\").forEach(function (category) {\n    lists.forEach(function (list) {\n      categoriesMap[category.id] = category\n\n      routes.push({\n        path: category.url.index + list.path,\n        component: connect(getSelect(mode))(Route),\n\n        categories: misago.get(\"CATEGORIES\"),\n        categoriesMap,\n        category,\n\n        lists,\n        list,\n      })\n    })\n  })\n\n  return routes\n}\n","const MAX_RESULTS = 5\n\nexport default function (data) {\n  const filtered = data.filter((section) => {\n    return section.results.count > 0\n  })\n\n  return filtered.map((section) => {\n    return Object.assign({}, section, {\n      count: section.results.count,\n      results: section.results.results.slice(0, MAX_RESULTS),\n    })\n  })\n}\n","export const HEADER = \"HEADER\"\nexport const RESULT = \"RESULT\"\nexport const FOOTER = \"FOOTER\"\n","import React from \"react\"\n\nexport default function ({ value, onChange }) {\n  return (\n    <input\n      aria-haspopup=\"true\"\n      aria-expanded=\"false\"\n      aria-controls=\"dropdown-menu dropdown-search-results\"\n      autoComplete=\"off\"\n      className=\"form-control\"\n      value={value}\n      onChange={onChange}\n      placeholder={gettext(\"Search\")}\n      role=\"combobox\"\n      type=\"text\"\n    />\n  )\n}\n","import React from \"react\"\nimport Input from \"./input\"\n\nexport default function ({ children, onChange, query }) {\n  return (\n    <ul className=\"dropdown-menu dropdown-search-results\" role=\"menu\">\n      <li className=\"form-group\">\n        <Input value={query} onChange={onChange} />\n      </li>\n      {children}\n    </ul>\n  )\n}\n","import React from \"react\"\n\nexport default function () {\n  return (\n    <li className=\"dropdown-search-message\">\n      {gettext(\"Search returned no results.\")}\n    </li>\n  )\n}\n","import React from \"react\"\nimport Loader from \"misago/components/loader\"\n\nexport default function ({ message }) {\n  return (\n    <li className=\"dropdown-search-loader\">\n      <Loader />\n    </li>\n  )\n}\n","import React from \"react\"\n\nexport default function ({ provider, query }) {\n  const url = provider.url + \"?q=\" + encodeURI(query)\n  const label = ngettext(\n    'See full \"%(provider)s\" results page with %(count)s result.',\n    'See full \"%(provider)s\" results page with %(count)s results.',\n    provider.count\n  )\n\n  return (\n    <li className=\"dropdown-search-footer\">\n      <a href={url}>\n        {interpolate(\n          label,\n          {\n            count: provider.count,\n            provider: provider.name,\n          },\n          true\n        )}\n      </a>\n    </li>\n  )\n}\n","import React from \"react\"\n\nexport default function ({ provider }) {\n  return <li className=\"dropdown-search-header\">{provider.name}</li>\n}\n","import moment from \"moment\"\nimport React from \"react\"\n\nexport default function ({ result }) {\n  const { poster, thread } = result\n  const footer = gettext(\n    \"Posted by %(poster)s on %(posted_on)s in %(category)s.\"\n  )\n\n  return (\n    <li>\n      <a href={result.url.index} className=\"dropdown-search-thread\">\n        <h5>{thread.title}</h5>\n        <small className=\"dropdown-search-post-content\">\n          {$(result.content).text()}\n        </small>\n        <small className=\"dropdown-search-post-footer\">\n          {interpolate(\n            footer,\n            {\n              category: result.category.name,\n              posted_on: moment(result.posted_on).format(\"LL\"),\n              poster: result.poster_name,\n            },\n            true\n          )}\n        </small>\n      </a>\n    </li>\n  )\n}\n","import moment from \"moment\"\nimport React from \"react\"\nimport Avatar from \"misago/components/avatar\"\n\nexport default function ({ result }) {\n  const { rank } = result\n\n  const detail = gettext(\"%(title)s, joined on %(joined_on)s\")\n  const title = result.title || rank.title || rank.name\n\n  return (\n    <li>\n      <a href={result.url} className=\"dropdown-search-user\">\n        <div className=\"media\">\n          <div className=\"media-left\">\n            <Avatar size={38} user={result} />\n          </div>\n          <div className=\"media-body\">\n            <h5 className=\"media-heading\">{result.username}</h5>\n            <small>\n              {interpolate(\n                detail,\n                {\n                  title,\n                  joined_on: moment(result.joined_on).format(\"LL\"),\n                },\n                true\n              )}\n            </small>\n          </div>\n        </div>\n      </a>\n    </li>\n  )\n}\n","import React from \"react\"\nimport Thread from \"./thread\"\nimport User from \"./user\"\n\nexport default function ({ provider, result }) {\n  if (provider.id === \"threads\") {\n    return <Thread result={result} />\n  }\n\n  return <User result={result} />\n}\n","import React from \"react\"\nimport { HEADER, FOOTER } from \"../constants\"\nimport Footer from \"./footer\"\nimport Header from \"./header\"\nimport Result from \"./result\"\n\nexport default function ({ provider, result, type, query }) {\n  if (type === HEADER) {\n    return <Header provider={provider} />\n  } else if (type === FOOTER) {\n    return <Footer provider={provider} query={query} />\n  }\n\n  return <Result provider={provider} result={result} />\n}\n","import { HEADER, RESULT, FOOTER } from \"./constants\"\n\nexport default function (results) {\n  const flatlist = []\n  flattenProviders(results, flatlist)\n  return flatlist\n}\n\nfunction flattenProviders(results, flatlist) {\n  const arrayLength = results.length\n  for (var i = 0; i < arrayLength; i++) {\n    const provider = results[i]\n\n    flatlist.push({\n      provider,\n      type: HEADER,\n    })\n\n    flattenProvider(provider, flatlist)\n  }\n}\n\nfunction flattenProvider(provider, flatlist) {\n  const arrayLength = provider.results.length\n  for (var i = 0; i < arrayLength; i++) {\n    const result = provider.results[i]\n    flatlist.push({\n      provider,\n      result,\n      type: RESULT,\n    })\n  }\n\n  flatlist.push({\n    provider,\n    type: FOOTER,\n  })\n}\n","import React from \"react\"\nimport { RESULT } from \"./constants\"\nimport DropdownMenu from \"./dropdown-menu\"\nimport Empty from \"./empty\"\nimport Loader from \"./loader\"\nimport Result from \"./result\"\nimport flattenResults from \"./flatten-results\"\n\nexport default function ({ isLoading, onChange, results, query }) {\n  if (!query.trim().length) {\n    return <DropdownMenu onChange={onChange} query={query} />\n  }\n\n  if (results.length) {\n    const flatResults = flattenResults(results)\n\n    return (\n      <DropdownMenu onChange={onChange} query={query}>\n        {flatResults.map((props) => {\n          const { type, provider, result } = props\n\n          if (type === RESULT) {\n            return (\n              <Result\n                key={[provider.id, type, result.id].join(\"_\")}\n                {...props}\n              />\n            )\n          }\n\n          return (\n            <Result\n              key={[provider.id, type].join(\"_\")}\n              query={query}\n              {...props}\n            />\n          )\n        })}\n      </DropdownMenu>\n    )\n  } else if (isLoading) {\n    return (\n      <DropdownMenu onChange={onChange} query={query}>\n        <Loader />\n      </DropdownMenu>\n    )\n  }\n\n  return (\n    <DropdownMenu onChange={onChange} query={query}>\n      <Empty />\n    </DropdownMenu>\n  )\n}\n","import React from \"react\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport misago from \"misago\"\nimport cleanResults from \"./clean-results\"\nimport Dropdown from \"./dropdown\"\n\nexport default class extends React.Component {\n  constructor() {\n    super()\n\n    this.state = {\n      isLoading: false,\n      isOpen: false,\n      query: \"\",\n      results: [],\n    }\n\n    this.intervalId = null\n  }\n\n  componentDidMount() {\n    document.addEventListener(\"mousedown\", this.onDocumentMouseDown)\n    document.addEventListener(\"keydown\", this.onEscape)\n  }\n\n  componentWillUnmount() {\n    document.removeEventListener(\"mousedown\", this.onDocumentMouseDown)\n    document.removeEventListener(\"keydown\", this.onEscape)\n  }\n\n  onToggle = (ev) => {\n    this.setState((prevState, props) => {\n      if (!prevState.isOpen) {\n        window.setTimeout(() => {\n          this.container.querySelector(\"input\").focus()\n        }, 100)\n      }\n\n      return { isOpen: !prevState.isOpen }\n    })\n  }\n\n  onDocumentMouseDown = (ev) => {\n    let closeResults = true\n    let node = ev.target\n\n    while (node !== null && node !== document) {\n      if (node === this.container) {\n        closeResults = false\n        return\n      }\n\n      node = node.parentNode\n    }\n\n    if (closeResults) {\n      this.setState({ isOpen: false })\n    }\n  }\n\n  onEscape = (ev) => {\n    if (ev.key === \"Escape\") {\n      this.setState({ isOpen: false })\n    }\n  }\n\n  onChange = (ev) => {\n    const query = ev.target.value\n\n    this.setState({ query })\n    this.loadResults(query.trim())\n  }\n\n  loadResults(query) {\n    if (!query.length) return\n\n    const delay = 300 + Math.random() * 300\n\n    if (this.intervalId) {\n      window.clearTimeout(this.intervalId)\n    }\n\n    this.setState({ isLoading: true })\n\n    this.intervalId = window.setTimeout(() => {\n      ajax.get(misago.get(\"SEARCH_API\"), { q: query }).then(\n        (data) => {\n          this.setState({\n            intervalId: null,\n            isLoading: false,\n            results: cleanResults(data),\n          })\n        },\n        (rejection) => {\n          snackbar.apiError(rejection)\n\n          this.setState({\n            intervalId: null,\n            isLoading: false,\n            results: [],\n          })\n        }\n      )\n    }, delay)\n  }\n\n  render() {\n    let className = \"navbar-search dropdown\"\n    if (this.state.isOpen) className += \" open\"\n\n    return (\n      <div\n        className={className}\n        ref={(container) => (this.container = container)}\n      >\n        <a\n          aria-haspopup=\"true\"\n          aria-expanded=\"false\"\n          className=\"navbar-icon\"\n          data-toggle=\"dropdown\"\n          href={misago.get(\"SEARCH_URL\")}\n          onClick={this.onToggle}\n        >\n          <i className=\"material-icon\">search</i>\n        </a>\n        <Dropdown\n          isLoading={this.state.isLoading}\n          onChange={this.onChange}\n          results={this.state.results}\n          query={this.state.query}\n        />\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport zxcvbn from \"misago/services/zxcvbn\"\n\nexport const STYLES = [\n  \"progress-bar-danger\",\n  \"progress-bar-warning\",\n  \"progress-bar-warning\",\n  \"progress-bar-primary\",\n  \"progress-bar-success\",\n]\n\nexport const LABELS = [\n  gettext(\"Entered password is very weak.\"),\n  gettext(\"Entered password is weak.\"),\n  gettext(\"Entered password is average.\"),\n  gettext(\"Entered password is strong.\"),\n  gettext(\"Entered password is very strong.\"),\n]\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this._score = 0\n    this._password = null\n    this._inputs = []\n\n    this.state = {\n      loaded: false,\n    }\n  }\n\n  componentDidMount() {\n    zxcvbn.load().then(() => {\n      this.setState({ loaded: true })\n    })\n  }\n\n  getScore(password, inputs) {\n    let cacheStale = false\n\n    if (password !== this._password) {\n      cacheStale = true\n    }\n\n    if (inputs.length !== this._inputs.length) {\n      cacheStale = true\n    } else {\n      inputs.map((value, i) => {\n        if (value.trim() !== this._inputs[i]) {\n          cacheStale = true\n        }\n      })\n    }\n\n    if (cacheStale) {\n      this._score = zxcvbn.scorePassword(password, inputs)\n      this._password = password\n      this._inputs = inputs.map(function (value) {\n        return value.trim()\n      })\n    }\n\n    return this._score\n  }\n\n  render() {\n    if (!this.state.loaded) return null\n\n    let score = this.getScore(this.props.password, this.props.inputs)\n\n    return (\n      <div className=\"help-block password-strength\">\n        <div className=\"progress\">\n          <div\n            className={\"progress-bar \" + STYLES[score]}\n            style={{ width: 20 + 20 * score + \"%\" }}\n            role=\"progress-bar\"\n            aria-valuenow={score}\n            aria-valuemin=\"0\"\n            aria-valuemax=\"4\"\n          >\n            <span className=\"sr-only\">{LABELS[score]}</span>\n          </div>\n        </div>\n        <p className=\"text-small\">{LABELS[score]}</p>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport PasswordStrength from \"misago/components/password-strength\"\nimport RegisterLegalFootnote from \"misago/components/RegisterLegalFootnote\"\nimport StartSocialAuth from \"misago/components/StartSocialAuth\"\nimport misago from \"misago\"\nimport ajax from \"misago/services/ajax\"\nimport auth from \"misago/services/auth\"\nimport captcha from \"misago/services/captcha\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport showBannedPage from \"misago/utils/banned-page\"\nimport * as validators from \"misago/utils/validators\"\n\nexport class RegisterForm extends Form {\n  constructor(props) {\n    super(props)\n\n    const { username, password } = this.props.criteria\n\n    let passwordMinLength = 0\n    password.forEach((item) => {\n      if (item.name === \"MinimumLengthValidator\") {\n        passwordMinLength = item.min_length\n      }\n    })\n\n    const formValidators = {\n      username: [\n        validators.usernameContent(),\n        validators.usernameMinLength(username.min_length),\n        validators.usernameMaxLength(username.max_length),\n      ],\n      email: [validators.email()],\n      password: [validators.passwordMinLength(passwordMinLength)],\n      captcha: captcha.validator(),\n    }\n\n    if (!!misago.get(\"TERMS_OF_SERVICE_ID\")) {\n      formValidators.termsOfService = [validators.requiredTermsOfService()]\n    }\n\n    if (!!misago.get(\"PRIVACY_POLICY_ID\")) {\n      formValidators.privacyPolicy = [validators.requiredPrivacyPolicy()]\n    }\n\n    this.state = {\n      isLoading: false,\n\n      username: \"\",\n      email: \"\",\n      password: \"\",\n      captcha: \"\",\n\n      termsOfService: null,\n      privacyPolicy: null,\n\n      validators: formValidators,\n      errors: {},\n    }\n  }\n\n  clean() {\n    if (this.isValid()) {\n      return true\n    } else {\n      snackbar.error(gettext(\"Form contains errors.\"))\n      this.setState({\n        errors: this.validate(),\n      })\n      return false\n    }\n  }\n\n  send() {\n    return ajax.post(misago.get(\"USERS_API\"), {\n      username: this.state.username,\n      email: this.state.email,\n      password: this.state.password,\n      captcha: this.state.captcha,\n      terms_of_service: this.state.termsOfService,\n      privacy_policy: this.state.privacyPolicy,\n    })\n  }\n\n  handleSuccess(apiResponse) {\n    this.props.callback(apiResponse)\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      this.setState({\n        errors: Object.assign({}, this.state.errors, rejection),\n      })\n\n      if (rejection.__all__ && rejection.__all__.length > 0) {\n        snackbar.error(rejection.__all__[0])\n      } else {\n        snackbar.error(gettext(\"Form contains errors.\"))\n      }\n    } else if (rejection.status === 403 && rejection.ban) {\n      showBannedPage(rejection.ban)\n      modal.hide()\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  handlePrivacyPolicyChange = (event) => {\n    const value = event.target.value\n    this.handleToggleAgreement(\"privacyPolicy\", value)\n  }\n\n  handleTermsOfServiceChange = (event) => {\n    const value = event.target.value\n    this.handleToggleAgreement(\"termsOfService\", value)\n  }\n\n  handleToggleAgreement = (agreement, value) => {\n    this.setState((prevState, props) => {\n      if (prevState[agreement] === null) {\n        const errors = { ...prevState.errors, [agreement]: null }\n        return { errors, [agreement]: value }\n      }\n\n      const validator = this.state.validators[agreement][0]\n      const errors = { ...prevState.errors, [agreement]: [validator(null)] }\n      return { errors, [agreement]: null }\n    })\n  }\n\n  render() {\n    return (\n      <div className=\"modal-dialog modal-register\" role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              type=\"button\"\n              className=\"close\"\n              data-dismiss=\"modal\"\n              aria-label={gettext(\"Close\")}\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Register\")}</h4>\n          </div>\n          <form onSubmit={this.handleSubmit}>\n            <input type=\"type\" style={{ display: \"none\" }} />\n            <input type=\"password\" style={{ display: \"none\" }} />\n            <div className=\"modal-body\">\n              <StartSocialAuth\n                buttonClassName=\"col-xs-12 col-sm-6\"\n                buttonLabel={gettext(\"Join with %(site)s\")}\n                formLabel={gettext(\"Or create forum account:\")}\n              />\n\n              <FormGroup\n                label={gettext(\"Username\")}\n                for=\"id_username\"\n                validation={this.state.errors.username}\n              >\n                <input\n                  type=\"text\"\n                  id=\"id_username\"\n                  className=\"form-control\"\n                  aria-describedby=\"id_username_status\"\n                  disabled={this.state.isLoading}\n                  onChange={this.bindInput(\"username\")}\n                  value={this.state.username}\n                />\n              </FormGroup>\n\n              <FormGroup\n                label={gettext(\"E-mail\")}\n                for=\"id_email\"\n                validation={this.state.errors.email}\n              >\n                <input\n                  type=\"text\"\n                  id=\"id_email\"\n                  className=\"form-control\"\n                  aria-describedby=\"id_email_status\"\n                  disabled={this.state.isLoading}\n                  onChange={this.bindInput(\"email\")}\n                  value={this.state.email}\n                />\n              </FormGroup>\n\n              <FormGroup\n                label={gettext(\"Password\")}\n                for=\"id_password\"\n                validation={this.state.errors.password}\n                extra={\n                  <PasswordStrength\n                    password={this.state.password}\n                    inputs={[this.state.username, this.state.email]}\n                  />\n                }\n              >\n                <input\n                  type=\"password\"\n                  id=\"id_password\"\n                  className=\"form-control\"\n                  aria-describedby=\"id_password_status\"\n                  disabled={this.state.isLoading}\n                  onChange={this.bindInput(\"password\")}\n                  value={this.state.password}\n                />\n              </FormGroup>\n\n              {captcha.component({\n                form: this,\n              })}\n\n              <RegisterLegalFootnote\n                errors={this.state.errors}\n                privacyPolicy={this.state.privacyPolicy}\n                termsOfService={this.state.termsOfService}\n                onPrivacyPolicyChange={this.handlePrivacyPolicyChange}\n                onTermsOfServiceChange={this.handleTermsOfServiceChange}\n              />\n            </div>\n            <div className=\"modal-footer\">\n              <button\n                className=\"btn btn-default\"\n                data-dismiss=\"modal\"\n                disabled={this.state.isLoading}\n                type=\"button\"\n              >\n                {gettext(\"Cancel\")}\n              </button>\n              <Button className=\"btn-primary\" loading={this.state.isLoading}>\n                {gettext(\"Register account\")}\n              </Button>\n            </div>\n          </form>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport class RegisterComplete extends React.Component {\n  getLead() {\n    if (this.props.activation === \"user\") {\n      return gettext(\n        \"%(username)s, your account has been created but you need to activate it before you will be able to sign in.\"\n      )\n    } else if (this.props.activation === \"admin\") {\n      return gettext(\n        \"%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in.\"\n      )\n    }\n  }\n\n  getSubscript() {\n    if (this.props.activation === \"user\") {\n      return gettext(\n        \"We have sent an e-mail to %(email)s with link that you have to click to activate your account.\"\n      )\n    } else if (this.props.activation === \"admin\") {\n      return gettext(\n        \"We will send an e-mail to %(email)s when this takes place.\"\n      )\n    }\n  }\n\n  render() {\n    return (\n      <div\n        className=\"modal-dialog modal-message modal-register\"\n        role=\"document\"\n      >\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              type=\"button\"\n              className=\"close\"\n              data-dismiss=\"modal\"\n              aria-label={gettext(\"Close\")}\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Registration complete\")}</h4>\n          </div>\n          <div className=\"modal-body\">\n            <div className=\"message-icon\">\n              <span className=\"material-icon\">info_outline</span>\n            </div>\n            <div className=\"message-body\">\n              <p className=\"lead\">\n                {interpolate(\n                  this.getLead(),\n                  { username: this.props.username },\n                  true\n                )}\n              </p>\n              <p>\n                {interpolate(\n                  this.getSubscript(),\n                  { email: this.props.email },\n                  true\n                )}\n              </p>\n              <button\n                className=\"btn btn-default\"\n                data-dismiss=\"modal\"\n                type=\"button\"\n              >\n                {gettext(\"Ok\")}\n              </button>\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      complete: false,\n    }\n  }\n\n  completeRegistration = (apiResponse) => {\n    if (apiResponse.activation === \"active\") {\n      modal.hide()\n      auth.signIn(apiResponse)\n    } else {\n      this.setState({\n        complete: apiResponse,\n      })\n    }\n  }\n\n  render() {\n    if (this.state.complete) {\n      return (\n        <RegisterComplete\n          activation={this.state.complete.activation}\n          email={this.state.complete.email}\n          username={this.state.complete.username}\n        />\n      )\n    }\n\n    return <RegisterForm callback={this.completeRegistration} {...this.props} />\n  }\n}\n","import React from \"react\"\nimport Loader from \"misago/components/loader\"\nimport RegisterForm from \"misago/components/register.js\"\nimport ajax from \"misago/services/ajax\"\nimport captcha from \"misago/services/captcha\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n      isLoaded: false,\n\n      criteria: null,\n    }\n  }\n\n  showRegisterForm = () => {\n    if (misago.get(\"SETTINGS\").account_activation === \"closed\") {\n      snackbar.info(gettext(\"New registrations are currently disabled.\"))\n    } else if (this.state.isLoaded) {\n      modal.show(<RegisterForm criteria={this.state.criteria} />)\n    } else {\n      this.setState({ isLoading: true })\n\n      Promise.all([\n        captcha.load(),\n        ajax.get(misago.get(\"AUTH_CRITERIA_API\")),\n      ]).then(\n        (result) => {\n          this.setState({\n            isLoading: false,\n            isLoaded: true,\n            criteria: result[1],\n          })\n\n          modal.show(<RegisterForm criteria={result[1]} />)\n        },\n        () => {\n          this.setState({ isLoading: false })\n\n          snackbar.error(\n            gettext(\"Registration is currently unavailable due to an error.\")\n          )\n        }\n      )\n    }\n  }\n\n  getClassName() {\n    return this.props.className + (this.state.isLoading ? \" btn-loading\" : \"\")\n  }\n\n  render() {\n    return (\n      <button\n        className={\"btn \" + this.getClassName()}\n        disabled={this.state.isLoading}\n        onClick={this.showRegisterForm}\n        type=\"button\"\n      >\n        {gettext(\"Register\")}\n        {this.state.isLoading ? <Loader /> : null}\n      </button>\n    )\n  }\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport NavbarSearch from \"misago/components/navbar-search\"\nimport RegisterButton from \"misago/components/register-button\"\nimport SignInModal from \"misago/components/sign-in.js\"\nimport misago from \"misago\"\nimport dropdown from \"misago/services/mobile-navbar-dropdown\"\nimport modal from \"misago/services/modal\"\n\nexport class GuestMenu extends React.Component {\n  showSignInModal() {\n    modal.show(SignInModal)\n  }\n\n  render() {\n    const delegateAuth = misago.get(\"SETTINGS\").DELEGATE_AUTH\n  \n    return (\n      <ul\n        className=\"dropdown-menu user-dropdown dropdown-menu-right\"\n        role=\"menu\"\n      >\n        <li className=\"guest-preview\">\n          <h4>{gettext(\"You are browsing as guest.\")}</h4>\n          <p>\n            {gettext(\n              \"Sign in or register to start and participate in discussions.\"\n            )}\n          </p>\n          {delegateAuth ? (\n            <div className=\"row\">\n              <div className=\"col-xs-12\">\n                <a\n                  className=\"btn btn-default btn-sign-in btn-block\"\n                  href={misago.get(\"SETTINGS\").LOGIN_URL}\n                >\n                  {gettext(\"Sign in\")}\n                </a>\n              </div>\n            </div>\n          ) : (\n            <div className=\"row\">\n              <div className=\"col-xs-6\">\n                <button\n                  className=\"btn btn-default btn-sign-in btn-block\"\n                  onClick={this.showSignInModal}\n                  type=\"button\"\n                >\n                  {gettext(\"Sign in\")}\n                </button>\n              </div>\n              <div className=\"col-xs-6\">\n                <RegisterButton className=\"btn-primary btn-register btn-block\">\n                  {gettext(\"Register\")}\n                </RegisterButton>\n              </div>\n            </div>\n          )}\n        </li>\n      </ul>\n    )\n  }\n}\n\nexport class GuestNav extends GuestMenu {\n  render() {\n    if (misago.get(\"SETTINGS\").DELEGATE_AUTH)  {\n      return (\n        <div className=\"nav nav-guest\">\n          <a\n            className=\"btn navbar-btn btn-default btn-sign-in\"\n            href={misago.get(\"SETTINGS\").LOGIN_URL}\n          >\n            {gettext(\"Sign in\")}\n          </a>\n          <div className=\"navbar-left\">\n            <NavbarSearch />\n          </div>\n        </div>\n      )\n    }\n\n    return (\n      <div className=\"nav nav-guest\">\n        <button\n          className=\"btn navbar-btn btn-default btn-sign-in\"\n          onClick={this.showSignInModal}\n          type=\"button\"\n        >\n          {gettext(\"Sign in\")}\n        </button>\n        <RegisterButton className=\"navbar-btn btn-primary btn-register\">\n          {gettext(\"Register\")}\n        </RegisterButton>\n        <div className=\"navbar-left\">\n          <NavbarSearch />\n        </div>\n      </div>\n    )\n  }\n}\n\nexport class CompactGuestNav extends React.Component {\n  showGuestMenu() {\n    dropdown.show(GuestMenu)\n  }\n\n  render() {\n    return (\n      <button type=\"button\" onClick={this.showGuestMenu}>\n        <Avatar size=\"64\" />\n      </button>\n    )\n  }\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport Button from \"misago/components/button\"\nimport Loader from \"misago/components/loader\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n    }\n  }\n\n  callApi(avatarType) {\n    if (this.state.isLoading) {\n      return false\n    }\n\n    this.setState({\n      isLoading: true,\n    })\n\n    ajax\n      .post(this.props.user.api.avatar, {\n        avatar: avatarType,\n      })\n      .then(\n        (response) => {\n          this.setState({\n            isLoading: false,\n          })\n\n          snackbar.success(response.detail)\n          this.props.onComplete(response)\n        },\n        (rejection) => {\n          if (rejection.status === 400) {\n            snackbar.error(rejection.detail)\n            this.setState({\n              isLoading: false,\n            })\n          } else {\n            this.props.showError(rejection)\n          }\n        }\n      )\n  }\n\n  setGravatar = () => {\n    this.callApi(\"gravatar\")\n  }\n\n  setGenerated = () => {\n    this.callApi(\"generated\")\n  }\n\n  getGravatarButton() {\n    if (this.props.options.gravatar) {\n      return (\n        <Button\n          onClick={this.setGravatar}\n          disabled={this.state.isLoading}\n          className=\"btn-default btn-block btn-avatar-gravatar\"\n        >\n          {gettext(\"Download my Gravatar\")}\n        </Button>\n      )\n    } else {\n      return null\n    }\n  }\n\n  getCropButton() {\n    if (!this.props.options.crop_src) return null\n\n    return (\n      <Button\n        className=\"btn-default btn-block btn-avatar-crop\"\n        disabled={this.state.isLoading}\n        onClick={this.props.showCrop}\n      >\n        {gettext(\"Re-crop uploaded image\")}\n      </Button>\n    )\n  }\n\n  getUploadButton() {\n    if (!this.props.options.upload) return null\n\n    return (\n      <Button\n        className=\"btn-default btn-block btn-avatar-upload\"\n        disabled={this.state.isLoading}\n        onClick={this.props.showUpload}\n      >\n        {gettext(\"Upload new image\")}\n      </Button>\n    )\n  }\n\n  getGalleryButton() {\n    if (!this.props.options.galleries) return null\n\n    return (\n      <Button\n        className=\"btn-default btn-block btn-avatar-gallery\"\n        disabled={this.state.isLoading}\n        onClick={this.props.showGallery}\n      >\n        {gettext(\"Pick avatar from gallery\")}\n      </Button>\n    )\n  }\n\n  getAvatarPreview() {\n    let userPeview = {\n      id: this.props.user.id,\n      avatars: this.props.options.avatars,\n    }\n\n    if (this.state.isLoading) {\n      return (\n        <div className=\"avatar-preview preview-loading\">\n          <Avatar size=\"200\" user={userPeview} />\n          <Loader />\n        </div>\n      )\n    }\n\n    return (\n      <div className=\"avatar-preview\">\n        <Avatar size=\"200\" user={userPeview} />\n      </div>\n    )\n  }\n\n  render() {\n    return (\n      <div className=\"modal-body modal-avatar-index\">\n        <div className=\"row\">\n          <div className=\"col-md-5\">{this.getAvatarPreview()}</div>\n          <div className=\"col-md-7\">\n            {this.getGravatarButton()}\n\n            <Button\n              onClick={this.setGenerated}\n              disabled={this.state.isLoading}\n              className=\"btn-default btn-block btn-avatar-generate\"\n            >\n              {gettext(\"Generate my individual avatar\")}\n            </Button>\n\n            {this.getCropButton()}\n            {this.getUploadButton()}\n            {this.getGalleryButton()}\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport Button from \"misago/components/button\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n      deviceRatio: 1,\n    }\n  }\n\n  getAvatarSize() {\n    if (this.props.upload) {\n      return this.props.options.crop_tmp.size\n    } else {\n      return this.props.options.crop_src.size\n    }\n  }\n\n  getImagePath() {\n    if (this.props.upload) {\n      return this.props.dataUrl\n    } else {\n      return this.props.options.crop_src.url\n    }\n  }\n\n  componentDidMount() {\n    let cropit = $(\".crop-form\")\n    let cropperWidth = this.getAvatarSize()\n\n    const initialWidth = cropit.width()\n    while (initialWidth < cropperWidth) {\n      cropperWidth = cropperWidth / 2\n    }\n\n    const deviceRatio = this.getAvatarSize() / cropperWidth\n\n    cropit.width(cropperWidth)\n\n    cropit.cropit({\n      width: cropperWidth,\n      height: cropperWidth,\n      exportZoom: deviceRatio,\n      imageState: {\n        src: this.getImagePath(),\n      },\n      onImageLoaded: () => {\n        if (this.props.upload) {\n          // center uploaded image\n          let zoomLevel = cropit.cropit(\"zoom\")\n          let imageSize = cropit.cropit(\"imageSize\")\n\n          // is it wider than taller?\n          if (imageSize.width > imageSize.height) {\n            let displayedWidth = imageSize.width * zoomLevel\n            let offsetX = (displayedWidth - this.getAvatarSize()) / -2\n\n            cropit.cropit(\"offset\", {\n              x: offsetX,\n              y: 0,\n            })\n          } else if (imageSize.width < imageSize.height) {\n            let displayedHeight = imageSize.height * zoomLevel\n            let offsetY = (displayedHeight - this.getAvatarSize()) / -2\n\n            cropit.cropit(\"offset\", {\n              x: 0,\n              y: offsetY,\n            })\n          } else {\n            cropit.cropit(\"offset\", {\n              x: 0,\n              y: 0,\n            })\n          }\n        } else {\n          // use preserved crop\n          let crop = this.props.options.crop_src.crop\n\n          if (crop) {\n            cropit.cropit(\"zoom\", crop.zoom)\n            cropit.cropit(\"offset\", {\n              x: crop.x,\n              y: crop.y,\n            })\n          }\n        }\n      },\n    })\n  }\n\n  componentWillUnmount() {\n    $(\".crop-form\").cropit(\"disable\")\n  }\n\n  cropAvatar = () => {\n    if (this.state.isLoading) {\n      return false\n    }\n\n    this.setState({\n      isLoading: true,\n    })\n\n    let avatarType = this.props.upload ? \"crop_tmp\" : \"crop_src\"\n    let cropit = $(\".crop-form\")\n\n    const deviceRatio = cropit.cropit(\"exportZoom\")\n    const cropitOffset = cropit.cropit(\"offset\")\n\n    ajax\n      .post(this.props.user.api.avatar, {\n        avatar: avatarType,\n        crop: {\n          offset: {\n            x: cropitOffset.x * deviceRatio,\n            y: cropitOffset.y * deviceRatio,\n          },\n          zoom: cropit.cropit(\"zoom\") * deviceRatio,\n        },\n      })\n      .then(\n        (data) => {\n          this.props.onComplete(data)\n          snackbar.success(data.detail)\n        },\n        (rejection) => {\n          if (rejection.status === 400) {\n            snackbar.error(rejection.detail)\n            this.setState({\n              isLoading: false,\n            })\n          } else {\n            this.props.showError(rejection)\n          }\n        }\n      )\n  }\n\n  render() {\n    return (\n      <div>\n        <div className=\"modal-body modal-avatar-crop\">\n          <div className=\"crop-form\">\n            <div className=\"cropit-preview\" />\n            <input type=\"range\" className=\"cropit-image-zoom-input\" />\n          </div>\n        </div>\n        <div className=\"modal-footer\">\n          <div className=\"col-md-6 col-md-offset-3\">\n            <Button\n              onClick={this.cropAvatar}\n              loading={this.state.isLoading}\n              className=\"btn-primary btn-block\"\n            >\n              {this.props.upload\n                ? gettext(\"Set avatar\")\n                : gettext(\"Crop image\")}\n            </Button>\n\n            <Button\n              onClick={this.props.showIndex}\n              disabled={this.state.isLoading}\n              className=\"btn-default btn-block\"\n            >\n              {gettext(\"Cancel\")}\n            </Button>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport AvatarCrop from \"misago/components/change-avatar/crop\"\nimport Button from \"misago/components/button\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport fileSize from \"misago/utils/file-size\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      image: null,\n      preview: null,\n      progress: 0,\n      uploaded: null,\n      dataUrl: null,\n    }\n  }\n\n  validateFile(image) {\n    if (image.size > this.props.options.upload.limit) {\n      return interpolate(\n        gettext(\"Selected file is too big. (%(filesize)s)\"),\n        {\n          filesize: fileSize(image.size),\n        },\n        true\n      )\n    }\n\n    let invalidTypeMsg = gettext(\"Selected file type is not supported.\")\n    if (\n      this.props.options.upload.allowed_mime_types.indexOf(image.type) === -1\n    ) {\n      return invalidTypeMsg\n    }\n\n    let extensionFound = false\n    let loweredFilename = image.name.toLowerCase()\n    this.props.options.upload.allowed_extensions.map(function (extension) {\n      if (loweredFilename.substr(extension.length * -1) === extension) {\n        extensionFound = true\n      }\n    })\n\n    if (!extensionFound) {\n      return invalidTypeMsg\n    }\n\n    return false\n  }\n\n  pickFile = () => {\n    document.getElementById(\"avatar-hidden-upload\").click()\n  }\n\n  uploadFile = () => {\n    let image = document.getElementById(\"avatar-hidden-upload\").files[0]\n    if (!image) return\n\n    let validationError = this.validateFile(image)\n    if (validationError) {\n      snackbar.error(validationError)\n      return\n    }\n\n    this.setState({\n      image,\n      preview: URL.createObjectURL(image),\n      progress: 0,\n    })\n\n    let data = new FormData()\n    data.append(\"avatar\", \"upload\")\n    data.append(\"image\", image)\n\n    ajax\n      .upload(this.props.user.api.avatar, data, (progress) => {\n        this.setState({\n          progress,\n        })\n      })\n      .then(\n        (data) => {\n          this.setState({\n            options: data,\n            uploaded: data.detail,\n          })\n\n          snackbar.info(\n            gettext(\"Your image has been uploaded and you may now crop it.\")\n          )\n        },\n        (rejection) => {\n          if (rejection.status === 400 || rejection.status === 413) {\n            snackbar.error(rejection.detail)\n            this.setState({\n              isLoading: false,\n              image: null,\n              progress: 0,\n            })\n          } else {\n            this.props.showError(rejection)\n          }\n        }\n      )\n  }\n\n  getUploadRequirements(options) {\n    let extensions = options.allowed_extensions.map(function (extension) {\n      return extension.substr(1)\n    })\n\n    return interpolate(\n      gettext(\"%(files)s files smaller than %(limit)s\"),\n      {\n        files: extensions.join(\", \"),\n        limit: fileSize(options.limit),\n      },\n      true\n    )\n  }\n\n  getUploadButton() {\n    return (\n      <div className=\"modal-body modal-avatar-upload\">\n        <Button className=\"btn-pick-file\" onClick={this.pickFile}>\n          <div className=\"material-icon\">input</div>\n          {gettext(\"Select file\")}\n        </Button>\n        <p className=\"text-muted\">\n          {this.getUploadRequirements(this.props.options.upload)}\n        </p>\n      </div>\n    )\n  }\n\n  getUploadProgressLabel() {\n    return interpolate(\n      gettext(\"%(progress)s % complete\"),\n      {\n        progress: this.state.progress,\n      },\n      true\n    )\n  }\n\n  getUploadProgress() {\n    return (\n      <div className=\"modal-body modal-avatar-upload\">\n        <div className=\"upload-progress\">\n          <img src={this.state.preview} />\n\n          <div className=\"progress\">\n            <div\n              className=\"progress-bar\"\n              role=\"progressbar\"\n              aria-valuenow=\"{this.state.progress}\"\n              aria-valuemin=\"0\"\n              aria-valuemax=\"100\"\n              style={{ width: this.state.progress + \"%\" }}\n            >\n              <span className=\"sr-only\">{this.getUploadProgressLabel()}</span>\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n\n  renderUpload() {\n    return (\n      <div>\n        <input\n          type=\"file\"\n          id=\"avatar-hidden-upload\"\n          className=\"hidden-file-upload\"\n          onChange={this.uploadFile}\n        />\n        {this.state.image ? this.getUploadProgress() : this.getUploadButton()}\n        <div className=\"modal-footer\">\n          <div className=\"col-md-6 col-md-offset-3\">\n            <Button\n              onClick={this.props.showIndex}\n              disabled={!!this.state.image}\n              className=\"btn-default btn-block\"\n            >\n              {gettext(\"Cancel\")}\n            </Button>\n          </div>\n        </div>\n      </div>\n    )\n  }\n\n  renderCrop() {\n    return (\n      <AvatarCrop\n        options={this.state.options}\n        user={this.props.user}\n        upload={this.state.uploaded}\n        dataUrl={this.state.preview}\n        onComplete={this.props.onComplete}\n        showError={this.props.showError}\n        showIndex={this.props.showIndex}\n      />\n    )\n  }\n\n  render() {\n    if (this.state.uploaded) return this.renderCrop()\n\n    return this.renderUpload()\n  }\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport Button from \"misago/components/button\"\nimport misago from \"misago/index\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport batch from \"misago/utils/batch\"\n\nexport class GalleryItem extends React.Component {\n  select = () => {\n    this.props.select(this.props.id)\n  }\n\n  getClassName() {\n    if (this.props.selection === this.props.id) {\n      if (this.props.disabled) {\n        return \"btn btn-avatar btn-disabled avatar-selected\"\n      } else {\n        return \"btn btn-avatar avatar-selected\"\n      }\n    } else if (this.props.disabled) {\n      return \"btn btn-avatar btn-disabled\"\n    } else {\n      return \"btn btn-avatar\"\n    }\n  }\n\n  render() {\n    return (\n      <button\n        type=\"button\"\n        className={this.getClassName()}\n        disabled={this.props.disabled}\n        onClick={this.select}\n      >\n        <img src={this.props.url} />\n      </button>\n    )\n  }\n}\n\nexport class Gallery extends React.Component {\n  render() {\n    return (\n      <div className=\"avatars-gallery\">\n        <h3>{this.props.name}</h3>\n\n        <div className=\"avatars-gallery-images\">\n          {batch(this.props.images, 4, null).map((row, i) => {\n            return (\n              <div className=\"row\" key={i}>\n                {row.map((item, i) => {\n                  return (\n                    <div className=\"col-xs-3\" key={i}>\n                      {item ? (\n                        <GalleryItem\n                          disabled={this.props.disabled}\n                          select={this.props.select}\n                          selection={this.props.selection}\n                          {...item}\n                        />\n                      ) : (\n                        <div className=\"blank-avatar\" />\n                      )}\n                    </div>\n                  )\n                })}\n              </div>\n            )\n          })}\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      selection: null,\n      isLoading: false,\n    }\n  }\n\n  select = (image) => {\n    this.setState({\n      selection: image,\n    })\n  }\n\n  save = () => {\n    if (this.state.isLoading) {\n      return false\n    }\n\n    this.setState({\n      isLoading: true,\n    })\n\n    ajax\n      .post(this.props.user.api.avatar, {\n        avatar: \"galleries\",\n        image: this.state.selection,\n      })\n      .then(\n        (response) => {\n          this.setState({\n            isLoading: false,\n          })\n\n          snackbar.success(response.detail)\n          this.props.onComplete(response)\n          this.props.showIndex()\n        },\n        (rejection) => {\n          if (rejection.status === 400) {\n            snackbar.error(rejection.detail)\n            this.setState({\n              isLoading: false,\n            })\n          } else {\n            this.props.showError(rejection)\n          }\n        }\n      )\n  }\n\n  render() {\n    return (\n      <div>\n        <div className=\"modal-body modal-avatar-gallery\">\n          {this.props.options.galleries.map((item, i) => {\n            return (\n              <Gallery\n                name={item.name}\n                images={item.images}\n                selection={this.state.selection}\n                disabled={this.state.isLoading}\n                select={this.select}\n                key={i}\n              />\n            )\n          })}\n        </div>\n        <div className=\"modal-footer\">\n          <div className=\"row\">\n            <div className=\"col-md-6 col-md-offset-3\">\n              <Button\n                onClick={this.save}\n                loading={this.state.isLoading}\n                disabled={!this.state.selection}\n                className=\"btn-primary btn-block\"\n              >\n                {this.state.selection\n                  ? gettext(\"Save choice\")\n                  : gettext(\"Select avatar\")}\n              </Button>\n\n              <Button\n                onClick={this.props.showIndex}\n                disabled={this.state.isLoading}\n                className=\"btn-default btn-block\"\n              >\n                {gettext(\"Cancel\")}\n              </Button>\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport AvatarIndex from \"misago/components/change-avatar/index\"\nimport AvatarCrop from \"misago/components/change-avatar/crop\"\nimport AvatarUpload from \"misago/components/change-avatar/upload\"\nimport AvatarGallery from \"misago/components/change-avatar/gallery\"\nimport Loader from \"misago/components/modal-loader\"\nimport { updateAvatar } from \"misago/reducers/users\"\nimport ajax from \"misago/services/ajax\"\nimport store from \"misago/services/store\"\n\nexport class ChangeAvatarError extends React.Component {\n  getErrorReason() {\n    if (this.props.reason) {\n      return <p dangerouslySetInnerHTML={{ __html: this.props.reason }} />\n    } else {\n      return null\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"modal-body\">\n        <div className=\"message-icon\">\n          <span className=\"material-icon\">remove_circle_outline</span>\n        </div>\n        <div className=\"message-body\">\n          <p className=\"lead\">{this.props.message}</p>\n          {this.getErrorReason()}\n          <button\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            {gettext(\"Ok\")}\n          </button>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default class extends React.Component {\n  componentDidMount() {\n    ajax.get(this.props.user.api.avatar).then(\n      (options) => {\n        this.setState({\n          component: AvatarIndex,\n          options: options,\n          error: null,\n        })\n      },\n      (rejection) => {\n        this.showError(rejection)\n      }\n    )\n  }\n\n  showError = (error) => {\n    this.setState({\n      error,\n    })\n  }\n\n  showIndex = () => {\n    this.setState({\n      component: AvatarIndex,\n    })\n  }\n\n  showUpload = () => {\n    this.setState({\n      component: AvatarUpload,\n    })\n  }\n\n  showCrop = () => {\n    this.setState({\n      component: AvatarCrop,\n    })\n  }\n\n  showGallery = () => {\n    this.setState({\n      component: AvatarGallery,\n    })\n  }\n\n  completeFlow = (options) => {\n    store.dispatch(updateAvatar(this.props.user, options.avatars))\n\n    this.setState({\n      component: AvatarIndex,\n      options,\n    })\n  }\n\n  getBody() {\n    if (this.state) {\n      if (this.state.error) {\n        return (\n          <ChangeAvatarError\n            message={this.state.error.detail}\n            reason={this.state.error.reason}\n          />\n        )\n      } else {\n        return (\n          <this.state.component\n            options={this.state.options}\n            user={this.props.user}\n            onComplete={this.completeFlow}\n            showError={this.showError}\n            showIndex={this.showIndex}\n            showCrop={this.showCrop}\n            showUpload={this.showUpload}\n            showGallery={this.showGallery}\n          />\n        )\n      }\n    } else {\n      return <Loader />\n    }\n  }\n\n  getClassName() {\n    if (this.state && this.state.error) {\n      return \"modal-dialog modal-message modal-change-avatar\"\n    } else {\n      return \"modal-dialog modal-change-avatar\"\n    }\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()} role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              type=\"button\"\n              className=\"close\"\n              data-dismiss=\"modal\"\n              aria-label={gettext(\"Close\")}\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Change your avatar\")}</h4>\n          </div>\n\n          {this.getBody()}\n        </div>\n      </div>\n    )\n  }\n}\n\nexport function select(state) {\n  return {\n    user: state.auth.user,\n  }\n}\n","import React from \"react\"\nimport { connect } from \"react-redux\"\nimport Avatar from \"misago/components/avatar\"\nimport ChangeAvatarModal, { select } from \"misago/components/change-avatar/root\"\nimport NavbarSearch from \"misago/components/navbar-search\"\nimport misago from \"misago\"\nimport dropdown from \"misago/services/mobile-navbar-dropdown\"\nimport modal from \"misago/services/modal\"\n\nexport class UserMenu extends React.Component {\n  changeAvatar() {\n    modal.show(connect(select)(ChangeAvatarModal))\n  }\n\n  render() {\n    const { user } = this.props\n\n    return (\n      <ul\n        className=\"dropdown-menu user-dropdown dropdown-menu-right\"\n        role=\"menu\"\n      >\n        <li className=\"dropdown-header\">\n          <strong>{user.username}</strong>\n          <div className=\"row user-stats\">\n            <div className=\"col-sm-3\">\n              <span className=\"material-icon\">message</span>\n              {user.posts}\n            </div>\n            <div className=\"col-sm-3\">\n              <span className=\"material-icon\">forum</span>\n              {user.threads}\n            </div>\n            <div className=\"col-sm-3\">\n              <span className=\"material-icon\">favorite</span>\n              {user.followers}\n            </div>\n            <div className=\"col-sm-3\">\n              <span className=\"material-icon\">favorite_outline</span>\n              {user.following}\n            </div>\n          </div>\n        </li>\n        <li className=\"divider\" />\n        <li>\n          <a href={user.url}>\n            <span className=\"material-icon\">account_circle</span>\n            {gettext(\"See your profile\")}\n          </a>\n        </li>\n        <li>\n          <a href={misago.get(\"USERCP_URL\")}>\n            <span className=\"material-icon\">done_all</span>\n            {gettext(\"Change options\")}\n          </a>\n        </li>\n        <li>\n          <button\n            className=\"btn-link\"\n            onClick={this.changeAvatar}\n            type=\"button\"\n          >\n            <span className=\"material-icon\">portrait</span>\n            {gettext(\"Change avatar\")}\n          </button>\n        </li>\n        {!!user.acl.can_use_private_threads && (\n          <li>\n            <a href={misago.get(\"PRIVATE_THREADS_URL\")}>\n              <span className=\"material-icon\">message</span>\n              {gettext(\"Private threads\")}\n              <PrivateThreadsBadge user={user} />\n            </a>\n          </li>\n        )}\n        <li className=\"divider\" />\n        <li className=\"dropdown-buttons\">\n          <button\n            className=\"btn btn-default btn-block\"\n            onClick={() =>\n              document.getElementById(\"hidden-logout-form\").submit()\n            }\n            type=\"button\"\n          >\n            {gettext(\"Log out\")}\n          </button>\n        </li>\n      </ul>\n    )\n  }\n}\n\nexport function PrivateThreadsBadge({ user }) {\n  if (!user.unread_private_threads) return null\n\n  return <span className=\"badge\">{user.unread_private_threads}</span>\n}\n\nexport function UserNav({ user }) {\n  return (\n    <ul className=\"ul nav navbar-nav nav-user\">\n      <li>\n        <NavbarSearch />\n      </li>\n      <UserPrivateThreadsLink user={user} />\n      <li className=\"dropdown\">\n        <a\n          aria-haspopup=\"true\"\n          aria-expanded=\"false\"\n          className=\"dropdown-toggle\"\n          data-toggle=\"dropdown\"\n          href={user.url}\n          role=\"button\"\n        >\n          <Avatar user={user} size=\"64\" />\n        </a>\n        <UserMenu user={user} />\n      </li>\n    </ul>\n  )\n}\n\nexport function UserPrivateThreadsLink({ user }) {\n  if (!user.acl.can_use_private_threads) return null\n\n  let title = null\n  if (user.unread_private_threads) {\n    title = gettext(\"You have unread private threads!\")\n  } else {\n    title = gettext(\"Private threads\")\n  }\n\n  return (\n    <li>\n      <a\n        className=\"navbar-icon\"\n        href={misago.get(\"PRIVATE_THREADS_URL\")}\n        title={title}\n      >\n        <span className=\"material-icon\">message</span>\n        {user.unread_private_threads > 0 && (\n          <span className=\"badge\">{user.unread_private_threads}</span>\n        )}\n      </a>\n    </li>\n  )\n}\n\nexport function selectUserMenu(state) {\n  return {\n    user: state.auth.user,\n  }\n}\n\nexport class CompactUserNav extends React.Component {\n  showUserMenu() {\n    dropdown.showConnected(\"user-menu\", connect(selectUserMenu)(UserMenu))\n  }\n\n  render() {\n    return (\n      <button type=\"button\" onClick={this.showUserMenu}>\n        <Avatar user={this.props.user} size=\"50\" />\n      </button>\n    )\n  }\n}\n","import React from \"react\"\nimport { GuestNav, CompactGuestNav } from \"./guest-nav\"\nimport { UserNav, CompactUserNav } from \"./user-nav\"\n\nexport class UserMenu extends React.Component {\n  render() {\n    if (this.props.isAuthenticated) {\n      return <UserNav user={this.props.user} />\n    } else {\n      return <GuestNav />\n    }\n  }\n}\n\nexport class CompactUserMenu extends React.Component {\n  render() {\n    if (this.props.isAuthenticated) {\n      return <CompactUserNav user={this.props.user} />\n    } else {\n      return <CompactGuestNav />\n    }\n  }\n}\n\nexport function select(state) {\n  return state.auth\n}\n","import { connect } from \"react-redux\"\nimport misago from \"misago/index\"\nimport {\n  UserMenu,\n  CompactUserMenu,\n  select,\n} from \"misago/components/user-menu/root\"\nimport mount from \"misago/utils/mount-component\"\n\nexport default function initializer() {\n  mount(connect(select)(UserMenu), \"user-menu-mount\")\n  mount(connect(select)(CompactUserMenu), \"user-menu-compact-mount\")\n}\n\nmisago.addInitializer({\n  name: \"component:user-menu\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import React from \"react\"\nimport { Link } from \"react-router\"\nimport Li from \"misago/components/li\"\n\nconst UsersNav = ({ baseUrl, page, pages }) => (\n  <div className=\"nav-container\">\n    <div className=\"dropdown hidden-sm hidden-md hidden-lg\">\n      <button\n        className=\"btn btn-default btn-block btn-outline dropdown-toggle\"\n        type=\"button\"\n        data-toggle=\"dropdown\"\n        aria-haspopup=\"true\"\n        aria-expanded=\"false\"\n      >\n        <span className=\"material-icon\">menu</span>\n        {page.name}\n      </button>\n      <ul className=\"dropdown-menu stick-to-bottom\">\n        {pages.map((page) => {\n          const url = getPageUrl(baseUrl, page)\n          return (\n            <li key={url}>\n              <Link to={url}>{page.name}</Link>\n            </li>\n          )\n        })}\n      </ul>\n    </div>\n    <ul className=\"nav nav-pills hidden-xs\" role=\"menu\">\n      {pages.map((page) => {\n        const url = getPageUrl(baseUrl, page)\n        return (\n          <Li path={url} key={url}>\n            <Link to={url}>{page.name}</Link>\n          </Li>\n        )\n      })}\n    </ul>\n  </div>\n)\n\nconst getPageUrl = (baseUrl, page) => {\n  let url = baseUrl\n  if (page.component === \"rank\") {\n    url += page.slug\n  } else {\n    url += page.component\n  }\n  return url + \"/\"\n}\n\nexport default UsersNav\n","import React from \"react\"\nimport PageContainer from \"../../PageContainer\"\nimport UsersNav from \"../UsersNav\"\n\nexport default class extends React.Component {\n  getEmptyMessage() {\n    return interpolate(\n      gettext(\n        \"No users have posted any new messages during last %(days)s days.\"\n      ),\n      { days: this.props.trackedPeriod },\n      true\n    )\n  }\n\n  render() {\n    return (\n      <div className=\"active-posters-list\">\n        <PageContainer>\n          <UsersNav\n            baseUrl={misago.get(\"USERS_LIST_URL\")}\n            page={this.props.page}\n            pages={misago.get(\"USERS_LISTS\")}\n          />\n          <p className=\"lead\">{this.getEmptyMessage()}</p>\n        </PageContainer>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport * as random from \"misago/utils/random\"\n\nexport default class extends React.Component {\n  shouldComponentUpdate() {\n    return false\n  }\n\n  getClassName() {\n    if (this.props.hiddenOnMobile) {\n      return \"list-group-item hidden-xs hidden-sm\"\n    } else {\n      return \"list-group-item\"\n    }\n  }\n\n  render() {\n    return (\n      <li className={this.getClassName()}>\n        <div className=\"rank-user-avatar\">\n          <span>\n            <Avatar size=\"50\" />\n          </span>\n        </div>\n\n        <div className=\"rank-user\">\n          <div className=\"user-name\">\n            <span className=\"item-title\">\n              <span\n                className=\"ui-preview-text\"\n                style={{ width: random.int(30, 80) + \"px\" }}\n              >\n                &nbsp;\n              </span>\n            </span>\n          </div>\n\n          <div className=\"user-details\">\n            <span className=\"user-status\">\n              <span className=\"status-icon ui-preview-text\">&nbsp;</span>\n              <span\n                className=\"status-label ui-preview-text hidden-xs hidden-sm\"\n                style={{ width: random.int(30, 50) + \"px\" }}\n              >\n                &nbsp;\n              </span>\n            </span>\n            <span className=\"rank-name\">\n              <span\n                className=\"ui-preview-text\"\n                style={{ width: random.int(30, 50) + \"px\" }}\n              >\n                &nbsp;\n              </span>\n            </span>\n            <span className=\"user-title hidden-xs hidden-sm\">\n              <span\n                className=\"ui-preview-text\"\n                style={{ width: random.int(30, 50) + \"px\" }}\n              >\n                &nbsp;\n              </span>\n            </span>\n          </div>\n          <div className=\"user-compact-stats visible-xs-block\">\n            <span className=\"rank-position\">\n              <strong>\n                <span\n                  className=\"ui-preview-text\"\n                  style={{ width: random.int(20, 30) + \"px\" }}\n                >\n                  &nbsp;\n                </span>\n              </strong>\n              <small>{gettext(\"Rank\")}</small>\n            </span>\n            <span className=\"rank-posts-counted\">\n              <strong>\n                <span\n                  className=\"ui-preview-text\"\n                  style={{ width: random.int(20, 30) + \"px\" }}\n                >\n                  &nbsp;\n                </span>\n              </strong>\n              <small>{gettext(\"Ranked posts\")}</small>\n            </span>\n          </div>\n        </div>\n\n        <div className=\"rank-position hidden-xs\">\n          <strong>\n            <span\n              className=\"ui-preview-text\"\n              style={{ width: random.int(20, 30) + \"px\" }}\n            >\n              &nbsp;\n            </span>\n          </strong>\n          <small>{gettext(\"Rank\")}</small>\n        </div>\n\n        <div className=\"rank-posts-counted hidden-xs\">\n          <strong>\n            <span\n              className=\"ui-preview-text\"\n              style={{ width: random.int(20, 30) + \"px\" }}\n            >\n              &nbsp;\n            </span>\n          </strong>\n          <small>{gettext(\"Ranked posts\")}</small>\n        </div>\n\n        <div className=\"rank-posts-total hidden-xs\">\n          <strong>\n            <span\n              className=\"ui-preview-text\"\n              style={{ width: random.int(20, 30) + \"px\" }}\n            >\n              &nbsp;\n            </span>\n          </strong>\n          <small>{gettext(\"Total posts\")}</small>\n        </div>\n      </li>\n    )\n  }\n}\n","import React from \"react\"\nimport ItemPreview from \"misago/components/users/active-posters/list-item-preview\"\nimport * as random from \"misago/utils/random\"\nimport PageContainer from \"../../PageContainer\"\nimport UsersNav from \"../UsersNav\"\n\nexport default class extends React.Component {\n  shouldComponentUpdate() {\n    return false\n  }\n\n  render() {\n    return (\n      <div className=\"active-posters-list\">\n        <PageContainer>\n          <UsersNav\n            baseUrl={misago.get(\"USERS_LIST_URL\")}\n            page={this.props.page}\n            pages={misago.get(\"USERS_LISTS\")}\n          />\n          <p className=\"lead ui-preview\">\n            <span\n              className=\"ui-preview-text\"\n              style={{ width: random.int(50, 220) + \"px\" }}\n            >\n              &nbsp;\n            </span>\n          </p>\n\n          <div className=\"active-posters ui-preview\">\n            <ul className=\"list-group\">\n              {[0, 1, 2].map((i) => {\n                return <ItemPreview hiddenOnMobile={i > 0} key={i} />\n              })}\n            </ul>\n          </div>\n        </PageContainer>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport { Link } from \"react-router\"\nimport Avatar from \"misago/components/avatar\"\nimport Status, { StatusIcon, StatusLabel } from \"misago/components/user-status\"\nimport misago from \"misago/index\"\nimport * as random from \"misago/utils/random\"\n\nexport default class extends React.Component {\n  getClassName() {\n    if (this.props.rank.css_class) {\n      return \"list-group-item list-group-rank-\" + this.props.rank.css_class\n    } else {\n      return \"list-group-item\"\n    }\n  }\n\n  getUserStatus() {\n    if (this.props.user.status) {\n      return (\n        <Status user={this.props.user} status={this.props.user.status}>\n          <StatusIcon user={this.props.user} status={this.props.user.status} />\n          <StatusLabel\n            user={this.props.user}\n            status={this.props.user.status}\n            className=\"status-label hidden-xs hidden-sm\"\n          />\n        </Status>\n      )\n    }\n\n    return (\n      <span className=\"user-status\">\n        <span className=\"status-icon ui-preview-text\">&nbsp;</span>\n        <span\n          className=\"status-label ui-preview-text hidden-xs hidden-sm\"\n          style={{ width: random.int(30, 50) + \"px\" }}\n        >\n          &nbsp;\n        </span>\n      </span>\n    )\n  }\n\n  getRankName() {\n    if (!this.props.rank.is_tab) {\n      return (\n        <span className=\"rank-name item-title\">{this.props.rank.name}</span>\n      )\n    }\n\n    let rankUrl = misago.get(\"USERS_LIST_URL\") + this.props.rank.slug + \"/\"\n    return (\n      <Link to={rankUrl} className=\"rank-name item-title\">\n        {this.props.rank.name}\n      </Link>\n    )\n  }\n\n  getUserTitle() {\n    if (!this.props.user.title) return null\n\n    return (\n      <span className=\"user-title hidden-xs hidden-sm\">\n        {this.props.user.title}\n      </span>\n    )\n  }\n\n  render() {\n    return (\n      <li className={this.getClassName()}>\n        <div className=\"rank-user-avatar\">\n          <a href={this.props.user.url}>\n            <Avatar user={this.props.user} size={50} size2x={64} />\n          </a>\n        </div>\n\n        <div className=\"rank-user\">\n          <div className=\"user-name\">\n            <a href={this.props.user.url} className=\"item-title\">\n              {this.props.user.username}\n            </a>\n          </div>\n          <div className=\"user-details\">\n            {this.getUserStatus()}\n            {this.getRankName()}\n            {this.getUserTitle()}\n          </div>\n          <div className=\"user-compact-stats visible-xs-block\">\n            <span className=\"rank-position\">\n              <strong>#{this.props.counter}</strong>\n              <small>{gettext(\"Rank\")}</small>\n            </span>\n\n            <span className=\"rank-posts-counted\">\n              <strong>{this.props.user.meta.score}</strong>\n              <small>{gettext(\"Ranked posts\")}</small>\n            </span>\n          </div>\n        </div>\n\n        <div className=\"rank-position hidden-xs\">\n          <strong>#{this.props.counter}</strong>\n          <small>{gettext(\"Rank\")}</small>\n        </div>\n\n        <div className=\"rank-posts-counted hidden-xs\">\n          <strong>{this.props.user.meta.score}</strong>\n          <small>{gettext(\"Ranked posts\")}</small>\n        </div>\n\n        <div className=\"rank-posts-total hidden-xs\">\n          <strong>{this.props.user.posts}</strong>\n          <small>{gettext(\"Total posts\")}</small>\n        </div>\n      </li>\n    )\n  }\n}\n","import React from \"react\"\nimport ListItem from \"misago/components/users/active-posters/list-item\"\nimport PageContainer from \"../../PageContainer\"\nimport UsersNav from \"../UsersNav\"\n\nexport default class extends React.Component {\n  getLeadMessage() {\n    let message = ngettext(\n      \"%(posters)s top poster from last %(days)s days.\",\n      \"%(posters)s top posters from last %(days)s days.\",\n      this.props.count\n    )\n\n    return interpolate(\n      message,\n      {\n        posters: this.props.count,\n        days: this.props.trackedPeriod,\n      },\n      true\n    )\n  }\n\n  render() {\n    return (\n      <div className=\"active-posters-list\">\n        <PageContainer>\n          <UsersNav\n            baseUrl={misago.get(\"USERS_LIST_URL\")}\n            page={this.props.page}\n            pages={misago.get(\"USERS_LISTS\")}\n          />\n          <p className=\"lead\">{this.getLeadMessage()}</p>\n\n          <div className=\"active-posters ui-ready\">\n            <ul className=\"list-group\">\n              {this.props.users.map((user, i) => {\n                return (\n                  <ListItem\n                    user={user}\n                    rank={user.rank}\n                    counter={i + 1}\n                    key={user.id}\n                  />\n                )\n              })}\n            </ul>\n          </div>\n        </PageContainer>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport ListEmpty from \"misago/components/users/active-posters/list-empty\"\nimport ListPreview from \"misago/components/users/active-posters/list-preview\"\nimport ListReady from \"misago/components/users/active-posters/list-ready\"\nimport misago from \"misago/index\"\nimport { hydrate } from \"misago/reducers/users\"\nimport polls from \"misago/services/polls\"\nimport store from \"misago/services/store\"\nimport title from \"misago/services/page-title\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    if (misago.has(\"USERS\")) {\n      this.initWithPreloadedData(misago.pop(\"USERS\"))\n    } else {\n      this.initWithoutPreloadedData()\n    }\n\n    this.startPolling()\n  }\n\n  initWithPreloadedData(data) {\n    this.state = {\n      isLoaded: true,\n\n      trackedPeriod: data.tracked_period,\n      count: data.count,\n    }\n\n    store.dispatch(hydrate(data.results))\n  }\n\n  initWithoutPreloadedData() {\n    this.state = {\n      isLoaded: false,\n    }\n  }\n\n  startPolling() {\n    polls.start({\n      poll: \"active-posters\",\n      url: misago.get(\"USERS_API\"),\n      data: {\n        list: \"active\",\n      },\n      frequency: 90 * 1000,\n      update: this.update,\n    })\n  }\n\n  update = (data) => {\n    store.dispatch(hydrate(data.results))\n\n    this.setState({\n      isLoaded: true,\n\n      trackedPeriod: data.tracked_period,\n      count: data.count,\n    })\n  }\n\n  componentDidMount() {\n    title.set({\n      title: this.props.route.extra.name,\n      parent: gettext(\"Users\"),\n    })\n  }\n\n  componentWillUnmount() {\n    polls.stop(\"active-posters\")\n  }\n\n  render() {\n    const page = { name: this.props.route.extra.name }\n\n    if (this.state.isLoaded) {\n      if (this.state.count > 0) {\n        return (\n          <ListReady\n            page={page}\n            users={this.props.users}\n            trackedPeriod={this.state.trackedPeriod}\n            count={this.state.count}\n          />\n        )\n      } else {\n        return (\n          <ListEmpty page={page} trackedPeriod={this.state.trackedPeriod} />\n        )\n      }\n    } else {\n      return <ListPreview page={page} />\n    }\n  }\n}\n","import React from \"react\"\nimport stringCount from \"misago/utils/string-count\"\n\nexport default class extends React.Component {\n  getClassName() {\n    if (this.props.copy && this.props.copy.length) {\n      if (\n        stringCount(this.props.copy, \"<p\") === 1 &&\n        this.props.copy.indexOf(\"<br\") === -1\n      ) {\n        return \"page-lead lead\"\n      }\n    }\n\n    return \"page-lead\"\n  }\n\n  render() {\n    if (this.props.copy && this.props.copy.length) {\n      return (\n        <div\n          className={this.getClassName()}\n          dangerouslySetInnerHTML={{\n            __html: this.props.copy,\n          }}\n        />\n      )\n    } else {\n      return null\n    }\n  }\n}\n","export default function (string, subString) {\n  string = (string + \"\").toLowerCase()\n  subString = (subString + \"\").toLowerCase()\n\n  if (subString.length <= 0) return 0\n\n  let n = 0\n  let pos = 0\n  let step = subString.length\n\n  while (true) {\n    pos = string.indexOf(subString, pos)\n    if (pos >= 0) {\n      n += 1\n      pos += step\n    } else {\n      break\n    }\n  }\n\n  return n\n}\n","import React from \"react\"\nimport UsersList from \"../../users-list\"\n\nconst RankUsersList = ({ users }) => (\n  <UsersList cols={4} isReady={true} showStatus={true} users={users} />\n)\n\nexport default RankUsersList\n","import React from \"react\"\nimport UsersList from \"misago/components/users-list\"\n\nclass RankUsersListLoader extends React.Component {\n  shouldComponentUpdate() {\n    return false\n  }\n\n  render = () => <UsersList cols={4} isReady={false} />\n}\n\nexport default RankUsersListLoader\n","import React from \"react\"\n\nconst RankUsersLeft = ({ users }) => {\n  if (users.more) {\n    return (\n      <p>\n        {interpolate(\n          ngettext(\n            \"There is %(more)s more member with this role.\",\n            \"There are %(more)s more members with this role.\",\n            users.more\n          ),\n          { more: users.more },\n          true\n        )}\n      </p>\n    )\n  }\n\n  return <p>{gettext(\"There are no more members with this role.\")}</p>\n}\n\nexport default RankUsersLeft\n","import React from \"react\"\nimport { Link } from \"react-router\"\n\nconst RankUsersPagination = ({ baseUrl, users }) => (\n  <div className=\"misago-pagination\">\n    {users.isLoaded && users.first ? (\n      <Link\n        className=\"btn btn-default btn-outline btn-icon\"\n        to={baseUrl}\n        title={gettext(\"Go to first page\")}\n      >\n        <span className=\"material-icon\">first_page</span>\n      </Link>\n    ) : (\n      <button\n        className=\"btn btn-default btn-outline btn-icon\"\n        title={gettext(\"Go to first page\")}\n        type=\"button\"\n        disabled\n      >\n        <span className=\"material-icon\">first_page</span>\n      </button>\n    )}\n    {users.isLoaded && users.previous ? (\n      <Link\n        className=\"btn btn-default btn-outline btn-icon\"\n        to={baseUrl + (users.previous > 1 ? users.previous + \"/\" : \"\")}\n        title={gettext(\"Go to previous page\")}\n      >\n        <span className=\"material-icon\">chevron_left</span>\n      </Link>\n    ) : (\n      <button\n        className=\"btn btn-default btn-outline btn-icon\"\n        title={gettext(\"Go to previous page\")}\n        type=\"button\"\n        disabled\n      >\n        <span className=\"material-icon\">chevron_left</span>\n      </button>\n    )}\n    {users.isLoaded && users.next ? (\n      <Link\n        className=\"btn btn-default btn-outline btn-icon\"\n        to={baseUrl + users.next + \"/\"}\n        title={gettext(\"Go to next page\")}\n      >\n        <span className=\"material-icon\">chevron_right</span>\n      </Link>\n    ) : (\n      <button\n        className=\"btn btn-default btn-outline btn-icon\"\n        title={gettext(\"Go to next page\")}\n        type=\"button\"\n        disabled\n      >\n        <span className=\"material-icon\">chevron_right</span>\n      </button>\n    )}\n    {users.isLoaded && users.last ? (\n      <Link\n        className=\"btn btn-default btn-outline btn-icon\"\n        to={baseUrl + users.last + \"/\"}\n        title={gettext(\"Go to last page\")}\n      >\n        <span className=\"material-icon\">last_page</span>\n      </Link>\n    ) : (\n      <button\n        className=\"btn btn-default btn-outline btn-icon\"\n        title={gettext(\"Go to last page\")}\n        type=\"button\"\n        disabled\n      >\n        <span className=\"material-icon\">last_page</span>\n      </button>\n    )}\n  </div>\n)\n\nexport default RankUsersPagination\n","import React from \"react\"\nimport { Toolbar, ToolbarItem, ToolbarSection } from \"../../Toolbar\"\nimport RankUsersLeft from \"./RankUsersLeft\"\nimport RankUsersPagination from \"./RankUsersPagination\"\n\nconst RankUsersToolbar = ({ baseUrl, users }) => (\n  <Toolbar>\n    <ToolbarSection>\n      <ToolbarItem>\n        <RankUsersPagination baseUrl={baseUrl} users={users} />\n      </ToolbarItem>\n    </ToolbarSection>\n    <ToolbarSection auto>\n      <ToolbarItem>\n        <RankUsersLeft users={users} />\n      </ToolbarItem>\n    </ToolbarSection>\n  </Toolbar>\n)\n\nexport default RankUsersToolbar\n","import React from \"react\"\nimport PageLead from \"misago/components/page-lead\"\nimport misago from \"misago/index\"\nimport { hydrate } from \"misago/reducers/users\"\nimport polls from \"misago/services/polls\"\nimport store from \"misago/services/store\"\nimport title from \"misago/services/page-title\"\nimport PageContainer from \"../../PageContainer\"\nimport RankUsersList from \"./RankUsersList\"\nimport RankUsersListLoader from \"./RankUsersListLoader\"\nimport RankUsersToolbar from \"./RankUsersToolbar\"\nimport UsersNav from \"../UsersNav\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    if (misago.has(\"USERS\")) {\n      this.initWithPreloadedData(misago.pop(\"USERS\"))\n    } else {\n      this.initWithoutPreloadedData()\n    }\n\n    this.startPolling(props.params.page || 1)\n  }\n\n  initWithPreloadedData(data) {\n    this.state = Object.assign(data, {\n      isLoaded: true,\n    })\n    store.dispatch(hydrate(data.results))\n  }\n\n  initWithoutPreloadedData() {\n    this.state = {\n      isLoaded: false,\n    }\n  }\n\n  startPolling(page) {\n    polls.start({\n      poll: \"rank-users\",\n      url: misago.get(\"USERS_API\"),\n      data: {\n        rank: this.props.route.rank.id,\n        page: page,\n      },\n      frequency: 90 * 1000,\n      update: this.update,\n    })\n  }\n\n  update = (data) => {\n    store.dispatch(hydrate(data.results))\n\n    data.isLoaded = true\n    this.setState(data)\n  }\n\n  componentDidMount() {\n    title.set({\n      title: this.props.route.rank.name,\n      page: this.props.params.page || null,\n      parent: gettext(\"Users\"),\n    })\n  }\n\n  componentWillUnmount() {\n    polls.stop(\"rank-users\")\n  }\n\n  componentWillReceiveProps(nextProps) {\n    if (this.props.params.page !== nextProps.params.page) {\n      title.set({\n        title: this.props.route.rank.name,\n        page: nextProps.params.page || null,\n        parent: gettext(\"Users\"),\n      })\n\n      this.setState({\n        isLoaded: false,\n      })\n\n      polls.stop(\"rank-users\")\n      this.startPolling(nextProps.params.page)\n    }\n  }\n\n  getClassName() {\n    if (this.props.route.rank.css_class) {\n      return \"rank-users-list rank-users-\" + this.props.route.rank.css_class\n    } else {\n      return \"rank-users-list\"\n    }\n  }\n\n  getRankDescription() {\n    if (this.props.route.rank.description) {\n      return (\n        <div className=\"rank-description\">\n          <PageLead copy={this.props.route.rank.description.html} />\n        </div>\n      )\n    } else {\n      return null\n    }\n  }\n\n  getComponent() {\n    if (this.state.isLoaded) {\n      if (this.state.count > 0) {\n        return <RankUsersList users={this.props.users} />\n      } else {\n        return (\n          <p className=\"lead\">\n            {gettext(\"There are no users with this rank at the moment.\")}\n          </p>\n        )\n      }\n    } else {\n      return <RankUsersListLoader />\n    }\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()}>\n        <PageContainer>\n          <UsersNav\n            baseUrl={misago.get(\"USERS_LIST_URL\")}\n            page={{ name: this.props.route.rank.name }}\n            pages={misago.get(\"USERS_LISTS\")}\n          />\n          {this.getRankDescription()}\n          {this.getComponent()}\n          <RankUsersToolbar\n            baseUrl={\n              misago.get(\"USERS_LIST_URL\") + this.props.route.rank.slug + \"/\"\n            }\n            users={this.state}\n          />\n        </PageContainer>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport { connect } from \"react-redux\"\nimport ActivePosters from \"misago/components/users/active-posters/root\"\nimport Rank from \"misago/components/users/rank/root\"\nimport WithDropdown from \"misago/components/with-dropdown\"\nimport misago from \"misago/index\"\nimport {\n  PageHeader,\n  PageHeaderBanner,\n  PageHeaderContainer,\n} from \"../PageHeader\"\n\nexport default class extends WithDropdown {\n  render() {\n    return (\n      <div className=\"page page-users-lists\">\n        <PageHeaderContainer>\n          <PageHeader styleName=\"users-lists\">\n            <PageHeaderBanner styleName=\"users-lists\">\n              <h1>{gettext(\"Users\")}</h1>\n            </PageHeaderBanner>\n          </PageHeader>\n        </PageHeaderContainer>\n        {this.props.children}\n      </div>\n    )\n  }\n}\n\nexport function select(store) {\n  return {\n    tick: store.tick.tick,\n    user: store.auth.user,\n    users: store.users,\n  }\n}\n\nexport function paths() {\n  let paths = []\n\n  misago.get(\"USERS_LISTS\").forEach(function (item) {\n    if (item.component === \"rank\") {\n      paths.push({\n        path: misago.get(\"USERS_LIST_URL\") + item.slug + \"/:page/\",\n        component: connect(select)(Rank),\n        rank: item,\n      })\n      paths.push({\n        path: misago.get(\"USERS_LIST_URL\") + item.slug + \"/\",\n        component: connect(select)(Rank),\n        rank: item,\n      })\n    } else if (item.component === \"active-posters\") {\n      paths.push({\n        path: misago.get(\"USERS_LIST_URL\") + item.component + \"/\",\n        component: connect(select)(ActivePosters),\n        extra: {\n          name: item.name,\n        },\n      })\n    }\n  })\n\n  return paths\n}\n","import Users, { paths } from \"misago/components/users/root\"\nimport misago from \"misago/index\"\nimport mount from \"misago/utils/routed-component\"\n\nexport default function initializer(context) {\n  if (context.has(\"USERS_LISTS\")) {\n    mount({\n      root: misago.get(\"USERS_LIST_URL\"),\n      component: Users,\n      paths: paths(),\n    })\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:users\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import misago from \"misago/index\"\nimport include from \"misago/services/include\"\n\nexport default function initializer(context) {\n  include.init(context.get(\"STATIC_URL\"))\n}\n\nmisago.addInitializer({\n  name: \"include\",\n  initializer: initializer,\n})\n","import misago from \"misago/index\"\nimport storage from \"misago/services/local-storage\"\n\nexport default function initializer() {\n  storage.init(\"misago_\")\n}\n\nmisago.addInitializer({\n  name: \"local-storage\",\n  initializer: initializer,\n})\n","import misago from \"misago/index\"\nimport dropdown from \"misago/services/mobile-navbar-dropdown\"\n\nexport default function initializer() {\n  let element = document.getElementById(\"mobile-navbar-dropdown-mount\")\n  if (element) {\n    dropdown.init(element)\n  }\n}\n\nmisago.addInitializer({\n  name: \"dropdown\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport modal from \"misago/services/modal\"\n\nexport default function initializer() {\n  let element = document.getElementById(\"modal-mount\")\n  if (element) {\n    modal.init(element)\n  }\n}\n\nmisago.addInitializer({\n  name: \"modal\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import moment from \"moment\"\nimport misago from \"misago/index\"\n\nexport default function initializer() {\n  moment.locale($(\"html\").attr(\"lang\"))\n}\n\nmisago.addInitializer({\n  name: \"moment\",\n  initializer: initializer,\n})\n","import misago from \"misago/index\"\nimport title from \"misago/services/page-title\"\n\nexport default function initializer(context) {\n  title.init(\n    context.get(\"SETTINGS\").forum_index_title,\n    context.get(\"SETTINGS\").forum_name\n  )\n}\n\nmisago.addInitializer({\n  name: \"page-title\",\n  initializer: initializer,\n})\n","import misago from \"misago/index\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport polls from \"misago/services/polls\"\n\nexport default function initializer() {\n  polls.init(ajax, snackbar)\n}\n\nmisago.addInitializer({\n  name: \"polls\",\n  initializer: initializer,\n})\n","import misago from \"misago/index\"\nimport ajax from \"misago/services/ajax\"\nimport posting from \"misago/services/posting\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default function initializer() {\n  posting.init(ajax, snackbar, document.getElementById(\"posting-placeholder\"))\n}\n\nmisago.addInitializer({\n  name: \"posting\",\n  initializer: initializer,\n})\n","import misago from \"misago/index\"\nimport reducer, { initialState } from \"misago/reducers/auth\"\nimport store from \"misago/services/store\"\n\nexport default function initializer(context) {\n  store.addReducer(\n    \"auth\",\n    reducer,\n    Object.assign(\n      {\n        isAuthenticated: context.get(\"isAuthenticated\"),\n        isAnonymous: !context.get(\"isAuthenticated\"),\n\n        user: context.get(\"user\"),\n      },\n      initialState\n    )\n  )\n}\n\nmisago.addInitializer({\n  name: \"reducer:auth\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer from \"misago/reducers/participants\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  let initialState = null\n  if (misago.has(\"THREAD\")) {\n    initialState = misago.get(\"THREAD\").participants\n  }\n\n  store.addReducer(\"participants\", reducer, initialState || [])\n}\n\nmisago.addInitializer({\n  name: \"reducer:participants\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer, { hydrate } from \"misago/reducers/poll\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  let initialState = null\n  if (misago.has(\"THREAD\") && misago.get(\"THREAD\").poll) {\n    initialState = hydrate(misago.get(\"THREAD\").poll)\n  } else {\n    initialState = {\n      isBusy: false,\n    }\n  }\n\n  store.addReducer(\"poll\", reducer, initialState)\n}\n\nmisago.addInitializer({\n  name: \"reducer:poll\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer, { hydrate } from \"misago/reducers/posts\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  let initialState = null\n  if (misago.has(\"POSTS\")) {\n    initialState = hydrate(misago.get(\"POSTS\"))\n  } else {\n    initialState = {\n      isLoaded: false,\n      isBusy: false,\n    }\n  }\n\n  store.addReducer(\"posts\", reducer, initialState)\n}\n\nmisago.addInitializer({\n  name: \"reducer:posts\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer from \"misago/reducers/profile-details\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  let initialState = null\n  if (misago.has(\"PROFILE_DETAILS\")) {\n    initialState = misago.get(\"PROFILE_DETAILS\")\n  }\n\n  store.addReducer(\"profile-details\", reducer, initialState || {})\n}\n\nmisago.addInitializer({\n  name: \"reducer:profile-details\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport { hydrate } from \"misago/reducers/profile\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  if (misago.has(\"PROFILE\")) {\n    store.dispatch(hydrate(misago.get(\"PROFILE\")))\n  }\n}\n\nmisago.addInitializer({\n  name: \"reducer:profile-hydrate\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer from \"misago/reducers/profile\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  store.addReducer(\"profile\", reducer, {})\n}\n\nmisago.addInitializer({\n  name: \"reducer:profile\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago\"\nimport reducer, { initialState } from \"misago/reducers/search\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  store.addReducer(\n    \"search\",\n    reducer,\n    Object.assign({}, initialState, {\n      providers: misago.get(\"SEARCH_PROVIDERS\") || [],\n      query: misago.get(\"SEARCH_QUERY\") || \"\",\n    })\n  )\n}\n\nmisago.addInitializer({\n  name: \"reducer:search\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer from \"misago/reducers/selection\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  store.addReducer(\"selection\", reducer, [])\n}\n\nmisago.addInitializer({\n  name: \"reducer:selection\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer, { initialState } from \"misago/reducers/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  store.addReducer(\"snackbar\", reducer, initialState)\n}\n\nmisago.addInitializer({\n  name: \"reducer:snackbar\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer, { hydrate } from \"misago/reducers/thread\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  let initialState = null\n  if (misago.has(\"THREAD\")) {\n    initialState = hydrate(misago.get(\"THREAD\"))\n  } else {\n    initialState = {\n      isBusy: false,\n    }\n  }\n\n  store.addReducer(\"thread\", reducer, initialState)\n}\n\nmisago.addInitializer({\n  name: \"reducer:thread\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer from \"misago/reducers/threads\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  store.addReducer(\"threads\", reducer, [])\n}\n\nmisago.addInitializer({\n  name: \"reducer:threads\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer, { initialState } from \"misago/reducers/tick\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  store.addReducer(\"tick\", reducer, initialState)\n}\n\nmisago.addInitializer({\n  name: \"reducer:tick\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer from \"misago/reducers/username-history\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  store.addReducer(\"username-history\", reducer, [])\n}\n\nmisago.addInitializer({\n  name: \"reducer:username-history\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer from \"misago/reducers/users\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  store.addReducer(\"users\", reducer, [])\n}\n\nmisago.addInitializer({\n  name: \"reducer:users\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  snackbar.init(store)\n}\n\nmisago.addInitializer({\n  name: \"snackbar\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import misago from \"misago/index\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  store.init()\n}\n\nmisago.addInitializer({\n  name: \"store\",\n  initializer: initializer,\n  before: \"_end\",\n})\n","import misago from \"misago/index\"\nimport { doTick } from \"misago/reducers/tick\"\nimport store from \"misago/services/store\"\n\nconst TICK_PERIOD = 50 * 1000 //do the tick every 50s\n\nexport default function initializer() {\n  window.setInterval(function () {\n    store.dispatch(doTick())\n  }, TICK_PERIOD)\n}\n\nmisago.addInitializer({\n  name: \"tick-start\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import misago from \"misago/index\"\nimport include from \"misago/services/include\"\nimport zxcvbn from \"misago/services/zxcvbn\"\n\nexport default function initializer() {\n  zxcvbn.init(include)\n}\n\nmisago.addInitializer({\n  name: \"zxcvbn\",\n  initializer: initializer,\n})\n","import { UPDATE_AVATAR, UPDATE_USERNAME } from \"misago/reducers/users\"\n\nexport var initialState = {\n  signedIn: false,\n  signedOut: false,\n}\n\nexport const PATCH_USER = \"PATCH_USER\"\nexport const SIGN_IN = \"SIGN_IN\"\nexport const SIGN_OUT = \"SIGN_OUT\"\n\nexport function patch(patch) {\n  return {\n    type: PATCH_USER,\n    patch,\n  }\n}\n\nexport function signIn(user) {\n  return {\n    type: SIGN_IN,\n    user,\n  }\n}\n\nexport function signOut(soft = false) {\n  return {\n    type: SIGN_OUT,\n    soft,\n  }\n}\n\nexport default function auth(state = initialState, action = null) {\n  switch (action.type) {\n    case PATCH_USER:\n      let newState = Object.assign({}, state)\n      newState.user = Object.assign({}, state.user, action.patch)\n      return newState\n\n    case SIGN_IN:\n      return Object.assign({}, state, {\n        signedIn: action.user,\n      })\n\n    case SIGN_OUT:\n      return Object.assign({}, state, {\n        isAuthenticated: false,\n        isAnonymous: true,\n        signedOut: !action.soft,\n      })\n\n    case UPDATE_AVATAR:\n      if (state.isAuthenticated && state.user.id === action.userId) {\n        let newState = Object.assign({}, state)\n        newState.user = Object.assign({}, state.user, {\n          avatars: action.avatars,\n        })\n        return newState\n      }\n      return state\n\n    case UPDATE_USERNAME:\n      if (state.isAuthenticated && state.user.id === action.userId) {\n        let newState = Object.assign({}, state)\n        newState.user = Object.assign({}, state.user, {\n          username: action.username,\n          slug: action.slug,\n        })\n        return newState\n      }\n      return state\n\n    default:\n      return state\n  }\n}\n","export const REPLACE_PARTICIPANTS = \"REPLACE_PARTICIPANTS\"\n\nexport function replace(newState) {\n  return {\n    type: REPLACE_PARTICIPANTS,\n    state: newState,\n  }\n}\n\nexport default function participants(state = [], action = null) {\n  switch (action.type) {\n    case REPLACE_PARTICIPANTS:\n      return action.state\n\n    default:\n      return state\n  }\n}\n","import moment from \"moment\"\n\nexport const BUSY_POLL = \"BUSY_POLL\"\nexport const RELEASE_POLL = \"RELEASE_POLL\"\nexport const REMOVE_POLL = \"REMOVE_POLL\"\nexport const REPLACE_POLL = \"REPLACE_POLL\"\nexport const UPDATE_POLL = \"UPDATE_POLL\"\n\nexport function hydrate(json) {\n  let hasSelectedChoices = false\n  for (const i in json.choices) {\n    const choice = json.choices[i]\n    if (choice.selected) {\n      hasSelectedChoices = true\n      break\n    }\n  }\n\n  return Object.assign({}, json, {\n    posted_on: moment(json.posted_on),\n\n    hasSelectedChoices,\n    endsOn: json.length\n      ? moment(json.posted_on).add(json.length, \"days\")\n      : null,\n\n    isBusy: false,\n  })\n}\n\nexport function busy() {\n  return {\n    type: BUSY_POLL,\n  }\n}\n\nexport function release() {\n  return {\n    type: RELEASE_POLL,\n  }\n}\n\nexport function replace(newState, hydrated = false) {\n  return {\n    type: REPLACE_POLL,\n    state: hydrated ? newState : hydrate(newState),\n  }\n}\n\nexport function update(data) {\n  return {\n    type: UPDATE_POLL,\n    data,\n  }\n}\n\nexport function remove() {\n  return {\n    type: REMOVE_POLL,\n  }\n}\n\nexport default function poll(state = {}, action = null) {\n  switch (action.type) {\n    case BUSY_POLL:\n      return Object.assign({}, state, { isBusy: true })\n\n    case RELEASE_POLL:\n      return Object.assign({}, state, { isBusy: false })\n\n    case REMOVE_POLL:\n      return {\n        isBusy: false,\n      }\n\n    case REPLACE_POLL:\n      return action.state\n\n    case UPDATE_POLL:\n      return Object.assign({}, state, action.data)\n\n    default:\n      return state\n  }\n}\n","import moment from \"moment\"\nimport { hydrateUser } from \"./users\"\n\nexport const PATCH_POST = \"PATCH_POST\"\n\nexport function hydrate(json) {\n  return Object.assign({}, json, {\n    posted_on: moment(json.posted_on),\n    updated_on: moment(json.updated_on),\n    hidden_on: moment(json.hidden_on),\n\n    attachments: json.attachments\n      ? json.attachments.map(hydrateAttachment)\n      : null,\n    poster: json.poster ? hydrateUser(json.poster) : null,\n\n    isSelected: false,\n    isBusy: false,\n    isDeleted: false,\n  })\n}\n\nexport function hydrateAttachment(json) {\n  return Object.assign({}, json, {\n    uploaded_on: moment(json.uploaded_on),\n  })\n}\n\nexport function patch(post, patch) {\n  return {\n    type: PATCH_POST,\n    post,\n    patch,\n  }\n}\n\nexport default function post(state = {}, action = null) {\n  switch (action.type) {\n    case PATCH_POST:\n      if (state.id == action.post.id) {\n        return Object.assign({}, state, action.patch)\n      }\n      return state\n\n    default:\n      return state\n  }\n}\n","import postReducer, {\n  PATCH_POST,\n  hydrate as hydratePost,\n} from \"misago/reducers/post\"\n\nexport const APPEND_POSTS = \"APPEND_POSTS\"\nexport const SELECT_POST = \"SELECT_POST\"\nexport const DESELECT_POST = \"DESELECT_POST\"\nexport const DESELECT_POSTS = \"DESELECT_POSTS\"\nexport const LOAD_POSTS = \"LOAD_POSTS\"\nexport const UNLOAD_POSTS = \"UNLOAD_POSTS\"\nexport const UPDATE_POSTS = \"UPDATE_POSTS\"\n\nexport function select(post) {\n  return {\n    type: SELECT_POST,\n    post,\n  }\n}\n\nexport function deselect(post) {\n  return {\n    type: DESELECT_POST,\n    post,\n  }\n}\n\nexport function deselectAll() {\n  return {\n    type: DESELECT_POSTS,\n  }\n}\n\nexport function hydrate(json) {\n  return Object.assign({}, json, {\n    results: json.results.map(hydratePost),\n    isLoaded: true,\n    isBusy: false,\n    isSelected: false,\n  })\n}\n\nexport function load(newState, hydrated = false) {\n  return {\n    type: LOAD_POSTS,\n    state: hydrated ? newState : hydrate(newState),\n  }\n}\n\nexport function append(newState, hydrated = false) {\n  return {\n    type: APPEND_POSTS,\n    state: hydrated ? newState : hydrate(newState),\n  }\n}\n\nexport function unload() {\n  return {\n    type: UNLOAD_POSTS,\n  }\n}\n\nexport function update(newState) {\n  return {\n    type: UPDATE_POSTS,\n    update: newState,\n  }\n}\n\nexport default function posts(state = {}, action = null) {\n  switch (action.type) {\n    case SELECT_POST:\n      const selectedPosts = state.results.map((post) => {\n        if (post.id == action.post.id) {\n          return Object.assign({}, post, {\n            isSelected: true,\n          })\n        } else {\n          return post\n        }\n      })\n\n      return Object.assign({}, state, {\n        results: selectedPosts,\n      })\n\n    case DESELECT_POST:\n      const deseletedPosts = state.results.map((post) => {\n        if (post.id == action.post.id) {\n          return Object.assign({}, post, {\n            isSelected: false,\n          })\n        } else {\n          return post\n        }\n      })\n\n      return Object.assign({}, state, {\n        results: deseletedPosts,\n      })\n\n    case DESELECT_POSTS:\n      const deseletedAllPosts = state.results.map((post) => {\n        return Object.assign({}, post, {\n          isSelected: false,\n        })\n      })\n\n      return Object.assign({}, state, {\n        results: deseletedAllPosts,\n      })\n\n    case APPEND_POSTS:\n      let results = state.results.slice()\n      const resultsIds = state.results.map((post) => {\n        return post.id\n      })\n\n      action.state.results.map((post) => {\n        if (resultsIds.indexOf(post.id) === -1) {\n          results.push(post)\n        }\n      })\n\n      return Object.assign({}, action.state, {\n        results,\n      })\n\n    case LOAD_POSTS:\n      return action.state\n\n    case UNLOAD_POSTS:\n      return Object.assign({}, state, {\n        isLoaded: false,\n      })\n\n    case UPDATE_POSTS:\n      return Object.assign({}, state, action.update)\n\n    case PATCH_POST:\n      const reducedPosts = state.results.map((post) => {\n        return postReducer(post, action)\n      })\n\n      return Object.assign({}, state, {\n        results: reducedPosts,\n      })\n\n    default:\n      return state\n  }\n}\n","export const LOAD_DETAILS = \"LOAD_DETAILS\"\n\nexport function load(newState) {\n  return {\n    type: LOAD_DETAILS,\n\n    newState,\n  }\n}\n\nexport default function details(state = {}, action = null) {\n  switch (action.type) {\n    case LOAD_DETAILS:\n      return action.newState\n\n    default:\n      return state\n  }\n}\n","import moment from \"moment\"\nimport {\n  UPDATE_AVATAR,\n  UPDATE_USERNAME,\n  hydrateStatus,\n} from \"misago/reducers/users\"\n\nexport const HYDRATE_PROFILE = \"HYDRATE_PROFILE\"\nexport const PATCH_PROFILE = \"PATCH_PROFILE\"\n\nexport function hydrate(profile) {\n  return {\n    type: HYDRATE_PROFILE,\n    profile,\n  }\n}\n\nexport function patch(patch) {\n  return {\n    type: PATCH_PROFILE,\n    patch,\n  }\n}\n\nexport default function auth(state = {}, action = null) {\n  switch (action.type) {\n    case HYDRATE_PROFILE:\n      return Object.assign({}, action.profile, {\n        joined_on: moment(action.profile.joined_on),\n        status: hydrateStatus(action.profile.status),\n      })\n\n    case PATCH_PROFILE:\n      return Object.assign({}, state, action.patch)\n\n    case UPDATE_AVATAR:\n      if (state.id === action.userId) {\n        return Object.assign({}, state, {\n          avatars: action.avatars,\n        })\n      }\n      return state\n\n    case UPDATE_USERNAME:\n      if (state.id === action.userId) {\n        return Object.assign({}, state, {\n          username: action.username,\n          slug: action.slug,\n        })\n      }\n      return state\n\n    default:\n      return state\n  }\n}\n","export const REPLACE_SEARCH = \"REPLACE_SEARCH\"\nexport const UPDATE_SEARCH = \"UPDATE_SEARCH\"\nexport const UPDATE_SEARCH_PROVIDER = \"UPDATE_SEARCH_PROVIDER\"\n\nexport const initialState = {\n  isLoading: false,\n  query: \"\",\n  providers: [],\n}\n\nexport function replace(newState) {\n  return {\n    type: REPLACE_SEARCH,\n    state: {\n      isLoading: false,\n      providers: newState,\n    },\n  }\n}\n\nexport function update(newState) {\n  return {\n    type: UPDATE_SEARCH,\n    update: newState,\n  }\n}\n\nexport function updateProvider(provider) {\n  return {\n    type: UPDATE_SEARCH_PROVIDER,\n    provider: provider,\n  }\n}\n\nexport default function participants(state = {}, action = null) {\n  switch (action.type) {\n    case REPLACE_SEARCH:\n      return action.state\n\n    case UPDATE_SEARCH:\n      return Object.assign({}, state, action.update)\n\n    case UPDATE_SEARCH_PROVIDER:\n      return Object.assign({}, state, {\n        providers: state.providers.map((provider) => {\n          if (provider.id === action.provider.id) {\n            return action.provider\n          } else {\n            return provider\n          }\n        }),\n      })\n\n    default:\n      return state\n  }\n}\n","import { toggle } from \"misago/utils/sets\"\n\nexport const SELECT_ALL = \"SELECT_ALL\"\nexport const SELECT_NONE = \"SELECT_NONE\"\nexport const SELECT_ITEM = \"SELECT_ITEM\"\n\nexport function all(itemsIds) {\n  return {\n    type: SELECT_ALL,\n    items: itemsIds,\n  }\n}\n\nexport function none() {\n  return {\n    type: SELECT_NONE,\n  }\n}\n\nexport function item(itemId) {\n  return {\n    type: SELECT_ITEM,\n    item: itemId,\n  }\n}\n\nexport default function selection(state = [], action = null) {\n  switch (action.type) {\n    case SELECT_ALL:\n      return action.items\n\n    case SELECT_NONE:\n      return []\n\n    case SELECT_ITEM:\n      return toggle(state, action.item)\n\n    default:\n      return state\n  }\n}\n","export var initialState = {\n  type: \"info\",\n  message: \"\",\n  isVisible: false,\n}\n\nexport const SHOW_SNACKBAR = \"SHOW_SNACKBAR\"\nexport const HIDE_SNACKBAR = \"HIDE_SNACKBAR\"\n\nexport function showSnackbar(message, type) {\n  return {\n    type: SHOW_SNACKBAR,\n    message,\n    messageType: type,\n  }\n}\n\nexport function hideSnackbar() {\n  return {\n    type: HIDE_SNACKBAR,\n  }\n}\n\nexport default function snackbar(state = initialState, action = null) {\n  if (action.type === SHOW_SNACKBAR) {\n    return {\n      type: action.messageType,\n      message: action.message,\n      isVisible: true,\n    }\n  } else if (action.type === HIDE_SNACKBAR) {\n    return Object.assign({}, state, {\n      isVisible: false,\n    })\n  } else {\n    return state\n  }\n}\n","import moment from \"moment\"\nimport { REMOVE_POLL, REPLACE_POLL } from \"./poll\"\n\nexport const BUSY_THREAD = \"BUSY_THREAD\"\nexport const RELEASE_THREAD = \"RELEASE_THREAD\"\nexport const REPLACE_THREAD = \"REPLACE_THREAD\"\nexport const UPDATE_THREAD = \"UPDATE_THREAD\"\nexport const UPDATE_THREAD_ACL = \"UPDATE_THREAD_ACL\"\n\nexport function hydrate(json) {\n  return Object.assign({}, json, {\n    started_on: moment(json.started_on),\n    last_post_on: moment(json.last_post_on),\n    best_answer_marked_on: json.best_answer_marked_on\n      ? moment(json.best_answer_marked_on)\n      : null,\n\n    isBusy: false,\n  })\n}\n\nexport function busy() {\n  return {\n    type: BUSY_THREAD,\n  }\n}\n\nexport function release() {\n  return {\n    type: RELEASE_THREAD,\n  }\n}\n\nexport function replace(newState, hydrated = false) {\n  return {\n    type: REPLACE_THREAD,\n    state: hydrated ? newState : hydrate(newState),\n  }\n}\n\nexport function update(data) {\n  return {\n    type: UPDATE_THREAD,\n    data,\n  }\n}\n\nexport function updateAcl(data) {\n  return {\n    type: UPDATE_THREAD_ACL,\n    data,\n  }\n}\n\nexport default function thread(state = {}, action = null) {\n  switch (action.type) {\n    case BUSY_THREAD:\n      return Object.assign({}, state, { isBusy: true })\n\n    case RELEASE_THREAD:\n      return Object.assign({}, state, { isBusy: false })\n\n    case REMOVE_POLL:\n      return Object.assign({}, state, { poll: null })\n\n    case REPLACE_POLL:\n      return Object.assign({}, state, { poll: action.state })\n\n    case REPLACE_THREAD:\n      return action.state\n\n    case UPDATE_THREAD:\n      return Object.assign({}, state, action.data)\n\n    case UPDATE_THREAD_ACL:\n      const acl = Object.assign({}, state.acl, action.data)\n      return Object.assign({}, state, { acl })\n\n    default:\n      return state\n  }\n}\n","import moment from \"moment\"\nimport concatUnique from \"misago/utils/concat-unique\"\n\nexport const APPEND_THREADS = \"APPEND_THREADS\"\nexport const DELETE_THREAD = \"DELETE_THREAD\"\nexport const FILTER_THREADS = \"FILTER_THREADS\"\nexport const HYDRATE_THREADS = \"HYDRATE_THREADS\"\nexport const PATCH_THREAD = \"PATCH_THREAD\"\nexport const SORT_THREADS = \"SORT_THREADS\"\n\nexport const MODERATION_PERMISSIONS = [\n  \"can_announce\",\n  \"can_approve\",\n  \"can_close\",\n  \"can_hide\",\n  \"can_move\",\n  \"can_merge\",\n  \"can_pin\",\n  \"can_review\",\n]\n\nexport function append(items, sorting) {\n  return {\n    type: APPEND_THREADS,\n    items,\n    sorting,\n  }\n}\n\nexport function deleteThread(thread) {\n  return {\n    type: DELETE_THREAD,\n    thread,\n  }\n}\n\nexport function filterThreads(category, categoriesMap) {\n  return {\n    type: FILTER_THREADS,\n    category,\n    categoriesMap,\n  }\n}\n\nexport function hydrate(items) {\n  return {\n    type: HYDRATE_THREADS,\n    items,\n  }\n}\n\nexport function patch(thread, patch, sorting = null) {\n  return {\n    type: PATCH_THREAD,\n    thread,\n    patch,\n    sorting,\n  }\n}\n\nexport function sort(sorting) {\n  return {\n    type: SORT_THREADS,\n    sorting,\n  }\n}\n\nexport function getThreadModerationOptions(thread_acl) {\n  let options = []\n  MODERATION_PERMISSIONS.forEach(function (perm) {\n    if (thread_acl[perm]) {\n      options.push(perm)\n    }\n  })\n  return options\n}\n\nexport function hydrateThread(thread) {\n  return Object.assign({}, thread, {\n    started_on: moment(thread.started_on),\n    last_post_on: moment(thread.last_post_on),\n    moderation: getThreadModerationOptions(thread.acl),\n  })\n}\n\nexport default function thread(state = [], action = null) {\n  switch (action.type) {\n    case APPEND_THREADS:\n      const mergedState = concatUnique(action.items.map(hydrateThread), state)\n      return mergedState.sort(action.sorting)\n\n    case DELETE_THREAD:\n      return state.filter(function (item) {\n        return item.id !== action.thread.id\n      })\n\n    case FILTER_THREADS:\n      return state.filter(function (item) {\n        const itemCategory = action.categoriesMap[item.category]\n        if (\n          itemCategory.lft >= action.category.lft &&\n          itemCategory.rght <= action.category.rght\n        ) {\n          // same or sub category\n          return true\n        } else if (item.weight == 2) {\n          // globally pinned\n          return true\n        } else {\n          // thread moved outside displayed scope, hide it\n          return false\n        }\n      })\n\n    case HYDRATE_THREADS:\n      return action.items.map(hydrateThread)\n\n    case PATCH_THREAD:\n      const patchedState = state.map(function (item) {\n        if (item.id === action.thread.id) {\n          return Object.assign({}, item, action.patch)\n        } else {\n          return item\n        }\n      })\n\n      if (action.sorting) {\n        return patchedState.sort(action.sorting)\n      }\n      return patchedState\n\n    case SORT_THREADS:\n      return state.sort(action.sorting)\n\n    default:\n      return state\n  }\n}\n","export var initialState = {\n  tick: 0,\n}\n\nexport const TICK = \"TICK\"\n\nexport function doTick() {\n  return {\n    type: TICK,\n  }\n}\n\nexport default function tick(state = initialState, action = null) {\n  if (action.type === TICK) {\n    return Object.assign({}, state, {\n      tick: state.tick + 1,\n    })\n  } else {\n    return state\n  }\n}\n","import moment from \"moment\"\nimport { UPDATE_AVATAR, UPDATE_USERNAME } from \"misago/reducers/users\"\nimport concatUnique from \"misago/utils/concat-unique\"\n\nexport const ADD_NAME_CHANGE = \"ADD_NAME_CHANGE\"\nexport const APPEND_HISTORY = \"APPEND_HISTORY\"\nexport const HYDRATE_HISTORY = \"HYDRATE_HISTORY\"\n\nexport function addNameChange(change, user, changedBy) {\n  return {\n    type: ADD_NAME_CHANGE,\n    change,\n    user,\n    changedBy,\n  }\n}\n\nexport function append(items) {\n  return {\n    type: APPEND_HISTORY,\n    items: items,\n  }\n}\n\nexport function hydrate(items) {\n  return {\n    type: HYDRATE_HISTORY,\n    items: items,\n  }\n}\n\nexport function hydrateNamechange(namechange) {\n  return Object.assign({}, namechange, {\n    changed_on: moment(namechange.changed_on),\n  })\n}\n\nexport default function username(state = [], action = null) {\n  switch (action.type) {\n    case ADD_NAME_CHANGE:\n      let newState = state.slice()\n      newState.unshift({\n        id: Math.floor(Date.now() / 1000), // just small hax for getting id\n        changed_by: action.changedBy,\n        changed_by_username: action.changedBy.username,\n        changed_on: moment(),\n        new_username: action.change.username,\n        old_username: action.user.username,\n      })\n      return newState\n\n    case APPEND_HISTORY:\n      return concatUnique(state, action.items.map(hydrateNamechange))\n\n    case HYDRATE_HISTORY:\n      return action.items.map(hydrateNamechange)\n\n    case UPDATE_AVATAR:\n      return state.map(function (item) {\n        item = Object.assign({}, item)\n        if (item.changed_by && item.changed_by.id === action.userId) {\n          item.changed_by = Object.assign({}, item.changed_by, {\n            avatars: action.avatars,\n          })\n        }\n\n        return item\n      })\n\n    case UPDATE_USERNAME:\n      return state.map(function (item) {\n        item = Object.assign({}, item)\n        if (item.changed_by && item.changed_by.id === action.userId) {\n          item.changed_by = Object.assign({}, item.changed_by, {\n            username: action.username,\n            slug: action.slug,\n          })\n        }\n\n        return Object.assign({}, item)\n      })\n\n    default:\n      return state\n  }\n}\n","import moment from \"moment\"\nimport concatUnique from \"misago/utils/concat-unique\"\n\nexport const APPEND_USERS = \"APPEND_USERS\"\nexport const HYDRATE_USERS = \"HYDRATE_USERS\"\nexport const UPDATE_AVATAR = \"UPDATE_AVATAR\"\nexport const UPDATE_USERNAME = \"UPDATE_USERNAME\"\n\nexport function append(items) {\n  return {\n    type: APPEND_USERS,\n    items,\n  }\n}\n\nexport function hydrate(items) {\n  return {\n    type: HYDRATE_USERS,\n    items,\n  }\n}\n\nexport function hydrateStatus(status) {\n  if (status) {\n    return Object.assign({}, status, {\n      last_click: status.last_click ? moment(status.last_click) : null,\n      banned_until: status.banned_until ? moment(status.banned_until) : null,\n    })\n  } else {\n    return null\n  }\n}\n\nexport function hydrateUser(user) {\n  return Object.assign({}, user, {\n    joined_on: moment(user.joined_on),\n    status: hydrateStatus(user.status),\n  })\n}\n\nexport function updateAvatar(user, avatars) {\n  return {\n    type: UPDATE_AVATAR,\n    userId: user.id,\n    avatars,\n  }\n}\n\nexport function updateUsername(user, username, slug) {\n  return {\n    type: UPDATE_USERNAME,\n    userId: user.id,\n    username,\n    slug,\n  }\n}\n\nexport default function user(state = [], action = null) {\n  switch (action.type) {\n    case APPEND_USERS:\n      return concatUnique(state, action.items.map(hydrateUser))\n\n    case HYDRATE_USERS:\n      return action.items.map(hydrateUser)\n\n    case UPDATE_AVATAR:\n      return state.map(function (item) {\n        item = Object.assign({}, item)\n        if (item.id === action.userId) {\n          item.avatars = action.avatars\n        }\n\n        return item\n      })\n\n    default:\n      return state\n  }\n}\n","export class Ajax {\n  constructor() {\n    this._cookieName = null\n    this._csrfToken = null\n    this._locks = {}\n  }\n\n  init(cookieName) {\n    this._cookieName = cookieName\n  }\n\n  getCsrfToken() {\n    if (document.cookie.indexOf(this._cookieName) !== -1) {\n      let cookieRegex = new RegExp(this._cookieName + \"=([^;]*)\")\n      let cookie = document.cookie.match(cookieRegex)[0]\n      return cookie ? cookie.split(\"=\")[1] : null\n    } else {\n      return null\n    }\n  }\n\n  request(method, url, data) {\n    let self = this\n    return new Promise(function (resolve, reject) {\n      let xhr = {\n        url: url,\n        method: method,\n        headers: {\n          \"X-CSRFToken\": self.getCsrfToken(),\n        },\n\n        data: data ? JSON.stringify(data) : null,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\",\n\n        success: function (data) {\n          resolve(data)\n        },\n\n        error: function (jqXHR) {\n          let rejection = jqXHR.responseJSON || {}\n\n          rejection.status = jqXHR.status\n\n          if (rejection.status === 0) {\n            rejection.detail = gettext(\"Lost connection with application.\")\n          }\n\n          if (rejection.status === 404) {\n            if (!rejection.detail || rejection.detail === \"NOT FOUND\") {\n              rejection.detail = gettext(\"Action link is invalid.\")\n            }\n          }\n\n          if (rejection.status === 500 && !rejection.detail) {\n            rejection.detail = gettext(\"Unknown error has occured.\")\n          }\n\n          rejection.statusText = jqXHR.statusText\n\n          reject(rejection)\n        },\n      }\n\n      $.ajax(xhr)\n    })\n  }\n\n  get(url, params, lock) {\n    if (params) {\n      url += \"?\" + $.param(params)\n    }\n\n    if (lock) {\n      let self = this\n\n      // update url in existing lock?\n      if (this._locks[lock]) {\n        this._locks[lock].url = url\n      }\n\n      // immediately dereference promise handlers without doing anything\n      // we are already waiting for existing response to resolve\n      if (this._locks[lock] && this._locks[lock].waiter) {\n        return {\n          then: function () {\n            return\n          },\n        }\n\n        // return promise that will begin when original one resolves\n      } else if (this._locks[lock] && this._locks[lock].wait) {\n        this._locks[lock].waiter = true\n\n        return new Promise(function (resolve, reject) {\n          let wait = function (url) {\n            // keep waiting on promise\n            if (self._locks[lock].wait) {\n              window.setTimeout(function () {\n                wait(url)\n              }, 300)\n\n              // poll for new url\n            } else if (self._locks[lock].url !== url) {\n              wait(self._locks[lock].url)\n\n              // ajax backend for response\n            } else {\n              self._locks[lock].waiter = false\n              self.request(\"GET\", self._locks[lock].url).then(\n                function (data) {\n                  if (self._locks[lock].url === url) {\n                    resolve(data)\n                  } else {\n                    self._locks[lock].waiter = true\n                    wait(self._locks[lock].url)\n                  }\n                },\n                function (rejection) {\n                  if (self._locks[lock].url === url) {\n                    reject(rejection)\n                  } else {\n                    self._locks[lock].waiter = true\n                    wait(self._locks[lock].url)\n                  }\n                }\n              )\n            }\n          }\n\n          window.setTimeout(function () {\n            wait(url)\n          }, 300)\n        })\n\n        // setup new lock without waiter\n      } else {\n        this._locks[lock] = {\n          url,\n          wait: true,\n          waiter: false,\n        }\n\n        return new Promise(function (resolve, reject) {\n          self.request(\"GET\", url).then(\n            function (data) {\n              self._locks[lock].wait = false\n              if (self._locks[lock].url === url) {\n                resolve(data)\n              }\n            },\n            function (rejection) {\n              self._locks[lock].wait = false\n              if (self._locks[lock].url === url) {\n                reject(rejection)\n              }\n            }\n          )\n        })\n      }\n    } else {\n      return this.request(\"GET\", url)\n    }\n  }\n\n  post(url, data) {\n    return this.request(\"POST\", url, data)\n  }\n\n  patch(url, data) {\n    return this.request(\"PATCH\", url, data)\n  }\n\n  put(url, data) {\n    return this.request(\"PUT\", url, data)\n  }\n\n  delete(url, data) {\n    return this.request(\"DELETE\", url, data)\n  }\n\n  upload(url, data, progress) {\n    let self = this\n    return new Promise(function (resolve, reject) {\n      let xhr = {\n        url: url,\n        method: \"POST\",\n        headers: {\n          \"X-CSRFToken\": self.getCsrfToken(),\n        },\n\n        data: data,\n        contentType: false,\n        processData: false,\n\n        xhr: function () {\n          let xhr = new window.XMLHttpRequest()\n          xhr.upload.addEventListener(\n            \"progress\",\n            function (evt) {\n              if (evt.lengthComputable) {\n                progress(Math.round((evt.loaded / evt.total) * 100))\n              }\n            },\n            false\n          )\n          return xhr\n        },\n\n        success: function (response) {\n          resolve(response)\n        },\n\n        error: function (jqXHR) {\n          let rejection = jqXHR.responseJSON || {}\n\n          rejection.status = jqXHR.status\n\n          if (rejection.status === 0) {\n            rejection.detail = gettext(\"Lost connection with application.\")\n          }\n\n          if (rejection.status === 413 && !rejection.detail) {\n            rejection.detail = gettext(\n              \"Upload was rejected by server as too large.\"\n            )\n          }\n\n          if (rejection.status === 404) {\n            if (!rejection.detail || rejection.detail === \"NOT FOUND\") {\n              rejection.detail = gettext(\"Action link is invalid.\")\n            }\n          }\n\n          if (rejection.status === 500 && !rejection.detail) {\n            rejection.detail = gettext(\"Unknown error has occured.\")\n          }\n\n          rejection.statusText = jqXHR.statusText\n\n          reject(rejection)\n        },\n      }\n\n      $.ajax(xhr)\n    })\n  }\n}\n\nexport default new Ajax()\n","import { signIn, signOut } from \"misago/reducers/auth\"\n\nexport class Auth {\n  init(store, local, modal) {\n    this._store = store\n    this._local = local\n    this._modal = modal\n\n    // tell other tabs what auth state is because we are most current with it\n    this.syncSession()\n\n    // listen for other tabs to tell us that state changed\n    this.watchState()\n  }\n\n  syncSession() {\n    const state = this._store.getState().auth\n    if (state.isAuthenticated) {\n      this._local.set(\"auth\", {\n        isAuthenticated: true,\n        username: state.user.username,\n      })\n    } else {\n      this._local.set(\"auth\", {\n        isAuthenticated: false,\n      })\n    }\n  }\n\n  watchState() {\n    const state = this._store.getState().auth\n    this._local.watch(\"auth\", (newState) => {\n      if (newState.isAuthenticated) {\n        this._store.dispatch(\n          signIn({\n            username: newState.username,\n          })\n        )\n      } else if (state.isAuthenticated) {\n        // check if we are authenticated in this tab\n        // because some browser plugins prune local store\n        // aggressively, forcing erroneous message to display here\n        // tracking bug #955\n        this._store.dispatch(signOut())\n      }\n    })\n    this._modal.hide()\n  }\n\n  signIn(user) {\n    this._store.dispatch(signIn(user))\n    this._local.set(\"auth\", {\n      isAuthenticated: true,\n      username: user.username,\n    })\n    this._modal.hide()\n  }\n\n  signOut() {\n    this._store.dispatch(signOut())\n    this._local.set(\"auth\", {\n      isAuthenticated: false,\n    })\n    this._modal.hide()\n  }\n\n  softSignOut() {\n    this._store.dispatch(signOut(true))\n    this._local.set(\"auth\", {\n      isAuthenticated: false,\n    })\n    this._modal.hide()\n  }\n}\n\nexport default new Auth()\n","/* global grecaptcha */\nimport React from \"react\"\nimport FormGroup from \"misago/components/form-group\"\n\nexport class BaseCaptcha {\n  init(context, ajax, include, snackbar) {\n    this._context = context\n    this._ajax = ajax\n    this._include = include\n    this._snackbar = snackbar\n  }\n}\n\nexport class NoCaptcha extends BaseCaptcha {\n  load() {\n    return new Promise(function (resolve) {\n      // immediately resolve as we don't have anything to validate\n      resolve()\n    })\n  }\n\n  validator() {\n    return null\n  }\n\n  component() {\n    return null\n  }\n}\n\nexport class QACaptcha extends BaseCaptcha {\n  load() {\n    var self = this\n    return new Promise((resolve, reject) => {\n      self._ajax.get(self._context.get(\"CAPTCHA_API\")).then(\n        function (data) {\n          self.question = data.question\n          self.helpText = data.help_text\n          resolve()\n        },\n        function () {\n          self._snackbar.error(gettext(\"Failed to load CAPTCHA.\"))\n          reject()\n        }\n      )\n    })\n  }\n\n  validator() {\n    return []\n  }\n\n  component(kwargs) {\n    return (\n      <FormGroup\n        label={this.question}\n        for=\"id_captcha\"\n        labelClass={kwargs.labelClass || \"\"}\n        controlClass={kwargs.controlClass || \"\"}\n        validation={kwargs.form.state.errors.captcha}\n        helpText={this.helpText || null}\n      >\n        <input\n          aria-describedby=\"id_captcha_status\"\n          className=\"form-control\"\n          disabled={kwargs.form.state.isLoading}\n          id=\"id_captcha\"\n          onChange={kwargs.form.bindInput(\"captcha\")}\n          type=\"text\"\n          value={kwargs.form.state.captcha}\n        />\n      </FormGroup>\n    )\n  }\n}\n\nexport class ReCaptchaComponent extends React.Component {\n  componentDidMount() {\n    grecaptcha.render(\"recaptcha\", {\n      sitekey: this.props.siteKey,\n      callback: (response) => {\n        // fire fakey event to binding\n        this.props.binding({\n          target: {\n            value: response,\n          },\n        })\n      },\n    })\n  }\n\n  render() {\n    return <div id=\"recaptcha\" />\n  }\n}\n\nexport class ReCaptcha extends BaseCaptcha {\n  load() {\n    this._include.include(\"https://www.google.com/recaptcha/api.js\", true)\n\n    return new Promise(function (resolve) {\n      var wait = function () {\n        if (typeof grecaptcha === \"undefined\") {\n          window.setTimeout(function () {\n            wait()\n          }, 200)\n        } else {\n          resolve()\n        }\n      }\n      wait()\n    })\n  }\n\n  validator() {\n    return []\n  }\n\n  component(kwargs) {\n    return (\n      <FormGroup\n        label={gettext(\"Please solve the quick test\")}\n        for=\"id_captcha\"\n        labelClass={kwargs.labelClass || \"\"}\n        controlClass={kwargs.controlClass || \"\"}\n        validation={kwargs.form.state.errors.captcha}\n        helpText={gettext(\n          \"This test helps us prevent automated spam registrations on our site.\"\n        )}\n      >\n        <ReCaptchaComponent\n          binding={kwargs.form.bindInput(\"captcha\")}\n          siteKey={this._context.get(\"SETTINGS\").recaptcha_site_key}\n        />\n      </FormGroup>\n    )\n  }\n}\n\nexport class Captcha {\n  init(context, ajax, include, snackbar) {\n    switch (context.get(\"SETTINGS\").captcha_type) {\n      case \"no\":\n        this._captcha = new NoCaptcha()\n        break\n\n      case \"qa\":\n        this._captcha = new QACaptcha()\n        break\n\n      case \"re\":\n        this._captcha = new ReCaptcha()\n        break\n    }\n\n    this._captcha.init(context, ajax, include, snackbar)\n  }\n\n  // accessors for underlying strategy\n\n  load() {\n    return this._captcha.load()\n  }\n\n  validator() {\n    return this._captcha.validator()\n  }\n\n  component(kwargs) {\n    return this._captcha.component(kwargs)\n  }\n}\n\nexport default new Captcha()\n","export class Include {\n  init(staticUrl) {\n    this._staticUrl = staticUrl\n    this._included = []\n  }\n\n  include(script, remote = false) {\n    if (this._included.indexOf(script) === -1) {\n      this._included.push(script)\n      this._include(script, remote)\n    }\n  }\n\n  _include(script, remote) {\n    $.ajax({\n      url: (!remote ? this._staticUrl : \"\") + script,\n      cache: true,\n      dataType: \"script\",\n    })\n  }\n}\n\nexport default new Include()\n","let storage = window.localStorage\n\nexport class LocalStorage {\n  init(prefix) {\n    this._prefix = prefix\n    this._watchers = []\n\n    window.addEventListener(\"storage\", (e) => {\n      let newValueJson = JSON.parse(e.newValue)\n      this._watchers.forEach(function (watcher) {\n        if (watcher.key === e.key && e.oldValue !== e.newValue) {\n          watcher.callback(newValueJson)\n        }\n      })\n    })\n  }\n\n  set(key, value) {\n    storage.setItem(this._prefix + key, JSON.stringify(value))\n  }\n\n  get(key) {\n    let itemString = storage.getItem(this._prefix + key)\n    if (itemString) {\n      return JSON.parse(itemString)\n    } else {\n      return null\n    }\n  }\n\n  watch(key, callback) {\n    this._watchers.push({\n      key: this._prefix + key,\n      callback: callback,\n    })\n  }\n}\n\nexport default new LocalStorage()\n","import mount from \"misago/utils/mount-component\"\n\nexport class MobileNavbarDropdown {\n  init(element) {\n    this._element = element\n    this._component = null\n  }\n\n  show(component) {\n    if (this._component === component) {\n      this.hide()\n    } else {\n      this._component = component\n      mount(component, this._element.id)\n      $(this._element).addClass(\"open\")\n    }\n  }\n\n  showConnected(name, component) {\n    if (this._component === name) {\n      this.hide()\n    } else {\n      this._component = name\n      mount(component, this._element.id, true)\n      $(this._element).addClass(\"open\")\n    }\n  }\n\n  hide() {\n    $(this._element).removeClass(\"open\")\n    this._component = null\n  }\n}\n\nexport default new MobileNavbarDropdown()\n","import ReactDOM from \"react-dom\"\nimport mount from \"misago/utils/mount-component\"\n\nexport class Modal {\n  init(element) {\n    this._element = element\n\n    this._modal = $(element).modal({ show: false })\n\n    this._modal.on(\"hidden.bs.modal\", () => {\n      ReactDOM.unmountComponentAtNode(this._element)\n    })\n  }\n\n  show(component) {\n    mount(component, this._element.id)\n    this._modal.modal(\"show\")\n  }\n\n  hide() {\n    this._modal.modal(\"hide\")\n  }\n}\n\nexport default new Modal()\n","export class PageTitle {\n  init(indexTitle, forumName) {\n    this._indexTitle = indexTitle\n    this._forumName = forumName\n  }\n\n  set(title) {\n    if (!title) {\n      document.title = this._indexTitle || this._forumName\n      return\n    }\n\n    if (typeof title === \"string\") {\n      title = { title: title }\n    }\n\n    let finalTitle = title.title\n\n    if (title.page > 1) {\n      const pageLabel = interpolate(\n        gettext(\"page: %(page)s\"),\n        {\n          page: title.page,\n        },\n        true\n      )\n\n      finalTitle += \" (\" + pageLabel + \")\"\n    }\n\n    if (title.parent) {\n      finalTitle += \" | \" + title.parent\n    }\n\n    document.title = finalTitle + \" | \" + this._forumName\n  }\n}\n\nexport default new PageTitle()\n","export class Polls {\n  init(ajax, snackbar) {\n    this._ajax = ajax\n    this._snackbar = snackbar\n\n    this._polls = {}\n  }\n\n  start(kwargs) {\n    this.stop(kwargs.poll)\n\n    const poolServer = () => {\n      this._polls[kwargs.poll] = kwargs\n\n      this._ajax.get(kwargs.url, kwargs.data || null).then(\n        (data) => {\n          if (!this._polls[kwargs.poll]._stopped) {\n            kwargs.update(data)\n\n            this._polls[kwargs.poll].timeout = window.setTimeout(\n              poolServer,\n              kwargs.frequency\n            )\n          }\n        },\n        (rejection) => {\n          if (!this._polls[kwargs.poll]._stopped) {\n            if (kwargs.error) {\n              kwargs.error(rejection)\n            } else {\n              this._snackbar.apiError(rejection)\n            }\n          }\n        }\n      )\n    }\n\n    if (kwargs.delayed) {\n      this._polls[kwargs.poll] = {\n        timeout: window.setTimeout(poolServer, kwargs.frequency),\n      }\n    } else {\n      poolServer()\n    }\n  }\n\n  stop(pollId) {\n    if (this._polls[pollId]) {\n      window.clearTimeout(this._polls[pollId].timeout)\n      this._polls[pollId]._stopped = true\n    }\n  }\n}\n\nexport default new Polls()\n","import React from \"react\"\n\nexport default class extends React.Component {\n  onClick = () => {\n    this.props.replaceSelection(this.props.execAction)\n  }\n\n  render() {\n    return (\n      <button\n        className={\"btn btn-icon \" + this.props.className}\n        disabled={this.props.disabled}\n        onClick={this.onClick}\n        title={this.props.title}\n        type=\"button\"\n      >\n        {this.props.children}\n      </button>\n    )\n  }\n}\n","import React from \"react\"\nimport Action from \"./action\"\n\nexport default function (props) {\n  return (\n    <Action execAction={insertCode} title={gettext(\"Insert code\")} {...props}>\n      <span className=\"material-icon\">functions</span>\n    </Action>\n  )\n}\n\nexport function insertCode(selection, replace) {\n  const syntax = $.trim(\n    prompt(gettext(\"Enter name of syntax of your code (optional)\") + \":\")\n  )\n  replace(\"\\n\\n```\" + syntax + \"\\n\" + selection + \"\\n```\\n\\n\")\n}\n","import React from \"react\"\nimport Action from \"./action\"\n\nexport default function (props) {\n  return (\n    <Action\n      execAction={makeEmphasis}\n      title={gettext(\"Emphase selection\")}\n      {...props}\n    >\n      <span className=\"material-icon\">format_italic</span>\n    </Action>\n  )\n}\n\nexport function makeEmphasis(selection, replace) {\n  if (selection.length) {\n    replace(\"*\" + selection + \"*\")\n  }\n}\n","import React from \"react\"\nimport Action from \"./action\"\n\nexport default function (props) {\n  return (\n    <Action\n      execAction={insertHr}\n      title={gettext(\"Insert horizontal ruler\")}\n      {...props}\n    >\n      <span className=\"material-icon\">remove</span>\n    </Action>\n  )\n}\n\nexport function insertHr(selection, replace) {\n  replace(\"\\n\\n- - - - -\\n\\n\")\n}\n","const URL_PATTERN = new RegExp(\n  \"^(https?:\\\\/\\\\/)?((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*(\\\\?[;&a-z\\\\d%_.~+=-]*)?(\\\\#[-a-z\\\\d_]*)?$\",\n  \"i\"\n)\n\nexport default function (str) {\n  return URL_PATTERN.test($.trim(str))\n}\n","import React from \"react\"\nimport Action from \"./action\"\nimport isUrl from \"misago/utils/is-url\"\n\nexport default function (props) {\n  return (\n    <Action execAction={insertImage} title={gettext(\"Insert image\")} {...props}>\n      <span className=\"material-icon\">insert_photo</span>\n    </Action>\n  )\n}\n\nexport function insertImage(selection, replace) {\n  let url = \"\"\n  let label = \"\"\n\n  if (selection.length) {\n    if (isUrl(selection)) {\n      url = selection\n    } else {\n      label = selection\n    }\n  }\n\n  url = $.trim(prompt(gettext(\"Enter link to image\") + \":\", url))\n\n  if (url.length) {\n    label = $.trim(prompt(gettext(\"Enter image label (optional)\") + \":\", label))\n    if (label.length > 0) {\n      replace(\"![\" + label + \"](\" + url + \")\")\n    } else {\n      replace(\"!(\" + url + \")\")\n    }\n  }\n}\n","import React from \"react\"\nimport Action from \"./action\"\nimport isUrl from \"misago/utils/is-url\"\n\nexport default function (props) {\n  return (\n    <Action execAction={insertLink} title={gettext(\"Insert link\")} {...props}>\n      <span className=\"material-icon\">insert_link</span>\n    </Action>\n  )\n}\n\nexport function insertLink(selection, replace) {\n  let url = \"\"\n  let label = \"\"\n\n  if (selection.length) {\n    if (isUrl(selection)) {\n      url = selection\n    } else {\n      label = selection\n    }\n  }\n\n  url = $.trim(prompt(gettext(\"Enter link address\") + \":\", url) || \"\")\n  if (url.length === 0) return false\n  label = $.trim(prompt(gettext(\"Enter link label (optional)\") + \":\", label))\n\n  if (url.length) {\n    if (label.length > 0) {\n      replace(\"[\" + label + \"](\" + url + \")\")\n    } else {\n      replace(url)\n    }\n  }\n}\n","import React from \"react\"\nimport Action from \"./action\"\nimport isUrl from \"misago/utils/is-url\"\n\nexport default function (props) {\n  return (\n    <Action\n      execAction={insertSpoiler}\n      title={gettext(\"Insert spoiler\")}\n      {...props}\n    >\n      <span className=\"material-icon\">not_interested</span>\n    </Action>\n  )\n}\n\nexport function insertSpoiler(selection, replace) {\n  replace(\"\\n\\n[spoiler]\\n\" + selection + \"\\n[/spoiler]\\n\\n\")\n}\n","import React from \"react\"\nimport Action from \"./action\"\n\nexport default function (props) {\n  return (\n    <Action\n      execAction={makeStrikethrough}\n      title={gettext(\"Strikethrough selection\")}\n      {...props}\n    >\n      <span className=\"material-icon\">format_strikethrough</span>\n    </Action>\n  )\n}\n\nexport function makeStrikethrough(selection, replace) {\n  if (selection.length) {\n    replace(\"~~\" + selection + \"~~\")\n  }\n}\n","import React from \"react\"\nimport Action from \"./action\"\n\nexport default function (props) {\n  return (\n    <Action\n      execAction={makeStrong}\n      title={gettext(\"Bolder selection\")}\n      {...props}\n    >\n      <span className=\"material-icon\">format_bold</span>\n    </Action>\n  )\n}\n\nexport function makeStrong(selection, replace) {\n  if (selection.length) {\n    replace(\"**\" + selection + \"**\")\n  }\n}\n","import React from \"react\"\nimport Action from \"./action\"\nimport isUrl from \"misago/utils/is-url\"\n\nexport default function (props) {\n  return (\n    <Action execAction={insertQuote} title={gettext(\"Insert quote\")} {...props}>\n      <span className=\"material-icon\">format_quote</span>\n    </Action>\n  )\n}\n\nexport function insertQuote(selection, replace) {\n  let title = $.trim(\n    prompt(gettext(\"Enter quote autor, prefix usernames with @\") + \":\", title)\n  )\n\n  if (title) {\n    replace('\\n\\n[quote=\"' + title + '\"]\\n' + selection + \"\\n[/quote]\\n\\n\")\n  } else {\n    replace(\"\\n\\n[quote]\\n\" + selection + \"\\n[/quote]\\n\\n\")\n  }\n}\n","import React from \"react\"\nimport misago from \"misago\"\nimport escapeHtml from \"misago/utils/escape-html\"\nimport formatFilesize from \"misago/utils/file-size\"\n\nconst DATE_ABBR = '<abbr title=\"%(absolute)s\">%(relative)s</abbr>'\nconst USER_SPAN = '<span class=\"item-title\">%(user)s</span>'\nconst USER_URL = '<a href=\"%(url)s\" class=\"item-title\">%(user)s</a>'\n\nexport default class extends React.Component {\n  onInsert = () => {\n    this.props.replaceSelection(this.insertAttachment)\n  }\n\n  insertAttachment = (selection, replace) => {\n    const item = this.props.item\n\n    if (item.is_image) {\n      if (item.url.thumb) {\n        replace(\n          \"[![\" +\n            item.filename +\n            \"](\" +\n            item.url.thumb +\n            \")](\" +\n            item.url.index +\n            \")\"\n        )\n      } else {\n        replace(\n          \"[![\" +\n            item.filename +\n            \"](\" +\n            item.url.index +\n            \")](\" +\n            item.url.index +\n            \")\"\n        )\n      }\n    } else {\n      replace(\"[\" + item.filename + \"](\" + item.url.index + \")\")\n    }\n  }\n\n  onRemove = () => {\n    this.updateItem({\n      isRemoved: true,\n    })\n  }\n\n  onUndo = () => {\n    this.updateItem({\n      isRemoved: false,\n    })\n  }\n\n  updateItem = (newState) => {\n    const updatedAttachments = this.props.attachments.map((item) => {\n      if (item.id === this.props.item.id) {\n        return Object.assign({}, item, newState)\n      } else {\n        return item\n      }\n    })\n    this.props.onAttachmentsChange(updatedAttachments)\n  }\n\n  render() {\n    return (\n      <li className=\"editor-attachment-complete\">\n        <div className=\"row\">\n          <div className=\"col-xs-12 col-sm-8 col-md-9\">\n            <Preview {...this.props} />\n            <div className=\"editor-attachment-details\">\n              <Filename {...this.props} />\n              <Details {...this.props} />\n            </div>\n          </div>\n          <div className=\"col-xs-12 col-sm-4 col-md-3 xs-margin-top-half\">\n            <Actions\n              onInsert={this.onInsert}\n              onRemove={this.onRemove}\n              onUndo={this.onUndo}\n              {...this.props}\n            />\n          </div>\n        </div>\n      </li>\n    )\n  }\n}\n\nexport function Preview(props) {\n  if (props.item.is_image) {\n    return <Image {...props} />\n  } else {\n    return <Icon {...props} />\n  }\n}\n\nexport function Image(props) {\n  const thumbnailUrl = props.item.url.thumb || props.item.url.index\n\n  return (\n    <div className=\"editor-attachment-image\">\n      <a\n        href={props.item.url.index + \"?shva=1\"}\n        style={{ backgroundImage: \"url('\" + thumbnailUrl + \"?shva=1')\" }}\n        target=\"_blank\"\n      />\n    </div>\n  )\n}\n\nexport function Icon(props) {\n  return (\n    <div className=\"editor-attachment-icon\">\n      <span className=\"material-icon\">insert_drive_file</span>\n    </div>\n  )\n}\n\nexport function Filename(props) {\n  return (\n    <h4>\n      <a\n        className=\"item-title\"\n        href={props.item.url.index + \"?shva=1\"}\n        target=\"_blank\"\n      >\n        {props.item.filename}\n      </a>\n    </h4>\n  )\n}\n\nexport function Details(props) {\n  let user = null\n  if (props.item.url.uploader) {\n    user = interpolate(\n      USER_URL,\n      {\n        url: escapeHtml(props.item.url.uploader),\n        user: escapeHtml(props.item.uploader_name),\n      },\n      true\n    )\n  } else {\n    user = interpolate(\n      USER_SPAN,\n      {\n        user: escapeHtml(props.item.uploader_name),\n      },\n      true\n    )\n  }\n\n  const date = interpolate(\n    DATE_ABBR,\n    {\n      absolute: escapeHtml(props.item.uploaded_on.format(\"LLL\")),\n      relative: escapeHtml(props.item.uploaded_on.fromNow()),\n    },\n    true\n  )\n\n  const message = interpolate(\n    escapeHtml(\n      gettext(\n        \"%(filetype)s, %(size)s, uploaded by %(uploader)s %(uploaded_on)s.\"\n      )\n    ),\n    {\n      filetype: props.item.filetype,\n      size: formatFilesize(props.item.size),\n      uploader: user,\n      uploaded_on: date,\n    },\n    true\n  )\n\n  return <p dangerouslySetInnerHTML={{ __html: message }} />\n}\n\nexport function Actions(props) {\n  return (\n    <div className=\"editor-attachment-actions\">\n      <div className=\"row\">\n        <Insert {...props} />\n        <Remove {...props} />\n        <Undo {...props} />\n      </div>\n    </div>\n  )\n}\n\nexport function Insert(props) {\n  if (!!props.item.isRemoved) {\n    return null\n  }\n\n  return (\n    <div className=\"col-xs-6\">\n      <button\n        className=\"btn btn-default btn-sm btn-block\"\n        onClick={props.onInsert}\n        type=\"button\"\n      >\n        {gettext(\"Insert\")}\n      </button>\n    </div>\n  )\n}\n\nexport function Remove(props) {\n  if (!!props.item.isRemoved && props.item.acl.can_delete) {\n    return null\n  }\n\n  return (\n    <div className=\"col-xs-6\">\n      <button\n        className=\"btn btn-default btn-sm btn-block\"\n        onClick={props.onRemove}\n        type=\"button\"\n      >\n        {gettext(\"Remove\")}\n      </button>\n    </div>\n  )\n}\n\nexport function Undo(props) {\n  if (!props.item.isRemoved) {\n    return null\n  }\n\n  return (\n    <div className=\"col-xs-12\">\n      <button\n        className=\"btn btn-default btn-sm btn-block\"\n        onClick={props.onUndo}\n        type=\"button\"\n      >\n        {gettext(\"Undo removal\")}\n      </button>\n    </div>\n  )\n}\n","import React from \"react\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nconst STRONG = \"<strong>%(name)s</strong>\"\n\nexport default class extends React.Component {\n  onClick = () => {\n    const filteredAttachments = this.props.attachments.filter((item) => {\n      return item.key !== this.props.item.key\n    })\n    this.props.onAttachmentsChange(filteredAttachments)\n  }\n\n  render() {\n    const filename = interpolate(\n      STRONG,\n      {\n        name: escapeHtml(this.props.item.filename),\n      },\n      true\n    )\n\n    const title = interpolate(\n      gettext(\"Error uploading %(filename)s\"),\n      {\n        filename,\n        progress: this.props.item.progress + \"%\",\n      },\n      true\n    )\n\n    return (\n      <li className=\"editor-attachment-error\">\n        <div className=\"editor-attachment-error-icon\">\n          <span className=\"material-icon\">warning</span>\n        </div>\n        <div className=\"editor-attachment-error-message\">\n          <h4 dangerouslySetInnerHTML={{ __html: title + \":\" }} />\n          <p>{this.props.item.error}</p>\n          <button\n            className=\"btn btn-default btn-sm\"\n            onClick={this.onClick}\n            type=\"button\"\n          >\n            {gettext(\"Dismiss\")}\n          </button>\n        </div>\n      </li>\n    )\n  }\n}\n","import React from \"react\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nconst STRONG = \"<strong>%(name)s</strong>\"\n\nexport default function (props) {\n  const filename = interpolate(\n    STRONG,\n    {\n      name: escapeHtml(props.item.filename),\n    },\n    true\n  )\n\n  const message = interpolate(\n    gettext(\"Uploading %(filename)s... %(progress)s\"),\n    {\n      filename,\n      progress: props.item.progress + \"%\",\n    },\n    true\n  )\n\n  return (\n    <li className=\"editor-attachment-upload\">\n      <div className=\"editor-attachment-progress-bar\">\n        <div\n          className=\"editor-attachment-progress\"\n          style={{ width: props.item.progress + \"%\" }}\n        />\n      </div>\n      <p\n        className=\"editor-attachment-upload-message\"\n        dangerouslySetInnerHTML={{ __html: message }}\n      />\n    </li>\n  )\n}\n","import React from \"react\"\nimport AttachmentComplete from \"./complete\"\nimport AttachmentError from \"./error\"\nimport AttachmentUpload from \"./upload\"\nimport misago from \"misago\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nexport default function (props) {\n  if (props.item.id) {\n    return <AttachmentComplete {...props} />\n  }\n\n  if (props.item.error) {\n    return <AttachmentError {...props} />\n  }\n\n  return <AttachmentUpload {...props} />\n}\n","import React from \"react\"\nimport Attachment from \"./attachment\"\n\nexport default function (props) {\n  return (\n    <ul className=\"list-unstyled editor-attachments-list\">\n      {props.attachments.map((item) => {\n        return <Attachment item={item} key={item.id || item.key} {...props} />\n      })}\n    </ul>\n  )\n}\n","import React from \"react\"\nimport moment from \"moment\"\nimport misago from \"misago\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends React.Component {\n  onChange = (event) => {\n    const file = event.target.files[0]\n    if (!file) {\n      return\n    }\n\n    let upload = {\n      id: null,\n      key: getRandomKey(),\n      progress: 0,\n      error: null,\n      filename: file.name,\n    }\n\n    this.props.onAttachmentsChange([upload].concat(this.props.attachments))\n\n    const data = new FormData()\n    data.append(\"upload\", file)\n\n    ajax\n      .upload(misago.get(\"ATTACHMENTS_API\"), data, (progress) => {\n        upload.progress = progress\n        this.props.onAttachmentsChange(this.props.attachments.concat())\n      })\n      .then(\n        (data) => {\n          data.uploaded_on = moment(data.uploaded_on)\n          Object.assign(upload, data)\n          this.props.onAttachmentsChange(this.props.attachments.concat())\n        },\n        (rejection) => {\n          if (rejection.status === 400 || rejection.status === 413) {\n            upload.error = rejection.detail\n            this.props.onAttachmentsChange(this.props.attachments.concat())\n          } else {\n            snackbar.apiError(rejection)\n          }\n        }\n      )\n  }\n\n  render() {\n    return (\n      <input id=\"editor-upload-field\" onChange={this.onChange} type=\"file\" />\n    )\n  }\n}\n\nexport function getRandomKey() {\n  return \"upld-\" + Math.round(new Date().getTime())\n}\n","import React from \"react\"\nimport List from \"./list\"\nimport Uploader from \"./uploader\"\nimport misago from \"misago\"\n\nexport default function (props) {\n  if (!misago.get(\"user\").acl.max_attachment_size) {\n    return null\n  }\n\n  return (\n    <div className=\"editor-attachments\">\n      <List {...props} />\n      <Uploader {...props} />\n    </div>\n  )\n}\n","import React from \"react\"\nimport misago from \"misago\"\n\nexport default class extends React.Component {\n  onClick = () => {\n    document.getElementById(\"editor-upload-field\").click()\n  }\n\n  render() {\n    if (!misago.get(\"user\").acl.max_attachment_size) {\n      return null\n    }\n\n    return (\n      <button\n        className={\"btn btn-icon \" + this.props.className}\n        disabled={this.props.disabled}\n        onClick={this.onClick}\n        title={gettext(\"Upload file\")}\n        type=\"button\"\n      >\n        <span className=\"material-icon\">file_upload</span>\n      </button>\n    )\n  }\n}\n","import React from \"react\"\nimport MisagoMarkup from \"misago/components/misago-markup\"\n\nexport default function (props) {\n  return (\n    <div className=\"modal-dialog\" role=\"document\">\n      <div className=\"modal-content\">\n        <div className=\"modal-header\">\n          <button\n            aria-label={gettext(\"Close\")}\n            className=\"close\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            <span aria-hidden=\"true\">&times;</span>\n          </button>\n          <h4 className=\"modal-title\">{gettext(\"Preview message\")}</h4>\n        </div>\n        <div className=\"modal-body markup-preview\">\n          <MisagoMarkup markup={props.markup} />\n        </div>\n      </div>\n    </div>\n  )\n}\n","export const textareaId = \"editor-textarea\"\n\nexport function getTextarea() {\n  return document.getElementById(textareaId)\n}\n\nexport function getValue() {\n  return document.getElementById(textareaId).value\n}\n\nexport function getSelectionRange(start, end) {\n  return {\n    start,\n    end,\n  }\n}\n\nexport function getSelection() {\n  const ctrl = getTextarea()\n  if (document.selection) {\n    ctrl.focus()\n    const range = document.selection.createRange()\n    const length = range.text.length\n    range.moveStart(\"character\", -ctrl.value.length)\n    return getSelectionRange(range.text.length - length, range.text.length)\n  } else if (ctrl.selectionStart || ctrl.selectionStart == \"0\") {\n    return getSelectionRange(ctrl.selectionStart, ctrl.selectionEnd)\n  }\n}\n\nexport function getSelectionText() {\n  const range = getSelection()\n  return $.trim(getValue().substring(range.start, range.end))\n}\n\nexport function setSelection(selectionRange) {\n  const ctrl = getTextarea()\n  if (ctrl.setSelectionRange) {\n    ctrl.focus()\n    ctrl.setSelectionRange(selectionRange.start, selectionRange.end)\n  } else if (ctrl.createTextRange) {\n    const range = ctrl.createTextRange()\n    range.collapse(true)\n    range.moveStart(\"character\", selectionRange.start)\n    range.moveEnd(\"character\", selectionRange.end)\n    range.select()\n  }\n}\n\nexport function _replace(myRange, replacement) {\n  const ctrl = getTextarea()\n  const text = ctrl.value\n  const startText = text.substring(0, myRange.start)\n  ctrl.value =\n    text.substring(0, myRange.start) + replacement + text.substring(myRange.end)\n  setSelection(\n    getSelectionRange(\n      startText.length + replacement.length,\n      startText.length + replacement.length\n    )\n  )\n  return ctrl.value\n}\n\nexport function replace(replacement) {\n  return _replace(getSelection(), replacement)\n}\n","import React from \"react\"\nimport Code from \"./actions/code\"\nimport Emphasis from \"./actions/emphasis\"\nimport Hr from \"./actions/hr\"\nimport Image from \"./actions/image\"\nimport Link from \"./actions/link\"\nimport Spoiler from \"./actions/spoiler\"\nimport Strikethrough from \"./actions/strikethrough\"\nimport Strong from \"./actions/strong\"\nimport Quote from \"./actions/quote\"\nimport AttachmentsEditor from \"./attachments\"\nimport Upload from \"./attachments/upload-button\"\nimport MarkupPreview from \"./markup-preview\"\nimport * as textUtils from \"./textutils\"\nimport Button from \"misago/components/button\"\nimport misago from \"misago\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isPreviewLoading: false,\n    }\n  }\n\n  componentDidMount() {\n    $(\"#editor-textarea\").atwho({\n      at: \"@\",\n      displayTpl: '<li><img src=\"${avatar}\" alt=\"\">${username}</li>',\n      insertTpl: \"@${username}\",\n      searchKey: \"username\",\n      callbacks: {\n        remoteFilter: function (query, callback) {\n          $.getJSON(misago.get(\"MENTION_API\"), { q: query }, callback)\n        },\n      },\n    })\n\n    $(\"#editor-textarea\").on(\"inserted.atwho\", (event, flag, query) => {\n      this.props.onChange(event)\n    })\n  }\n\n  onPreviewClick = () => {\n    if (this.state.isPreviewLoading) {\n      return\n    }\n\n    this.setState({\n      isPreviewLoading: true,\n    })\n\n    ajax.post(misago.get(\"PARSE_MARKUP_API\"), { post: this.props.value }).then(\n      (data) => {\n        modal.show(<MarkupPreview markup={data.parsed} />)\n\n        this.setState({\n          isPreviewLoading: false,\n        })\n      },\n      (rejection) => {\n        if (rejection.status === 400) {\n          snackbar.error(rejection.detail)\n        } else {\n          snackbar.apiError(rejection)\n        }\n\n        this.setState({\n          isPreviewLoading: false,\n        })\n      }\n    )\n  }\n\n  replaceSelection = (operation) => {\n    operation(textUtils.getSelectionText(), this._replaceSelection)\n  }\n\n  _replaceSelection = (newValue) => {\n    this.props.onChange({\n      target: {\n        value: textUtils.replace(newValue),\n      },\n    })\n  }\n\n  render() {\n    return (\n      <div className=\"editor-border\">\n        <textarea\n          className=\"form-control\"\n          value={this.props.value}\n          disabled={this.props.loading}\n          id=\"editor-textarea\"\n          onChange={this.props.onChange}\n          rows=\"9\"\n        />\n        <div className=\"editor-footer\">\n          <div className=\"buttons-list pull-left\">\n            <Strong\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n              replaceSelection={this.replaceSelection}\n            />\n            <Emphasis\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n              replaceSelection={this.replaceSelection}\n            />\n            <Strikethrough\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n              replaceSelection={this.replaceSelection}\n            />\n            <Hr\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n              replaceSelection={this.replaceSelection}\n            />\n            <Link\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n              replaceSelection={this.replaceSelection}\n            />\n            <Image\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n              replaceSelection={this.replaceSelection}\n            />\n            <Quote\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n              replaceSelection={this.replaceSelection}\n            />\n            <Spoiler\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n              replaceSelection={this.replaceSelection}\n            />\n            <Code\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n              replaceSelection={this.replaceSelection}\n            />\n            <Upload\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n            />\n          </div>\n          <Button\n            className=\"btn-default btn-sm pull-left\"\n            disabled={this.props.loading || this.state.isPreviewLoading}\n            onClick={this.onPreviewClick}\n            type=\"button\"\n          >\n            {gettext(\"Preview\")}\n          </Button>\n          <Button\n            className=\"btn-primary btn-sm pull-right\"\n            loading={this.props.loading}\n          >\n            {this.props.submitLabel || gettext(\"Post\")}\n          </Button>\n          <button\n            className=\"btn btn-default btn-sm pull-right\"\n            disabled={this.props.loading}\n            onClick={this.props.onCancel}\n            type=\"button\"\n          >\n            {gettext(\"Cancel\")}\n          </button>\n          <div className=\"clearfix visible-xs-block\" />\n          <Protect\n            canProtect={this.props.canProtect}\n            disabled={this.props.loading}\n            onProtect={this.props.onProtect}\n            onUnprotect={this.props.onUnprotect}\n            protect={this.props.protect}\n          />\n        </div>\n        <AttachmentsEditor\n          attachments={this.props.attachments}\n          onAttachmentsChange={this.props.onAttachmentsChange}\n          placeholder={this.props.placeholder}\n          replaceSelection={this.replaceSelection}\n        />\n      </div>\n    )\n  }\n}\n\nexport function Protect(props) {\n  if (!props.canProtect) return null\n\n  const label = props.protect ? gettext(\"Protected\") : gettext(\"Protect\")\n\n  return (\n    <button\n      className=\"btn btn-icon btn-default btn-protect btn-sm pull-right\"\n      disabled={props.disabled}\n      onClick={props.protect ? props.onUnprotect : props.onProtect}\n      title={label}\n      type=\"button\"\n    >\n      <span className=\"material-icon\">\n        {props.protect ? \"lock\" : \"lock_outline\"}\n      </span>\n      <span className=\"btn-text hidden-md hidden-lg\">{label}</span>\n    </button>\n  )\n}\n","import React from \"react\"\n\nexport default function (props) {\n  return (\n    <div className={props.className}>\n      <div className=\"container\">{props.children}</div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Container from \"./container\"\nimport Loader from \"misago/components/loader\"\n\nexport default function (props) {\n  return (\n    <Container className=\"posting-loader\">\n      <Loader />\n    </Container>\n  )\n}\n","import React from \"react\"\nimport Container from \"./container\"\nimport posting from \"misago/services/posting\"\n\nexport default function (props) {\n  return (\n    <Container className=\"posting-message\">\n      <div className=\"message-body\">\n        <p>\n          <span className=\"material-icon\">error_outline</span>\n          {props.message}\n        </p>\n        <button\n          type=\"button\"\n          className=\"btn btn-default\"\n          onClick={posting.close}\n        >\n          {gettext(\"Dismiss\")}\n        </button>\n      </div>\n    </Container>\n  )\n}\n","import React from \"react\"\n\nexport default function (props) {\n  if (!props.showOptions) return null\n\n  const { columns } = props\n\n  let className = \"col-xs-12 xs-margin-top\"\n\n  if (columns === 1) {\n    className += \" col-sm-2\"\n  } else {\n    className += \" sm-margin-top\"\n  }\n\n  if (columns === 3) {\n    className += \" col-md-3\"\n  } else {\n    className += \" col-md-2\"\n  }\n  className += \" posting-options\"\n\n  const columnClassName = \"col-xs-\" + 12 / columns\n\n  let textClassName = \"btn-text\"\n  if (columns === 3) {\n    textClassName += \" visible-sm-inline-block\"\n  } else if (columns === 2) {\n    textClassName += \" hidden-md hidden-lg\"\n  } else {\n    textClassName += \" hidden-sm\"\n  }\n\n  return (\n    <div className={className}>\n      <div className=\"row\">\n        <PinOptions\n          className={columnClassName}\n          disabled={props.disabled}\n          onPinGlobally={props.onPinGlobally}\n          onPinLocally={props.onPinLocally}\n          onUnpin={props.onUnpin}\n          pin={props.pin}\n          show={props.options.pin}\n          textClassName={textClassName}\n        />\n        <HideOptions\n          className={columnClassName}\n          disabled={props.disabled}\n          hide={props.hide}\n          onHide={props.onHide}\n          onUnhide={props.onUnhide}\n          show={props.options.hide}\n          textClassName={textClassName}\n        />\n        <CloseOptions\n          className={columnClassName}\n          close={props.close}\n          disabled={props.disabled}\n          onClose={props.onClose}\n          onOpen={props.onOpen}\n          show={props.options.close}\n          textClassName={textClassName}\n        />\n      </div>\n    </div>\n  )\n}\n\nexport function CloseOptions(props) {\n  if (!props.show) return null\n\n  const label = props.close ? gettext(\"Closed\") : gettext(\"Open\")\n\n  return (\n    <div className={props.className}>\n      <button\n        className=\"btn btn-default btn-block\"\n        disabled={props.disabled}\n        onClick={props.close ? props.onOpen : props.onClose}\n        title={label}\n        type=\"button\"\n      >\n        <span className=\"material-icon\">\n          {props.close ? \"lock\" : \"lock_outline\"}\n        </span>\n        <span className={props.textClassName}>{label}</span>\n      </button>\n    </div>\n  )\n}\n\nexport function HideOptions(props) {\n  if (!props.show) return null\n\n  const label = props.hide ? gettext(\"Hidden\") : gettext(\"Not hidden\")\n\n  return (\n    <div className={props.className}>\n      <button\n        className=\"btn btn-default btn-block\"\n        disabled={props.disabled}\n        onClick={props.hide ? props.onUnhide : props.onHide}\n        title={label}\n        type=\"button\"\n      >\n        <span className=\"material-icon\">\n          {props.hide ? \"visibility_off\" : \"visibility\"}\n        </span>\n        <span className={props.textClassName}>{label}</span>\n      </button>\n    </div>\n  )\n}\n\nexport function PinOptions(props) {\n  if (!props.show) return null\n\n  let icon = null\n  let onClick = null\n  let label = null\n\n  switch (props.pin) {\n    case 0:\n      icon = \"radio_button_unchecked\"\n      onClick = props.onPinLocally\n      label = gettext(\"Unpinned\")\n      break\n\n    case 1:\n      icon = \"bookmark_outline\"\n      onClick = props.onPinGlobally\n      label = gettext(\"Pinned locally\")\n\n      if (props.show == 2) {\n        onClick = props.onPinGlobally\n      } else {\n        onClick = props.onUnpin\n      }\n\n      break\n\n    case 2:\n      icon = \"bookmark\"\n      onClick = props.onUnpin\n      label = gettext(\"Pinned globally\")\n      break\n  }\n\n  return (\n    <div className={props.className}>\n      <button\n        className=\"btn btn-default btn-block\"\n        disabled={props.disabled}\n        onClick={onClick}\n        title={label}\n        type=\"button\"\n      >\n        <span className=\"material-icon\">{icon}</span>\n        <span className={props.textClassName}>{label}</span>\n      </button>\n    </div>\n  )\n}\n","import moment from \"moment\"\n\nexport function clean(attachments) {\n  const completedAttachments = attachments.filter((attachment) => {\n    return attachment.id && !attachment.isRemoved\n  })\n\n  return completedAttachments.map((a) => {\n    return a.id\n  })\n}\n\nexport function hydrate(attachments) {\n  return attachments.map((attachment) => {\n    return Object.assign({}, attachment, {\n      uploaded_on: moment(attachment.uploaded_on),\n    })\n  })\n}\n","import React from \"react\"\nimport CategorySelect from \"misago/components/category-select\"\nimport Editor from \"misago/components/editor\"\nimport Form from \"misago/components/form\"\nimport Container from \"./utils/container\"\nimport Loader from \"./utils/loader\"\nimport Message from \"./utils/message\"\nimport Options from \"./utils/options\"\nimport * as attachments from \"./utils/attachments\"\nimport { getPostValidators, getTitleValidators } from \"./utils/validators\"\nimport ajax from \"misago/services/ajax\"\nimport posting from \"misago/services/posting\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isReady: false,\n      isLoading: false,\n      isErrored: false,\n\n      showOptions: false,\n      categoryOptions: null,\n\n      title: \"\",\n      category: props.category || null,\n      categories: [],\n      post: \"\",\n      attachments: [],\n      close: false,\n      hide: false,\n      pin: 0,\n\n      validators: {\n        title: getTitleValidators(),\n        post: getPostValidators(),\n      },\n      errors: {},\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(this.props.config).then(this.loadSuccess, this.loadError)\n  }\n\n  loadSuccess = (data) => {\n    let category = null\n    let showOptions = false\n    let categoryOptions = null\n\n    // hydrate categories, extract posting options\n    const categories = data.map((item) => {\n      // pick first category that allows posting and if it may, override it with initial one\n      if (\n        item.post !== false &&\n        (!category || item.id == this.state.category)\n      ) {\n        category = item.id\n        categoryOptions = item.post\n      }\n\n      if (item.post && (item.post.close || item.post.hide || item.post.pin)) {\n        showOptions = true\n      }\n\n      return Object.assign(item, {\n        disabled: item.post === false,\n        label: item.name,\n        value: item.id,\n      })\n    })\n\n    this.setState({\n      isReady: true,\n      showOptions,\n\n      categories,\n      category,\n      categoryOptions,\n    })\n  }\n\n  loadError = (rejection) => {\n    this.setState({\n      isErrored: rejection.detail,\n    })\n  }\n\n  onCancel = () => {\n    const cancel = window.confirm(\n      gettext(\"Are you sure you want to discard thread?\")\n    )\n    if (cancel) {\n      posting.close()\n    }\n  }\n\n  onTitleChange = (event) => {\n    this.changeValue(\"title\", event.target.value)\n  }\n\n  onCategoryChange = (event) => {\n    const category = this.state.categories.find((item) => {\n      return event.target.value == item.value\n    })\n\n    // if selected pin is greater than allowed, reduce it\n    let pin = this.state.pin\n    if (category.post.pin && category.post.pin < pin) {\n      pin = category.post.pin\n    }\n\n    this.setState({\n      category: category.id,\n      categoryOptions: category.post,\n\n      pin,\n    })\n  }\n\n  onPostChange = (event) => {\n    this.changeValue(\"post\", event.target.value)\n  }\n\n  onAttachmentsChange = (attachments) => {\n    this.setState({\n      attachments,\n    })\n  }\n\n  onClose = () => {\n    this.changeValue(\"close\", true)\n  }\n\n  onOpen = () => {\n    this.changeValue(\"close\", false)\n  }\n\n  onPinGlobally = () => {\n    this.changeValue(\"pin\", 2)\n  }\n\n  onPinLocally = () => {\n    this.changeValue(\"pin\", 1)\n  }\n\n  onUnpin = () => {\n    this.changeValue(\"pin\", 0)\n  }\n\n  onHide = () => {\n    this.changeValue(\"hide\", true)\n  }\n\n  onUnhide = () => {\n    this.changeValue(\"hide\", false)\n  }\n\n  clean() {\n    if (!this.state.title.trim().length) {\n      snackbar.error(gettext(\"You have to enter thread title.\"))\n      return false\n    }\n\n    if (!this.state.post.trim().length) {\n      snackbar.error(gettext(\"You have to enter a message.\"))\n      return false\n    }\n\n    const errors = this.validate()\n\n    if (errors.title) {\n      snackbar.error(errors.title[0])\n      return false\n    }\n\n    if (errors.post) {\n      snackbar.error(errors.post[0])\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.post(this.props.submit, {\n      title: this.state.title,\n      category: this.state.category,\n      post: this.state.post,\n      attachments: attachments.clean(this.state.attachments),\n      close: this.state.close,\n      hide: this.state.hide,\n      pin: this.state.pin,\n    })\n  }\n\n  handleSuccess(success) {\n    snackbar.success(gettext(\"Your thread has been posted.\"))\n    window.location = success.url\n\n    // keep form loading\n    this.setState({\n      isLoading: true,\n    })\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      const errors = [].concat(\n        rejection.non_field_errors || [],\n        rejection.category || [],\n        rejection.title || [],\n        rejection.post || [],\n        rejection.attachments || []\n      )\n\n      snackbar.error(errors[0])\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    if (this.state.isErrored) {\n      return <Message message={this.state.isErrored} />\n    }\n\n    if (!this.state.isReady) {\n      return <Loader />\n    }\n\n    let columns = 0\n    if (this.state.categoryOptions.close) columns += 1\n    if (this.state.categoryOptions.hide) columns += 1\n    if (this.state.categoryOptions.pin) columns += 1\n\n    let titleStyle = null\n\n    if (columns === 1) {\n      titleStyle = \"col-sm-6\"\n    } else {\n      titleStyle = \"col-sm-8\"\n    }\n\n    if (columns === 3) {\n      titleStyle += \" col-md-6\"\n    } else if (columns) {\n      titleStyle += \" col-md-7\"\n    } else {\n      titleStyle += \" col-md-9\"\n    }\n\n    return (\n      <Container className=\"posting-form\" withFirstRow={true}>\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"row first-row\">\n            <div className={titleStyle}>\n              <input\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                onChange={this.onTitleChange}\n                placeholder={gettext(\"Thread title\")}\n                type=\"text\"\n                value={this.state.title}\n              />\n            </div>\n            <div className=\"col-xs-12 col-sm-4 col-md-3 xs-margin-top\">\n              <CategorySelect\n                choices={this.state.categories}\n                disabled={this.state.isLoading}\n                onChange={this.onCategoryChange}\n                value={this.state.category}\n              />\n            </div>\n            <Options\n              close={this.state.close}\n              columns={columns}\n              disabled={this.state.isLoading}\n              hide={this.state.hide}\n              onClose={this.onClose}\n              onHide={this.onHide}\n              onOpen={this.onOpen}\n              onPinGlobally={this.onPinGlobally}\n              onPinLocally={this.onPinLocally}\n              onUnhide={this.onUnhide}\n              onUnpin={this.onUnpin}\n              options={this.state.categoryOptions}\n              pin={this.state.pin}\n              showOptions={this.state.showOptions}\n            />\n          </div>\n          <div className=\"row\">\n            <div className=\"col-md-12\">\n              <Editor\n                attachments={this.state.attachments}\n                loading={this.state.isLoading}\n                onAttachmentsChange={this.onAttachmentsChange}\n                onCancel={this.onCancel}\n                onChange={this.onPostChange}\n                submitLabel={gettext(\"Post thread\")}\n                value={this.state.post}\n              />\n            </div>\n          </div>\n        </form>\n      </Container>\n    )\n  }\n}\n","export default function (usernames) {\n  const normalisedNames = usernames\n    .split(\",\")\n    .map((i) => i.trim().toLowerCase())\n  const removedBlanks = normalisedNames.filter((i) => i.length > 0)\n  const removedDuplicates = removedBlanks.filter((name, pos) => {\n    return removedBlanks.indexOf(name) == pos\n  })\n\n  return removedDuplicates\n}\n","import React from \"react\"\nimport Editor from \"misago/components/editor\"\nimport Form from \"misago/components/form\"\nimport Container from \"./utils/container\"\nimport Message from \"./utils/message\"\nimport * as attachments from \"./utils/attachments\"\nimport cleanUsernames from \"./utils/usernames\"\nimport { getPostValidators, getTitleValidators } from \"./utils/validators\"\nimport ajax from \"misago/services/ajax\"\nimport posting from \"misago/services/posting\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    const to = (props.to || []).map((user) => user.username).join(\", \")\n\n    this.state = {\n      isLoading: false,\n\n      to: to,\n      title: \"\",\n      post: \"\",\n      attachments: [],\n\n      validators: {\n        title: getTitleValidators(),\n        post: getPostValidators(),\n      },\n      errors: {},\n    }\n  }\n\n  onCancel = () => {\n    const cancel = window.confirm(\n      gettext(\"Are you sure you want to discard private thread?\")\n    )\n    if (cancel) {\n      posting.close()\n    }\n  }\n\n  onToChange = (event) => {\n    this.changeValue(\"to\", event.target.value)\n  }\n\n  onTitleChange = (event) => {\n    this.changeValue(\"title\", event.target.value)\n  }\n\n  onPostChange = (event) => {\n    this.changeValue(\"post\", event.target.value)\n  }\n\n  onAttachmentsChange = (attachments) => {\n    this.setState({\n      attachments,\n    })\n  }\n\n  clean() {\n    if (!cleanUsernames(this.state.to).length) {\n      snackbar.error(gettext(\"You have to enter at least one recipient.\"))\n      return false\n    }\n\n    if (!this.state.title.trim().length) {\n      snackbar.error(gettext(\"You have to enter thread title.\"))\n      return false\n    }\n\n    if (!this.state.post.trim().length) {\n      snackbar.error(gettext(\"You have to enter a message.\"))\n      return false\n    }\n\n    const errors = this.validate()\n\n    if (errors.title) {\n      snackbar.error(errors.title[0])\n      return false\n    }\n\n    if (errors.post) {\n      snackbar.error(errors.post[0])\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.post(this.props.submit, {\n      to: cleanUsernames(this.state.to),\n      title: this.state.title,\n      post: this.state.post,\n      attachments: attachments.clean(this.state.attachments),\n    })\n  }\n\n  handleSuccess(success) {\n    snackbar.success(gettext(\"Your thread has been posted.\"))\n    window.location = success.url\n\n    // keep form loading\n    this.setState({\n      isLoading: true,\n    })\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      const errors = [].concat(\n        rejection.non_field_errors || [],\n        rejection.to || [],\n        rejection.title || [],\n        rejection.post || [],\n        rejection.attachments || []\n      )\n\n      snackbar.error(errors[0])\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    return (\n      <Container className=\"posting-form\" withFirstRow={true}>\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"row first-row\">\n            <div className=\"col-xs-12\">\n              <input\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                onChange={this.onToChange}\n                placeholder={gettext(\n                  \"Comma separated list of user names, eg.: Danny, Lisa\"\n                )}\n                type=\"text\"\n                value={this.state.to}\n              />\n            </div>\n          </div>\n          <div className=\"row first-row\">\n            <div className=\"col-xs-12\">\n              <input\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                onChange={this.onTitleChange}\n                placeholder={gettext(\"Thread title\")}\n                type=\"text\"\n                value={this.state.title}\n              />\n            </div>\n          </div>\n          <div className=\"row\">\n            <div className=\"col-xs-12\">\n              <Editor\n                attachments={this.state.attachments}\n                loading={this.state.isLoading}\n                onAttachmentsChange={this.onAttachmentsChange}\n                onCancel={this.onCancel}\n                onChange={this.onPostChange}\n                submitLabel={gettext(\"Post thread\")}\n                value={this.state.post}\n              />\n            </div>\n          </div>\n        </form>\n      </Container>\n    )\n  }\n}\n","import React from \"react\"\nimport Editor from \"misago/components/editor\"\nimport Form from \"misago/components/form\"\nimport Container from \"./utils/container\"\nimport Loader from \"./utils/loader\"\nimport Message from \"./utils/message\"\nimport * as attachments from \"./utils/attachments\"\nimport { getPostValidators } from \"./utils/validators\"\nimport ajax from \"misago/services/ajax\"\nimport posting from \"misago/services/posting\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isReady: false,\n      isLoading: false,\n      isErrored: false,\n\n      post: \"\",\n      attachments: [],\n\n      validators: {\n        post: getPostValidators(),\n      },\n      errors: {},\n    }\n  }\n\n  componentDidMount() {\n    ajax\n      .get(this.props.config, this.props.context || null)\n      .then(this.loadSuccess, this.loadError)\n  }\n\n  componentWillReceiveProps(nextProps) {\n    const context = this.props.context\n    const newContext = nextProps.context\n\n    if (context && newContext && context.reply === newContext.reply) return\n\n    ajax\n      .get(nextProps.config, nextProps.context || null)\n      .then(this.appendData, snackbar.apiError)\n  }\n\n  loadSuccess = (data) => {\n    this.setState({\n      isReady: true,\n\n      post: data.post\n        ? '[quote=\"@' + data.poster + '\"]\\n' + data.post + \"\\n[/quote]\"\n        : \"\",\n    })\n  }\n\n  loadError = (rejection) => {\n    this.setState({\n      isErrored: rejection.detail,\n    })\n  }\n\n  appendData = (data) => {\n    const newPost = data.post\n      ? '[quote=\"@' + data.poster + '\"]\\n' + data.post + \"\\n[/quote]\\n\\n\"\n      : \"\"\n\n    this.setState((prevState, props) => {\n      if (prevState.post.length > 0) {\n        return {\n          post: prevState.post + \"\\n\\n\" + newPost,\n        }\n      }\n\n      return {\n        post: newPost,\n      }\n    })\n  }\n\n  onCancel = () => {\n    const cancel = window.confirm(\n      gettext(\"Are you sure you want to discard your reply?\")\n    )\n    if (cancel) {\n      posting.close()\n    }\n  }\n\n  onPostChange = (event) => {\n    this.changeValue(\"post\", event.target.value)\n  }\n\n  onAttachmentsChange = (attachments) => {\n    this.setState({\n      attachments,\n    })\n  }\n\n  clean() {\n    if (!this.state.post.trim().length) {\n      snackbar.error(gettext(\"You have to enter a message.\"))\n      return false\n    }\n\n    const errors = this.validate()\n\n    if (errors.post) {\n      snackbar.error(errors.post[0])\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.post(this.props.submit, {\n      post: this.state.post,\n      attachments: attachments.clean(this.state.attachments),\n    })\n  }\n\n  handleSuccess(success) {\n    snackbar.success(gettext(\"Your reply has been posted.\"))\n    window.location = success.url.index\n\n    // keep form loading\n    this.setState({\n      isLoading: true,\n    })\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      const errors = [].concat(\n        rejection.non_field_errors || [],\n        rejection.post || [],\n        rejection.attachments || []\n      )\n\n      snackbar.error(errors[0])\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    if (this.state.isReady) {\n      return (\n        <Container className=\"posting-form\">\n          <form onSubmit={this.handleSubmit} method=\"POST\">\n            <div className=\"row\">\n              <div className=\"col-md-12\">\n                <Editor\n                  attachments={this.state.attachments}\n                  loading={this.state.isLoading}\n                  onAttachmentsChange={this.onAttachmentsChange}\n                  onCancel={this.onCancel}\n                  onChange={this.onPostChange}\n                  submitLabel={gettext(\"Post reply\")}\n                  value={this.state.post}\n                />\n              </div>\n            </div>\n          </form>\n        </Container>\n      )\n    } else if (this.state.isErrored) {\n      return <Message message={this.state.isErrored} />\n    } else {\n      return <Loader />\n    }\n  }\n}\n","import React from \"react\"\nimport Editor from \"misago/components/editor\"\nimport Form from \"misago/components/form\"\nimport Container from \"./utils/container\"\nimport Loader from \"./utils/loader\"\nimport Message from \"./utils/message\"\nimport * as attachments from \"./utils/attachments\"\nimport { getPostValidators } from \"./utils/validators\"\nimport ajax from \"misago/services/ajax\"\nimport posting from \"misago/services/posting\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isReady: false,\n      isLoading: false,\n      isErrored: false,\n\n      post: \"\",\n      attachments: [],\n      protect: false,\n\n      canProtect: false,\n\n      validators: {\n        post: getPostValidators(),\n      },\n      errors: {},\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(this.props.config).then(this.loadSuccess, this.loadError)\n  }\n\n  loadSuccess = (data) => {\n    this.setState({\n      isReady: true,\n\n      post: data.post,\n      attachments: attachments.hydrate(data.attachments),\n      protect: data.is_protected,\n\n      canProtect: data.can_protect,\n    })\n  }\n\n  loadError = (rejection) => {\n    this.setState({\n      isErrored: rejection.detail,\n    })\n  }\n\n  onCancel = () => {\n    const cancel = window.confirm(\n      gettext(\"Are you sure you want to discard changes?\")\n    )\n    if (cancel) {\n      posting.close()\n    }\n  }\n\n  onProtect = () => {\n    this.setState({\n      protect: true,\n    })\n  }\n\n  onUnprotect = () => {\n    this.setState({\n      protect: false,\n    })\n  }\n\n  onPostChange = (event) => {\n    this.changeValue(\"post\", event.target.value)\n  }\n\n  onAttachmentsChange = (attachments) => {\n    this.setState({\n      attachments,\n    })\n  }\n\n  clean() {\n    if (!this.state.post.trim().length) {\n      snackbar.error(gettext(\"You have to enter a message.\"))\n      return false\n    }\n\n    const errors = this.validate()\n\n    if (errors.post) {\n      snackbar.error(errors.post[0])\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.put(this.props.submit, {\n      post: this.state.post,\n      attachments: attachments.clean(this.state.attachments),\n      protect: this.state.protect,\n    })\n  }\n\n  handleSuccess(success) {\n    snackbar.success(gettext(\"Reply has been edited.\"))\n    window.location = success.url.index\n\n    // keep form loading\n    this.setState({\n      isLoading: true,\n    })\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      const errors = [].concat(\n        rejection.non_field_errors || [],\n        rejection.category || [],\n        rejection.title || [],\n        rejection.post || [],\n        rejection.attachments || []\n      )\n\n      snackbar.error(errors[0])\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    if (this.state.isReady) {\n      return (\n        <Container className=\"posting-form\">\n          <form onSubmit={this.handleSubmit} method=\"POST\">\n            <div className=\"row\">\n              <div className=\"col-md-12\">\n                <Editor\n                  attachments={this.state.attachments}\n                  canProtect={this.state.canProtect}\n                  loading={this.state.isLoading}\n                  onAttachmentsChange={this.onAttachmentsChange}\n                  onCancel={this.onCancel}\n                  onChange={this.onPostChange}\n                  onProtect={this.onProtect}\n                  onUnprotect={this.onUnprotect}\n                  protect={this.state.protect}\n                  submitLabel={gettext(\"Edit reply\")}\n                  value={this.state.post}\n                />\n              </div>\n            </div>\n          </form>\n        </Container>\n      )\n    } else if (this.state.isErrored) {\n      return <Message message={this.state.isErrored} />\n    } else {\n      return <Loader />\n    }\n  }\n}\n","import React from \"react\"\nimport Start from \"./start\"\nimport StartPrivate from \"./start-private\"\nimport Reply from \"./reply\"\nimport Edit from \"./edit\"\n\nexport default function (props) {\n  if (props.mode === \"START\") {\n    return <Start {...props} />\n  } else if (props.mode === \"START_PRIVATE\") {\n    return <StartPrivate {...props} />\n  } else if (props.mode === \"REPLY\") {\n    return <Reply {...props} />\n  } else if (props.mode === \"EDIT\") {\n    return <Edit {...props} />\n  } else {\n    return null\n  }\n}\n","import React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { PollForm } from \"misago/components/poll\"\nimport PostingComponent from \"misago/components/posting\"\nimport mount from \"misago/utils/mount-component\"\n\nexport class Posting {\n  init(ajax, snackbar, placeholder) {\n    this._ajax = ajax\n    this._snackbar = snackbar\n    this._placeholder = $(placeholder)\n\n    this._mode = null\n\n    this._isOpen = false\n    this._isClosing = false\n  }\n\n  open(props) {\n    if (this._isOpen === false) {\n      this._mode = props.mode\n      this._isOpen = props.submit\n      this._realOpen(props)\n    } else if (this._isOpen !== props.submit) {\n      let message = gettext(\n        \"You are already working on other message. Do you want to discard it?\"\n      )\n      if (this._mode == \"POLL\") {\n        message = gettext(\n          \"You are already working on a poll. Do you want to discard it?\"\n        )\n      }\n\n      const changeForm = window.confirm(message)\n      if (changeForm) {\n        this._mode = props.mode\n        this._isOpen = props.submit\n        this._realOpen(props)\n      }\n    } else if (this._mode == \"REPLY\" && props.mode == \"REPLY\") {\n      this._realOpen(props)\n    }\n  }\n\n  _realOpen(props) {\n    if (props.mode == \"POLL\") {\n      mount(<PollForm {...props} />, \"posting-mount\")\n    } else {\n      mount(<PostingComponent {...props} />, \"posting-mount\")\n    }\n\n    this._placeholder.addClass(\"slide-in\")\n\n    $(\"html, body\").animate(\n      {\n        scrollTop: this._placeholder.offset().top,\n      },\n      1000\n    )\n  }\n\n  close = () => {\n    if (this._isOpen && !this._isClosing) {\n      this._isClosing = true\n      this._placeholder.removeClass(\"slide-in\")\n\n      window.setTimeout(() => {\n        ReactDOM.unmountComponentAtNode(\n          document.getElementById(\"posting-mount\")\n        )\n        this._isClosing = false\n        this._isOpen = false\n      }, 300)\n    }\n  }\n}\n\nexport default new Posting()\n","import { showSnackbar, hideSnackbar } from \"misago/reducers/snackbar\"\n\nconst HIDE_ANIMATION_LENGTH = 300\nconst MESSAGE_SHOW_LENGTH = 5000\n\nexport class Snackbar {\n  init(store) {\n    this._store = store\n    this._timeout = null\n  }\n\n  alert(message, type) {\n    if (this._timeout) {\n      window.clearTimeout(this._timeout)\n      this._store.dispatch(hideSnackbar())\n\n      this._timeout = window.setTimeout(() => {\n        this._timeout = null\n        this.alert(message, type)\n      }, HIDE_ANIMATION_LENGTH)\n    } else {\n      this._store.dispatch(showSnackbar(message, type))\n      this._timeout = window.setTimeout(() => {\n        this._store.dispatch(hideSnackbar())\n        this._timeout = null\n      }, MESSAGE_SHOW_LENGTH)\n    }\n  }\n\n  // shorthands for message types\n\n  info(message) {\n    this.alert(message, \"info\")\n  }\n\n  success(message) {\n    this.alert(message, \"success\")\n  }\n\n  warning(message) {\n    this.alert(message, \"warning\")\n  }\n\n  error(message) {\n    this.alert(message, \"error\")\n  }\n\n  // shorthand for api errors\n\n  apiError(rejection) {\n    let message = rejection.detail\n\n    if (!message) {\n      if (rejection.status === 404) {\n        message = gettext(\"Action link is invalid.\")\n      } else {\n        message = gettext(\"Unknown error has occured.\")\n      }\n    }\n\n    if (rejection.status === 403 && message === \"Permission denied\") {\n      message = gettext(\"You don't have permission to perform this action.\")\n    }\n\n    this.error(message)\n  }\n}\n\nexport default new Snackbar()\n","import { combineReducers, createStore } from \"redux\"\n\nexport class StoreWrapper {\n  constructor() {\n    this._store = null\n    this._reducers = {}\n    this._initialState = {}\n  }\n\n  addReducer(name, reducer, initialState) {\n    this._reducers[name] = reducer\n    this._initialState[name] = initialState\n  }\n\n  init() {\n    this._store = createStore(\n      combineReducers(this._reducers),\n      this._initialState\n    )\n  }\n\n  getStore() {\n    return this._store\n  }\n\n  // Store API\n\n  getState() {\n    return this._store.getState()\n  }\n\n  dispatch(action) {\n    return this._store.dispatch(action)\n  }\n}\n\nexport default new StoreWrapper()\n","/* global zxcvbn */\nexport class Zxcvbn {\n  init(include) {\n    this._include = include\n    this._isLoaded = false\n  }\n\n  scorePassword(password, inputs) {\n    // 0-4 score, the more the stronger password\n    if (this._isLoaded) {\n      return zxcvbn(password, inputs).score\n    }\n\n    return 0\n  }\n\n  load() {\n    if (!this._isLoaded) {\n      this._include.include(\"misago/js/zxcvbn.js\")\n      return this._loadingPromise()\n    } else {\n      return this._loadedPromise()\n    }\n  }\n\n  _loadingPromise() {\n    const self = this\n\n    return new Promise(function (resolve, reject) {\n      var wait = function (tries = 0) {\n        tries += 1\n        if (tries > 200) {\n          reject()\n        } else if (typeof zxcvbn === \"undefined\") {\n          window.setTimeout(function () {\n            wait(tries)\n          }, 200)\n        } else {\n          self._isLoaded = true\n          resolve()\n        }\n      }\n      wait()\n    })\n  }\n\n  _loadedPromise() {\n    // we have already loaded zxcvbn.js, resolve away!\n    return new Promise(function (resolve) {\n      resolve()\n    })\n  }\n}\n\nexport default new Zxcvbn()\n","import moment from \"moment\"\nimport React from \"react\"\n\nexport default class extends React.Component {\n  getReasonMessage() {\n    if (this.props.message.html) {\n      return (\n        <div\n          className=\"lead\"\n          dangerouslySetInnerHTML={{\n            __html: this.props.message.html,\n          }}\n        />\n      )\n    } else {\n      return <p className=\"lead\">{this.props.message.plain}</p>\n    }\n  }\n\n  getExpirationMessage() {\n    if (this.props.expires) {\n      if (this.props.expires.isAfter(moment())) {\n        let title = interpolate(\n          gettext(\"This ban expires on %(expires_on)s.\"),\n          {\n            expires_on: this.props.expires.format(\"LL, LT\"),\n          },\n          true\n        )\n\n        let message = interpolate(\n          gettext(\"This ban expires %(expires_on)s.\"),\n          {\n            expires_on: this.props.expires.fromNow(),\n          },\n          true\n        )\n\n        return <abbr title={title}>{message}</abbr>\n      } else {\n        return gettext(\"This ban has expired.\")\n      }\n    } else {\n      return gettext(\"This ban is permanent.\")\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"page page-error page-error-banned\">\n        <div className=\"container\">\n          <div className=\"message-panel\">\n            <div className=\"message-icon\">\n              <span className=\"material-icon\">highlight_off</span>\n            </div>\n            <div className=\"message-body\">\n              {this.getReasonMessage()}\n              <p className=\"message-footnote\">{this.getExpirationMessage()}</p>\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n","import moment from \"moment\"\nimport React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { Provider, connect } from \"react-redux\"\nimport BannedPage from \"misago/components/banned-page\"\nimport misago from \"misago/index\"\nimport store from \"misago/services/store\"\n\nlet select = function (state) {\n  return state.tick\n}\n\nlet RedrawedBannedPage = connect(select)(BannedPage)\n\nexport default function (ban, changeState) {\n  ReactDOM.render(\n    <Provider store={store.getStore()}>\n      <RedrawedBannedPage\n        message={ban.message}\n        expires={ban.expires_on ? moment(ban.expires_on) : null}\n      />\n    </Provider>,\n\n    document.getElementById(\"page-mount\")\n  )\n\n  if (typeof changeState === \"undefined\" || changeState) {\n    let forumName = misago.get(\"SETTINGS\").forum_name\n    document.title = gettext(\"You are banned\") + \" | \" + forumName\n    window.history.pushState({}, \"\", misago.get(\"BANNED_URL\"))\n  }\n}\n","export default function (list, rowWidth, padding = false) {\n  let rows = []\n  let row = []\n\n  list.forEach(function (element) {\n    row.push(element)\n    if (row.length === rowWidth) {\n      rows.push(row)\n      row = []\n    }\n  })\n\n  // pad row to required length?\n  if (padding !== false && row.length > 0 && row.length < rowWidth) {\n    for (let i = row.length; i < rowWidth; i++) {\n      row.push(padding)\n    }\n  }\n\n  if (row.length) {\n    rows.push(row)\n  }\n\n  return rows\n}\n","export default function (a, b) {\n  let ids = []\n  return a.concat(b).filter(function (item) {\n    if (ids.indexOf(item.id) === -1) {\n      ids.push(item.id)\n      return true\n    } else {\n      return false\n    }\n  })\n}\n","const map = {\n  \"&\": \"&amp;\",\n  \"<\": \"&lt;\",\n  \">\": \"&gt;\",\n  '\"': \"&quot;\",\n  \"'\": \"&#039;\",\n}\n\nexport default function (text) {\n  return text.replace(/[&<>\"']/g, function (m) {\n    return map[m]\n  })\n}\n","export default function (bytes) {\n  if (bytes > 1024 * 1024 * 1024) {\n    return roundSize(bytes / (1024 * 1024 * 1024)) + \" GB\"\n  } else if (bytes > 1024 * 1024) {\n    return roundSize(bytes / (1024 * 1024)) + \" MB\"\n  } else if (bytes > 1024) {\n    return roundSize(bytes / 1024) + \" KB\"\n  } else {\n    return roundSize(bytes) + \" B\"\n  }\n}\n\nexport function roundSize(value) {\n  return value.toFixed(1)\n}\n","import React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { Provider } from \"react-redux\"\nimport store from \"misago/services/store\"\n\nexport default function (Component, rootElementId, connected = true) {\n  let rootElement = document.getElementById(rootElementId)\n\n  let finalComponent = Component.props ? Component : <Component />\n\n  if (rootElement) {\n    if (connected) {\n      ReactDOM.render(\n        <Provider store={store.getStore()}>{finalComponent}</Provider>,\n\n        rootElement\n      )\n    } else {\n      ReactDOM.render(finalComponent, rootElement)\n    }\n  }\n}\n","export function int(min, max) {\n  return Math.floor(Math.random() * (max - min + 1)) + min\n}\n\nexport function range(min, max) {\n  let array = new Array(int(min, max))\n  for (let i = 0; i < array.length; i++) {\n    array[i] = i\n  }\n\n  return array\n}\n","import React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { Provider } from \"react-redux\"\nimport { Router, browserHistory } from \"react-router\"\nimport store from \"misago/services/store\"\n\nconst rootElement = document.getElementById(\"page-mount\")\n\nexport default function (options) {\n  let routes = {\n    component: options.component || null,\n    childRoutes: [],\n  }\n\n  if (options.root) {\n    routes.childRoutes = [\n      {\n        path: options.root,\n        onEnter: function (nextState, replaceState) {\n          replaceState(null, options.paths[0].path)\n        },\n      },\n    ].concat(options.paths)\n  } else {\n    routes.childRoutes = options.paths\n  }\n\n  ReactDOM.render(\n    <Provider store={store.getStore()}>\n      <Router routes={routes} history={browserHistory} />\n    </Provider>,\n    rootElement\n  )\n}\n","export function push(array, value) {\n  if (array.indexOf(value) === -1) {\n    let copy = array.slice()\n    copy.push(value)\n    return copy\n  } else {\n    return array\n  }\n}\n\nexport function remove(array, value) {\n  if (array.indexOf(value) >= 0) {\n    return array.filter(function (i) {\n      return i !== value\n    })\n  } else {\n    return array\n  }\n}\n\nexport function toggle(array, value) {\n  if (array.indexOf(value) === -1) {\n    let copy = array.slice()\n    copy.push(value)\n    return copy\n  } else {\n    return array.filter(function (i) {\n      return i !== value\n    })\n  }\n}\n","const EMAIL =\n  /^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i\nconst USERNAME = new RegExp(\"^[0-9a-z]+$\", \"i\")\n\nexport function required(message) {\n  return function (value) {\n    if (value === false || value === null || $.trim(value).length === 0) {\n      return message || gettext(\"This field is required.\")\n    }\n  }\n}\n\nexport function requiredTermsOfService(message) {\n  const error = gettext(\"You have to accept the terms of service.\")\n  return required(message || error)\n}\n\nexport function requiredPrivacyPolicy(message) {\n  const error = gettext(\"You have to accept the privacy policy.\")\n  return required(message || error)\n}\n\nexport function email(message) {\n  return function (value) {\n    if (!EMAIL.test(value)) {\n      return message || gettext(\"Enter a valid email address.\")\n    }\n  }\n}\n\nexport function minLength(limitValue, message) {\n  return function (value) {\n    var returnMessage = \"\"\n    var length = $.trim(value).length\n\n    if (length < limitValue) {\n      if (message) {\n        returnMessage = message(limitValue, length)\n      } else {\n        returnMessage = ngettext(\n          \"Ensure this value has at least %(limit_value)s character (it has %(show_value)s).\",\n          \"Ensure this value has at least %(limit_value)s characters (it has %(show_value)s).\",\n          limitValue\n        )\n      }\n      return interpolate(\n        returnMessage,\n        {\n          limit_value: limitValue,\n          show_value: length,\n        },\n        true\n      )\n    }\n  }\n}\n\nexport function maxLength(limitValue, message) {\n  return function (value) {\n    var returnMessage = \"\"\n    var length = $.trim(value).length\n\n    if (length > limitValue) {\n      if (message) {\n        returnMessage = message(limitValue, length)\n      } else {\n        returnMessage = ngettext(\n          \"Ensure this value has at most %(limit_value)s character (it has %(show_value)s).\",\n          \"Ensure this value has at most %(limit_value)s characters (it has %(show_value)s).\",\n          limitValue\n        )\n      }\n      return interpolate(\n        returnMessage,\n        {\n          limit_value: limitValue,\n          show_value: length,\n        },\n        true\n      )\n    }\n  }\n}\n\nexport function usernameMinLength(lengthMin) {\n  var message = function (lengthMin) {\n    return ngettext(\n      \"Username must be at least %(limit_value)s character long.\",\n      \"Username must be at least %(limit_value)s characters long.\",\n      lengthMin\n    )\n  }\n  return minLength(lengthMin, message)\n}\n\nexport function usernameMaxLength(lengthMax) {\n  var message = function (lengthMax) {\n    return ngettext(\n      \"Username cannot be longer than %(limit_value)s character.\",\n      \"Username cannot be longer than %(limit_value)s characters.\",\n      lengthMax\n    )\n  }\n  return maxLength(lengthMax, message)\n}\n\nexport function usernameContent() {\n  return function (value) {\n    if (!USERNAME.test($.trim(value))) {\n      return gettext(\n        \"Username can only contain latin alphabet letters and digits.\"\n      )\n    }\n  }\n}\n\nexport function passwordMinLength(limitValue) {\n  return function (value) {\n    const length = value.length\n\n    if (length < limitValue) {\n      const returnMessage = ngettext(\n        \"Valid password must be at least %(limit_value)s character long.\",\n        \"Valid password must be at least %(limit_value)s characters long.\",\n        limitValue\n      )\n\n      return interpolate(\n        returnMessage,\n        {\n          limit_value: limitValue,\n          show_value: length,\n        },\n        true\n      )\n    }\n  }\n}\n","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.hmd = function(module) {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: function() {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t174: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmisago\"] = self[\"webpackChunkmisago\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(32233); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(58339); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(64109); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(46226); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(93240); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(75147); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(4894); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(29223); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(3026); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(94795); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(95563); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(32488); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(11768); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(61323); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(15049); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(61814); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(95920); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(59203); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(72168); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(47806); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(77031); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(97751); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(76093); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(19764); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(47549); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(22331); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(21513); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(98749); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(98251); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(6720); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(10846); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(18255); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(14113); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(24444); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(1764); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(68351); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(81521); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(19984); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(41229); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(43589); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(24108); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(33934); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(85577); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(83526); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(43060); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(92292); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(33409); })\nvar __webpack_exports__ = __webpack_require__.O(undefined, [736], function() { return __webpack_require__(31341); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","n","window","self","hljs","e","replace","I","t","nodeName","toLowerCase","r","exec","index","i","k","test","o","u","a","firstChild","nextSibling","nodeType","nodeValue","length","push","event","offset","node","match","c","l","w","map","call","attributes","value","join","s","f","g","substring","reverse","forEach","splice","pop","substr","source","RegExp","cI","compiled","bK","split","Number","E","lR","b","bR","eW","eR","tE","iR","v","starts","concat","filter","Boolean","endsParent","parent","N","hasOwnProperty","h","y","classPrefix","C","sL","x","B","L","M","top","language","d","lastIndex","p","cN","Object","create","m","skip","eB","rB","rE","eE","Error","R","j","O","T","message","indexOf","languages","second_best","tabReplace","useBR","className","parentNode","document","createElementNS","innerHTML","textContent","trim","result","re","called","querySelectorAll","keys","highlight","highlightAuto","fixMarkup","highlightBlock","configure","initHighlighting","initHighlightingOnLoad","addEventListener","registerLanguage","aliases","listLanguages","getLanguage","inherit","IR","UIR","NR","CNR","BNR","RSR","BE","ASM","QSM","PWM","CLCM","CBCM","HCM","NM","CNM","BNM","CSSNM","RM","TM","UTM","METHOD_GUARD","name","keyword","built_in","literal","_","children","classnames","shrink","auto","styleName","dangerouslySetInnerHTML","__html","header","LegalAgreement","props","agreement","checked","errors","url","onChange","agreementHtml","interpolate","escapeHtml","label","gettext","type","error","privacyPolicy","termsOfService","onPrivacyPolicyChange","onTermsOfServiceChange","termsOfServiceId","misago","termsOfServiceUrl","privacyPolicyId","privacyPolicyUrl","FormHeader","text","buttonClassName","buttonLabel","formLabel","labelClassName","socialAuth","id","button_text","button_color","style","color","finalButtonLabel","site","href","thread","weight","title","best_answer","has_poll","is_unapproved","has_unapproved_posts","is_closed","is_hidden","ngettext","replies","Math","round","size","size2x","alt","src","getSrc","user","srcSet","width","height","avatars","avatar","av","resolveAvatarForSize","Button","this","disabled","loading","onClick","React","defaultProps","choices","item","repeat","level","display","helpText","ev","field","fieldname","target","input","rows","fields","for","help_text","validation","setState","state","isLoading","groups","group","initial","data","assign","ajax","api","onSuccess","rejection","status","snackbar","onSubmit","handleSubmit","CancelButton","onCancel","Form","then","cancel","FormDisplay","isValidated","getClassName","labelClass","htmlFor","controlClass","getFeedbackDescription","getFeedback","getHelpText","extra","validateRequired","required","changeValue","newState","formErrors","validateField","preventDefault","clean","promise","send","success","handleSuccess","handleError","validators","optional","validatedFields","fieldErrors","validate","requiredError","validationError","isControlled","isActive","path","location","pathname","activeClassName","modal","onError","bestAnswer","poll","polls","confirm","role","BestAnswerSelect","bestAnswers","onBestAnswerChange","PollSelect","onPollChange","choice","ytRegExp","domnode","highlightCode","embedYoutubePlayers","_youtube","codeblocks","code","anchors","onlyChild","childNodes","parseYoutubeUrl","youtubeMovie","swapYoutubePlayer","element","youtube","video","start","player","$","replaceWith","wrap","cleanedUrl","cleanUrl","getVideoIdFromUrl","timebit","bits","parseInt","onebox","documentNode","find","click","revealSpoiler","prevProps","prevState","nextProps","nextState","markup","ref","btn","addClass","icon","PanelMessage","PollChoice","hash","proc","votes","ceil","getVotesLabel","ChoiceVotes","UserChoice","selected","hydratedData","voters","voter","voted_on","moment","detail","ModalBody","ChoicesList","ChoiceDetails","key","VotesCount","VotesList","Voter","username","VoteDate","format","fromNow","isPollOver","showVoting","acl","is_public","can_delete","can_edit","can_see_votes","can_vote","hasSelectedChoices","allow_revotes","isVisible","controls","canVote","canChangeVote","ChangeVote","SeeVotes","Edit","Delete","control","isBusy","posting","submit","mode","store","newThreadAcl","DATE_ABBR","PollVotes","PollLength","PollIsPublic","PollCreation","poster","getPoster","posted_on","getPostedOn","poster_name","absolute","relative","ends_on","getEndsOn","endsOn","question","PollChoicesLeft","choicesLeft","PollAllowRevote","ChoiceSelect","toggleChoice","getChoicesLeft","selection","allowed_choices","getChoiceFromHash","deselectChoice","selectChoice","slice","showResults","isAfter","getIsPollOver","generateRandomHash","setChoices","canDelete","onDelete","onAdd","maxLength","placeholder","randomHash","random","toString","isEdit","non_field_errors","bindInput","PollPublicSwitch","iconOn","iconOff","labelOn","labelOff","post","content","Default","Invalid","category","tooltip","rank","userTitle","css_class","is_tab","isReady","posts","getTitleValidators","minLength","thread_title_length_min","limitValue","limit_value","show_value","thread_title_length_max","getPostValidators","post_length_max","validatePostLengthMin","post_length_min","getChoice","Icon","getIcon","getLabel","change","showActivation","password","isValid","form","append","val","showBannedPage","ban","getActivationButton","is_banned","is_online_hidden","is_offline_hidden","is_online","is_offline","getClass","StatusIcon","StatusLabel","banned_until","ban_expires","last_click","getHelp","emptyMessage","getEmptyMessage","changed_by","changed_by_username","renderUserAvatar","renderUsername","old_username","new_username","changed_on","changes","hiddenOnMobile","isLoaded","showStatus","Status","JoinDate","Posts","Threads","Followers","joined_on","getStatClassName","threads","followers","stat","colClassName","cols","list","Array","apply","users","dropdown","toggle","items","isOrdered","_items","order","after","before","undefined","get","values","values_only","_order","unordered","ordered","ordering","insertItem","insertAt","iterations","_initializers","_context","initializer","context","OrderedList","orderedValues","fallback","has","setInterval","patch","AUTH_SYNC_RATE","auth","storage","captcha","include","AcceptAgreement","submiting","accept","reload","handleDecline","handleAccept","getElementById","mount","signedIn","signedOut","getMessage","refresh","select","connect","AuthMessage","description","html","getTitle","is_read","LastThread","Empty","Private","Protected","can_browse","can_see_all_threads","last_thread_title","LastPosterAvatar","last_thread_new","LastPosterName","last_post","last_post_on","last_poster","last_poster_name","Message","isFirst","subcategories","categories","hydrate","startPolling","frequency","update","tick","Categories","SideNav","options","option","to","baseUrl","component","CompactNav","hideNav","delete","onPasswordChange","edit_details","DownloadData","data_downloads","downloads","isSubmiting","request_data_download","handleLoadDownloads","rowStyle","requested_on","DownloadButton","exportFile","file","colSpan","handleRequestDataDownload","verticalAlign","is_hiding_presence","limits_private_thread_invites_to","subscribe_to_started_threads","subscribe_to_replied_threads","privateThreadInvitesChoices","subscribeToChoices","next_on","next_change","length_min","length_max","phrases","changes_left","name_changes_expire","complete","slug","addNameChange","updateUsername","Promise","all","results","onComplete","getChangeForm","new_email","change_email","response","new_password","repeat_password","change_password","has_usable_password","page","PageHeader","FlexRow","PageContainer","WithDropdown","paths","ChangeForumOptions","EditDetails","delegateAuth","DELEGATE_AUTH","ChangeUsername","ChangeSignInCredentials","DeleteAccount","root","Options","expires_on","initWithPreloadedData","initWithoutPreloadedData","profile","user_message","staff_message","getUserMessage","getStaffMessage","getExpirationMessage","getPanelBody","isAuthenticated","SafeValue","rel","onEdit","showEditButton","Toolbar","dispatch","details","load","editing","newDetails","loadDetails","profileDetails","edit","loadItems","next","Feed","loadMore","LoadMoreButton","loadUsers","search","count","more","pages","setSpecialProps","PRELOADED_DATA_KEY","TITLE","API_FILTER","apiUrl","getMoreButton","getListBody","loadChanges","is_followed","follow","action","canMessage","can_start_private_threads","isProfileOwner","is_avatar_locked","avatar_lock_user_message","avatar_lock_staff_message","moderate_avatar","apiResponse","updateAvatar","avatar_hash","getFormBody","getModalBody","moderate_username","setTimeout","countdown","isDeleted","with_content","getButtonLabel","getDeletedBody","getForm","AvatarControls","moderation","showAvatarDialog","rename","showRenameDialog","showDeleteDialog","is_active","email","ProfileModerationButton","available","getModeration","can_follow","is_anonumous","can_rename","can_moderate_avatar","COMPONENTS","follows","Follows","Details","UsernameHistory","BanDetails","Profile","RequestLinkForm","callback","LinkSent","reset","RequestActivationLink","RequestResetForm","showInactivePage","AccountInactivePage","activation","getActivateButton","ReactDOM","RequestPasswordReset","ResetPasswordForm","PasswordChangedPage","SignInModal","showSignIn","remove","query","updateSearch","urlQuery","history","pushState","encodeURIComponent","q","providers","provider","updateUsers","updatePosts","onQueryChange","Badge","SearchTime","time","copy","LoadMore","appendPosts","updateProvider","Blankslate","components","route","TYPES_CLASSES","info","warning","Snackbar","snackbarClass","getSnackbarClass","backendName","pageTitleTpl","pageTitle","backend","Register","handleToggleAgreement","validator","formValidators","emailProtected","terms_of_service","privacy_policy","onRegistrationComplete","step","stateUpdate","backend_name","emailHelpText","emailHelpTextTpl","RegisterLegalFootnote","handlePrivacyPolicyChange","handleTermsOfServiceChange","SocialAuth","handleRegistrationComplete","op","updateAcl","participants","ModalHeader","onUsernameChange","can_add_participants","participant","confirmed","isUser","is_owner","can_change_owner","isModerator","can_moderate_private_threads","userIsOwner","UserStatus","isOwner","getUserIsOwner","utils","ICON","changed_title","pinned_globally","pinned_locally","unpinned","moved","merged","approved","opened","closed","unhid","hid","changed_owner","tookover","added_participant","owner_left","participant_left","removed_participant","event_type","can_hide","Hide","Unhide","hidden_on","hidden_by_name","hidden_by","USER_SPAN","USER_URL","Hidden","Poster","date","event_by","event_on","MESSAGE","ITEM_LINK","ITEM_SPAN","ChangedTitle","Moved","Merged","ChangedOwner","AddedParticipant","RemovedParticipant","msgstring","oldTitle","event_context","old_title","fromCategory","from_category","mergedThread","merged_thread","newOwner","waypoint","handler","direction","boundingClientRect","getBoundingClientRect","offsetBottom","clientHeight","documentElement","read","thread_is_read","AttachmentPreview","attachment","filename","AttachmentDetails","is_image","AttachmentThumbnail","AttachmentIcon","thumb","backgroundImage","uploader","uploader_name","uploaded_on","filetype","formatFilesize","can_see_hidden","attachments","batch","row","Row","FlagBestAnswer","best_answer_marked_by","marked_on","best_answer_marked_on","marked_by","best_answer_marked_by_name","FlagHidden","FlagUnapproved","FlagProtected","is_protected","approve","protect","unprotect","hide","unhide","like","lastLikes","last_likes","concatedLikes","finalLikes","is_liked","likes","unlike","previousState","ops","markAsBestAnswer","best_answer_is_protected","best_answer_marked_by_slug","patchThread","unmarkBestAnswer","hydrateLike","ModalDialog","LikesList","liked_on","likesCount","LikeDetails","liker_id","LikeDate","likedOn","can_reply","can_see_likes","can_like","MarkAsBestAnswer","MarkAsBestAnswerCompact","Like","Likes","LikesCompact","Reply","actions","can_mark_best_answer","can_mark_as_best_answer","can_change_best_answer","hasLikes","getLikesMessage","usernames","hiddenLikes","otherUsers","lastUser","usernamesList","last_user","config","editor","reply","move","new_thread","onUrlChange","diff","DiffItem","revertEdit","canRevert","goToEdit","previous","GoBackBtn","goBack","GoForwardBtn","goForward","GoLastBtn","goLast","Label","RevertBtn","editor_name","edited_on","edited_by","hydrateEdit","json","edits","hydratedPost","PostingConfig","ModerationForm","isError","Loader","categoryId","can_pin_threads","can_hide_threads","can_close_threads","isHiddenChoices","isClosedChoices","pin","close","getWeightChoices","Modal","onCategoryChange","renderWeightField","renderHiddenField","renderClosedField","Permalink","UnmarkMarkBestAnswer","PostEdits","Approve","Move","Split","Protect","Unprotect","permaUrl","protocol","host","prompt","can_unmark_best_answer","isHidden","isUnedited","can_approve","can_move","can_protect","can_unhide","isSelected","can_merge_posts","UnreadLabel","UnreadCompact","PostedOn","PostedOnCompact","PostEditsCompacts","ProtectedLabel","postAuthor","hasAcl","hasVisibleTitle","ListItem","is_event","starter","starter_name","timestamp","started_on","handleSuccessUnmounted","best_answers","merge","other_thread","post_set","ModalMessage","ModalLoading","successMessage","callApi","changeTitle","pinGlobally","pinLocally","unpin","open","oldState","subscription","finalState","stickToBottom","unsubscribe","alert","short_name","special_role","breadcrumbs","ThreadReplies","hasFlags","ThreadFlags","is_authenticated","enabled","first","last","PostErrors","heading","ids","rollback","isArray","Merge","can_merge","dropup","onReply","compact","is_new","new_post","unapproved_post","onPoll","can_start_poll","setPageTitle","shouldFetchData","fetchData","startPollingApi","stopPollingApi","params","delayed","threadModeration","getThreadModeration","postsModeration","getPostsModeration","openPollForm","openReplyForm","can_close","can_pin_globally","can_pin","can_unprotect","basePath","pk","Route","compareLastPostAge","compareGlobalWeight","compareWeight","allItems","parentUrl","lists","longName","ThreadErrors","freezeThread","deleteThread","addThreads","filterThreads","categoriesMap","getFormdata","categoryChoices","can_start_threads","renderForm","renderCantMergeMessage","storeState","leftThreads","acls","renderCantMoveMessage","updateThread","threadsMap","failedThreads","noSelection","topCategory","topCategories","subCategory","subCategories","startThread","allow","getTopCategory","cat","busyThreads","getModerationActions","SUBSCRIPTION","notify","getSubscriptionIcon","activeCategory","showOptions","showSubscription","isNew","updatedThreads","applyUpdate","loadThreads","getCategory","current","fromDb","currentMap","isThreadChanged","getSorting","currentState","sets","isMounted","pollResponse","index_header","forum_name","index_title","specialRole","pageLead","threadsCount","applyDiff","PRIVATE_THREADS_LIST","getListOptions","routes","can_see_unapproved_content_lists","getLists","section","HEADER","RESULT","FOOTER","autoComplete","encodeURI","footer","flattenProvider","flatlist","arrayLength","flatResults","flattenProviders","flattenResults","isOpen","container","querySelector","focus","closeResults","loadResults","intervalId","onDocumentMouseDown","onEscape","removeEventListener","delay","clearTimeout","cleanResults","onToggle","STYLES","LABELS","_score","_password","_inputs","loaded","zxcvbn","inputs","cacheStale","score","getScore","RegisterForm","criteria","passwordMinLength","min_length","max_length","__all__","StartSocialAuth","RegisterComplete","getLead","getSubscript","completeRegistration","account_activation","showRegisterForm","GuestMenu","LOGIN_URL","showSignInModal","GuestNav","CompactGuestNav","showGuestMenu","avatarType","showError","gravatar","setGravatar","crop_src","showCrop","upload","showUpload","galleries","showGallery","userPeview","getAvatarPreview","getGravatarButton","setGenerated","getCropButton","getUploadButton","getGalleryButton","cropit","deviceRatio","cropitOffset","crop","zoom","crop_tmp","dataUrl","cropperWidth","getAvatarSize","initialWidth","exportZoom","imageState","getImagePath","onImageLoaded","zoomLevel","imageSize","offsetX","offsetY","cropAvatar","showIndex","image","files","validateFile","preview","URL","createObjectURL","progress","FormData","uploaded","limit","filesize","fileSize","invalidTypeMsg","allowed_mime_types","extensionFound","loweredFilename","allowed_extensions","extension","extensions","pickFile","getUploadRequirements","getUploadProgressLabel","uploadFile","getUploadProgress","renderCrop","renderUpload","GalleryItem","Gallery","images","save","ChangeAvatarError","reason","getErrorReason","AvatarIndex","AvatarUpload","AvatarCrop","AvatarGallery","completeFlow","getBody","UserMenu","ChangeAvatarModal","following","changeAvatar","can_use_private_threads","PrivateThreadsBadge","unread_private_threads","UserNav","UserPrivateThreadsLink","selectUserMenu","CompactUserNav","showUserMenu","CompactUserMenu","getPageUrl","days","trackedPeriod","rankUrl","getUserStatus","getRankName","getUserTitle","counter","meta","posters","getLeadMessage","tracked_period","string","subString","pos","stringCount","RankUsersListLoader","getRankDescription","getComponent","Rank","ActivePosters","Users","attr","forum_index_title","reducer","isAnonymous","initialState","doTick","PATCH_USER","SIGN_IN","SIGN_OUT","signIn","signOut","soft","UPDATE_AVATAR","userId","UPDATE_USERNAME","REPLACE_PARTICIPANTS","BUSY_POLL","RELEASE_POLL","REMOVE_POLL","REPLACE_POLL","UPDATE_POLL","add","busy","release","hydrated","PATCH_POST","updated_on","hydrateAttachment","hydrateUser","APPEND_POSTS","SELECT_POST","DESELECT_POST","DESELECT_POSTS","LOAD_POSTS","UNLOAD_POSTS","UPDATE_POSTS","deselect","deselectAll","hydratePost","unload","selectedPosts","deseletedPosts","deseletedAllPosts","resultsIds","reducedPosts","postReducer","LOAD_DETAILS","HYDRATE_PROFILE","PATCH_PROFILE","hydrateStatus","REPLACE_SEARCH","UPDATE_SEARCH","UPDATE_SEARCH_PROVIDER","SELECT_ALL","SELECT_NONE","SELECT_ITEM","itemsIds","none","itemId","SHOW_SNACKBAR","HIDE_SNACKBAR","showSnackbar","messageType","hideSnackbar","BUSY_THREAD","RELEASE_THREAD","REPLACE_THREAD","UPDATE_THREAD","UPDATE_THREAD_ACL","APPEND_THREADS","DELETE_THREAD","FILTER_THREADS","HYDRATE_THREADS","PATCH_THREAD","SORT_THREADS","MODERATION_PERMISSIONS","sorting","hydrateThread","thread_acl","perm","mergedState","concatUnique","sort","itemCategory","lft","rght","patchedState","TICK","ADD_NAME_CHANGE","APPEND_HISTORY","HYDRATE_HISTORY","changedBy","hydrateNamechange","namechange","unshift","floor","Date","now","APPEND_USERS","HYDRATE_USERS","Ajax","_cookieName","_csrfToken","_locks","cookieName","cookie","cookieRegex","method","resolve","reject","xhr","headers","getCsrfToken","JSON","stringify","contentType","dataType","jqXHR","responseJSON","statusText","lock","param","waiter","wait","request","processData","XMLHttpRequest","evt","lengthComputable","total","Auth","local","_store","_local","_modal","syncSession","watchState","getState","set","watch","BaseCaptcha","_ajax","_include","_snackbar","NoCaptcha","QACaptcha","kwargs","ReCaptchaComponent","grecaptcha","render","sitekey","siteKey","binding","ReCaptcha","recaptcha_site_key","Captcha","captcha_type","_captcha","init","Include","staticUrl","_staticUrl","_included","script","remote","cache","localStorage","LocalStorage","prefix","_prefix","_watchers","newValueJson","parse","newValue","watcher","oldValue","setItem","itemString","getItem","MobileNavbarDropdown","_element","_component","removeClass","show","on","PageTitle","indexTitle","forumName","_indexTitle","_forumName","finalTitle","Polls","_polls","stop","poolServer","_stopped","timeout","apiError","pollId","replaceSelection","execAction","insertCode","makeEmphasis","insertHr","URL_PATTERN","str","insertImage","isUrl","insertLink","insertSpoiler","makeStrikethrough","makeStrong","insertQuote","insertAttachment","updateItem","isRemoved","updatedAttachments","onAttachmentsChange","Preview","Filename","Actions","onInsert","onRemove","onUndo","Image","thumbnailUrl","Insert","Remove","Undo","filteredAttachments","getRandomKey","getTime","max_attachment_size","textareaId","getTextarea","getSelectionRange","end","getSelection","ctrl","range","createRange","moveStart","selectionStart","selectionEnd","_replace","myRange","replacement","startText","selectionRange","setSelectionRange","createTextRange","collapse","moveEnd","setSelection","isPreviewLoading","parsed","operation","_replaceSelection","atwho","at","displayTpl","insertTpl","searchKey","callbacks","remoteFilter","getJSON","flag","onPreviewClick","submitLabel","canProtect","onProtect","onUnprotect","columns","columnClassName","textClassName","PinOptions","onPinGlobally","onPinLocally","onUnpin","HideOptions","onHide","onUnhide","CloseOptions","onClose","onOpen","completedAttachments","categoryOptions","isErrored","loadSuccess","loadError","titleStyle","withFirstRow","onTitleChange","onPostChange","removedBlanks","cleanUsernames","onToChange","newPost","newContext","appendData","Posting","_isOpen","_isClosing","_placeholder","_mode","_realOpen","animate","scrollTop","_timeout","StoreWrapper","_reducers","_initialState","createStore","combineReducers","Zxcvbn","_isLoaded","_loadedPromise","_loadingPromise","tries","plain","expires","getReasonMessage","RedrawedBannedPage","BannedPage","changeState","rowWidth","padding","bytes","roundSize","toFixed","Component","rootElementId","connected","rootElement","finalComponent","int","min","max","childRoutes","onEnter","replaceState","browserHistory","array","EMAIL","USERNAME","requiredTermsOfService","requiredPrivacyPolicy","returnMessage","usernameMinLength","lengthMin","usernameMaxLength","lengthMax","usernameContent","webpackContext","req","webpackContextResolve","__webpack_require__","module","exports","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","getter","__esModule","definition","defineProperty","enumerable","globalThis","Function","hmd","obj","prop","prototype","Symbol","toStringTag","nmd","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"misago.js","mappings":"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","sources":["webpack://misago/webpack/runtime/chunk loaded","webpack://misago/./highlight/highlight.pack.js","webpack://misago/./src/components/FlexRow/FlexRow.jsx","webpack://misago/./src/components/FlexRow/FlexRowCol.jsx","webpack://misago/./src/components/FlexRow/FlexRowSection.jsx","webpack://misago/./src/components/PageContainer.jsx","webpack://misago/./src/components/PageHeader/PageHeader.jsx","webpack://misago/./src/components/PageHeader/PageHeaderBanner.jsx","webpack://misago/./src/components/PageHeader/PageHeaderContainer.jsx","webpack://misago/./src/components/PageHeader/PageHeaderDetails.jsx","webpack://misago/./src/components/PageHeader/PageHeaderHTMLMessage.jsx","webpack://misago/./src/components/PageHeader/PageHeaderMessage.jsx","webpack://misago/./src/components/PageHeader/PageHeaderPlain.jsx","webpack://misago/./src/components/RegisterLegalFootnote.js","webpack://misago/./src/components/StartSocialAuth.js","webpack://misago/./src/components/ThreadFlags.jsx","webpack://misago/./src/components/ThreadReplies.jsx","webpack://misago/./src/components/Toolbar/Toolbar.jsx","webpack://misago/./src/components/Toolbar/ToolbarItem.jsx","webpack://misago/./src/components/Toolbar/ToolbarSection.jsx","webpack://misago/./src/components/Toolbar/ToolbarSpacer.jsx","webpack://misago/./src/components/avatar.js","webpack://misago/./src/components/button.js","webpack://misago/./src/components/category-select.js","webpack://misago/./src/components/edit-details/blankslate.js","webpack://misago/./src/components/edit-details/loader.js","webpack://misago/./src/components/edit-details/field-input.js","webpack://misago/./src/components/edit-details/fieldset.js","webpack://misago/./src/components/edit-details/form.js","webpack://misago/./src/components/edit-details/index.js","webpack://misago/./src/components/form-group.js","webpack://misago/./src/components/form.js","webpack://misago/./src/components/li.js","webpack://misago/./src/components/loader.js","webpack://misago/./src/components/merge-conflict.js","webpack://misago/./src/services/one-box.js","webpack://misago/./src/components/misago-markup.js","webpack://misago/./src/components/modal-loader.js","webpack://misago/./src/components/modal-message.js","webpack://misago/./src/components/panel-loader.js","webpack://misago/./src/components/panel-message.js","webpack://misago/./src/components/poll/results/chart.js","webpack://misago/./src/components/poll/results/modal.js","webpack://misago/./src/components/poll/results/options.js","webpack://misago/./src/components/poll/info.js","webpack://misago/./src/components/poll/results/index.js","webpack://misago/./src/components/poll/voting/help.js","webpack://misago/./src/components/poll/voting/select.js","webpack://misago/./src/components/poll/voting/utils.js","webpack://misago/./src/components/poll/voting/index.js","webpack://misago/./src/components/poll/poll.js","webpack://misago/./src/components/poll/form/choices-control.js","webpack://misago/./src/components/poll/form/index.js","webpack://misago/./src/components/post-feed/post/body.js","webpack://misago/./src/components/post-feed/post/header.js","webpack://misago/./src/components/post-feed/post/post-side/button.js","webpack://misago/./src/components/post-feed/post/post-side/anonymous.js","webpack://misago/./src/components/post-feed/post/post-side/user-title.js","webpack://misago/./src/components/post-feed/post/post-side/registered.js","webpack://misago/./src/components/post-feed/post/post-side/index.js","webpack://misago/./src/components/post-feed/post/index.js","webpack://misago/./src/components/post-feed/preview.js","webpack://misago/./src/components/post-feed/index.js","webpack://misago/./src/components/posting/utils/validators.js","webpack://misago/./src/components/select.js","webpack://misago/./src/components/sign-in.js","webpack://misago/./src/components/user-status.js","webpack://misago/./src/components/username-history/list-empty.js","webpack://misago/./src/components/username-history/change.js","webpack://misago/./src/components/username-history/list-ready.js","webpack://misago/./src/components/username-history/change-preview.js","webpack://misago/./src/components/username-history/list-preview.js","webpack://misago/./src/components/username-history/root.js","webpack://misago/./src/components/users-list/card/stats.js","webpack://misago/./src/components/users-list/card/user-title.js","webpack://misago/./src/components/users-list/card/index.js","webpack://misago/./src/components/users-list/preview/card.js","webpack://misago/./src/components/users-list/preview/index.js","webpack://misago/./src/components/users-list/index.js","webpack://misago/./src/components/with-dropdown.js","webpack://misago/./src/components/yes-no-switch.js","webpack://misago/./src/utils/ordered-list.js","webpack://misago/./src/index.js","webpack://misago/./src/initializers/ajax.js","webpack://misago/./src/initializers/auth-sync.js","webpack://misago/./src/initializers/auth.js","webpack://misago/./src/initializers/captcha.js","webpack://misago/./src/components/accept-agreement.js","webpack://misago/./src/initializers/components/accept-agreement.js","webpack://misago/./src/components/auth-message.js","webpack://misago/./src/initializers/components/auth-message.js","webpack://misago/./src/initializers/components/banned-page.js","webpack://misago/./src/components/categories/blankslate.js","webpack://misago/./src/components/categories/category/list-item/description.js","webpack://misago/./src/components/categories/category/list-item/icon.js","webpack://misago/./src/components/categories/category/list-item/main.js","webpack://misago/./src/components/categories/category/list-item/last-thread.js","webpack://misago/./src/components/categories/category/list-item/stats.js","webpack://misago/./src/components/categories/category/list-item/subcategories/list-item.js","webpack://misago/./src/components/categories/category/list-item/subcategories/index.js","webpack://misago/./src/components/categories/category/list-item/index.js","webpack://misago/./src/components/categories/category/index.js","webpack://misago/./src/components/categories/categories-list.js","webpack://misago/./src/components/categories/index.js","webpack://misago/./src/initializers/components/categories.js","webpack://misago/./src/components/options/navs.js","webpack://misago/./src/components/options/delete-account.js","webpack://misago/./src/components/options/edit-details.js","webpack://misago/./src/components/options/download-data.js","webpack://misago/./src/components/options/forum-options.js","webpack://misago/./src/components/options/change-username/form-loading.js","webpack://misago/./src/components/options/change-username/form-locked.js","webpack://misago/./src/components/options/change-username/form.js","webpack://misago/./src/components/options/change-username/root.js","webpack://misago/./src/components/options/sign-in-credentials/change-email.js","webpack://misago/./src/components/options/sign-in-credentials/change-password.js","webpack://misago/./src/components/options/sign-in-credentials/UnusablePasswordMessage.js","webpack://misago/./src/components/options/sign-in-credentials/root.js","webpack://misago/./src/components/options/root.js","webpack://misago/./src/initializers/components/options.js","webpack://misago/./src/components/profile/ban-details.js","webpack://misago/./src/components/profile/details/form.js","webpack://misago/./src/components/profile/details/empty-message.js","webpack://misago/./src/components/profile/details/field-value.js","webpack://misago/./src/components/profile/details/field.js","webpack://misago/./src/components/profile/details/group.js","webpack://misago/./src/components/profile/details/groups-list.js","webpack://misago/./src/components/profile/details/header.js","webpack://misago/./src/data/profile-details.js","webpack://misago/./src/components/profile/details/index.js","webpack://misago/./src/components/profile/feed/route.js","webpack://misago/./src/components/quick-search.js","webpack://misago/./src/components/profile/followers.js","webpack://misago/./src/components/profile/follows.js","webpack://misago/./src/components/profile/username-history.js","webpack://misago/./src/components/profile/follow-button.js","webpack://misago/./src/components/profile/message-button.js","webpack://misago/./src/components/profile/moderation/avatar-controls.js","webpack://misago/./src/components/profile/moderation/change-username.js","webpack://misago/./src/components/profile/moderation/delete-account.js","webpack://misago/./src/components/profile/moderation/nav.js","webpack://misago/./src/components/profile/ProfileDataList.jsx","webpack://misago/./src/components/profile/ProfileHeader.jsx","webpack://misago/./src/components/profile/ProfileNav.js","webpack://misago/./src/components/profile/root.js","webpack://misago/./src/components/profile/feed/index.js","webpack://misago/./src/initializers/components/profile.js","webpack://misago/./src/components/request-activation-link.js","webpack://misago/./src/initializers/components/request-activation-link.js","webpack://misago/./src/components/request-password-reset.js","webpack://misago/./src/initializers/components/request-password-reset.js","webpack://misago/./src/components/reset-password-form.js","webpack://misago/./src/initializers/components/reset-password-form.js","webpack://misago/./src/components/search/form.js","webpack://misago/./src/components/search/sidenav.js","webpack://misago/./src/components/search/page.js","webpack://misago/./src/components/search/threads/results.js","webpack://misago/./src/components/search/threads/index.js","webpack://misago/./src/components/search/users/index.js","webpack://misago/./src/components/search/index.js","webpack://misago/./src/initializers/components/search.js","webpack://misago/./src/components/snackbar.js","webpack://misago/./src/initializers/components/snackbar.js","webpack://misago/./src/components/social-auth/header.js","webpack://misago/./src/components/social-auth/register.js","webpack://misago/./src/components/social-auth/complete.js","webpack://misago/./src/components/social-auth/index.js","webpack://misago/./src/initializers/components/social-auth.js","webpack://misago/./src/components/add-participant.js","webpack://misago/./src/components/participants/add-participant.js","webpack://misago/./src/components/participants/cards-list/make-owner.js","webpack://misago/./src/components/participants/cards-list/actions.js","webpack://misago/./src/components/participants/cards-list/remove.js","webpack://misago/./src/components/participants/cards-list/card.js","webpack://misago/./src/components/participants/cards-list/index.js","webpack://misago/./src/components/participants/index.js","webpack://misago/./src/components/participants/utils.js","webpack://misago/./src/components/posts-list/event/icon.js","webpack://misago/./src/components/posts-list/event/controls.js","webpack://misago/./src/components/posts-list/event/info.js","webpack://misago/./src/components/posts-list/event/message.js","webpack://misago/./src/components/posts-list/event/unread-label.js","webpack://misago/./src/components/posts-list/waypoint.js","webpack://misago/./src/components/posts-list/event/index.js","webpack://misago/./src/components/posts-list/post/attachments/attachment.js","webpack://misago/./src/components/posts-list/post/attachments/index.js","webpack://misago/./src/components/posts-list/post/body.js","webpack://misago/./src/components/posts-list/post/flags.js","webpack://misago/./src/components/posts-list/post/controls/actions.js","webpack://misago/./src/components/post-likes.js","webpack://misago/./src/components/posts-list/post/footer.js","webpack://misago/./src/components/posts-list/post/controls/move.js","webpack://misago/./src/components/post-changelog/diff.js","webpack://misago/./src/components/post-changelog/footer.js","webpack://misago/./src/components/post-changelog/toolbar.js","webpack://misago/./src/components/post-changelog/utils.js","webpack://misago/./src/components/post-changelog/index.js","webpack://misago/./src/components/posts-list/post/controls/split.js","webpack://misago/./src/components/posts-list/post/controls/dropdown.js","webpack://misago/./src/components/posts-list/post/controls/index.js","webpack://misago/./src/components/posts-list/post/select.js","webpack://misago/./src/components/posts-list/post/header.js","webpack://misago/./src/components/posts-list/post/post-side/anonymous.js","webpack://misago/./src/components/posts-list/post/post-side/has-visible-title.js","webpack://misago/./src/components/posts-list/post/post-side/user-postcount.js","webpack://misago/./src/components/posts-list/post/post-side/user-status.js","webpack://misago/./src/components/posts-list/post/post-side/user-title.js","webpack://misago/./src/components/posts-list/post/post-side/registered.js","webpack://misago/./src/components/posts-list/post/post-side/index.js","webpack://misago/./src/components/posts-list/post/index.js","webpack://misago/./src/components/posts-list/post/preview.js","webpack://misago/./src/components/posts-list/index.js","webpack://misago/./src/components/ThreadStarterCard.jsx","webpack://misago/./src/components/thread/moderation/thread/ThreadChangeTitleModal.jsx","webpack://misago/./src/components/thread/moderation/thread/merge.js","webpack://misago/./src/components/thread/moderation/thread/move.js","webpack://misago/./src/components/thread/moderation/thread/controls.js","webpack://misago/./src/components/thread/moderation/thread/index.js","webpack://misago/./src/components/thread/ThreadModeration.jsx","webpack://misago/./src/components/thread/ThreadSubscriptionButton.jsx","webpack://misago/./src/components/Breadcrumbs/Breadcrumbs.jsx","webpack://misago/./src/components/Breadcrumbs/BreadcrumbsCategory.jsx","webpack://misago/./src/components/Breadcrumbs/BreadcrumbsRootCategory.jsx","webpack://misago/./src/components/thread/ThreadHeader/ThreadHeaderBreadcrumbs.jsx","webpack://misago/./src/components/thread/ThreadHeader/index.js","webpack://misago/./src/components/thread/ThreadHeader/ThreadHeader.jsx","webpack://misago/./src/components/thread/ThreadPagination.jsx","webpack://misago/./src/components/thread/ThreadPostsLeft.jsx","webpack://misago/./src/components/thread/moderation/posts/errors-list.js","webpack://misago/./src/components/thread/moderation/posts/actions.js","webpack://misago/./src/components/thread/moderation/posts/move.js","webpack://misago/./src/components/thread/moderation/posts/split.js","webpack://misago/./src/components/thread/moderation/posts/dropdown.js","webpack://misago/./src/components/thread/ThreadPostsModeration.jsx","webpack://misago/./src/components/thread/ThreadReplyButton.jsx","webpack://misago/./src/components/thread/ThreadToolbarBottom.jsx","webpack://misago/./src/components/thread/ThreadPollButton.jsx","webpack://misago/./src/components/thread/ThreadShortcutsButton.jsx","webpack://misago/./src/components/thread/ThreadToolbarTop.jsx","webpack://misago/./src/components/thread/route.js","webpack://misago/./src/components/thread/root.js","webpack://misago/./src/initializers/components/thread.js","webpack://misago/./src/components/threads/compare.js","webpack://misago/./src/components/threads/ThreadsCategoryPicker.jsx","webpack://misago/./src/components/threads/ThreadsListPicker.jsx","webpack://misago/./src/components/threads/moderation/errors-list.js","webpack://misago/./src/components/threads/moderation/merge.js","webpack://misago/./src/components/threads/moderation/move.js","webpack://misago/./src/components/threads/moderation/controls.js","webpack://misago/./src/components/threads/ThreadsToolbarModeration.jsx","webpack://misago/./src/components/threads/ThreadsToolbar.jsx","webpack://misago/./src/components/threads/container.js","webpack://misago/./src/components/threads/utils.js","webpack://misago/./src/components/ThreadsList/ThreadsListEmpty.jsx","webpack://misago/./src/components/ThreadsList/ThreadsListItemActivity.jsx","webpack://misago/./src/components/ThreadsList/ThreadsListItemCategory.jsx","webpack://misago/./src/components/ThreadsList/ThreadsListItemCheckbox.jsx","webpack://misago/./src/components/ThreadsList/ThreadsListItemIcon.jsx","webpack://misago/./src/components/ThreadsList/ThreadsListItemLastPoster.jsx","webpack://misago/./src/components/ThreadsList/ThreadsListItemSubscriptionOptions.jsx","webpack://misago/./src/components/ThreadsList/ThreadsListItemSubscription.jsx","webpack://misago/./src/components/ThreadsList/ThreadsListItem.jsx","webpack://misago/./src/components/UIPreview/UIPreviewText.js","webpack://misago/./src/components/ThreadsList/ThreadsListLoader.jsx","webpack://misago/./src/components/ThreadsList/ThreadsListUpdatePrompt.jsx","webpack://misago/./src/components/ThreadsList/index.js","webpack://misago/./src/components/ThreadsList/ThreadsList.jsx","webpack://misago/./src/components/threads/route.js","webpack://misago/./src/initializers/components/threads.js","webpack://misago/./src/components/threads/root.js","webpack://misago/./src/components/navbar-search/clean-results.js","webpack://misago/./src/components/navbar-search/dropdown/constants.js","webpack://misago/./src/components/navbar-search/dropdown/input.js","webpack://misago/./src/components/navbar-search/dropdown/dropdown-menu.js","webpack://misago/./src/components/navbar-search/dropdown/empty.js","webpack://misago/./src/components/navbar-search/dropdown/loader.js","webpack://misago/./src/components/navbar-search/dropdown/result/footer.js","webpack://misago/./src/components/navbar-search/dropdown/result/header.js","webpack://misago/./src/components/navbar-search/dropdown/result/thread.js","webpack://misago/./src/components/navbar-search/dropdown/result/user.js","webpack://misago/./src/components/navbar-search/dropdown/result/result.js","webpack://misago/./src/components/navbar-search/dropdown/result/index.js","webpack://misago/./src/components/navbar-search/dropdown/flatten-results.js","webpack://misago/./src/components/navbar-search/dropdown/index.js","webpack://misago/./src/components/navbar-search/index.js","webpack://misago/./src/components/password-strength.js","webpack://misago/./src/components/register.js","webpack://misago/./src/components/register-button.js","webpack://misago/./src/components/user-menu/guest-nav.js","webpack://misago/./src/components/change-avatar/index.js","webpack://misago/./src/components/change-avatar/crop.js","webpack://misago/./src/components/change-avatar/upload.js","webpack://misago/./src/components/change-avatar/gallery.js","webpack://misago/./src/components/change-avatar/root.js","webpack://misago/./src/components/user-menu/user-nav.js","webpack://misago/./src/components/user-menu/root.js","webpack://misago/./src/initializers/components/user-menu.js","webpack://misago/./src/components/users/UsersNav.js","webpack://misago/./src/components/users/active-posters/list-empty.js","webpack://misago/./src/components/users/active-posters/list-item-preview.js","webpack://misago/./src/components/users/active-posters/list-preview.js","webpack://misago/./src/components/users/active-posters/list-item.js","webpack://misago/./src/components/users/active-posters/list-ready.js","webpack://misago/./src/components/users/active-posters/root.js","webpack://misago/./src/components/page-lead.js","webpack://misago/./src/utils/string-count.js","webpack://misago/./src/components/users/rank/RankUsersList.js","webpack://misago/./src/components/users/rank/RankUsersListLoader.js","webpack://misago/./src/components/users/rank/RankUsersLeft.jsx","webpack://misago/./src/components/users/rank/RankUsersPagination.jsx","webpack://misago/./src/components/users/rank/RankUsersToolbar.jsx","webpack://misago/./src/components/users/rank/root.js","webpack://misago/./src/components/users/root.js","webpack://misago/./src/initializers/components/users.js","webpack://misago/./src/initializers/include.js","webpack://misago/./src/initializers/local-storage.js","webpack://misago/./src/initializers/mobile-navbar-dropdown.js","webpack://misago/./src/initializers/modal.js","webpack://misago/./src/initializers/moment-locale.js","webpack://misago/./src/initializers/page-title.js","webpack://misago/./src/initializers/polls.js","webpack://misago/./src/initializers/posting.js","webpack://misago/./src/initializers/reducers/auth.js","webpack://misago/./src/initializers/reducers/participants.js","webpack://misago/./src/initializers/reducers/poll.js","webpack://misago/./src/initializers/reducers/posts.js","webpack://misago/./src/initializers/reducers/profile-details.js","webpack://misago/./src/initializers/reducers/profile-hydrate.js","webpack://misago/./src/initializers/reducers/profile.js","webpack://misago/./src/initializers/reducers/search.js","webpack://misago/./src/initializers/reducers/selection.js","webpack://misago/./src/initializers/reducers/snackbar.js","webpack://misago/./src/initializers/reducers/thread.js","webpack://misago/./src/initializers/reducers/threads.js","webpack://misago/./src/initializers/reducers/tick.js","webpack://misago/./src/initializers/reducers/username-history.js","webpack://misago/./src/initializers/reducers/users.js","webpack://misago/./src/initializers/snackbar.js","webpack://misago/./src/initializers/store.js","webpack://misago/./src/initializers/tick-start.js","webpack://misago/./src/initializers/zxcvbn.js","webpack://misago/./src/reducers/auth.js","webpack://misago/./src/reducers/participants.js","webpack://misago/./src/reducers/poll.js","webpack://misago/./src/reducers/post.js","webpack://misago/./src/reducers/posts.js","webpack://misago/./src/reducers/profile-details.js","webpack://misago/./src/reducers/profile.js","webpack://misago/./src/reducers/search.js","webpack://misago/./src/reducers/selection.js","webpack://misago/./src/reducers/snackbar.js","webpack://misago/./src/reducers/thread.js","webpack://misago/./src/reducers/threads.js","webpack://misago/./src/reducers/tick.js","webpack://misago/./src/reducers/username-history.js","webpack://misago/./src/reducers/users.js","webpack://misago/./src/services/ajax.js","webpack://misago/./src/services/auth.js","webpack://misago/./src/services/captcha.js","webpack://misago/./src/services/include.js","webpack://misago/./src/services/local-storage.js","webpack://misago/./src/services/mobile-navbar-dropdown.js","webpack://misago/./src/services/modal.js","webpack://misago/./src/services/page-title.js","webpack://misago/./src/services/polls.js","webpack://misago/./src/components/editor/actions/action.js","webpack://misago/./src/components/editor/actions/code.js","webpack://misago/./src/components/editor/actions/emphasis.js","webpack://misago/./src/components/editor/actions/hr.js","webpack://misago/./src/utils/is-url.js","webpack://misago/./src/components/editor/actions/image.js","webpack://misago/./src/components/editor/actions/link.js","webpack://misago/./src/components/editor/actions/spoiler.js","webpack://misago/./src/components/editor/actions/strikethrough.js","webpack://misago/./src/components/editor/actions/strong.js","webpack://misago/./src/components/editor/actions/quote.js","webpack://misago/./src/components/editor/attachments/attachment/complete.js","webpack://misago/./src/components/editor/attachments/attachment/error.js","webpack://misago/./src/components/editor/attachments/attachment/upload.js","webpack://misago/./src/components/editor/attachments/attachment/index.js","webpack://misago/./src/components/editor/attachments/list.js","webpack://misago/./src/components/editor/attachments/uploader.js","webpack://misago/./src/components/editor/attachments/index.js","webpack://misago/./src/components/editor/attachments/upload-button.js","webpack://misago/./src/components/editor/markup-preview.js","webpack://misago/./src/components/editor/textutils.js","webpack://misago/./src/components/editor/index.js","webpack://misago/./src/components/posting/utils/container.js","webpack://misago/./src/components/posting/utils/loader.js","webpack://misago/./src/components/posting/utils/message.js","webpack://misago/./src/components/posting/utils/options.js","webpack://misago/./src/components/posting/utils/attachments.js","webpack://misago/./src/components/posting/start.js","webpack://misago/./src/components/posting/utils/usernames.js","webpack://misago/./src/components/posting/start-private.js","webpack://misago/./src/components/posting/reply.js","webpack://misago/./src/components/posting/edit.js","webpack://misago/./src/components/posting/index.js","webpack://misago/./src/services/posting.js","webpack://misago/./src/services/snackbar.js","webpack://misago/./src/services/store.js","webpack://misago/./src/services/zxcvbn.js","webpack://misago/./src/components/banned-page.js","webpack://misago/./src/utils/banned-page.js","webpack://misago/./src/utils/batch.js","webpack://misago/./src/utils/concat-unique.js","webpack://misago/./src/utils/escape-html.js","webpack://misago/./src/utils/file-size.js","webpack://misago/./src/utils/mount-component.js","webpack://misago/./src/utils/random.js","webpack://misago/./src/utils/routed-component.js","webpack://misago/./src/utils/sets.js","webpack://misago/./src/utils/validators.js","webpack://misago/./node_modules/moment/locale/ sync ^\\.\\/.*$","webpack://misago/webpack/bootstrap","webpack://misago/webpack/runtime/compat get default export","webpack://misago/webpack/runtime/define property getters","webpack://misago/webpack/runtime/global","webpack://misago/webpack/runtime/harmony module decorator","webpack://misago/webpack/runtime/hasOwnProperty shorthand","webpack://misago/webpack/runtime/make namespace object","webpack://misago/webpack/runtime/node module decorator","webpack://misago/webpack/runtime/jsonp chunk loading","webpack://misago/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/*! highlight.js v9.9.0 | BSD3 License | git.io/hljslicense */\n!function(e){var n=\"object\"==typeof window&&window||\"object\"==typeof self&&self;\"undefined\"!=typeof undefined?e(exports):n&&(n.hljs=e({}),\"function\"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/[&<>]/gm,function(e){return I[e]})}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function i(e){return k.test(e)}function a(e){var n,t,r,a,o=e.className+\" \";if(o+=e.parentNode?e.parentNode.className:\"\",t=B.exec(o))return R(t[1])?t[1]:\"no-highlight\";for(o=o.split(/\\s+/),n=0,r=o.length;r>n;n++)if(a=o[n],i(a)||R(a))return a}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,i){for(var a=e.firstChild;a;a=a.nextSibling)3===a.nodeType?i+=a.nodeValue.length:1===a.nodeType&&(n.push({event:\"start\",offset:i,node:a}),i=r(a,i),t(a).match(/br|hr|img|input/)||n.push({event:\"stop\",offset:i,node:a}));return i}(e,0),n}function c(e,r,i){function a(){return e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset<r[0].offset?e:r:\"start\"===r[0].event?e:r:e.length?e:r}function o(e){function r(e){return\" \"+e.nodeName+'=\"'+n(e.value)+'\"'}l+=\"<\"+t(e)+w.map.call(e.attributes,r).join(\"\")+\">\"}function u(e){l+=\"</\"+t(e)+\">\"}function c(e){(\"start\"===e.event?o:u)(e.node)}for(var s=0,l=\"\",f=[];e.length||r.length;){var g=a();if(l+=n(i.substring(s,g[0].offset)),s=g[0].offset,g===e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=a();while(g===e&&g.length&&g[0].offset===s);f.reverse().forEach(o)}else\"start\"===g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return l+n(i.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),\"m\"+(e.cI?\"i\":\"\")+(r?\"g\":\"\"))}function r(i,a){if(!i.compiled){if(i.compiled=!0,i.k=i.k||i.bK,i.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(\" \").forEach(function(e){var t=e.split(\"|\");u[t[0]]=[n,t[1]?Number(t[1]):1]})};\"string\"==typeof i.k?c(\"keyword\",i.k):E(i.k).forEach(function(e){c(e,i.k[e])}),i.k=u}i.lR=t(i.l||/\\w+/,!0),a&&(i.bK&&(i.b=\"\\\\b(\"+i.bK.split(\" \").join(\"|\")+\")\\\\b\"),i.b||(i.b=/\\B|\\b/),i.bR=t(i.b),i.e||i.eW||(i.e=/\\B|\\b/),i.e&&(i.eR=t(i.e)),i.tE=n(i.e)||\"\",i.eW&&a.tE&&(i.tE+=(i.e?\"|\":\"\")+a.tE)),i.i&&(i.iR=t(i.i)),null==i.r&&(i.r=1),i.c||(i.c=[]);var s=[];i.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push(\"self\"===e?i:e)}),i.c=s,i.c.forEach(function(e){r(e,i)}),i.starts&&r(i.starts,a);var l=i.c.map(function(e){return e.bK?\"\\\\.?(\"+e.b+\")\\\\.?\":e.b}).concat([i.tE,i.i]).map(n).filter(Boolean);i.t=l.length?t(l.join(\"|\"),!0):{exec:function(){return null}}}}r(e)}function l(e,t,i,a){function o(e,n){var t,i;for(t=0,i=n.c.length;i>t;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!i&&r(n.iR,e)}function g(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function h(e,n,t,r){var i=r?\"\":y.classPrefix,a='<span class=\"'+i,o=t?\"\":C;return a+=e+'\">',a+n+o}function p(){var e,t,r,i;if(!E.k)return n(B);for(i=\"\",t=0,E.lR.lastIndex=0,r=E.lR.exec(B);r;)i+=n(B.substring(t,r.index)),e=g(E,r),e?(M+=e[1],i+=h(e[0],n(r[0]))):i+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(B);return i+n(B.substr(t))}function d(){var e=\"string\"==typeof E.sL;if(e&&!x[E.sL])return n(B);var t=e?l(E.sL,B,!0,L[E.sL]):f(B,E.sL.length?E.sL:void 0);return E.r>0&&(M+=t.r),e&&(L[E.sL]=t.top),h(t.language,t.value,!1,!0)}function b(){k+=null!=E.sL?d():p(),B=\"\"}function v(e){k+=e.cN?h(e.cN,\"\",!0):\"\",E=Object.create(e,{parent:{value:E}})}function m(e,n){if(B+=e,null==n)return b(),0;var t=o(n,E);if(t)return t.skip?B+=n:(t.eB&&(B+=n),b(),t.rB||t.eB||(B=n)),v(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var i=E;i.skip?B+=n:(i.rE||i.eE||(B+=n),b(),i.eE&&(B=n));do E.cN&&(k+=C),E.skip||(M+=E.r),E=E.parent;while(E!==r.parent);return r.starts&&v(r.starts,\"\"),i.rE?0:n.length}if(c(n,E))throw new Error('Illegal lexeme \"'+n+'\" for mode \"'+(E.cN||\"<unnamed>\")+'\"');return B+=n,n.length||1}var N=R(e);if(!N)throw new Error('Unknown language: \"'+e+'\"');s(N);var w,E=a||N,L={},k=\"\";for(w=E;w!==N;w=w.parent)w.cN&&(k=h(w.cN,\"\",!0)+k);var B=\"\",M=0;try{for(var I,j,O=0;;){if(E.t.lastIndex=O,I=E.t.exec(t),!I)break;j=m(t.substring(O,I.index),I[0]),O=I.index+j}for(m(t.substr(O)),w=E;w.parent;w=w.parent)w.cN&&(k+=C);return{r:M,value:k,language:e,top:E}}catch(T){if(T.message&&-1!==T.message.indexOf(\"Illegal\"))return{r:0,value:n(t)};throw T}}function f(e,t){t=t||y.languages||E(x);var r={r:0,value:n(e)},i=r;return t.filter(R).forEach(function(n){var t=l(n,e,!1);t.language=n,t.r>i.r&&(i=t),t.r>r.r&&(i=r,r=t)}),i.language&&(r.second_best=i),r}function g(e){return y.tabReplace||y.useBR?e.replace(M,function(e,n){return y.useBR&&\"\\n\"===e?\"<br>\":y.tabReplace?n.replace(/\\t/g,y.tabReplace):void 0}):e}function h(e,n,t){var r=n?L[n]:t,i=[e.trim()];return e.match(/\\bhljs\\b/)||i.push(\"hljs\"),-1===e.indexOf(r)&&i.push(r),i.join(\" \").trim()}function p(e){var n,t,r,o,s,p=a(e);i(p)||(y.useBR?(n=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\"),n.innerHTML=e.innerHTML.replace(/\\n/g,\"\").replace(/<br[ \\/]*>/g,\"\\n\")):n=e,s=n.textContent,r=p?l(p,s,!0):f(s),t=u(n),t.length&&(o=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\"),o.innerHTML=r.value,r.value=c(t,u(o),s)),r.value=g(r.value),e.innerHTML=r.value,e.className=h(e.className,p,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function d(e){y=o(y,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll(\"pre code\");w.forEach.call(e,p)}}function v(){addEventListener(\"DOMContentLoaded\",b,!1),addEventListener(\"load\",b,!1)}function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e){L[e]=n})}function N(){return E(x)}function R(e){return e=(e||\"\").toLowerCase(),x[e]||x[L[e]]}var w=[],E=Object.keys,x={},L={},k=/^(no-?highlight|plain|text)$/i,B=/\\blang(?:uage)?-([\\w-]+)\\b/i,M=/((^(<[^>]+>|\\t|)+|(?:\\n)))/gm,C=\"</span>\",y={classPrefix:\"hljs-\",tabReplace:null,useBR:!1,languages:void 0},I={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\"};return e.highlight=l,e.highlightAuto=f,e.fixMarkup=g,e.highlightBlock=p,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=R,e.inherit=o,e.IR=\"[a-zA-Z]\\\\w*\",e.UIR=\"[a-zA-Z_]\\\\w*\",e.NR=\"\\\\b\\\\d+(\\\\.\\\\d+)?\",e.CNR=\"(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\",e.BNR=\"\\\\b(0b[01]+)\",e.RSR=\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\",e.BE={b:\"\\\\\\\\[\\\\s\\\\S]\",r:0},e.ASM={cN:\"string\",b:\"'\",e:\"'\",i:\"\\\\n\",c:[e.BE]},e.QSM={cN:\"string\",b:'\"',e:'\"',i:\"\\\\n\",c:[e.BE]},e.PWM={b:/\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\\b/},e.C=function(n,t,r){var i=e.inherit({cN:\"comment\",b:n,e:t,c:[]},r||{});return i.c.push(e.PWM),i.c.push({cN:\"doctag\",b:\"(?:TODO|FIXME|NOTE|BUG|XXX):\",r:0}),i},e.CLCM=e.C(\"//\",\"$\"),e.CBCM=e.C(\"/\\\\*\",\"\\\\*/\"),e.HCM=e.C(\"#\",\"$\"),e.NM={cN:\"number\",b:e.NR,r:0},e.CNM={cN:\"number\",b:e.CNR,r:0},e.BNM={cN:\"number\",b:e.BNR,r:0},e.CSSNM={cN:\"number\",b:e.NR+\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\",r:0},e.RM={cN:\"regexp\",b:/\\//,e:/\\/[gimuy]*/,i:/\\n/,c:[e.BE,{b:/\\[/,e:/\\]/,r:0,c:[e.BE]}]},e.TM={cN:\"title\",b:e.IR,r:0},e.UTM={cN:\"title\",b:e.UIR,r:0},e.METHOD_GUARD={b:\"\\\\.\\\\s*\"+e.UIR,r:0},e});hljs.registerLanguage(\"xml\",function(s){var e=\"[A-Za-z0-9\\\\._:-]+\",t={eW:!0,i:/</,r:0,c:[{cN:\"attr\",b:e,r:0},{b:/=\\s*/,r:0,c:[{cN:\"string\",endsParent:!0,v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/},{b:/[^\\s\"'=<>`]+/}]}]}]};return{aliases:[\"html\",\"xhtml\",\"rss\",\"atom\",\"xjb\",\"xsd\",\"xsl\",\"plist\"],cI:!0,c:[{cN:\"meta\",b:\"<!DOCTYPE\",e:\">\",r:10,c:[{b:\"\\\\[\",e:\"\\\\]\"}]},s.C(\"<!--\",\"-->\",{r:10}),{b:\"<\\\\!\\\\[CDATA\\\\[\",e:\"\\\\]\\\\]>\",r:10},{b:/<\\?(php)?/,e:/\\?>/,sL:\"php\",c:[{b:\"/\\\\*\",e:\"\\\\*/\",skip:!0}]},{cN:\"tag\",b:\"<style(?=\\\\s|>|$)\",e:\">\",k:{name:\"style\"},c:[t],starts:{e:\"</style>\",rE:!0,sL:[\"css\",\"xml\"]}},{cN:\"tag\",b:\"<script(?=\\\\s|>|$)\",e:\">\",k:{name:\"script\"},c:[t],starts:{e:\"</script>\",rE:!0,sL:[\"actionscript\",\"javascript\",\"handlebars\",\"xml\"]}},{cN:\"meta\",v:[{b:/<\\?xml/,e:/\\?>/,r:10},{b:/<\\?\\w+/,e:/\\?>/}]},{cN:\"tag\",b:\"</?\",e:\"/?>\",c:[{cN:\"name\",b:/[^\\/><\\s]+/,r:0},t]}]}});hljs.registerLanguage(\"markdown\",function(e){return{aliases:[\"md\",\"mkdown\",\"mkd\"],c:[{cN:\"section\",v:[{b:\"^#{1,6}\",e:\"$\"},{b:\"^.+?\\\\n[=-]{2,}$\"}]},{b:\"<\",e:\">\",sL:\"xml\",r:0},{cN:\"bullet\",b:\"^([*+-]|(\\\\d+\\\\.))\\\\s+\"},{cN:\"strong\",b:\"[*_]{2}.+?[*_]{2}\"},{cN:\"emphasis\",v:[{b:\"\\\\*.+?\\\\*\"},{b:\"_.+?_\",r:0}]},{cN:\"quote\",b:\"^>\\\\s+\",e:\"$\"},{cN:\"code\",v:[{b:\"^```w*s*$\",e:\"^```s*$\"},{b:\"`.+?`\"},{b:\"^( {4}|\t)\",e:\"$\",r:0}]},{b:\"^[-\\\\*]{3,}\",e:\"$\"},{b:\"\\\\[.+?\\\\][\\\\(\\\\[].*?[\\\\)\\\\]]\",rB:!0,c:[{cN:\"string\",b:\"\\\\[\",e:\"\\\\]\",eB:!0,rE:!0,r:0},{cN:\"link\",b:\"\\\\]\\\\(\",e:\"\\\\)\",eB:!0,eE:!0},{cN:\"symbol\",b:\"\\\\]\\\\[\",e:\"\\\\]\",eB:!0,eE:!0}],r:10},{b:/^\\[[^\\n]+\\]:/,rB:!0,c:[{cN:\"symbol\",b:/\\[/,e:/\\]/,eB:!0,eE:!0},{cN:\"link\",b:/:\\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage(\"ini\",function(e){var b={cN:\"string\",c:[e.BE],v:[{b:\"'''\",e:\"'''\",r:10},{b:'\"\"\"',e:'\"\"\"',r:10},{b:'\"',e:'\"'},{b:\"'\",e:\"'\"}]};return{aliases:[\"toml\"],cI:!0,i:/\\S/,c:[e.C(\";\",\"$\"),e.HCM,{cN:\"section\",b:/^\\s*\\[+/,e:/\\]+/},{b:/^[a-z0-9\\[\\]_-]+\\s*=\\s*/,e:\"$\",rB:!0,c:[{cN:\"attr\",b:/[a-z0-9\\[\\]_-]+/},{b:/=/,eW:!0,r:0,c:[{cN:\"literal\",b:/\\bon|off|true|false|yes|no\\b/},{cN:\"variable\",v:[{b:/\\$[\\w\\d\"][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},b,{cN:\"number\",b:/([\\+\\-]+)?[\\d]+_[\\d_]+/},e.NM]}]}]}});hljs.registerLanguage(\"python\",function(e){var r={cN:\"meta\",b:/^(>>>|\\.\\.\\.) /},b={cN:\"string\",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[r],r:10},{b:/(u|b)?r?\"\"\"/,e:/\"\"\"/,c:[r],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)\"/,e:/\"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)\"/,e:/\"/},e.ASM,e.QSM]},a={cN:\"number\",r:0,v:[{b:e.BNR+\"[lLjJ]?\"},{b:\"\\\\b(0o[0-7]+)[lLjJ]?\"},{b:e.CNR+\"[lLjJ]?\"}]},l={cN:\"params\",b:/\\(/,e:/\\)/,c:[\"self\",r,a,b]};return{aliases:[\"py\",\"gyp\"],k:{keyword:\"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False\",built_in:\"Ellipsis NotImplemented\"},i:/(<\\/|->|\\?)|=>/,c:[r,a,b,e.HCM,{v:[{cN:\"function\",bK:\"def\"},{cN:\"class\",bK:\"class\"}],e:/:/,i:/[${=;\\n,]/,c:[e.UTM,l,{b:/->/,eW:!0,k:\"None\"}]},{cN:\"meta\",b:/^[\\t ]*@/,e:/$/},{b:/\\b(print|exec)\\(/}]}});hljs.registerLanguage(\"css\",function(e){var c=\"[a-zA-Z-][a-zA-Z0-9_-]*\",t={b:/[A-Z\\_\\.\\-]+\\s*:/,rB:!0,e:\";\",eW:!0,c:[{cN:\"attribute\",b:/\\S/,e:\":\",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\\w-]+\\(/,rB:!0,c:[{cN:\"built_in\",b:/[\\w-]+/},{b:/\\(/,e:/\\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:\"number\",b:\"#[0-9A-Fa-f]+\"},{cN:\"meta\",b:\"!important\"}]}}]};return{cI:!0,i:/[=\\/|'\\$]/,c:[e.CBCM,{cN:\"selector-id\",b:/#[A-Za-z0-9_-]+/},{cN:\"selector-class\",b:/\\.[A-Za-z0-9_-]+/},{cN:\"selector-attr\",b:/\\[/,e:/\\]/,i:\"$\"},{cN:\"selector-pseudo\",b:/:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"'.]+/},{b:\"@(font-face|page)\",l:\"[a-z-]+\",k:\"font-face page\"},{b:\"@\",e:\"[{;]\",i:/:/,c:[{cN:\"keyword\",b:/\\w+/},{b:/\\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:\"selector-tag\",b:c,r:0},{b:\"{\",e:\"}\",i:/\\S/,c:[e.CBCM,t]}]}});hljs.registerLanguage(\"less\",function(e){var r=\"[\\\\w-]+\",t=\"(\"+r+\"|@{\"+r+\"})\",a=[],c=[],s=function(e){return{cN:\"string\",b:\"~?\"+e+\".*?\"+e}},b=function(e,r,t){return{cN:e,b:r,r:t}},n={b:\"\\\\(\",e:\"\\\\)\",c:c,r:0};c.push(e.CLCM,e.CBCM,s(\"'\"),s('\"'),e.CSSNM,{b:\"(url|data-uri)\\\\(\",starts:{cN:\"string\",e:\"[\\\\)\\\\n]\",eE:!0}},b(\"number\",\"#[0-9A-Fa-f]+\\\\b\"),n,b(\"variable\",\"@@?\"+r,10),b(\"variable\",\"@{\"+r+\"}\"),b(\"built_in\",\"~?`[^`]*?`\"),{cN:\"attribute\",b:r+\"\\\\s*:\",e:\":\",rB:!0,eE:!0},{cN:\"meta\",b:\"!important\"});var i=c.concat({b:\"{\",e:\"}\",c:a}),o={bK:\"when\",eW:!0,c:[{bK:\"and not\"}].concat(c)},u={b:t+\"\\\\s*:\",rB:!0,e:\"[;}]\",r:0,c:[{cN:\"attribute\",b:t,e:\":\",eE:!0,starts:{eW:!0,i:\"[<=$]\",r:0,c:c}}]},l={cN:\"keyword\",b:\"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\\\b\",starts:{e:\"[;{}]\",rE:!0,c:c,r:0}},C={cN:\"variable\",v:[{b:\"@\"+r+\"\\\\s*:\",r:15},{b:\"@\"+r}],starts:{e:\"[;}]\",rE:!0,c:i}},p={v:[{b:\"[\\\\.#:&\\\\[>]\",e:\"[;{}]\"},{b:t,e:\"{\"}],rB:!0,rE:!0,i:\"[<='$\\\"]\",r:0,c:[e.CLCM,e.CBCM,o,b(\"keyword\",\"all\\\\b\"),b(\"variable\",\"@{\"+r+\"}\"),b(\"selector-tag\",t+\"%?\",0),b(\"selector-id\",\"#\"+t),b(\"selector-class\",\"\\\\.\"+t,0),b(\"selector-tag\",\"&\",0),{cN:\"selector-attr\",b:\"\\\\[\",e:\"\\\\]\"},{cN:\"selector-pseudo\",b:/:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"'.]+/},{b:\"\\\\(\",e:\"\\\\)\",c:i},{b:\"!important\"}]};return a.push(e.CLCM,e.CBCM,l,C,u,p),{cI:!0,i:\"[=>'/<($\\\"]\",c:a}});hljs.registerLanguage(\"scss\",function(e){var t=\"[a-zA-Z-][a-zA-Z0-9_-]*\",i={cN:\"variable\",b:\"(\\\\$\"+t+\")\\\\b\"},r={cN:\"number\",b:\"#[0-9A-Fa-f]+\"};({cN:\"attribute\",b:\"[A-Z\\\\_\\\\.\\\\-]+\",e:\":\",eE:!0,i:\"[^\\\\s]\",starts:{eW:!0,eE:!0,c:[r,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:\"meta\",b:\"!important\"}]}});return{cI:!0,i:\"[=/|']\",c:[e.CLCM,e.CBCM,{cN:\"selector-id\",b:\"\\\\#[A-Za-z0-9_-]+\",r:0},{cN:\"selector-class\",b:\"\\\\.[A-Za-z0-9_-]+\",r:0},{cN:\"selector-attr\",b:\"\\\\[\",e:\"\\\\]\",i:\"$\"},{cN:\"selector-tag\",b:\"\\\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\\\b\",r:0},{b:\":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)\"},{b:\"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)\"},i,{cN:\"attribute\",b:\"\\\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\\\b\",i:\"[^\\\\s]\"},{b:\"\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b\"},{b:\":\",e:\";\",c:[i,r,e.CSSNM,e.QSM,e.ASM,{cN:\"meta\",b:\"!important\"}]},{b:\"@\",e:\"[{;]\",k:\"mixin include extend for if else each while charset import debug media page content font-face namespace warn\",c:[i,e.QSM,e.ASM,r,e.CSSNM,{b:\"\\\\s[A-Za-z0-9_.-]+\",r:0}]}]}});hljs.registerLanguage(\"json\",function(e){var i={literal:\"true false null\"},n=[e.QSM,e.CNM],r={e:\",\",eW:!0,eE:!0,c:n,k:i},t={b:\"{\",e:\"}\",c:[{cN:\"attr\",b:/\"/,e:/\"/,c:[e.BE],i:\"\\\\n\"},e.inherit(r,{b:/:/})],i:\"\\\\S\"},c={b:\"\\\\[\",e:\"\\\\]\",c:[e.inherit(r)],i:\"\\\\S\"};return n.splice(n.length,0,t,c),{c:n,k:i,i:\"\\\\S\"}});hljs.registerLanguage(\"javascript\",function(e){var r=\"[A-Za-z$_][0-9A-Za-z$_]*\",t={keyword:\"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as\",literal:\"true false null undefined NaN Infinity\",built_in:\"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise\"},a={cN:\"number\",v:[{b:\"\\\\b(0[bB][01]+)\"},{b:\"\\\\b(0[oO][0-7]+)\"},{b:e.CNR}],r:0},n={cN:\"subst\",b:\"\\\\$\\\\{\",e:\"\\\\}\",k:t,c:[]},c={cN:\"string\",b:\"`\",e:\"`\",c:[e.BE,n]};n.c=[e.ASM,e.QSM,c,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:[\"js\",\"jsx\"],k:t,c:[{cN:\"meta\",r:10,b:/^\\s*['\"]use (strict|asm)['\"]/},{cN:\"meta\",b:/^#!/,e:/$/},e.ASM,e.QSM,c,e.CLCM,e.CBCM,a,{b:/[{,]\\s*/,r:0,c:[{b:r+\"\\\\s*:\",rB:!0,r:0,c:[{cN:\"attr\",b:r,r:0}]}]},{b:\"(\"+e.RSR+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",k:\"return throw case\",c:[e.CLCM,e.CBCM,e.RM,{cN:\"function\",b:\"(\\\\(.*?\\\\)|\"+r+\")\\\\s*=>\",rB:!0,e:\"\\\\s*=>\",c:[{cN:\"params\",v:[{b:r},{b:/\\(\\s*\\)/},{b:/\\(/,e:/\\)/,eB:!0,eE:!0,k:t,c:s}]}]},{b:/</,e:/(\\/\\w+|\\w+\\/)>/,sL:\"xml\",c:[{b:/<\\w+\\s*\\/>/,skip:!0},{b:/<\\w+/,e:/(\\/\\w+|\\w+\\/)>/,skip:!0,c:[{b:/<\\w+\\s*\\/>/,skip:!0},\"self\"]}]}],r:0},{cN:\"function\",bK:\"function\",e:/\\{/,eE:!0,c:[e.inherit(e.TM,{b:r}),{cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,c:s}],i:/\\[|%/},{b:/\\$[(.]/},e.METHOD_GUARD,{cN:\"class\",bK:\"class\",e:/[{;=]/,eE:!0,i:/[:\"\\[\\]]/,c:[{bK:\"extends\"},e.UTM]},{bK:\"constructor\",e:/\\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage(\"bash\",function(e){var t={cN:\"variable\",v:[{b:/\\$[\\w\\d#@][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},s={cN:\"string\",b:/\"/,e:/\"/,c:[e.BE,t,{cN:\"variable\",b:/\\$\\(/,e:/\\)/,c:[e.BE]}]},a={cN:\"string\",b:/'/,e:/'/};return{aliases:[\"sh\",\"zsh\"],l:/-?[a-z\\._]+/,k:{keyword:\"if then else elif fi for while in do done case esac function\",literal:\"true false\",built_in:\"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp\",_:\"-ne -eq -lt -gt -f -d -e -s -l -a\"},c:[{cN:\"meta\",b:/^#![^\\n]+sh\\s*$/,r:10},{cN:\"function\",b:/\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,rB:!0,c:[e.inherit(e.TM,{b:/\\w[\\w\\d_]*/})],r:0},e.HCM,s,a,t]}});","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst FlexRow = ({ children, className }) => (\n  <div className={classnames(\"flex-row\", className)}>{children}</div>\n)\n\nexport default FlexRow\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst FlexRowCol = ({ children, className, shrink }) => (\n  <div\n    className={classnames(\"flex-row-col\", className, {\n      \"flex-row-col-shrink\": shrink,\n    })}\n  >\n    {children}\n  </div>\n)\n\nexport default FlexRowCol\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst FlexRowSection = ({ auto, children, className }) => (\n  <div\n    className={classnames(\n      \"flex-row-section\",\n      { \"flex-row-section-auto\": auto },\n      className\n    )}\n  >\n    {children}\n  </div>\n)\n\nexport default FlexRowSection\n","import React from \"react\"\n\nconst PageContainer = ({ children }) => (\n  <div className=\"container page-container\">{children}</div>\n)\n\nexport default PageContainer\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst PageHeader = ({ children, className, styleName }) => (\n  <div\n    className={classnames(\n      \"page-header\",\n      className,\n      styleName && \"page-header-\" + styleName\n    )}\n  >\n    <div className=\"page-header-bg-image\">\n      <div className=\"page-header-bg-overlay\">\n        <div className=\"page-header-image\" />\n        {children}\n      </div>\n    </div>\n  </div>\n)\n\nexport default PageHeader\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst PageHeaderBanner = ({ children, className, styleName }) => (\n  <div\n    className={classnames(\n      \"page-header-banner\",\n      className,\n      styleName && \"page-header-banner-\" + styleName\n    )}\n  >\n    <div className=\"page-header-banner-bg-image\">\n      <div className=\"page-header-banner-bg-overlay\">{children}</div>\n    </div>\n  </div>\n)\n\nexport default PageHeaderBanner\n","import React from \"react\"\n\nconst PageHeaderContainer = ({ children }) => (\n  <div className=\"container page-header-container\">{children}</div>\n)\n\nexport default PageHeaderContainer\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst PageHeaderDetails = ({ children, className }) => (\n  <div className={classnames(\"page-header-details\", className)}>{children}</div>\n)\n\nexport default PageHeaderDetails\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst PageHeaderHTMLMessage = ({ className, message }) => (\n  <div\n    className={classnames(\"page-header-message\", className)}\n    dangerouslySetInnerHTML={{ __html: message }}\n  />\n)\n\nexport default PageHeaderHTMLMessage\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst PageHeaderMessage = ({ children, className }) => (\n  <div className={classnames(\"page-header-message\", className)}>{children}</div>\n)\n\nexport default PageHeaderMessage\n","import React from \"react\"\nimport PageHeader from \"./PageHeader\"\nimport PageHeaderBanner from \"./PageHeaderBanner\"\nimport PageHeaderContainer from \"./PageHeaderContainer\"\nimport PageHeaderDetails from \"./PageHeaderDetails\"\n\nconst PageHeaderPlain = ({ styleName, header, message }) => (\n  <PageHeaderContainer>\n    <PageHeader styleName={styleName}>\n      <PageHeaderBanner styleName={styleName}>\n        <h1>{header}</h1>\n      </PageHeaderBanner>\n      {message && (\n        <PageHeaderDetails styleName={styleName}>{message}</PageHeaderDetails>\n      )}\n    </PageHeader>\n  </PageHeaderContainer>\n)\n\nexport default PageHeaderPlain\n","import React from \"react\"\nimport misago from \"misago\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nconst AGREEMENT_URL = '<a href=\"%(url)s\" target=\"_blank\">%(agreement)s</a>'\n\nconst RegisterLegalFootnote = (props) => {\n  const {\n    errors,\n    privacyPolicy,\n    termsOfService,\n    onPrivacyPolicyChange,\n    onTermsOfServiceChange,\n  } = props\n\n  const termsOfServiceId = misago.get(\"TERMS_OF_SERVICE_ID\")\n  const termsOfServiceUrl = misago.get(\"TERMS_OF_SERVICE_URL\")\n\n  const privacyPolicyId = misago.get(\"PRIVACY_POLICY_ID\")\n  const privacyPolicyUrl = misago.get(\"PRIVACY_POLICY_URL\")\n\n  if (!termsOfServiceId && !privacyPolicyId) return null\n\n  return (\n    <div>\n      <LegalAgreement\n        agreement={gettext(\"the terms of service\")}\n        checked={termsOfService !== null}\n        errors={errors.termsOfService}\n        url={termsOfServiceUrl}\n        value={termsOfServiceId}\n        onChange={onTermsOfServiceChange}\n      />\n      <LegalAgreement\n        agreement={gettext(\"the privacy policy\")}\n        checked={privacyPolicy !== null}\n        errors={errors.privacyPolicy}\n        url={privacyPolicyUrl}\n        value={privacyPolicyId}\n        onChange={onPrivacyPolicyChange}\n      />\n    </div>\n  )\n}\n\nconst LegalAgreement = (props) => {\n  const { agreement, checked, errors, url, value, onChange } = props\n\n  if (!url) return null\n\n  const agreementHtml = interpolate(\n    AGREEMENT_URL,\n    { agreement: escapeHtml(agreement), url: escapeHtml(url) },\n    true\n  )\n  const label = interpolate(\n    gettext(\"I have read and accept %(agreement)s.\"),\n    { agreement: agreementHtml },\n    true\n  )\n\n  return (\n    <div className=\"checkbox legal-footnote\">\n      <label>\n        <input\n          checked={checked}\n          type=\"checkbox\"\n          value={value}\n          onChange={onChange}\n        />\n        <span dangerouslySetInnerHTML={{ __html: label }} />\n      </label>\n      {errors &&\n        errors.map((error, i) => (\n          <div className=\"help-block errors\" key={i}>\n            {error}\n          </div>\n        ))}\n    </div>\n  )\n}\n\nexport default RegisterLegalFootnote\n","import React from \"react\"\nimport misago from \"misago\"\n\nconst StartSocialAuth = (props) => {\n  const { buttonClassName, buttonLabel, formLabel, header, labelClassName } =\n    props\n  const socialAuth = misago.get(\"SOCIAL_AUTH\")\n\n  if (socialAuth.length === 0) return null\n\n  return (\n    <div className=\"form-group form-social-auth\">\n      <FormHeader className={labelClassName} text={header} />\n      <div className=\"row\">\n        {socialAuth.map(({ id, name, button_text, button_color, url }) => {\n          const className = \"btn btn-block btn-default btn-social-\" + id\n          const style = button_color ? { color: button_color } : null\n          const finalButtonLabel =\n            button_text || interpolate(buttonLabel, { site: name }, true)\n\n          return (\n            <div className={buttonClassName || \"col-xs-12\"} key={id}>\n              <a className={className} style={style} href={url}>\n                {finalButtonLabel}\n              </a>\n            </div>\n          )\n        })}\n      </div>\n      <hr />\n      <FormHeader className={labelClassName} text={formLabel} />\n    </div>\n  )\n}\n\nconst FormHeader = ({ className, text }) => {\n  if (!text) return null\n  return <h5 className={className || \"\"}>{text}</h5>\n}\n\nexport default StartSocialAuth\n","import React from \"react\"\n\nconst ThreadFlags = ({ thread }) => (\n  <ul className=\"thread-flags\">\n    {thread.weight == 2 && (\n      <li\n        className=\"thread-flag-pinned-globally\"\n        title={gettext(\"Pinned globally\")}\n      >\n        <span className=\"material-icon\">bookmark</span>\n      </li>\n    )}\n    {thread.weight == 1 && (\n      <li\n        className=\"thread-flag-pinned-locally\"\n        title={gettext(\"Pinned in category\")}\n      >\n        <span className=\"material-icon\">bookmark_outline</span>\n      </li>\n    )}\n    {thread.best_answer && (\n      <li className=\"thread-flag-answered\" title={gettext(\"Answered\")}>\n        <span className=\"material-icon\">check_circle</span>\n      </li>\n    )}\n    {thread.has_poll && (\n      <li className=\"thread-flag-poll\" title={gettext(\"Poll\")}>\n        <span className=\"material-icon\">poll</span>\n      </li>\n    )}\n    {(thread.is_unapproved || thread.has_unapproved_posts) && (\n      <li\n        className=\"thread-flag-unapproved\"\n        title={\n          thread.is_unapproved\n            ? gettext(\"Awaiting approval\")\n            : gettext(\"Has unapproved posts\")\n        }\n      >\n        <span className=\"material-icon\">visibility</span>\n      </li>\n    )}\n    {thread.is_closed && (\n      <li className=\"thread-flag-closed\" title={gettext(\"Closed\")}>\n        <span className=\"material-icon\">lock</span>\n      </li>\n    )}\n    {thread.is_hidden && (\n      <li className=\"thread-flag-hidden\" title={gettext(\"Hidden\")}>\n        <span className=\"material-icon\">visibility_off</span>\n      </li>\n    )}\n  </ul>\n)\n\nexport default ThreadFlags\n","import React from \"react\"\n\nconst ThreadReplies = ({ thread }) => (\n  <span\n    className=\"threads-replies\"\n    title={interpolate(\n      ngettext(\"%(replies)s reply\", \"%(replies)s replies\", thread.replies),\n      { replies: thread.replies },\n      true\n    )}\n  >\n    <span className=\"material-icon\">chat_bubble_outline</span>\n    {thread.replies > 980\n      ? Math.round(thread.replies / 1000) + \"K\"\n      : thread.replies}\n  </span>\n)\n\nexport default ThreadReplies\n","import React from \"react\"\n\nconst Toolbar = ({ children }) => <nav className=\"toolbar\">{children}</nav>\n\nexport default Toolbar\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst ToolbarItem = ({ children, className, shrink }) => (\n  <div\n    className={classnames(\"toolbar-item\", className, {\n      \"toolbar-item-shrink\": shrink,\n    })}\n  >\n    {children}\n  </div>\n)\n\nexport default ToolbarItem\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst ToolbarSection = ({ auto, children, className }) => (\n  <div\n    className={classnames(\n      \"toolbar-section\",\n      { \"toolbar-section-auto\": auto },\n      className\n    )}\n  >\n    {children}\n  </div>\n)\n\nexport default ToolbarSection\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst ToolbarSpacer = ({ className }) => (\n  <div className={classnames(\"toolbar-spacer\", className)} />\n)\n\nexport default ToolbarSpacer\n","import React from \"react\"\nimport misago from \"misago\"\n\nexport default function (props) {\n  const size = props.size || 100\n  const size2x = props.size2x || size\n\n  return (\n    <img\n      alt=\"\"\n      className={props.className || \"user-avatar\"}\n      src={getSrc(props.user, size)}\n      srcSet={getSrc(props.user, size2x)}\n      width={size}\n      height={size}\n    />\n  )\n}\n\nexport function getSrc(user, size) {\n  if (user && user.id) {\n    // just avatar hash, size and user id\n    return resolveAvatarForSize(user.avatars, size).url\n  } else {\n    // just append avatar size to file to produce no-avatar placeholder\n    return misago.get(\"BLANK_AVATAR_URL\")\n  }\n}\n\nexport function resolveAvatarForSize(avatars, size) {\n  let avatar = avatars[0]\n  avatars.forEach((av) => {\n    if (av.size >= size) {\n      avatar = av\n    }\n  })\n  return avatar\n}\n","import React from \"react\"\nimport Loader from \"./loader\"\n\nexport default class Button extends React.Component {\n  render() {\n    let className = \"btn \" + this.props.className\n    let disabled = this.props.disabled\n\n    if (this.props.loading) {\n      className += \" btn-loading\"\n      disabled = true\n    }\n\n    return (\n      <button\n        className={className}\n        disabled={disabled}\n        onClick={this.props.onClick}\n        type={this.props.onClick ? \"button\" : \"submit\"}\n      >\n        {this.props.children}\n        {this.props.loading ? <Loader /> : null}\n      </button>\n    )\n  }\n}\n\nButton.defaultProps = {\n  className: \"btn-default\",\n\n  type: \"submit\",\n\n  loading: false,\n  disabled: false,\n\n  onClick: null,\n}\n","import React from \"react\"\n\nexport default function (props) {\n  return (\n    <select\n      className={props.className || \"form-control\"}\n      disabled={props.disabled || false}\n      id={props.id || null}\n      onChange={props.onChange}\n      value={props.value}\n    >\n      {props.choices.map((item) => {\n        return (\n          <option\n            disabled={item.disabled || false}\n            key={item.value}\n            value={item.value}\n          >\n            {\"- - \".repeat(item.level) + item.label}\n          </option>\n        )\n      })}\n    </select>\n  )\n}\n","import React from \"react\"\nimport PanelMessage from \"misago/components/panel-message\"\n\nexport default function ({ display }) {\n  if (!display) return null\n\n  return (\n    <PanelMessage\n      helpText={gettext(\"No profile details are editable at this time.\")}\n      message={gettext(\"This option is currently unavailable.\")}\n    />\n  )\n}\n","import React from \"react\"\nimport Loader from \"misago/components/loader\"\n\nexport default function ({ display }) {\n  if (!display) return null\n\n  return (\n    <div className=\"panel-body\">\n      <Loader />\n    </div>\n  )\n}\n","import React from \"react\"\nimport Select from \"misago/components/select\"\n\nexport default class extends React.Component {\n  onChange = (ev) => {\n    const { field, onChange } = this.props\n    onChange(field.fieldname, ev.target.value)\n  }\n\n  render() {\n    const { disabled, field, value } = this.props\n    const { input } = field\n\n    if (input.type === \"select\") {\n      return (\n        <Select\n          choices={input.choices}\n          disabled={disabled}\n          id={\"id_\" + field.fieldname}\n          onChange={this.onChange}\n          value={value}\n        />\n      )\n    }\n\n    if (input.type === \"textarea\") {\n      return (\n        <textarea\n          className=\"form-control\"\n          disabled={disabled}\n          id={\"id_\" + field.fieldname}\n          onChange={this.onChange}\n          rows=\"4\"\n          type=\"text\"\n          value={value}\n        />\n      )\n    }\n\n    if (input.type === \"text\") {\n      return (\n        <input\n          className=\"form-control\"\n          disabled={disabled}\n          id={\"id_\" + field.fieldname}\n          onChange={this.onChange}\n          type=\"text\"\n          value={value}\n        />\n      )\n    }\n\n    return null\n  }\n}\n","import React from \"react\"\nimport FieldInput from \"./field-input\"\nimport FormGroup from \"misago/components/form-group\"\n\nexport default function ({ disabled, errors, fields, name, onChange, value }) {\n  return (\n    <fieldset>\n      <legend>{name}</legend>\n      {fields.map((field) => {\n        return (\n          <FormGroup\n            for={\"id_\" + field.fieldname}\n            helpText={field.help_text}\n            key={field.fieldname}\n            label={field.label}\n            validation={errors[field.fieldname]}\n          >\n            <FieldInput\n              disabled={disabled}\n              field={field}\n              onChange={onChange}\n              value={value[field.fieldname]}\n            />\n          </FormGroup>\n        )\n      })}\n    </fieldset>\n  )\n}\n","import React from \"react\"\nimport Fieldset from \"./fieldset\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      errors: {},\n    }\n\n    const groups = props.groups.length\n    for (let i = 0; i < groups; i++) {\n      const group = props.groups[i]\n      const fields = group.fields.length\n      for (let f = 0; f < fields; f++) {\n        const fieldname = group.fields[f].fieldname\n        const initial = group.fields[f].initial\n        this.state[fieldname] = initial\n      }\n    }\n  }\n\n  send() {\n    const data = Object.assign({}, this.state, {\n      errors: null,\n      isLoading: null,\n    })\n\n    return ajax.post(this.props.api, data)\n  }\n\n  handleSuccess(data) {\n    this.props.onSuccess(data)\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      snackbar.error(gettext(\"Form contains errors.\"))\n      this.setState({ errors: rejection })\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  onChange = (name, value) => {\n    this.setState({\n      [name]: value,\n    })\n  }\n\n  render() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"panel-body\">\n          {this.props.groups.map((group, i) => {\n            return (\n              <Fieldset\n                disabled={this.state.isLoading}\n                errors={this.state.errors}\n                fields={group.fields}\n                name={group.name}\n                key={i}\n                onChange={this.onChange}\n                value={this.state}\n              />\n            )\n          })}\n        </div>\n        <div className=\"panel-footer text-right\">\n          <CancelButton\n            disabled={this.state.isLoading}\n            onCancel={this.props.onCancel}\n          />{\" \"}\n          <Button className=\"btn-primary\" loading={this.state.isLoading}>\n            {gettext(\"Save changes\")}\n          </Button>\n        </div>\n      </form>\n    )\n  }\n}\n\nexport function CancelButton({ onCancel, disabled }) {\n  if (!onCancel) return null\n\n  return (\n    <button\n      className=\"btn btn-default\"\n      disabled={disabled}\n      onClick={onCancel}\n      type=\"button\"\n    >\n      {gettext(\"Cancel\")}\n    </button>\n  )\n}\n","import React from \"react\"\nimport Blankslate from \"./blankslate\"\nimport Loader from \"./loader\"\nimport Form from \"./form\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      loading: true,\n      groups: null,\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(this.props.api).then(\n      (groups) => {\n        this.setState({\n          loading: false,\n\n          groups,\n        })\n      },\n      (rejection) => {\n        snackbar.apiError(rejection)\n        if (this.props.cancel) {\n          this.props.cancel()\n        }\n      }\n    )\n  }\n\n  render() {\n    const { groups, loading } = this.state\n\n    return (\n      <div className=\"panel panel-default panel-form\">\n        <div className=\"panel-heading\">\n          <h3 className=\"panel-title\">{gettext(\"Edit details\")}</h3>\n        </div>\n        <Loader display={loading} />\n        <Blankslate display={!loading && !groups.length} />\n        <FormDisplay\n          api={this.props.api}\n          display={!loading && groups.length}\n          groups={groups}\n          onCancel={this.props.onCancel}\n          onSuccess={this.props.onSuccess}\n        />\n      </div>\n    )\n  }\n}\n\nexport function FormDisplay({ api, display, groups, onCancel, onSuccess }) {\n  if (!display) return null\n\n  return (\n    <Form api={api} groups={groups} onCancel={onCancel} onSuccess={onSuccess} />\n  )\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  isValidated() {\n    return typeof this.props.validation !== \"undefined\"\n  }\n\n  getClassName() {\n    let className = \"form-group\"\n    if (this.isValidated()) {\n      className += \" has-feedback\"\n      if (this.props.validation === null) {\n        className += \" has-success\"\n      } else {\n        className += \" has-error\"\n      }\n    }\n    return className\n  }\n\n  getFeedback() {\n    if (this.props.validation) {\n      return (\n        <div className=\"help-block errors\">\n          {this.props.validation.map((error, i) => {\n            return <p key={this.props.for + \"FeedbackItem\" + i}>{error}</p>\n          })}\n        </div>\n      )\n    } else {\n      return null\n    }\n  }\n\n  getFeedbackDescription() {\n    if (this.isValidated()) {\n      return (\n        <span id={this.props.for + \"_status\"} className=\"sr-only\">\n          {this.props.validation ? gettext(\"(error)\") : gettext(\"(success)\")}\n        </span>\n      )\n    } else {\n      return null\n    }\n  }\n\n  getHelpText() {\n    if (this.props.helpText) {\n      return <p className=\"help-block\">{this.props.helpText}</p>\n    } else {\n      return null\n    }\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()}>\n        <label\n          className={\"control-label \" + (this.props.labelClass || \"\")}\n          htmlFor={this.props.for || \"\"}\n        >\n          {this.props.label + \":\"}\n        </label>\n        <div className={this.props.controlClass || \"\"}>\n          {this.props.children}\n          {this.getFeedbackDescription()}\n          {this.getFeedback()}\n          {this.getHelpText()}\n          {this.props.extra || null}\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport { required } from \"misago/utils/validators\"\nimport snackbar from \"misago/services/snackbar\"\n\nlet validateRequired = required()\n\nexport default class extends React.Component {\n  validate() {\n    let errors = {}\n    if (!this.state.validators) {\n      return errors\n    }\n\n    let validators = {\n      required: this.state.validators.required || this.state.validators,\n      optional: this.state.validators.optional || {},\n    }\n\n    let validatedFields = []\n\n    // add required fields to validation\n    for (let name in validators.required) {\n      if (\n        validators.required.hasOwnProperty(name) &&\n        validators.required[name]\n      ) {\n        validatedFields.push(name)\n      }\n    }\n\n    // add optional fields to validation\n    for (let name in validators.optional) {\n      if (\n        validators.optional.hasOwnProperty(name) &&\n        validators.optional[name]\n      ) {\n        validatedFields.push(name)\n      }\n    }\n\n    // validate fields values\n    for (let i in validatedFields) {\n      let name = validatedFields[i]\n      let fieldErrors = this.validateField(name, this.state[name])\n\n      if (fieldErrors === null) {\n        errors[name] = null\n      } else if (fieldErrors) {\n        errors[name] = fieldErrors\n      }\n    }\n\n    return errors\n  }\n\n  isValid() {\n    let errors = this.validate()\n    for (let field in errors) {\n      if (errors.hasOwnProperty(field)) {\n        if (errors[field] !== null) {\n          return false\n        }\n      }\n    }\n\n    return true\n  }\n\n  validateField(name, value) {\n    let errors = []\n    if (!this.state.validators) {\n      return errors\n    }\n\n    let validators = {\n      required: (this.state.validators.required || this.state.validators)[name],\n      optional: (this.state.validators.optional || {})[name],\n    }\n\n    let requiredError = validateRequired(value) || false\n\n    if (validators.required) {\n      if (requiredError) {\n        errors = [requiredError]\n      } else {\n        for (let i in validators.required) {\n          let validationError = validators.required[i](value)\n          if (validationError) {\n            errors.push(validationError)\n          }\n        }\n      }\n\n      return errors.length ? errors : null\n    } else if (requiredError === false && validators.optional) {\n      for (let i in validators.optional) {\n        let validationError = validators.optional[i](value)\n        if (validationError) {\n          errors.push(validationError)\n        }\n      }\n\n      return errors.length ? errors : null\n    }\n\n    return false // false === field wasn't validated\n  }\n\n  bindInput = (name) => {\n    return (event) => {\n      this.changeValue(name, event.target.value)\n    }\n  }\n\n  changeValue = (name, value) => {\n    let newState = {\n      [name]: value,\n    }\n\n    const formErrors = this.state.errors || {}\n    formErrors[name] = this.validateField(name, newState[name])\n    newState.errors = formErrors\n\n    this.setState(newState)\n  }\n\n  clean() {\n    return true\n  }\n\n  send() {\n    return null\n  }\n\n  handleSuccess(success) {\n    return\n  }\n\n  handleError(rejection) {\n    snackbar.apiError(rejection)\n  }\n\n  handleSubmit = (event) => {\n    // we don't reload page on submissions\n    if (event) {\n      event.preventDefault()\n    }\n\n    if (this.state.isLoading) {\n      return\n    }\n\n    if (this.clean()) {\n      this.setState({ isLoading: true })\n      let promise = this.send()\n\n      if (promise) {\n        promise.then(\n          (success) => {\n            this.setState({ isLoading: false })\n            this.handleSuccess(success)\n          },\n          (rejection) => {\n            this.setState({ isLoading: false })\n            this.handleError(rejection)\n          }\n        )\n      } else {\n        this.setState({ isLoading: false })\n      }\n    }\n  }\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  isActive() {\n    if (this.props.isControlled) {\n      return this.props.isActive\n    } else {\n      if (this.props.path) {\n        return document.location.pathname.indexOf(this.props.path) === 0\n      } else {\n        return false\n      }\n    }\n  }\n\n  getClassName() {\n    if (this.isActive()) {\n      return (\n        (this.props.className || \"\") +\n        \" \" +\n        (this.props.activeClassName || \"active\")\n      )\n    } else {\n      return this.props.className || \"\"\n    }\n  }\n\n  render() {\n    return <li className={this.getClassName()}>{this.props.children}</li>\n  }\n}\n","import React from \"react\"\n\nexport default function (props) {\n  return (\n    <div className={props.className || \"loader\"}>\n      <div className=\"loader-spinning-wheel\" />\n    </div>\n  )\n}\n","import React from \"react\"\nimport Button from \"./button\"\nimport Form from \"./form\"\nimport FormGroup from \"./form-group\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      bestAnswer: \"0\",\n      poll: \"0\",\n    }\n  }\n\n  clean() {\n    if (this.props.polls && this.state.poll === \"0\") {\n      const confirmation = window.confirm(\n        gettext(\"Are you sure you want to delete all polls?\")\n      )\n      return confirmation\n    }\n\n    return true\n  }\n\n  send() {\n    const data = Object.assign({}, this.props.data, {\n      best_answer: this.state.bestAnswer,\n      poll: this.state.poll,\n    })\n\n    return ajax.post(this.props.api, data)\n  }\n\n  handleSuccess = (success) => {\n    this.props.onSuccess(success)\n    modal.hide()\n  }\n\n  handleError = (rejection) => {\n    this.props.onError(rejection)\n  }\n\n  onBestAnswerChange = (event) => {\n    this.changeValue(\"bestAnswer\", event.target.value)\n  }\n\n  onPollChange = (event) => {\n    this.changeValue(\"poll\", event.target.value)\n  }\n\n  render() {\n    return (\n      <div className=\"modal-dialog\" role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              aria-label={gettext(\"Close\")}\n              className=\"close\"\n              data-dismiss=\"modal\"\n              type=\"button\"\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Merge threads\")}</h4>\n          </div>\n          <form onSubmit={this.handleSubmit}>\n            <div className=\"modal-body\">\n              <BestAnswerSelect\n                choices={this.props.bestAnswers}\n                onChange={this.onBestAnswerChange}\n                value={this.state.bestAnswer}\n              />\n              <PollSelect\n                choices={this.props.polls}\n                onChange={this.onPollChange}\n                value={this.state.poll}\n              />\n            </div>\n            <div className=\"modal-footer\">\n              <button\n                className=\"btn btn-default\"\n                data-dismiss=\"modal\"\n                disabled={this.state.isLoading}\n                type=\"button\"\n              >\n                {gettext(\"Cancel\")}\n              </button>\n              <Button className=\"btn-primary\" loading={this.state.isLoading}>\n                {gettext(\"Merge threads\")}\n              </Button>\n            </div>\n          </form>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport function BestAnswerSelect({ choices, onChange, value }) {\n  if (!choices) return null\n\n  return (\n    <FormGroup\n      label={gettext(\"Best answer\")}\n      helpText={gettext(\n        \"Please select the best answer for your newly merged thread. No posts will be deleted during the merge.\"\n      )}\n      for=\"id_best_answer\"\n    >\n      <select\n        className=\"form-control\"\n        id=\"id_best_answer\"\n        onChange={onChange}\n        value={value}\n      >\n        {choices.map((choice) => {\n          return (\n            <option value={choice[0]} key={choice[0]}>\n              {choice[1]}\n            </option>\n          )\n        })}\n      </select>\n    </FormGroup>\n  )\n}\n\nexport function PollSelect({ choices, onChange, value }) {\n  if (!choices) return null\n\n  return (\n    <FormGroup\n      label={gettext(\"Poll\")}\n      helpText={gettext(\n        \"Please select the poll for your newly merged thread. Rejected polls will be permanently deleted and cannot be recovered.\"\n      )}\n      for=\"id_poll\"\n    >\n      <select\n        className=\"form-control\"\n        id=\"id_poll\"\n        onChange={onChange}\n        value={value}\n      >\n        {choices.map((choice) => {\n          return (\n            <option value={choice[0]} key={choice[0]}>\n              {choice[1]}\n            </option>\n          )\n        })}\n      </select>\n    </FormGroup>\n  )\n}\n","const ytRegExp = new RegExp(\n  \"^.*(?:(?:youtu.be/|v/|vi/|u/w/|embed/)|(?:(?:watch)??v(?:i)?=|&v(?:i)?=))([^#&?]*).*\"\n)\n\nexport class OneBox {\n  constructor() {\n    this._youtube = {}\n  }\n\n  render = (domnode) => {\n    if (!domnode) return\n    this.highlightCode(domnode)\n    this.embedYoutubePlayers(domnode)\n  }\n\n  highlightCode(domnode) {\n    const codeblocks = domnode.querySelectorAll(\"pre>code\")\n    for (let i = 0; i < codeblocks.length; i++) {\n      const code = codeblocks[i]\n      hljs.highlightBlock(code)\n    }\n  }\n\n  embedYoutubePlayers(domnode) {\n    const anchors = domnode.querySelectorAll(\"p>a\")\n    for (let i = 0; i < anchors.length; i++) {\n      const a = anchors[i]\n      const p = a.parentNode\n      const onlyChild = p.childNodes.length === 1\n\n      if (!this._youtube[a.href]) {\n        this._youtube[a.href] = parseYoutubeUrl(a.href)\n      }\n\n      const youtubeMovie = this._youtube[a.href]\n      if (onlyChild && !!youtubeMovie && youtubeMovie.data !== false) {\n        this.swapYoutubePlayer(a, youtubeMovie)\n      }\n    }\n  }\n\n  swapYoutubePlayer(element, youtube) {\n    let url = \"https://www.youtube.com/embed/\"\n    url += youtube.video\n    url += \"?rel=0\"\n    if (youtube.start) {\n      url += \"&start=\" + youtube.start\n    }\n\n    const player = $(\n      '<iframe class=\"embed-responsive-item\" src=\"' +\n        url +\n        '\" allowfullscreen></iframe>'\n    )\n    $(element).replaceWith(player)\n    player.wrap('<div class=\"embed-responsive embed-responsive-16by9\"></div>')\n  }\n}\n\nexport default new OneBox()\n\nexport function parseYoutubeUrl(url) {\n  const cleanedUrl = cleanUrl(url)\n  const video = getVideoIdFromUrl(cleanedUrl)\n\n  if (!video) return null\n\n  let start = 0\n  if (cleanedUrl.indexOf(\"?\") > 0) {\n    const query = cleanedUrl.substr(cleanedUrl.indexOf(\"?\") + 1)\n    const timebit = query.split(\"&\").filter((i) => {\n      return i.substr(0, 2) === \"t=\"\n    })[0]\n\n    if (timebit) {\n      const bits = timebit.substr(2).split(\"m\")\n      if (bits[0].substr(-1) === \"s\") {\n        start += parseInt(bits[0].substr(0, bits[0].length - 1))\n      } else {\n        start += parseInt(bits[0]) * 60\n        if (!!bits[1] && bits[1].substr(-1) === \"s\") {\n          start += parseInt(bits[1].substr(0, bits[1].length - 1))\n        }\n      }\n    }\n  }\n\n  return {\n    start,\n    video,\n  }\n}\n\nexport function cleanUrl(url) {\n  let clean = url\n\n  if (url.substr(0, 8) === \"https://\") {\n    clean = clean.substr(8)\n  } else if (url.substr(0, 7) === \"http://\") {\n    clean = clean.substr(7)\n  }\n\n  if (clean.substr(0, 4) === \"www.\") {\n    clean = clean.substr(4)\n  }\n\n  return clean\n}\n\nexport function getVideoIdFromUrl(url) {\n  if (url.indexOf(\"youtu\") === -1) return null\n\n  const video = url.match(ytRegExp)\n  if (video) {\n    return video[1]\n  }\n  return null\n}\n","import React from \"react\"\nimport onebox from \"misago/services/one-box\"\n\nexport default class extends React.Component {\n  componentDidMount() {\n    onebox.render(this.documentNode)\n    $(this.documentNode).find(\".spoiler-reveal\").click(revealSpoiler)\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    onebox.render(this.documentNode)\n    $(this.documentNode).find(\".spoiler-reveal\").click(revealSpoiler)\n  }\n\n  shouldComponentUpdate(nextProps, nextState) {\n    return nextProps.markup !== this.props.markup\n  }\n\n  render() {\n    return (\n      <article\n        className=\"misago-markup\"\n        dangerouslySetInnerHTML={{ __html: this.props.markup }}\n        ref={(node) => {\n          this.documentNode = node\n        }}\n      />\n    )\n  }\n}\n\nfunction revealSpoiler(event) {\n  var btn = event.target\n  $(btn).parent().parent().addClass(\"revealed\")\n}\n","import React from \"react\"\nimport Loader from \"misago/components/loader\"\n\nexport default class extends React.Component {\n  render() {\n    return (\n      <div className=\"modal-body modal-loader\">\n        <Loader />\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport PanelMessage from \"misago/components/panel-message\"\n\nexport default class extends PanelMessage {\n  getHelpText() {\n    if (this.props.helpText) {\n      return <p className=\"help-block\">{this.props.helpText}</p>\n    } else {\n      return null\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"modal-body\">\n        <div className=\"message-icon\">\n          <span className=\"material-icon\">\n            {this.props.icon || \"info_outline\"}\n          </span>\n        </div>\n        <div className=\"message-body\">\n          <p className=\"lead\">{this.props.message}</p>\n          {this.getHelpText()}\n          <button\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            {gettext(\"Ok\")}\n          </button>\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Loader from \"misago/components/loader\"\n\nexport default class extends React.Component {\n  render() {\n    return (\n      <div className=\"panel-body panel-body-loading\">\n        <Loader className=\"loader loader-spaced\" />\n      </div>\n    )\n  }\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  getHelpText() {\n    if (this.props.helpText) {\n      return <p className=\"help-block\">{this.props.helpText}</p>\n    } else {\n      return null\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"panel-body panel-message-body\">\n        <div className=\"message-icon\">\n          <span className=\"material-icon\">\n            {this.props.icon || \"info_outline\"}\n          </span>\n        </div>\n        <div className=\"message-body\">\n          <p className=\"lead\">{this.props.message}</p>\n          {this.getHelpText()}\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\n\nexport default function (props) {\n  return (\n    <div className=\"poll-choices-bars\">\n      {props.poll.choices.map((choice) => {\n        return (\n          <PollChoice choice={choice} key={choice.hash} poll={props.poll} />\n        )\n      })}\n    </div>\n  )\n}\n\nexport function PollChoice(props) {\n  let proc = 0\n  if (props.choice.votes && props.poll.votes) {\n    proc = Math.ceil((props.choice.votes * 100) / props.poll.votes)\n  }\n\n  return (\n    <dl className=\"dl-horizontal\">\n      <dt>{props.choice.label}</dt>\n      <dd>\n        <div className=\"progress\">\n          <div\n            className=\"progress-bar\"\n            role=\"progressbar\"\n            aria-valuenow={proc}\n            aria-valuemin=\"0\"\n            aria-valuemax=\"100\"\n            style={{ width: proc + \"%\" }}\n          >\n            <span className=\"sr-only\">\n              {getVotesLabel(props.votes, props.proc)}\n            </span>\n          </div>\n        </div>\n        <ul className=\"list-unstyled list-inline poll-chart\">\n          <ChoiceVotes proc={proc} votes={props.choice.votes} />\n          <UserChoice selected={props.choice.selected} />\n        </ul>\n      </dd>\n    </dl>\n  )\n}\n\nexport function ChoiceVotes(props) {\n  return (\n    <li className=\"poll-chart-votes\">\n      {getVotesLabel(props.votes, props.proc)}\n    </li>\n  )\n}\n\nexport function getVotesLabel(votes, proc) {\n  const message = ngettext(\n    \"%(votes)s vote, %(proc)s% of total.\",\n    \"%(votes)s votes, %(proc)s% of total.\",\n    votes\n  )\n\n  return interpolate(\n    message,\n    {\n      votes: votes,\n      proc: proc,\n    },\n    true\n  )\n}\n\nexport function UserChoice(props) {\n  if (!props.selected) return null\n\n  return (\n    <li className=\"poll-chart-selected\">\n      <span className=\"material-icon\">check_box</span>\n      {gettext(\"Your choice.\")}\n    </li>\n  )\n}\n","import React from \"react\"\nimport moment from \"moment\"\nimport Message from \"misago/components/modal-message\"\nimport Loader from \"misago/components/modal-loader\"\nimport ajax from \"misago/services/ajax\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: true,\n      error: null,\n      data: [],\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(this.props.poll.api.votes).then(\n      (data) => {\n        const hydratedData = data.map((choice) => {\n          return Object.assign({}, choice, {\n            voters: choice.voters.map((voter) => {\n              return Object.assign({}, voter, {\n                voted_on: moment(voter.voted_on),\n              })\n            }),\n          })\n        })\n\n        this.setState({\n          isLoading: false,\n          data: hydratedData,\n        })\n      },\n      (rejection) => {\n        this.setState({\n          isLoading: false,\n          error: rejection.detail,\n        })\n      }\n    )\n  }\n\n  render() {\n    return (\n      <div\n        className={\n          \"modal-dialog\" + (this.state.error ? \" modal-message\" : \" modal-sm\")\n        }\n        role=\"document\"\n      >\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              type=\"button\"\n              className=\"close\"\n              data-dismiss=\"modal\"\n              aria-label={gettext(\"Close\")}\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Poll votes\")}</h4>\n          </div>\n\n          <ModalBody\n            data={this.state.data}\n            error={this.state.error}\n            isLoading={this.state.isLoading}\n          />\n        </div>\n      </div>\n    )\n  }\n}\n\nexport function ModalBody(props) {\n  if (props.isLoading) {\n    return <Loader />\n  } else if (props.error) {\n    return <Message icon=\"error_outline\" message={props.error} />\n  }\n\n  return <ChoicesList data={props.data} />\n}\n\nexport function ChoicesList(props) {\n  return (\n    <div className=\"modal-body modal-poll-votes\">\n      <ul className=\"list-unstyled votes-details\">\n        {props.data.map((choice) => {\n          return <ChoiceDetails key={choice.hash} {...choice} />\n        })}\n      </ul>\n    </div>\n  )\n}\n\nexport function ChoiceDetails(props) {\n  return (\n    <li>\n      <h4>{props.label}</h4>\n      <VotesCount votes={props.votes} />\n      <VotesList voters={props.voters} />\n      <hr />\n    </li>\n  )\n}\n\nexport function VotesCount(props) {\n  const message = ngettext(\n    \"%(votes)s user has voted for this choice.\",\n    \"%(votes)s users have voted for this choice.\",\n    props.votes\n  )\n\n  const label = interpolate(\n    message,\n    {\n      votes: props.votes,\n    },\n    true\n  )\n\n  return <p>{label}</p>\n}\n\nexport function VotesList(props) {\n  if (!props.voters.length) return null\n\n  return (\n    <ul className=\"list-unstyled\">\n      {props.voters.map((user) => {\n        return <Voter key={user.username} {...user} />\n      })}\n    </ul>\n  )\n}\n\nexport function Voter(props) {\n  if (props.url) {\n    return (\n      <li>\n        <a className=\"item-title\" href={props.url}>\n          {props.username}\n        </a>{\" \"}\n        <VoteDate voted_on={props.voted_on} />\n      </li>\n    )\n  }\n\n  return (\n    <li>\n      <strong>{props.username}</strong> <VoteDate voted_on={props.voted_on} />\n    </li>\n  )\n}\n\nexport function VoteDate(props) {\n  return (\n    <abbr className=\"text-muted\" title={props.voted_on.format(\"LLL\")}>\n      {props.voted_on.fromNow()}\n    </abbr>\n  )\n}\n","import React from \"react\"\nimport Modal from \"./modal\"\nimport * as poll from \"misago/reducers/poll\"\nimport * as thread from \"misago/reducers/thread\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport posting from \"misago/services/posting\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default function (props) {\n  const { isPollOver, poll, showVoting, thread } = props\n\n  if (!isVisible(isPollOver, poll.acl, poll)) return null\n\n  const controls = []\n\n  const canVote = poll.acl.can_vote\n  const canChangeVote = !poll.hasSelectedChoices || poll.allow_revotes\n\n  if (canVote && canChangeVote) controls.push(0)\n  if (poll.is_public || poll.acl.can_see_votes) controls.push(1)\n  if (poll.acl.can_edit) controls.push(2)\n  if (poll.acl.can_delete) controls.push(3)\n\n  return (\n    <div className=\"row poll-options\">\n      <ChangeVote\n        controls={controls}\n        isPollOver={isPollOver}\n        poll={poll}\n        showVoting={showVoting}\n      />\n      <SeeVotes controls={controls} poll={poll} />\n      <Edit controls={controls} poll={poll} thread={thread} />\n      <Delete controls={controls} poll={poll} />\n    </div>\n  )\n}\n\nexport function isVisible(isPollOver, acl, poll) {\n  return (\n    poll.is_public ||\n    acl.can_delete ||\n    acl.can_edit ||\n    acl.can_see_votes ||\n    (acl.can_vote &&\n      !isPollOver &&\n      (!poll.hasSelectedChoices || poll.allow_revotes))\n  )\n}\n\nexport function getClassName(controls, control) {\n  let className = \"col-xs-6\"\n\n  if (controls.length === 1) {\n    className = \"col-xs-12\"\n  }\n\n  if (controls.length === 3 && controls[0] === control) {\n    className = \"col-xs-12\"\n  }\n\n  return className + \" col-sm-3 col-md-2\"\n}\n\nexport function ChangeVote(props) {\n  const canVote = props.poll.acl.can_vote\n  const canChangeVote =\n    !props.poll.hasSelectedChoices || props.poll.allow_revotes\n\n  if (!(canVote && canChangeVote)) return null\n\n  return (\n    <div className={getClassName(props.controls, 0)}>\n      <button\n        className=\"btn btn-default btn-block btn-sm\"\n        disabled={props.poll.isBusy}\n        onClick={props.showVoting}\n        type=\"button\"\n      >\n        {gettext(\"Vote\")}\n      </button>\n    </div>\n  )\n}\n\nexport class SeeVotes extends React.Component {\n  onClick = () => {\n    modal.show(<Modal poll={this.props.poll} />)\n  }\n\n  render() {\n    const seeVotes =\n      this.props.poll.is_public || this.props.poll.acl.can_see_votes\n    if (!seeVotes) return null\n\n    return (\n      <div className={getClassName(this.props.controls, 1)}>\n        <button\n          className=\"btn btn-default btn-block btn-sm\"\n          disabled={this.props.poll.isBusy}\n          onClick={this.onClick}\n          type=\"button\"\n        >\n          {gettext(\"See votes\")}\n        </button>\n      </div>\n    )\n  }\n}\n\nexport class Edit extends React.Component {\n  onClick = () => {\n    posting.open({\n      submit: this.props.poll.api.index,\n\n      thread: this.props.thread,\n      poll: this.props.poll,\n\n      mode: \"POLL\",\n    })\n  }\n\n  render() {\n    if (!this.props.poll.acl.can_edit) return null\n\n    return (\n      <div className={getClassName(this.props.controls, 2)}>\n        <button\n          className=\"btn btn-default btn-block btn-sm\"\n          disabled={this.props.poll.isBusy}\n          onClick={this.onClick}\n          type=\"button\"\n        >\n          {gettext(\"Edit\")}\n        </button>\n      </div>\n    )\n  }\n}\n\nexport class Delete extends React.Component {\n  onClick = () => {\n    const deletePoll = window.confirm(\n      gettext(\n        \"Are you sure you want to delete this poll? This action is not reversible.\"\n      )\n    )\n    if (!deletePoll) return false\n\n    store.dispatch(poll.busy())\n\n    ajax\n      .delete(this.props.poll.api.index)\n      .then(this.handleSuccess, this.handleError)\n  }\n\n  handleSuccess = (newThreadAcl) => {\n    snackbar.success(\"Poll has been deleted\")\n    store.dispatch(poll.remove())\n    store.dispatch(thread.updateAcl(newThreadAcl))\n  }\n\n  handleError = (rejection) => {\n    snackbar.apiError(rejection)\n    store.dispatch(poll.release())\n  }\n\n  render() {\n    if (!this.props.poll.acl.can_delete) return null\n\n    return (\n      <div className={getClassName(this.props.controls, 3)}>\n        <button\n          className=\"btn btn-default btn-block btn-sm\"\n          disabled={this.props.poll.isBusy}\n          onClick={this.onClick}\n          type=\"button\"\n        >\n          {gettext(\"Delete\")}\n        </button>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nconst DATE_ABBR = '<abbr title=\"%(absolute)s\">%(relative)s</abbr>'\nconst USER_SPAN = '<span class=\"item-title\">%(user)s</span>'\nconst USER_URL = '<a href=\"%(url)s\" class=\"item-title\">%(user)s</a>'\n\nexport default function (props) {\n  return (\n    <ul className=\"list-unstyled list-inline poll-details\">\n      <PollVotes votes={props.poll.votes} />\n      <PollLength poll={props.poll} />\n      <PollIsPublic poll={props.poll} />\n      <PollCreation poll={props.poll} />\n    </ul>\n  )\n}\n\nexport function PollCreation(props) {\n  const message = interpolate(\n    escapeHtml(gettext(\"Posted by %(poster)s %(posted_on)s.\")),\n    {\n      poster: getPoster(props.poll),\n      posted_on: getPostedOn(props.poll),\n    },\n    true\n  )\n\n  return (\n    <li\n      className=\"poll-info-creation\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n\nexport function getPoster(poll) {\n  if (poll.url.poster) {\n    return interpolate(\n      USER_URL,\n      {\n        url: escapeHtml(poll.url.poster),\n        user: escapeHtml(poll.poster_name),\n      },\n      true\n    )\n  }\n\n  return interpolate(\n    USER_SPAN,\n    {\n      user: escapeHtml(poll.poster_name),\n    },\n    true\n  )\n}\n\nexport function getPostedOn(poll) {\n  return interpolate(\n    DATE_ABBR,\n    {\n      absolute: escapeHtml(poll.posted_on.format(\"LLL\")),\n      relative: escapeHtml(poll.posted_on.fromNow()),\n    },\n    true\n  )\n}\n\nexport function PollLength(props) {\n  if (!props.poll.length) {\n    return null\n  }\n\n  const message = interpolate(\n    escapeHtml(gettext(\"Voting ends %(ends_on)s.\")),\n    {\n      ends_on: getEndsOn(props.poll),\n    },\n    true\n  )\n\n  return (\n    <li\n      className=\"poll-info-ends-on\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n\nexport function getEndsOn(poll) {\n  return interpolate(\n    DATE_ABBR,\n    {\n      absolute: escapeHtml(poll.endsOn.format(\"LLL\")),\n      relative: escapeHtml(poll.endsOn.fromNow()),\n    },\n    true\n  )\n}\n\nexport function PollVotes(props) {\n  const message = ngettext(\"%(votes)s vote.\", \"%(votes)s votes.\", props.votes)\n  const label = interpolate(\n    message,\n    {\n      votes: props.votes,\n    },\n    true\n  )\n\n  return <li className=\"poll-info-votes\">{label}</li>\n}\n\nexport function PollIsPublic(props) {\n  if (!props.poll.is_public) {\n    return null\n  }\n\n  return <li className=\"poll-info-public\">{gettext(\"Votes are public.\")}</li>\n}\n","import React from \"react\"\nimport Chart from \"./chart\"\nimport Options from \"./options\"\nimport PollInfo from \"../info\"\n\nexport default function (props) {\n  return (\n    <div className=\"panel panel-default panel-poll\">\n      <div className=\"panel-body\">\n        <h2>{props.poll.question}</h2>\n        <PollInfo poll={props.poll} />\n        <Chart poll={props.poll} />\n        <Options\n          isPollOver={props.isPollOver}\n          poll={props.poll}\n          showVoting={props.showVoting}\n          thread={props.thread}\n        />\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nconst DATE_ABBR = '<abbr title=\"%(absolute)s\">%(relative)s</abbr>'\nconst USER_SPAN = '<span class=\"item-title\">%(user)s</span>'\nconst USER_URL = '<a href=\"%(url)s\" class=\"item-title\">%(user)s</a>'\n\nexport default function (props) {\n  return (\n    <ul className=\"list-unstyled list-inline poll-help\">\n      <PollChoicesLeft choicesLeft={props.choicesLeft} />\n      <PollAllowRevote poll={props.poll} />\n    </ul>\n  )\n}\n\nexport function PollChoicesLeft({ choicesLeft }) {\n  if (choicesLeft === 0) {\n    return (\n      <li className=\"poll-help-choices-left\">\n        {gettext(\"You can't select any more choices.\")}\n      </li>\n    )\n  }\n\n  const message = ngettext(\n    \"You can select %(choices)s more choice.\",\n    \"You can select %(choices)s more choices.\",\n    choicesLeft\n  )\n\n  const label = interpolate(\n    message,\n    {\n      choices: choicesLeft,\n    },\n    true\n  )\n\n  return <li className=\"poll-help-choices-left\">{label}</li>\n}\n\nexport function PollAllowRevote(props) {\n  if (props.poll.allow_revotes) {\n    return (\n      <li className=\"poll-help-allow-revotes\">\n        {gettext(\"You can change your vote later.\")}\n      </li>\n    )\n  }\n\n  return <li className=\"poll-help-no-revotes\">{gettext(\"Votes are final.\")}</li>\n}\n","import React from \"react\"\n\nexport default function (props) {\n  return (\n    <ul className=\"list-unstyled poll-select-choices\">\n      {props.choices.map((choice) => {\n        return (\n          <ChoiceSelect\n            choice={choice}\n            key={choice.hash}\n            toggleChoice={props.toggleChoice}\n          />\n        )\n      })}\n    </ul>\n  )\n}\n\nexport class ChoiceSelect extends React.Component {\n  onClick = () => {\n    this.props.toggleChoice(this.props.choice.hash)\n  }\n\n  render() {\n    return (\n      <li className=\"poll-select-choice\">\n        <button\n          className={this.props.choice.selected ? \"btn btn-selected\" : \"btn\"}\n          onClick={this.onClick}\n          type=\"button\"\n        >\n          <span className=\"material-icon\">\n            {this.props.choice.selected\n              ? \"check_box\"\n              : \"check_box_outline_blank\"}\n          </span>\n          <strong>{this.props.choice.label}</strong>\n        </button>\n      </li>\n    )\n  }\n}\n","export function getChoiceFromHash(choices, hash) {\n  for (const i in choices) {\n    const choice = choices[i]\n    if (choice.hash === hash) {\n      return choice\n    }\n  }\n\n  return null\n}\n\nexport function getChoicesLeft(poll, choices) {\n  let selection = []\n  for (const i in choices) {\n    const choice = choices[i]\n    if (choice.selected) {\n      selection.push(choice)\n    }\n  }\n\n  return poll.allowed_choices - selection.length\n}\n","import React from \"react\"\nimport ChoicesHelp from \"./help\"\nimport ChoicesSelect from \"./select\"\nimport { getChoicesLeft, getChoiceFromHash } from \"./utils\"\nimport PollInfo from \"../info\"\nimport { Delete, Edit, getClassName } from \"../results/options\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport * as poll from \"misago/reducers/poll\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      choices: props.poll.choices,\n      choicesLeft: getChoicesLeft(props.poll, props.poll.choices),\n    }\n  }\n\n  toggleChoice = (hash) => {\n    const choice = getChoiceFromHash(this.state.choices, hash)\n\n    let choices = null\n    if (!choice.selected) {\n      choices = this.selectChoice(choice, hash)\n    } else {\n      choices = this.deselectChoice(choice, hash)\n    }\n\n    this.setState({\n      choices,\n      choicesLeft: getChoicesLeft(this.props.poll, choices),\n    })\n  }\n\n  selectChoice = (choice, hash) => {\n    const choicesLeft = getChoicesLeft(this.props.poll, this.state.choices)\n\n    if (!choicesLeft) {\n      for (const i in this.state.choices.slice()) {\n        const item = this.state.choices[i]\n        if (item.selected && item.hash != hash) {\n          item.selected = false\n          break\n        }\n      }\n    }\n\n    return this.state.choices.map((choice) => {\n      return Object.assign({}, choice, {\n        selected: choice.hash == hash ? true : choice.selected,\n      })\n    })\n  }\n\n  deselectChoice = (choice, hash) => {\n    return this.state.choices.map((choice) => {\n      return Object.assign({}, choice, {\n        selected: choice.hash == hash ? false : choice.selected,\n      })\n    })\n  }\n\n  clean() {\n    if (this.state.choicesLeft === this.props.poll.allowed_choices) {\n      snackbar.error(gettext(\"You need to select at least one choice\"))\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    let data = []\n    for (const i in this.state.choices.slice()) {\n      const item = this.state.choices[i]\n      if (item.selected) {\n        data.push(item.hash)\n      }\n    }\n\n    return ajax.post(this.props.poll.api.votes, data)\n  }\n\n  handleSuccess(data) {\n    store.dispatch(poll.replace(data))\n    snackbar.success(gettext(\"Your vote has been saved.\"))\n\n    this.props.showResults()\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      snackbar.error(rejection.detail)\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    const controls = []\n\n    if (this.props.poll.acl.can_vote) controls.push(0)\n    if (this.props.poll.is_public || this.props.poll.acl.can_see_votes)\n      controls.push(1)\n    if (this.props.poll.acl.can_edit) controls.push(2)\n    if (this.props.poll.acl.can_delete) controls.push(3)\n\n    return (\n      <div className=\"panel panel-default panel-poll\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"panel-body\">\n            <h2>{this.props.poll.question}</h2>\n            <PollInfo poll={this.props.poll} />\n            <ChoicesSelect\n              choices={this.state.choices}\n              toggleChoice={this.toggleChoice}\n            />\n            <ChoicesHelp\n              choicesLeft={this.state.choicesLeft}\n              poll={this.props.poll}\n            />\n          </div>\n          <div className=\"panel-footer\">\n            <div className=\"row\">\n              <div className={getClassName(controls, 0)}>\n                <Button\n                  className=\"btn-primary btn-block btn-sm\"\n                  loading={this.state.isLoading}\n                >\n                  {gettext(\"Save your vote\")}\n                </Button>\n              </div>\n              <div className={getClassName(controls, 1)}>\n                <button\n                  className=\"btn btn-default btn-block btn-sm\"\n                  disabled={this.state.isLoading}\n                  onClick={this.props.showResults}\n                  type=\"button\"\n                >\n                  {gettext(\"See results\")}\n                </button>\n              </div>\n              <Edit\n                controls={controls}\n                poll={this.props.poll}\n                thread={this.props.thread}\n              />\n              <Delete controls={controls} poll={this.props.poll} />\n            </div>\n          </div>\n        </form>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport moment from \"moment\"\nimport Results from \"./results\"\nimport Voting from \"./voting\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    let showResults = true\n    if (props.user.id && !props.poll.hasSelectedChoices) {\n      showResults = false\n    }\n\n    this.state = {\n      showResults,\n    }\n  }\n\n  showResults = () => {\n    this.setState({\n      showResults: true,\n    })\n  }\n\n  showVoting = () => {\n    this.setState({\n      showResults: false,\n    })\n  }\n\n  render() {\n    if (!this.props.thread.poll) return null\n\n    const isPollOver = getIsPollOver(this.props.poll)\n\n    if (\n      !isPollOver &&\n      this.props.poll.acl.can_vote &&\n      !this.state.showResults\n    ) {\n      return <Voting showResults={this.showResults} {...this.props} />\n    } else {\n      return (\n        <Results\n          isPollOver={isPollOver}\n          showVoting={this.showVoting}\n          {...this.props}\n        />\n      )\n    }\n  }\n}\n\nexport function getIsPollOver(poll) {\n  if (poll.length) {\n    return moment().isAfter(poll.endsOn)\n  }\n  return false\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  onAdd = () => {\n    let choices = this.props.choices.slice()\n    choices.push({\n      hash: generateRandomHash(),\n      label: \"\",\n    })\n\n    this.props.setChoices(choices)\n  }\n\n  onChange = (hash, label) => {\n    const choices = this.props.choices.map((choice) => {\n      if (choice.hash === hash) {\n        choice.label = label\n      }\n\n      return choice\n    })\n    this.props.setChoices(choices)\n  }\n\n  onDelete = (hash) => {\n    const choices = this.props.choices.filter((choice) => {\n      return choice.hash !== hash\n    })\n    this.props.setChoices(choices)\n  }\n\n  render() {\n    return (\n      <div className=\"poll-choices-control\">\n        <ul className=\"list-group\">\n          {this.props.choices.map((choice) => {\n            return (\n              <PollChoice\n                canDelete={this.props.choices.length > 2}\n                choice={choice}\n                disabled={this.props.disabled}\n                key={choice.hash}\n                onChange={this.onChange}\n                onDelete={this.onDelete}\n              />\n            )\n          })}\n        </ul>\n        <button\n          className=\"btn btn-default btn-sm\"\n          disabled={this.props.disabled}\n          onClick={this.onAdd}\n          type=\"button\"\n        >\n          {gettext(\"Add choice\")}\n        </button>\n      </div>\n    )\n  }\n}\n\nexport class PollChoice extends React.Component {\n  onChange = (event) => {\n    this.props.onChange(this.props.choice.hash, event.target.value)\n  }\n\n  onDelete = () => {\n    const deleteItem = window.confirm(\n      gettext(\"Are you sure you want to delete this choice?\")\n    )\n    if (deleteItem) {\n      this.props.onDelete(this.props.choice.hash)\n    }\n  }\n\n  render() {\n    return (\n      <li className=\"list-group-item\">\n        <button\n          className=\"btn\"\n          disabled={!this.props.canDelete || this.props.disabled}\n          onClick={this.onDelete}\n          title={gettext(\"Delete this choice\")}\n          type=\"button\"\n        >\n          <span className=\"material-icon\">close</span>\n        </button>\n        <input\n          disabled={this.props.disabled}\n          maxLength=\"255\"\n          placeholder={gettext(\"choice label\")}\n          type=\"text\"\n          onChange={this.onChange}\n          value={this.props.choice.label}\n        />\n      </li>\n    )\n  }\n}\n\nexport function generateRandomHash() {\n  let randomHash = \"\"\n  while (randomHash.length != 12) {\n    randomHash = Math.random()\n      .toString(36)\n      .replace(/[^a-zA-Z0-9]+/g, \"\")\n      .substr(1, 12)\n  }\n  return randomHash\n}\n","import React from \"react\"\nimport ChoicesControl from \"./choices-control\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport YesNoSwitch from \"misago/components/yes-no-switch\"\nimport * as poll from \"misago/reducers/poll\"\nimport ajax from \"misago/services/ajax\"\nimport posting from \"misago/services/posting\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    const poll = props.poll || {\n      question: \"\",\n      choices: [\n        {\n          hash: \"choice-10000\",\n          label: \"\",\n        },\n        {\n          hash: \"choice-20000\",\n          label: \"\",\n        },\n      ],\n      length: 0,\n      allowed_choices: 1,\n      allow_revotes: 0,\n      is_public: 0,\n    }\n\n    this.state = {\n      isLoading: false,\n      isEdit: !!poll.question,\n\n      question: poll.question,\n      choices: poll.choices,\n      length: poll.length,\n      allowed_choices: poll.allowed_choices,\n      allow_revotes: poll.allow_revotes,\n      is_public: poll.is_public,\n\n      validators: {\n        question: [],\n        choices: [],\n        length: [],\n        allowed_choices: [],\n      },\n\n      errors: {},\n    }\n  }\n\n  setChoices = (choices) => {\n    const errors = Object.assign({}, errors, { choices: null })\n\n    this.setState({\n      choices,\n      errors,\n    })\n  }\n\n  onCancel = () => {\n    const cancel = window.confirm(\n      gettext(\"Are you sure you want to discard poll?\")\n    )\n    if (cancel) {\n      posting.close()\n    }\n  }\n\n  send() {\n    const data = {\n      question: this.state.question,\n      choices: this.state.choices,\n      length: this.state.length,\n      allowed_choices: this.state.allowed_choices,\n      allow_revotes: this.state.allow_revotes,\n      is_public: this.state.is_public,\n    }\n\n    if (this.state.isEdit) {\n      return ajax.put(this.props.poll.api.index, data)\n    } else {\n      return ajax.post(this.props.thread.api.poll, data)\n    }\n  }\n\n  handleSuccess(data) {\n    store.dispatch(poll.replace(data))\n\n    if (this.state.isEdit) {\n      snackbar.success(gettext(\"Poll has been edited.\"))\n    } else {\n      snackbar.success(gettext(\"Poll has been posted.\"))\n    }\n\n    posting.close()\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      if (rejection.non_field_errors) {\n        rejection.allowed_choices = rejection.non_field_errors\n      }\n\n      this.setState({\n        errors: Object.assign({}, rejection),\n      })\n\n      snackbar.error(gettext(\"Form contains errors.\"))\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"poll-form\">\n        <div className=\"container\">\n          <form onSubmit={this.handleSubmit}>\n            <div className=\"panel panel-default panel-form\">\n              <div className=\"panel-body\">\n                <fieldset>\n                  <legend>{gettext(\"Question and choices\")}</legend>\n\n                  <FormGroup\n                    label={gettext(\"Poll question\")}\n                    for=\"id_questions\"\n                    validation={this.state.errors.question}\n                  >\n                    <input\n                      className=\"form-control\"\n                      disabled={this.state.isLoading}\n                      id=\"id_questions\"\n                      onChange={this.bindInput(\"question\")}\n                      type=\"text\"\n                      maxLength=\"255\"\n                      value={this.state.question}\n                    />\n                  </FormGroup>\n\n                  <FormGroup\n                    label={gettext(\"Available choices\")}\n                    validation={this.state.errors.choices}\n                  >\n                    <ChoicesControl\n                      choices={this.state.choices}\n                      disabled={this.state.isLoading}\n                      setChoices={this.setChoices}\n                    />\n                  </FormGroup>\n                </fieldset>\n\n                <fieldset>\n                  <legend>{gettext(\"Voting\")}</legend>\n\n                  <div className=\"row\">\n                    <div className=\"col-xs-12 col-sm-6\">\n                      <FormGroup\n                        label={gettext(\"Poll length\")}\n                        helpText={gettext(\n                          \"Enter number of days for which voting in this poll should be possible or zero to run this poll indefinitely.\"\n                        )}\n                        for=\"id_length\"\n                        validation={this.state.errors.length}\n                      >\n                        <input\n                          className=\"form-control\"\n                          disabled={this.state.isLoading}\n                          id=\"id_length\"\n                          onChange={this.bindInput(\"length\")}\n                          type=\"text\"\n                          value={this.state.length}\n                        />\n                      </FormGroup>\n                    </div>\n                    <div className=\"col-xs-12 col-sm-6\">\n                      <FormGroup\n                        label={gettext(\"Allowed choices\")}\n                        for=\"id_allowed_choices\"\n                        validation={this.state.errors.allowed_choices}\n                      >\n                        <input\n                          className=\"form-control\"\n                          disabled={this.state.isLoading}\n                          id=\"id_allowed_choices\"\n                          onChange={this.bindInput(\"allowed_choices\")}\n                          type=\"text\"\n                          maxLength=\"255\"\n                          value={this.state.allowed_choices}\n                        />\n                      </FormGroup>\n                    </div>\n                  </div>\n\n                  <div className=\"row\">\n                    <PollPublicSwitch\n                      bindInput={this.bindInput}\n                      disabled={this.state.isLoading}\n                      isEdit={this.state.isEdit}\n                      value={this.state.is_public}\n                    />\n                    <div className=\"col-xs-12 col-sm-6\">\n                      <FormGroup\n                        label={gettext(\"Allow vote changes\")}\n                        for=\"id_allow_revotes\"\n                      >\n                        <YesNoSwitch\n                          id=\"id_allow_revotes\"\n                          disabled={this.state.isLoading}\n                          iconOn=\"check\"\n                          iconOff=\"close\"\n                          labelOn={gettext(\n                            \"Allow participants to change their vote\"\n                          )}\n                          labelOff={gettext(\n                            \"Don't allow participants to change their vote\"\n                          )}\n                          onChange={this.bindInput(\"allow_revotes\")}\n                          value={this.state.allow_revotes}\n                        />\n                      </FormGroup>\n                    </div>\n                  </div>\n                </fieldset>\n              </div>\n              <div className=\"panel-footer text-right\">\n                <button\n                  className=\"btn btn-default\"\n                  disabled={this.state.isLoading}\n                  onClick={this.onCancel}\n                  type=\"button\"\n                >\n                  {gettext(\"Cancel\")}\n                </button>{\" \"}\n                <Button className=\"btn-primary\" loading={this.state.isLoading}>\n                  {this.state.isEdit\n                    ? gettext(\"Save changes\")\n                    : gettext(\"Post poll\")}\n                </Button>\n              </div>\n            </div>\n          </form>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport function PollPublicSwitch(props) {\n  if (props.isEdit) return null\n\n  return (\n    <div className=\"col-xs-12 col-sm-6\">\n      <FormGroup\n        label={gettext(\"Make voting public\")}\n        helpText={gettext(\n          \"Making voting public will allow everyone to access detailed list of votes, showing which users voted for which choices and at which times. This option can't be changed after poll's creation. Moderators may see voting details for all polls.\"\n        )}\n        for=\"id_is_public\"\n      >\n        <YesNoSwitch\n          id=\"id_is_public\"\n          disabled={props.disabled}\n          iconOn=\"visibility\"\n          iconOff=\"visibility_off\"\n          labelOn={gettext(\"Votes are public\")}\n          labelOff={gettext(\"Votes are hidden\")}\n          onChange={props.bindInput(\"is_public\")}\n          value={props.value}\n        />\n      </FormGroup>\n    </div>\n  )\n}\n","import React from \"react\"\nimport MisagoMarkup from \"misago/components/misago-markup\"\n\nexport default function (props) {\n  if (props.post.content) {\n    return <Default {...props} />\n  } else {\n    return <Invalid {...props} />\n  }\n}\n\nexport function Default(props) {\n  return (\n    <div className=\"post-body\">\n      <MisagoMarkup markup={props.post.content} />\n    </div>\n  )\n}\n\nexport function Invalid(props) {\n  return (\n    <div className=\"post-body post-body-invalid\">\n      <p className=\"lead\">\n        {gettext(\"This post's contents cannot be displayed.\")}\n      </p>\n      <p className=\"text-muted\">\n        {gettext(\"This error is caused by invalid post content manipulation.\")}\n      </p>\n    </div>\n  )\n}\n","import React from \"react\"\n\nexport default function ({ post }) {\n  const { category, thread } = post\n\n  const tooltip = interpolate(\n    gettext(\"posted %(posted_on)s\"),\n    {\n      posted_on: post.posted_on.format(\"LL, LT\"),\n    },\n    true\n  )\n\n  return (\n    <div className=\"post-heading\">\n      <a className=\"btn btn-link item-title\" href={thread.url}>\n        {thread.title}\n      </a>\n      <a className=\"btn btn-link post-category\" href={category.url.index}>\n        {category.name}\n      </a>\n      <a\n        href={post.url.index}\n        className=\"btn btn-link posted-on\"\n        title={tooltip}\n      >\n        {post.posted_on.fromNow()}\n      </a>\n    </div>\n  )\n}\n","import React from \"react\"\n\nexport default function ({ post }) {\n  return (\n    <a className=\"btn btn-default btn-icon pull-right\" href={post.url.index}>\n      <span className=\"btn-text-left hidden-xs\">{gettext(\"See post\")}</span>\n      <span className=\"material-icon\">chevron_right</span>\n    </a>\n  )\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport GoToButton from \"./button\"\n\nexport default function ({ post }) {\n  return (\n    <div className=\"post-side post-side-anonymous\">\n      <GoToButton post={post} />\n      <div className=\"media\">\n        <div className=\"media-left\">\n          <span>\n            <Avatar className=\"poster-avatar\" size={50} />\n          </span>\n        </div>\n        <div className=\"media-body\">\n          <div className=\"media-heading\">\n            <span className=\"item-title\">{post.poster_name}</span>\n          </div>\n          <span className=\"user-title user-title-anonymous\">\n            {gettext(\"Removed user\")}\n          </span>\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\n\nexport default function ({ rank, title }) {\n  let userTitle = title || rank.title || rank.name\n\n  let className = \"user-title\"\n  if (rank.css_class) {\n    className += \" user-title-\" + rank.css_class\n  }\n\n  if (rank.is_tab) {\n    return (\n      <a className={className} href={rank.url}>\n        {userTitle}\n      </a>\n    )\n  }\n\n  return <span className={className}>{userTitle}</span>\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport GoToButton from \"./button\"\nimport UserTitle from \"./user-title\"\n\nexport default function ({ post, poster }) {\n  return (\n    <div className=\"post-side post-side-registered\">\n      <GoToButton post={post} />\n      <div className=\"media\">\n        <div className=\"media-left\">\n          <a href={poster.url}>\n            <Avatar className=\"poster-avatar\" size={50} user={poster} />\n          </a>\n        </div>\n        <div className=\"media-body\">\n          <div className=\"media-heading\">\n            <a className=\"item-title\" href={poster.url}>\n              {poster.username}\n            </a>\n          </div>\n          <UserTitle title={poster.title} rank={poster.rank} />\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Anonymous from \"./anonymous\"\nimport Registered from \"./registered\"\n\nexport default function ({ post, poster }) {\n  if (poster && poster.id) {\n    return <Registered post={post} poster={poster} />\n  }\n\n  return <Anonymous post={post} />\n}\n","import React from \"react\"\nimport Body from \"./body\"\nimport Header from \"./header\"\nimport PostSide from \"./post-side\"\n\nexport default function ({ post, poster }) {\n  const user = poster || post.poster\n\n  let className = \"post\"\n  if (user && user.rank.css_class) {\n    className += \" post-\" + user.rank.css_class\n  }\n\n  return (\n    <li className={className} id={\"post-\" + post.id}>\n      <div className=\"panel panel-default panel-post\">\n        <div className=\"panel-body\">\n          <div className=\"panel-content\">\n            <PostSide post={post} poster={user} />\n            <Header post={post} />\n            <Body post={post} />\n          </div>\n        </div>\n      </div>\n    </li>\n  )\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport * as random from \"misago/utils/random\"\n\nexport default function () {\n  return (\n    <ul className=\"posts-list post-feed ui-preview\">\n      <li className=\"post\">\n        <div className=\"panel panel-default panel-post\">\n          <div className=\"panel-body\">\n            <div className=\"post-side post-side-anonymous\">\n              <div className=\"media\">\n                <div className=\"media-left\">\n                  <span>\n                    <Avatar className=\"poster-avatar\" size={50} />\n                  </span>\n                </div>\n                <div className=\"media-body\">\n                  <div className=\"media-heading\">\n                    <span className=\"item-title\">\n                      <span\n                        className=\"ui-preview-text\"\n                        style={{ width: random.int(30, 200) + \"px\" }}\n                      >\n                        &nbsp;\n                      </span>\n                    </span>\n                  </div>\n                  <span className=\"user-title user-title-anonymous\">\n                    <span\n                      className=\"ui-preview-text\"\n                      style={{ width: random.int(30, 200) + \"px\" }}\n                    >\n                      &nbsp;\n                    </span>\n                  </span>\n                </div>\n              </div>\n            </div>\n            <div className=\"post-heading\">\n              <span\n                className=\"ui-preview-text\"\n                style={{ width: random.int(30, 200) + \"px\" }}\n              >\n                &nbsp;\n              </span>\n            </div>\n            <div className=\"post-body\">\n              <article className=\"misago-markup\">\n                <p>\n                  <span\n                    className=\"ui-preview-text\"\n                    style={{ width: random.int(30, 200) + \"px\" }}\n                  >\n                    &nbsp;\n                  </span>\n                  &nbsp;\n                  <span\n                    className=\"ui-preview-text\"\n                    style={{ width: random.int(30, 200) + \"px\" }}\n                  >\n                    &nbsp;\n                  </span>\n                  &nbsp;\n                  <span\n                    className=\"ui-preview-text\"\n                    style={{ width: random.int(30, 200) + \"px\" }}\n                  >\n                    &nbsp;\n                  </span>\n                </p>\n              </article>\n            </div>\n          </div>\n        </div>\n      </li>\n    </ul>\n  )\n}\n","import React from \"react\"\nimport Post from \"./post\"\nimport Preview from \"./preview\"\n\nexport default function ({ isReady, posts, poster }) {\n  if (!isReady) {\n    return <Preview />\n  }\n\n  return (\n    <ul className=\"posts-list post-feed ui-ready\">\n      {posts.map((post) => {\n        return <Post key={post.id} post={post} poster={poster} />\n      })}\n    </ul>\n  )\n}\n","import { maxLength, minLength } from \"misago/utils/validators\"\nimport misago from \"misago\"\n\nexport function getTitleValidators() {\n  return [getTitleLengthMin(), getTitleLengthMax()]\n}\n\nexport function getPostValidators() {\n  if (misago.get(\"SETTINGS\").post_length_max) {\n    return [validatePostLengthMin(), validatePostLengthMax()]\n  } else {\n    return [validatePostLengthMin()]\n  }\n}\n\nexport function getTitleLengthMin() {\n  return minLength(\n    misago.get(\"SETTINGS\").thread_title_length_min,\n    (limitValue, length) => {\n      const message = ngettext(\n        \"Thread title should be at least %(limit_value)s character long (it has %(show_value)s).\",\n        \"Thread title should be at least %(limit_value)s characters long (it has %(show_value)s).\",\n        limitValue\n      )\n\n      return interpolate(\n        message,\n        {\n          limit_value: limitValue,\n          show_value: length,\n        },\n        true\n      )\n    }\n  )\n}\n\nexport function getTitleLengthMax() {\n  return maxLength(\n    misago.get(\"SETTINGS\").thread_title_length_max,\n    (limitValue, length) => {\n      const message = ngettext(\n        \"Thread title cannot be longer than %(limit_value)s character (it has %(show_value)s).\",\n        \"Thread title cannot be longer than %(limit_value)s characters (it has %(show_value)s).\",\n        limitValue\n      )\n\n      return interpolate(\n        message,\n        {\n          limit_value: limitValue,\n          show_value: length,\n        },\n        true\n      )\n    }\n  )\n}\n\nexport function validatePostLengthMin() {\n  return minLength(\n    misago.get(\"SETTINGS\").post_length_min,\n    (limitValue, length) => {\n      const message = ngettext(\n        \"Posted message should be at least %(limit_value)s character long (it has %(show_value)s).\",\n        \"Posted message should be at least %(limit_value)s characters long (it has %(show_value)s).\",\n        limitValue\n      )\n\n      return interpolate(\n        message,\n        {\n          limit_value: limitValue,\n          show_value: length,\n        },\n        true\n      )\n    }\n  )\n}\n\nexport function validatePostLengthMax() {\n  return maxLength(\n    misago.get(\"SETTINGS\").post_length_max || 1000000,\n    (limitValue, length) => {\n      const message = ngettext(\n        \"Posted message cannot be longer than %(limit_value)s character (it has %(show_value)s).\",\n        \"Posted message cannot be longer than %(limit_value)s characters (it has %(show_value)s).\",\n        limitValue\n      )\n\n      return interpolate(\n        message,\n        {\n          limit_value: limitValue,\n          show_value: length,\n        },\n        true\n      )\n    }\n  )\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  getChoice() {\n    let choice = null\n    this.props.choices.map((item) => {\n      if (item.value === this.props.value) {\n        choice = item\n      }\n    })\n    return choice\n  }\n\n  getIcon() {\n    return this.getChoice().icon\n  }\n\n  getLabel() {\n    return this.getChoice().label\n  }\n\n  change = (value) => {\n    return () => {\n      this.props.onChange({\n        target: {\n          value: value,\n        },\n      })\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"btn-group btn-select-group\">\n        <button\n          type=\"button\"\n          className=\"btn btn-select dropdown-toggle\"\n          id={this.props.id || null}\n          data-toggle=\"dropdown\"\n          aria-haspopup=\"true\"\n          aria-expanded=\"false\"\n          aria-describedby={this.props[\"aria-describedby\"] || null}\n          disabled={this.props.disabled || false}\n        >\n          <Icon icon={this.getIcon()} />\n          {this.getLabel()}\n        </button>\n        <ul className=\"dropdown-menu\">\n          {this.props.choices.map((item, i) => {\n            return (\n              <li key={i}>\n                <button\n                  type=\"button\"\n                  className=\"btn-link\"\n                  onClick={this.change(item.value)}\n                >\n                  <Icon icon={item.icon} />\n                  {item.label}\n                </button>\n              </li>\n            )\n          })}\n        </ul>\n      </div>\n    )\n  }\n}\n\nexport function Icon({ icon }) {\n  if (!icon) return null\n\n  return <span className=\"material-icon\">{icon}</span>\n}\n","import React from \"react\"\nimport misago from \"misago/index\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport StartSocialAuth from \"misago/components/StartSocialAuth\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport showBannedPage from \"misago/utils/banned-page\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n      showActivation: false,\n\n      username: \"\",\n      password: \"\",\n\n      validators: {\n        username: [],\n        password: [],\n      },\n    }\n  }\n\n  clean() {\n    if (!this.isValid()) {\n      snackbar.error(gettext(\"Fill out both fields.\"))\n      return false\n    } else {\n      return true\n    }\n  }\n\n  send() {\n    return ajax.post(misago.get(\"AUTH_API\"), {\n      username: this.state.username,\n      password: this.state.password,\n    })\n  }\n\n  handleSuccess() {\n    let form = $(\"#hidden-login-form\")\n\n    form.append('<input type=\"text\" name=\"username\" />')\n    form.append('<input type=\"password\" name=\"password\" />')\n\n    // fill out form with user credentials and submit it, this will tell\n    // Misago to redirect user back to right page, and will trigger browser's\n    // key ring feature\n    form.find('input[type=\"hidden\"]').val(ajax.getCsrfToken())\n    form.find('input[name=\"redirect_to\"]').val(window.location.pathname)\n    form.find('input[name=\"username\"]').val(this.state.username)\n    form.find('input[name=\"password\"]').val(this.state.password)\n    form.submit()\n\n    // keep form loading\n    this.setState({\n      isLoading: true,\n    })\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      if (rejection.code === \"inactive_admin\") {\n        snackbar.info(rejection.detail)\n      } else if (rejection.code === \"inactive_user\") {\n        snackbar.info(rejection.detail)\n        this.setState({\n          showActivation: true,\n        })\n      } else if (rejection.code === \"banned\") {\n        showBannedPage(rejection.detail)\n        modal.hide()\n      } else {\n        snackbar.error(rejection.detail)\n      }\n    } else if (rejection.status === 403 && rejection.ban) {\n      showBannedPage(rejection.ban)\n      modal.hide()\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  getActivationButton() {\n    if (!this.state.showActivation) return null\n\n    return (\n      <a\n        className=\"btn btn-success btn-block\"\n        href={misago.get(\"REQUEST_ACTIVATION_URL\")}\n      >\n        {gettext(\"Activate account\")}\n      </a>\n    )\n  }\n\n  render() {\n    return (\n      <div className=\"modal-dialog modal-sm modal-sign-in\" role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              aria-label={gettext(\"Close\")}\n              className=\"close\"\n              data-dismiss=\"modal\"\n              type=\"button\"\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Sign in\")}</h4>\n          </div>\n          <form onSubmit={this.handleSubmit}>\n            <div className=\"modal-body\">\n              <StartSocialAuth\n                buttonLabel={gettext(\"Sign in with %(site)s\")}\n                formLabel={gettext(\"Or use your forum account:\")}\n                labelClassName=\"text-center\"\n              />\n\n              <div className=\"form-group\">\n                <div className=\"control-input\">\n                  <input\n                    className=\"form-control input-lg\"\n                    disabled={this.state.isLoading}\n                    id=\"id_username\"\n                    onChange={this.bindInput(\"username\")}\n                    placeholder={gettext(\"Username or e-mail\")}\n                    type=\"text\"\n                    value={this.state.username}\n                  />\n                </div>\n              </div>\n\n              <div className=\"form-group\">\n                <div className=\"control-input\">\n                  <input\n                    className=\"form-control input-lg\"\n                    disabled={this.state.isLoading}\n                    id=\"id_password\"\n                    onChange={this.bindInput(\"password\")}\n                    placeholder={gettext(\"Password\")}\n                    type=\"password\"\n                    value={this.state.password}\n                  />\n                </div>\n              </div>\n            </div>\n            <div className=\"modal-footer\">\n              {this.getActivationButton()}\n              <Button\n                className=\"btn-primary btn-block\"\n                loading={this.state.isLoading}\n              >\n                {gettext(\"Sign in\")}\n              </Button>\n              <a\n                className=\"btn btn-default btn-block\"\n                href={misago.get(\"FORGOTTEN_PASSWORD_URL\")}\n              >\n                {gettext(\"Forgot password?\")}\n              </a>\n            </div>\n          </form>\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  getClass() {\n    return getStatusClassName(this.props.status)\n  }\n\n  render() {\n    return <span className={this.getClass()}>{this.props.children}</span>\n  }\n}\n\nexport class StatusIcon extends React.Component {\n  getIcon() {\n    if (this.props.status.is_banned) {\n      return \"remove_circle_outline\"\n    } else if (this.props.status.is_hidden) {\n      return \"help_outline\"\n    } else if (this.props.status.is_online_hidden) {\n      return \"label\"\n    } else if (this.props.status.is_offline_hidden) {\n      return \"label_outline\"\n    } else if (this.props.status.is_online) {\n      return \"lens\"\n    } else if (this.props.status.is_offline) {\n      return \"panorama_fish_eye\"\n    }\n  }\n\n  render() {\n    return <span className=\"material-icon status-icon\">{this.getIcon()}</span>\n  }\n}\n\nexport class StatusLabel extends React.Component {\n  getHelp() {\n    return getStatusDescription(this.props.user, this.props.status)\n  }\n\n  getLabel() {\n    if (this.props.status.is_banned) {\n      return gettext(\"Banned\")\n    } else if (this.props.status.is_hidden) {\n      return gettext(\"Hidden\")\n    } else if (this.props.status.is_online_hidden) {\n      return gettext(\"Online (hidden)\")\n    } else if (this.props.status.is_offline_hidden) {\n      return gettext(\"Offline (hidden)\")\n    } else if (this.props.status.is_online) {\n      return gettext(\"Online\")\n    } else if (this.props.status.is_offline) {\n      return gettext(\"Offline\")\n    }\n  }\n\n  render() {\n    return (\n      <span\n        className={this.props.className || \"status-label\"}\n        title={this.getHelp()}\n      >\n        {this.getLabel()}\n      </span>\n    )\n  }\n}\n\nexport function getStatusClassName(status) {\n  let className = \"\"\n  if (status.is_banned) {\n    className = \"banned\"\n  } else if (status.is_hidden) {\n    className = \"offline\"\n  } else if (status.is_online_hidden) {\n    className = \"online\"\n  } else if (status.is_offline_hidden) {\n    className = \"offline\"\n  } else if (status.is_online) {\n    className = \"online\"\n  } else if (status.is_offline) {\n    className = \"offline\"\n  }\n\n  return \"user-status user-\" + className\n}\n\nexport function getStatusDescription(user, status) {\n  if (status.is_banned) {\n    if (status.banned_until) {\n      return interpolate(\n        gettext(\"%(username)s is banned until %(ban_expires)s\"),\n        {\n          username: user.username,\n          ban_expires: status.banned_until.format(\"LL, LT\"),\n        },\n        true\n      )\n    } else {\n      return interpolate(\n        gettext(\"%(username)s is banned\"),\n        {\n          username: user.username,\n        },\n        true\n      )\n    }\n  } else if (status.is_hidden) {\n    return interpolate(\n      gettext(\"%(username)s is hiding presence\"),\n      {\n        username: user.username,\n      },\n      true\n    )\n  } else if (status.is_online_hidden) {\n    return interpolate(\n      gettext(\"%(username)s is online (hidden)\"),\n      {\n        username: user.username,\n      },\n      true\n    )\n  } else if (status.is_offline_hidden) {\n    return interpolate(\n      gettext(\"%(username)s was last seen %(last_click)s (hidden)\"),\n      {\n        username: user.username,\n        last_click: status.last_click.fromNow(),\n      },\n      true\n    )\n  } else if (status.is_online) {\n    return interpolate(\n      gettext(\"%(username)s is online\"),\n      {\n        username: user.username,\n      },\n      true\n    )\n  } else if (status.is_offline) {\n    return interpolate(\n      gettext(\"%(username)s was last seen %(last_click)s\"),\n      {\n        username: user.username,\n        last_click: status.last_click.fromNow(),\n      },\n      true\n    )\n  }\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  getEmptyMessage() {\n    if (this.props.emptyMessage) {\n      return this.props.emptyMessage\n    } else {\n      return gettext(\"No name changes have been recorded for your account.\")\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"username-history ui-ready\">\n        <ul className=\"list-group\">\n          <li className=\"list-group-item empty-message\">\n            {this.getEmptyMessage()}\n          </li>\n        </ul>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\n\nexport default class extends React.Component {\n  renderUserAvatar() {\n    if (this.props.change.changed_by) {\n      return (\n        <a\n          href={this.props.change.changed_by.url}\n          className=\"user-avatar-wrapper\"\n        >\n          <Avatar user={this.props.change.changed_by} size=\"100\" />\n        </a>\n      )\n    } else {\n      return (\n        <span className=\"user-avatar-wrapper\">\n          <Avatar size=\"100\" />\n        </span>\n      )\n    }\n  }\n\n  renderUsername() {\n    if (this.props.change.changed_by) {\n      return (\n        <a href={this.props.change.changed_by.url} className=\"item-title\">\n          {this.props.change.changed_by.username}\n        </a>\n      )\n    } else {\n      return (\n        <span className=\"item-title\">\n          {this.props.change.changed_by_username}\n        </span>\n      )\n    }\n  }\n\n  render() {\n    return (\n      <li className=\"list-group-item\" key={this.props.change.id}>\n        <div className=\"change-avatar\">{this.renderUserAvatar()}</div>\n        <div className=\"change-author\">{this.renderUsername()}</div>\n        <div className=\"change\">\n          <span className=\"old-username\">{this.props.change.old_username}</span>\n          <span className=\"material-icon\">arrow_forward</span>\n          <span className=\"new-username\">{this.props.change.new_username}</span>\n        </div>\n        <div className=\"change-date\">\n          <abbr title={this.props.change.changed_on.format(\"LLL\")}>\n            {this.props.change.changed_on.fromNow()}\n          </abbr>\n        </div>\n      </li>\n    )\n  }\n}\n","import React from \"react\"\nimport Change from \"misago/components/username-history/change\"\n\nexport default class extends React.Component {\n  render() {\n    return (\n      <div className=\"username-history ui-ready\">\n        <ul className=\"list-group\">\n          {this.props.changes.map((change) => {\n            return <Change change={change} key={change.id} />\n          })}\n        </ul>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport * as random from \"misago/utils/random\"\n\nexport default class extends React.Component {\n  shouldComponentUpdate() {\n    return false\n  }\n\n  getClassName() {\n    if (this.props.hiddenOnMobile) {\n      return \"list-group-item hidden-xs hidden-sm\"\n    } else {\n      return \"list-group-item\"\n    }\n  }\n\n  render() {\n    return (\n      <li className={this.getClassName()}>\n        <div className=\"change-avatar\">\n          <span className=\"user-avatar\">\n            <Avatar size=\"100\" />\n          </span>\n        </div>\n        <div className=\"change-author\">\n          <span\n            className=\"ui-preview-text\"\n            style={{ width: random.int(30, 100) + \"px\" }}\n          >\n            &nbsp;\n          </span>\n        </div>\n        <div className=\"change\">\n          <span\n            className=\"ui-preview-text\"\n            style={{ width: random.int(30, 70) + \"px\" }}\n          >\n            &nbsp;\n          </span>\n          <span className=\"material-icon\">arrow_forward</span>\n          <span\n            className=\"ui-preview-text\"\n            style={{ width: random.int(30, 70) + \"px\" }}\n          >\n            &nbsp;\n          </span>\n        </div>\n        <div className=\"change-date\">\n          <span\n            className=\"ui-preview-text\"\n            style={{ width: random.int(80, 140) + \"px\" }}\n          >\n            &nbsp;\n          </span>\n        </div>\n      </li>\n    )\n  }\n}\n","import React from \"react\"\nimport ChangePreview from \"misago/components/username-history/change-preview\"\n\nexport default class extends React.Component {\n  shouldComponentUpdate() {\n    return false\n  }\n\n  render() {\n    return (\n      <div className=\"username-history ui-preview\">\n        <ul className=\"list-group\">\n          {[0, 1, 2].map((i) => {\n            return <ChangePreview hiddenOnMobile={i > 0} key={i} />\n          })}\n        </ul>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport ListEmpty from \"misago/components/username-history/list-empty\"\nimport ListReady from \"misago/components/username-history/list-ready\"\nimport ListPreview from \"misago/components/username-history/list-preview\"\n\nexport default class extends React.Component {\n  render() {\n    if (this.props.isLoaded) {\n      if (this.props.changes.length) {\n        return <ListReady changes={this.props.changes} />\n      } else {\n        return <ListEmpty emptyMessage={this.props.emptyMessage} />\n      }\n    } else {\n      return <ListPreview />\n    }\n  }\n}\n","import React from \"react\"\nimport UserStatus, { StatusLabel } from \"misago/components/user-status\"\n\nexport default function ({ showStatus, user }) {\n  return (\n    <ul className=\"list-unstyled\">\n      <Status showStatus={showStatus} user={user} />\n      <JoinDate user={user} />\n      <li className=\"user-stat-divider\" />\n      <Posts user={user} />\n      <Threads user={user} />\n      <Followers user={user} />\n    </ul>\n  )\n}\n\nexport function Status({ showStatus, user }) {\n  if (!showStatus) return null\n\n  return (\n    <li className=\"user-stat-status\">\n      <UserStatus status={user.status}>\n        <StatusLabel status={user.status} user={user} />\n      </UserStatus>\n    </li>\n  )\n}\n\nexport function JoinDate({ user }) {\n  const { joined_on } = user\n\n  let title = interpolate(\n    gettext(\"Joined on %(joined_on)s\"),\n    {\n      joined_on: joined_on.format(\"LL, LT\"),\n    },\n    true\n  )\n\n  let message = interpolate(\n    gettext(\"Joined %(joined_on)s\"),\n    {\n      joined_on: joined_on.fromNow(),\n    },\n    true\n  )\n\n  return (\n    <li className=\"user-stat-join-date\">\n      <abbr title={title}>{message}</abbr>\n    </li>\n  )\n}\n\nexport function Posts({ user }) {\n  const className = getStatClassName(\"user-stat-posts\", user.posts)\n  const message = ngettext(\"%(posts)s post\", \"%(posts)s posts\", user.posts)\n\n  return (\n    <li className={className}>\n      {interpolate(\n        message,\n        {\n          posts: user.posts,\n        },\n        true\n      )}\n    </li>\n  )\n}\n\nexport function Threads({ user }) {\n  const className = getStatClassName(\"user-stat-threads\", user.threads)\n  const message = ngettext(\n    \"%(threads)s thread\",\n    \"%(threads)s threads\",\n    user.threads\n  )\n\n  return (\n    <li className={className}>\n      {interpolate(\n        message,\n        {\n          threads: user.threads,\n        },\n        true\n      )}\n    </li>\n  )\n}\n\nexport function Followers({ user }) {\n  const className = getStatClassName(\"user-stat-followers\", user.followers)\n  const message = ngettext(\n    \"%(followers)s follower\",\n    \"%(followers)s followers\",\n    user.followers\n  )\n\n  return (\n    <li className={className}>\n      {interpolate(\n        message,\n        {\n          followers: user.followers,\n        },\n        true\n      )}\n    </li>\n  )\n}\n\nexport function getStatClassName(className, stat) {\n  if (stat === 0) {\n    return className + \" user-stat-empty\"\n  }\n  return className\n}\n","import React from \"react\"\n\nexport default function ({ rank, title }) {\n  let userTitle = title || rank.title || rank.name\n\n  let className = \"user-title\"\n  if (rank.css_class) {\n    className += \" user-title-\" + rank.css_class\n  }\n\n  if (rank.is_tab) {\n    return (\n      <a className={className} href={rank.url}>\n        {userTitle}\n      </a>\n    )\n  }\n\n  return <span className={className}>{userTitle}</span>\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport Stats from \"./stats\"\nimport UserTitle from \"./user-title\"\n\nexport default function ({ showStatus, user }) {\n  const { rank } = user\n\n  let className = \"panel user-card\"\n  if (rank.css_class) {\n    className += \" user-card-\" + rank.css_class\n  }\n\n  return (\n    <div className={className}>\n      <div className=\"panel-body\">\n        <div className=\"row\">\n          <div className=\"col-xs-3 user-card-left\">\n            <div className=\"user-card-small-avatar\">\n              <a href={user.url}>\n                <Avatar size=\"50\" size2x=\"80\" user={user} />\n              </a>\n            </div>\n          </div>\n          <div className=\"col-xs-9 col-sm-12 user-card-body\">\n            <div className=\"user-card-avatar\">\n              <a href={user.url}>\n                <Avatar size=\"150\" size2x=\"200\" user={user} />\n              </a>\n            </div>\n\n            <div className=\"user-card-username\">\n              <a href={user.url}>{user.username}</a>\n            </div>\n            <div className=\"user-card-title\">\n              <UserTitle rank={rank} title={user.title} />\n            </div>\n\n            <div className=\"user-card-stats\">\n              <Stats showStatus={showStatus} user={user} />\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport * as random from \"misago/utils/random\"\n\nexport default class extends React.Component {\n  shouldComponentUpdate() {\n    return false\n  }\n\n  render() {\n    return (\n      <div className=\"panel user-card user-card-preview\">\n        <div className=\"panel-body\">\n          <div className=\"row\">\n            <div className=\"col-xs-3 user-card-left\">\n              <div className=\"user-card-small-avatar\">\n                <span>\n                  <Avatar size=\"50\" size2x=\"80\" />\n                </span>\n              </div>\n            </div>\n            <div className=\"col-xs-9 col-sm-12 user-card-body\">\n              <div className=\"user-card-avatar\">\n                <span>\n                  <Avatar size=\"150\" size2x=\"200\" />\n                </span>\n              </div>\n\n              <div className=\"user-card-username\">\n                <span\n                  className=\"ui-preview-text\"\n                  style={{ width: random.int(60, 150) + \"px\" }}\n                >\n                  &nbsp;\n                </span>\n              </div>\n              <div className=\"user-card-title\">\n                <span\n                  className=\"ui-preview-text\"\n                  style={{ width: random.int(60, 150) + \"px\" }}\n                >\n                  &nbsp;\n                </span>\n              </div>\n\n              <div className=\"user-card-stats\">\n                <ul className=\"list-unstyled\">\n                  <li>\n                    <span\n                      className=\"ui-preview-text\"\n                      style={{ width: random.int(30, 70) + \"px\" }}\n                    >\n                      &nbsp;\n                    </span>\n                  </li>\n                  <li>\n                    <span\n                      className=\"ui-preview-text\"\n                      style={{ width: random.int(30, 70) + \"px\" }}\n                    >\n                      &nbsp;\n                    </span>\n                  </li>\n                  <li className=\"user-stat-divider\" />\n                  <li>\n                    <span\n                      className=\"ui-preview-text\"\n                      style={{ width: random.int(30, 70) + \"px\" }}\n                    >\n                      &nbsp;\n                    </span>\n                  </li>\n                  <li>\n                    <span\n                      className=\"ui-preview-text\"\n                      style={{ width: random.int(30, 70) + \"px\" }}\n                    >\n                      &nbsp;\n                    </span>\n                  </li>\n                </ul>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Card from \"./card\"\n\nexport default function ({ colClassName, cols }) {\n  const list = Array.apply(null, { length: cols }).map(Number.call, Number)\n\n  return (\n    <div className=\"users-cards-list ui-preview\">\n      <div className=\"row\">\n        {list.map((i) => {\n          let className = colClassName\n          if (i !== 0) className += \" hidden-xs\"\n          if (i === 3) className += \" hidden-sm\"\n\n          return (\n            <div className={className} key={i}>\n              <Card />\n            </div>\n          )\n        })}\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Card from \"./card\"\nimport Preview from \"./preview\"\n\nexport default function ({ cols, isReady, showStatus, users }) {\n  let colClassName = \"col-xs-12 col-sm-4\"\n  if (cols === 4) {\n    colClassName += \" col-md-3\"\n  }\n\n  if (!isReady) {\n    return <Preview colClassName={colClassName} cols={cols} />\n  }\n\n  return (\n    <div className=\"users-cards-list ui-ready\">\n      <div className=\"row\">\n        {users.map((user) => {\n          return (\n            <div className={colClassName} key={user.id}>\n              <Card showStatus={showStatus} user={user} />\n            </div>\n          )\n        })}\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      dropdown: false,\n    }\n  }\n\n  toggleNav = () => {\n    this.setState({\n      dropdown: !this.state.dropdown,\n    })\n  }\n\n  hideNav = () => {\n    this.setState({\n      dropdown: false,\n    })\n  }\n\n  getCompactNavClassName() {\n    if (this.state.dropdown) {\n      return \"compact-nav open\"\n    } else {\n      return \"compact-nav\"\n    }\n  }\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  getClassName() {\n    if (this.props.value) {\n      return \"btn btn-yes-no btn-yes-no-on\"\n    } else {\n      return \"btn btn-yes-no btn-yes-no-off\"\n    }\n  }\n\n  getIcon() {\n    if (!!this.props.value) {\n      return this.props.iconOn || \"check_box\"\n    } else {\n      return this.props.iconOff || \"check_box_outline_blank\"\n    }\n  }\n\n  getLabel() {\n    if (!!this.props.value) {\n      return this.props.labelOn || gettext(\"yes\")\n    } else {\n      return this.props.labelOff || gettext(\"no\")\n    }\n  }\n\n  toggle = () => {\n    this.props.onChange({\n      target: {\n        value: !this.props.value,\n      },\n    })\n  }\n\n  render() {\n    return (\n      <button\n        type=\"button\"\n        onClick={this.toggle}\n        className={this.getClassName()}\n        id={this.props.id || null}\n        aria-describedby={this.props[\"aria-describedby\"] || null}\n        disabled={this.props.disabled || false}\n      >\n        <span className=\"material-icon\">{this.getIcon()}</span>\n        <span className=\"btn-text\">{this.getLabel()}</span>\n      </button>\n    )\n  }\n}\n","class OrderedList {\n  constructor(items) {\n    this.isOrdered = false\n    this._items = items || []\n  }\n\n  add(key, item, order) {\n    this._items.push({\n      key: key,\n      item: item,\n\n      after: order ? order.after || null : null,\n      before: order ? order.before || null : null,\n    })\n  }\n\n  get(key, value) {\n    for (var i = 0; i < this._items.length; i++) {\n      if (this._items[i].key === key) {\n        return this._items[i].item\n      }\n    }\n\n    return value\n  }\n\n  has(key) {\n    return this.get(key) !== undefined\n  }\n\n  values() {\n    var values = []\n    for (var i = 0; i < this._items.length; i++) {\n      values.push(this._items[i].item)\n    }\n    return values\n  }\n\n  order(values_only) {\n    if (!this.isOrdered) {\n      this._items = this._order(this._items)\n      this.isOrdered = true\n    }\n\n    if (values_only || typeof values_only === \"undefined\") {\n      return this.values()\n    } else {\n      return this._items\n    }\n  }\n\n  orderedValues() {\n    return this.order(true)\n  }\n\n  _order(unordered) {\n    // Index of unordered items\n    var index = []\n    unordered.forEach(function (item) {\n      index.push(item.key)\n    })\n\n    // Ordered items\n    var ordered = []\n    var ordering = []\n\n    // First pass: register items that\n    // don't specify their order\n    unordered.forEach(function (item) {\n      if (!item.after && !item.before) {\n        ordered.push(item)\n        ordering.push(item.key)\n      }\n    })\n\n    // Second pass: register items that\n    // specify their before to \"_end\"\n    unordered.forEach(function (item) {\n      if (item.before === \"_end\") {\n        ordered.push(item)\n        ordering.push(item.key)\n      }\n    })\n\n    // Third pass: keep iterating items\n    // until we hit iterations limit or finish\n    // ordering list\n    function insertItem(item) {\n      var insertAt = -1\n      if (ordering.indexOf(item.key) === -1) {\n        if (item.after) {\n          insertAt = ordering.indexOf(item.after)\n          if (insertAt !== -1) {\n            insertAt += 1\n          }\n        } else if (item.before) {\n          insertAt = ordering.indexOf(item.before)\n        }\n\n        if (insertAt !== -1) {\n          ordered.splice(insertAt, 0, item)\n          ordering.splice(insertAt, 0, item.key)\n        }\n      }\n    }\n\n    var iterations = 200\n    while (iterations > 0 && index.length !== ordering.length) {\n      iterations -= 1\n      unordered.forEach(insertItem)\n    }\n\n    return ordered\n  }\n}\n\nexport default OrderedList\n","import \"bootstrap/js/transition\"\nimport \"bootstrap/js/affix\"\nimport \"bootstrap/js/modal\"\nimport \"bootstrap/js/dropdown\"\nimport \"at-js\"\nimport \"cropit\"\nimport \"waypoints\"\nimport \"jquery-caret\"\nimport \"highlight\"\nimport OrderedList from \"misago/utils/ordered-list\"\nimport \"misago/style/index.less\"\n\nexport class Misago {\n  constructor() {\n    this._initializers = []\n    this._context = {}\n  }\n\n  addInitializer(initializer) {\n    this._initializers.push({\n      key: initializer.name,\n\n      item: initializer.initializer,\n\n      after: initializer.after,\n      before: initializer.before,\n    })\n  }\n\n  init(context) {\n    this._context = context\n\n    var initOrder = new OrderedList(this._initializers).orderedValues()\n    initOrder.forEach((initializer) => {\n      initializer(this)\n    })\n  }\n\n  // context accessors\n  has(key) {\n    return !!this._context[key]\n  }\n\n  get(key, fallback) {\n    if (this.has(key)) {\n      return this._context[key]\n    } else {\n      return fallback || undefined\n    }\n  }\n\n  pop(key) {\n    if (this.has(key)) {\n      let value = this._context[key]\n      this._context[key] = null\n      return value\n    } else {\n      return undefined\n    }\n  }\n}\n\n// create  singleton\nvar misago = new Misago()\n\n// expose it globally\nwindow.misago = misago\n\n// and export it for tests and stuff\nexport default misago\n","import misago from \"misago/index\"\nimport ajax from \"misago/services/ajax\"\n\nexport default function initializer() {\n  ajax.init(misago.get(\"CSRF_COOKIE_NAME\"))\n}\n\nmisago.addInitializer({\n  name: \"ajax\",\n  initializer: initializer,\n})\n","import misago from \"misago/index\"\nimport { patch } from \"misago/reducers/auth\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nconst AUTH_SYNC_RATE = 45 // sync user with backend every 45 seconds\n\nexport default function initializer(context) {\n  if (context.get(\"isAuthenticated\")) {\n    window.setInterval(function () {\n      ajax.get(context.get(\"AUTH_API\")).then(\n        function (data) {\n          store.dispatch(patch(data))\n        },\n        function (rejection) {\n          snackbar.apiError(rejection)\n        }\n      )\n    }, AUTH_SYNC_RATE * 1000)\n  }\n}\n\nmisago.addInitializer({\n  name: \"auth-sync\",\n  initializer: initializer,\n  after: \"auth\",\n})\n","import misago from \"misago/index\"\nimport auth from \"misago/services/auth\"\nimport modal from \"misago/services/modal\"\nimport store from \"misago/services/store\"\nimport storage from \"misago/services/local-storage\"\n\nexport default function initializer() {\n  auth.init(store, storage, modal)\n}\n\nmisago.addInitializer({\n  name: \"auth\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import misago from \"misago/index\"\nimport ajax from \"misago/services/ajax\"\nimport captcha from \"misago/services/captcha\"\nimport include from \"misago/services/include\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default function initializer(context) {\n  captcha.init(context, ajax, include, snackbar)\n}\n\nmisago.addInitializer({\n  name: \"captcha\",\n  initializer: initializer,\n})\n","import React from \"react\"\nimport ajax from \"misago/services/ajax\"\n\nexport default class AcceptAgreement extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = { submiting: false }\n  }\n\n  handleDecline = () => {\n    if (this.state.submiting) return\n\n    const confirmation = window.confirm(\n      gettext(\n        \"Declining will result in immediate deactivation and deletion of your account. This action is not reversible.\"\n      )\n    )\n    if (!confirmation) return\n\n    this.setState({ submiting: true })\n\n    ajax.post(this.props.api, { accept: false }).then(() => {\n      window.location.reload(true)\n    })\n  }\n\n  handleAccept = () => {\n    if (this.state.submiting) return\n\n    this.setState({ submiting: true })\n\n    ajax.post(this.props.api, { accept: true }).then(() => {\n      window.location.reload(true)\n    })\n  }\n\n  render() {\n    return (\n      <div>\n        <button\n          className=\"btn btn-default\"\n          disabled={this.state.submiting}\n          type=\"buton\"\n          onClick={this.handleDecline}\n        >\n          {gettext(\"Decline\")}\n        </button>\n        <button\n          className=\"btn btn-primary\"\n          disabled={this.state.submiting}\n          type=\"buton\"\n          onClick={this.handleAccept}\n        >\n          {gettext(\"Accept and continue\")}\n        </button>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport misago from \"misago/index\"\nimport AcceptAgreement from \"misago/components/accept-agreement\"\nimport mount from \"misago/utils/mount-component\"\n\nexport default function initializer(context) {\n  if (document.getElementById(\"required-agreement-mount\")) {\n    mount(\n      <AcceptAgreement api={context.get(\"REQUIRED_AGREEMENT_API\")} />,\n      \"required-agreement-mount\",\n      false\n    )\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:accept-agreement\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import React from \"react\"\n\nexport default class extends React.Component {\n  refresh() {\n    window.location.reload()\n  }\n\n  getMessage() {\n    if (this.props.signedIn) {\n      return interpolate(\n        gettext(\n          \"You have signed in as %(username)s. Please refresh the page before continuing.\"\n        ),\n        { username: this.props.signedIn.username },\n        true\n      )\n    } else if (this.props.signedOut) {\n      return interpolate(\n        gettext(\n          \"%(username)s, you have been signed out. Please refresh the page before continuing.\"\n        ),\n        { username: this.props.user.username },\n        true\n      )\n    }\n  }\n\n  render() {\n    let className = \"auth-message\"\n    if (this.props.signedIn || this.props.signedOut) {\n      className += \" show\"\n    }\n\n    return (\n      <div className={className}>\n        <div className=\"container\">\n          <p className=\"lead\">{this.getMessage()}</p>\n          <p>\n            <button\n              className=\"btn btn-default\"\n              type=\"button\"\n              onClick={this.refresh}\n            >\n              {gettext(\"Reload page\")}\n            </button>\n            <span className=\"hidden-xs hidden-sm\">\n              {\" \" + gettext(\"or press F5 key.\")}\n            </span>\n          </p>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport function select(state) {\n  return {\n    user: state.auth.user,\n    signedIn: state.auth.signedIn,\n    signedOut: state.auth.signedOut,\n  }\n}\n","import { connect } from \"react-redux\"\nimport misago from \"misago/index\"\nimport AuthMessage, { select } from \"misago/components/auth-message\"\nimport mount from \"misago/utils/mount-component\"\n\nexport default function initializer() {\n  mount(connect(select)(AuthMessage), \"auth-message-mount\")\n}\n\nmisago.addInitializer({\n  name: \"component:auth-message\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import misago from \"misago/index\"\nimport showBannedPage from \"misago/utils/banned-page\"\n\nexport default function initializer(context) {\n  if (context.has(\"BAN_MESSAGE\")) {\n    showBannedPage(context.get(\"BAN_MESSAGE\"), false)\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:banmed-page\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import React from \"react\"\n\nexport default function (props) {\n  return (\n    <div className=\"categories-list\">\n      <ul className=\"list-group\">\n        <li className=\"list-group-item empty-message\">\n          <p className=\"lead\">\n            {gettext(\n              \"No categories exist or you don't have permission to see them.\"\n            )}\n          </p>\n        </li>\n      </ul>\n    </div>\n  )\n}\n","import React from \"react\"\n\nexport default function ({ category }) {\n  if (!category.description) return null\n\n  return (\n    <div\n      className=\"category-description\"\n      dangerouslySetInnerHTML={{\n        __html: category.description.html,\n      }}\n    />\n  )\n}\n","import React from \"react\"\n\nexport default function ({ category }) {\n  return (\n    <div className={getClassName(category)} title={getTitle(category)}>\n      <span className=\"material-icon\">{getIcon(category)}</span>\n    </div>\n  )\n}\n\nexport function getClassName(category) {\n  if (category.is_read) {\n    return \"read-status item-read\"\n  }\n\n  return \"read-status item-new\"\n}\n\nexport function getTitle(category) {\n  if (category.is_closed) {\n    if (category.is_read) {\n      return gettext(\"This category has no new posts. (closed)\")\n    }\n\n    return gettext(\"This category has new posts. (closed)\")\n  }\n\n  if (category.is_read) {\n    return gettext(\"This category has no new posts.\")\n  }\n\n  return gettext(\"This category has new posts.\")\n}\n\nexport function getIcon(category) {\n  if (category.is_closed) {\n    if (category.is_read) {\n      return \"lock_outline\"\n    }\n\n    return \"lock\"\n  }\n\n  if (category.is_read) {\n    return \"chat_bubble_outline\"\n  }\n\n  return \"chat_bubble\"\n}\n","import React from \"react\"\nimport Description from \"./description\"\nimport Icon from \"./icon\"\n\nexport default function ({ category }) {\n  return (\n    <div className=\"col-xs-12 col-sm-6 col-md-6 category-main\">\n      <div className=\"media\">\n        <div className=\"media-left\">\n          <Icon category={category} />\n        </div>\n        <div className=\"media-body\">\n          <h4 className=\"media-heading\">\n            <a href={category.url.index}>{category.name}</a>\n          </h4>\n          <Description category={category} />\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\n\nexport default function ({ category }) {\n  return (\n    <div className=\"col-xs-12 col-sm-6 col-md-4 category-last-thread\">\n      <LastThread category={category} />\n      <Empty category={category} />\n      <Private category={category} />\n      <Protected category={category} />\n    </div>\n  )\n}\n\nexport function LastThread({ category }) {\n  if (!category.acl.can_browse) return null\n  if (!category.acl.can_see_all_threads) return null\n  if (!category.last_thread_title) return null\n\n  return (\n    <div className=\"media\">\n      <div className=\"media-left hidden-xs\">\n        <LastPosterAvatar category={category} />\n      </div>\n      <div className=\"media-body\">\n        <div className=\"media-heading\">\n          <a\n            className=\"item-title thread-title\"\n            href={category.url.last_thread_new}\n            title={category.last_thread_title}\n          >\n            {category.last_thread_title}\n          </a>\n        </div>\n        <ul className=\"list-inline\">\n          <li className=\"category-last-thread-poster\">\n            <LastPosterName category={category} />\n          </li>\n          <li className=\"divider\">&#8212;</li>\n          <li className=\"category-last-thread-date\">\n            <a href={category.url.last_post}>\n              {category.last_post_on.fromNow()}\n            </a>\n          </li>\n        </ul>\n      </div>\n    </div>\n  )\n}\n\nexport function LastPosterAvatar({ category }) {\n  if (category.last_poster) {\n    return (\n      <a\n        className=\"last-poster-avatar\"\n        href={category.last_poster.url}\n        title={category.last_poster_name}\n      >\n        <Avatar\n          className=\"media-object\"\n          size={40}\n          user={category.last_poster}\n        />\n      </a>\n    )\n  }\n\n  return (\n    <span className=\"last-poster-avatar\" title={category.last_poster_name}>\n      <Avatar className=\"media-object\" size={40} />\n    </span>\n  )\n}\n\nexport function LastPosterName({ category }) {\n  if (category.last_poster) {\n    return (\n      <a className=\"item-title\" href={category.last_poster.url}>\n        {category.last_poster_name}\n      </a>\n    )\n  }\n\n  return <span className=\"item-title\">{category.last_poster_name}</span>\n}\n\nexport function Empty({ category }) {\n  if (!category.acl.can_browse) return null\n  if (!category.acl.can_see_all_threads) return null\n  if (category.last_thread_title) return null\n\n  return (\n    <Message\n      message={gettext(\n        \"This category is empty. No threads were posted within it so far.\"\n      )}\n    />\n  )\n}\n\nexport function Private({ category }) {\n  if (!category.acl.can_browse) return null\n  if (category.acl.can_see_all_threads) return null\n\n  return (\n    <Message\n      message={gettext(\n        \"This category is private. You can see only your own threads within it.\"\n      )}\n    />\n  )\n}\n\nexport function Protected({ category }) {\n  if (category.acl.can_browse) return null\n\n  return (\n    <Message\n      message={gettext(\n        \"This category is protected. You can't browse its contents.\"\n      )}\n    />\n  )\n}\n\nexport function Message({ message }) {\n  return (\n    <div className=\"media category-thread-message\">\n      <div className=\"media-left\">\n        <span className=\"material-icon\">info_outline</span>\n      </div>\n      <div className=\"media-body\">\n        <p>{message}</p>\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\n\nexport default function ({ category }) {\n  return (\n    <div className=\"col-md-2 hidden-xs hidden-sm\">\n      <ul className=\"list-unstyled category-stats\">\n        <Threads threads={category.threads} />\n        <Posts posts={category.posts} />\n      </ul>\n    </div>\n  )\n}\n\nexport function Threads({ threads }) {\n  const message = ngettext(\"%(threads)s thread\", \"%(threads)s threads\", threads)\n\n  return (\n    <li className=\"category-stat-threads\">\n      {interpolate(\n        message,\n        {\n          threads: threads,\n        },\n        true\n      )}\n    </li>\n  )\n}\n\nexport function Posts({ posts }) {\n  const message = ngettext(\"%(posts)s post\", \"%(posts)s posts\", posts)\n\n  return (\n    <li className=\"category-stat-posts\">\n      {interpolate(\n        message,\n        {\n          posts: posts,\n        },\n        true\n      )}\n    </li>\n  )\n}\n","import React from \"react\"\n\nexport default function ({ category }) {\n  let className = \"btn btn-default btn-block btn-sm btn-subcategory\"\n  if (!category.is_read) {\n    className += \" btn-subcategory-new\"\n  }\n\n  return (\n    <div className=\"col-xs-12 col-sm-4 col-md-3\">\n      <a className={className} href={category.url.index}>\n        <span className=\"material-icon\">{getIcon(category)}</span>\n        <span className=\"icon-text\">{category.name}</span>\n      </a>\n    </div>\n  )\n}\n\nexport function getIcon(category) {\n  if (category.is_closed) {\n    if (category.is_read) {\n      return \"lock_outline\"\n    }\n\n    return \"lock\"\n  }\n\n  if (category.is_read) {\n    return \"chat_bubble_outline\"\n  }\n\n  return \"chat_bubble\"\n}\n","import React from \"react\"\nimport ListItem from \"./list-item\"\n\nexport default function ({ category, isFirst }) {\n  if (isFirst) return null\n  if (category.subcategories.length === 0) return null\n\n  return (\n    <div className=\"row subcategories-list\">\n      {category.subcategories.map((category) => {\n        return <ListItem category={category} key={category.id} />\n      })}\n    </div>\n  )\n}\n","import React from \"react\"\nimport Main from \"./main\"\nimport LastThread from \"./last-thread\"\nimport Stats from \"./stats\"\nimport Subcategories from \"./subcategories\"\n\nexport default function ({ category, isFirst }) {\n  let className = \"list-group-item\"\n\n  if (category.description) {\n    className += \" list-group-category-has-description\"\n  } else {\n    className += \" list-group-category-no-description\"\n  }\n\n  if (isFirst) {\n    className += \" list-group-item-first\"\n  }\n  if (category.css_class) {\n    className += \" list-group-category-has-flavor\"\n    className += \" list-group-item-category-\" + category.css_class\n  }\n\n  return (\n    <li className={className}>\n      <div className=\"row\">\n        <Main category={category} />\n        <Stats category={category} />\n        <LastThread category={category} />\n      </div>\n      <Subcategories category={category} isFirst={isFirst} />\n    </li>\n  )\n}\n","import React from \"react\"\nimport ListItem from \"./list-item\"\n\nexport default function ({ category }) {\n  let className = \"list-group list-group-category\"\n  if (category.css_class) {\n    className += \" list-group-category-has-flavor\"\n    className += \" list-group-category-\" + category.css_class\n  }\n\n  return (\n    <ul className={className}>\n      <ListItem category={category} isFirst={true} />\n      {category.subcategories.map((category) => {\n        return (\n          <ListItem category={category} isFirst={false} key={category.id} />\n        )\n      })}\n    </ul>\n  )\n}\n","import React from \"react\"\nimport Category from \"./category\"\n\nexport default function ({ categories }) {\n  return (\n    <div className=\"categories-list\">\n      {categories.map((category) => {\n        return <Category category={category} key={category.id} />\n      })}\n    </div>\n  )\n}\n","import moment from \"moment\"\nimport React from \"react\"\nimport Blankslate from \"./blankslate\"\nimport CategoriesList from \"./categories-list\"\nimport misago from \"misago/index\"\nimport polls from \"misago/services/polls\"\n\nconst hydrate = function (category) {\n  return Object.assign({}, category, {\n    last_post_on: category.last_post_on ? moment(category.last_post_on) : null,\n    subcategories: category.subcategories.map(hydrate),\n  })\n}\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      categories: misago.get(\"CATEGORIES\").map(hydrate),\n    }\n\n    this.startPolling(misago.get(\"CATEGORIES_API\"))\n  }\n\n  startPolling(api) {\n    polls.start({\n      poll: \"categories\",\n      url: api,\n      frequency: 180 * 1000,\n      update: this.update,\n    })\n  }\n\n  update = (data) => {\n    this.setState({\n      categories: data.map(hydrate),\n    })\n  }\n\n  render() {\n    const { categories } = this.state\n\n    if (categories.length === 0) {\n      return <Blankslate />\n    }\n\n    return <CategoriesList categories={categories} />\n  }\n}\n\nexport function select(store) {\n  return {\n    tick: store.tick.tick,\n  }\n}\n","import { connect } from \"react-redux\"\nimport Categories, { select } from \"misago/components/categories\"\nimport misago from \"misago/index\"\nimport mount from \"misago/utils/mount-component\"\n\nexport default function initializer() {\n  if (document.getElementById(\"categories-mount\")) {\n    mount(connect(select)(Categories), \"categories-mount\")\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:categories\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import React from \"react\"\nimport { Link } from \"react-router\"\nimport Li from \"misago/components/li\"\n\nexport function SideNav(props) {\n  return (\n    <div className=\"list-group nav-side\">\n      {props.options.map((option) => {\n        return (\n          <Link\n            to={props.baseUrl + option.component + \"/\"}\n            className=\"list-group-item\"\n            activeClassName=\"active\"\n            key={option.component}\n          >\n            <span className=\"material-icon\">{option.icon}</span>\n            {option.name}\n          </Link>\n        )\n      })}\n    </div>\n  )\n}\n\nexport function CompactNav(props) {\n  return (\n    <ul className={props.className || \"dropdown-menu\"} role=\"menu\">\n      {props.options.map((option) => {\n        return (\n          <Li\n            path={props.baseUrl + option.component + \"/\"}\n            key={option.component}\n          >\n            <Link\n              to={props.baseUrl + option.component + \"/\"}\n              onClick={props.hideNav}\n            >\n              <span className=\"material-icon hidden-sm\">{option.icon}</span>\n              {option.name}\n            </Link>\n          </Li>\n        )\n      })}\n    </ul>\n  )\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport ajax from \"misago/services/ajax\"\nimport title from \"misago/services/page-title\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport misago from \"misago\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n      password: \"\",\n    }\n  }\n\n  componentDidMount() {\n    title.set({\n      title: gettext(\"Delete account\"),\n      parent: gettext(\"Change your options\"),\n    })\n  }\n\n  onPasswordChange = (event) => {\n    this.setState({ password: event.target.value })\n  }\n\n  handleSubmit = (event) => {\n    event.preventDefault()\n\n    const { isLoading, password } = this.state\n    const { user } = this.props\n\n    if (password.length == 0) {\n      snackbar.error(\n        gettext(\"Enter your password to confirm account deletion.\")\n      )\n      return false\n    }\n\n    if (isLoading) return false\n    this.setState({ isLoading: true })\n\n    ajax.post(user.api.delete, { password }).then(\n      (success) => {\n        window.location.href = misago.get(\"MISAGO_PATH\")\n      },\n      (rejection) => {\n        this.setState({ isLoading: false })\n        if (rejection.password) {\n          snackbar.error(rejection.password[0])\n        } else {\n          snackbar.apiError(rejection)\n        }\n      }\n    )\n  }\n\n  render() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"panel panel-danger panel-form\">\n          <div className=\"panel-heading\">\n            <h3 className=\"panel-title\">{gettext(\"Delete account\")}</h3>\n          </div>\n          <div className=\"panel-body\">\n            <p className=\"lead\">\n              {gettext(\n                \"You are going to delete your account. This action is nonreversible, and will result in following data being deleted:\"\n              )}\n            </p>\n\n            <p>\n              -{\" \"}\n              {gettext(\n                \"Stored IP addresses associated with content that you have posted will be deleted.\"\n              )}\n            </p>\n            <p>\n              -{\" \"}\n              {gettext(\n                \"Your username will become available for other user to rename to or for new user to register their account with.\"\n              )}\n            </p>\n            <p>\n              -{\" \"}\n              {gettext(\n                \"Your e-mail will become available for use in new account registration.\"\n              )}\n            </p>\n\n            <hr />\n\n            <p>\n              {gettext(\n                \"All your posted content will NOT be deleted, but username associated with it will be changed to one shared by all deleted accounts.\"\n              )}\n            </p>\n          </div>\n          <div className=\"panel-footer\">\n            <div className=\"input-group\">\n              <input\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                name=\"password-confirmation\"\n                type=\"password\"\n                placeholder={gettext(\n                  \"Enter your password to confirm account deletion.\"\n                )}\n                value={this.state.password}\n                onChange={this.onPasswordChange}\n              />\n              <span className=\"input-group-btn\">\n                <Button className=\"btn-danger\" loading={this.state.isLoading}>\n                  {gettext(\"Delete my account\")}\n                </Button>\n              </span>\n            </div>\n          </div>\n        </div>\n      </form>\n    )\n  }\n}\n","import React from \"react\"\nimport Form from \"misago/components/edit-details\"\nimport title from \"misago/services/page-title\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends React.Component {\n  componentDidMount() {\n    title.set({\n      title: gettext(\"Edit details\"),\n      parent: gettext(\"Change your options\"),\n    })\n  }\n\n  onSuccess = () => {\n    snackbar.info(gettext(\"Your details have been updated.\"))\n  }\n\n  render() {\n    return (\n      <Form api={this.props.user.api.edit_details} onSuccess={this.onSuccess} />\n    )\n  }\n}\n","import React from \"react\"\nimport moment from \"moment\"\nimport Button from \"misago/components/button\"\nimport ajax from \"misago/services/ajax\"\nimport title from \"misago/services/page-title\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class DownloadData extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n      isSubmiting: false,\n      downloads: [],\n    }\n  }\n\n  componentDidMount() {\n    title.set({\n      title: gettext(\"Download your data\"),\n      parent: gettext(\"Change your options\"),\n    })\n\n    this.handleLoadDownloads()\n  }\n\n  handleLoadDownloads = () => {\n    ajax.get(this.props.user.api.data_downloads).then(\n      (data) => {\n        this.setState({\n          isLoading: false,\n          downloads: data,\n        })\n      },\n      (rejection) => {\n        snackbar.apiError(rejection)\n      }\n    )\n  }\n\n  handleRequestDataDownload = () => {\n    this.setState({ isSubmiting: true })\n    ajax.post(this.props.user.api.request_data_download).then(\n      () => {\n        this.handleLoadDownloads()\n        snackbar.success(\n          gettext(\"Your request for data download has been registered.\")\n        )\n        this.setState({ isSubmiting: false })\n      },\n      (rejection) => {\n        snackbar.apiError(rejection)\n        this.setState({ isSubmiting: false })\n      }\n    )\n  }\n\n  render() {\n    return (\n      <div>\n        <div className=\"panel panel-default panel-form\">\n          <div className=\"panel-heading\">\n            <h3 className=\"panel-title\">{gettext(\"Download your data\")}</h3>\n          </div>\n          <div className=\"panel-body\">\n            <p>\n              {gettext(\n                'To download your data from the site, click the \"Request data download\" button. Depending on amount of data to be archived and number of users wanting to download their data at same time it may take up to few days for your download to be prepared. An e-mail with notification will be sent to you when your data is ready to be downloaded.'\n              )}\n            </p>\n\n            <p>\n              {gettext(\n                \"The download will only be available for limited amount of time, after which it will be deleted from the site and marked as expired.\"\n              )}\n            </p>\n          </div>\n          <table className=\"table\">\n            <thead>\n              <tr>\n                <th>{gettext(\"Requested on\")}</th>\n                <th className=\"col-md-4\">{gettext(\"Download\")}</th>\n              </tr>\n            </thead>\n            <tbody>\n              {this.state.downloads.map((item) => {\n                return (\n                  <tr key={item.id}>\n                    <td style={rowStyle}>\n                      {moment(item.requested_on).fromNow()}\n                    </td>\n                    <td>\n                      <DownloadButton\n                        exportFile={item.file}\n                        status={item.status}\n                      />\n                    </td>\n                  </tr>\n                )\n              })}\n              {this.state.downloads.length == 0 ? (\n                <tr>\n                  <td colSpan=\"2\">{gettext(\"You have no data downloads.\")}</td>\n                </tr>\n              ) : null}\n            </tbody>\n          </table>\n          <div className=\"panel-footer text-right\">\n            <Button\n              className=\"btn-primary\"\n              loading={this.state.isSubmiting}\n              type=\"button\"\n              onClick={this.handleRequestDataDownload}\n            >\n              {gettext(\"Request data download\")}\n            </Button>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n\nconst rowStyle = {\n  verticalAlign: \"middle\",\n}\n\nconst STATUS_PENDING = 0\nconst STATUS_PROCESSING = 1\n\nconst DownloadButton = ({ exportFile, status }) => {\n  if (status === STATUS_PENDING || status === STATUS_PROCESSING) {\n    return (\n      <Button\n        className=\"btn-info btn-sm btn-block\"\n        disabled={true}\n        type=\"button\"\n      >\n        {gettext(\"Download is being prepared\")}\n      </Button>\n    )\n  }\n\n  if (exportFile) {\n    return (\n      <a className=\"btn btn-success btn-sm btn-block\" href={exportFile}>\n        {gettext(\"Download your data\")}\n      </a>\n    )\n  }\n\n  return (\n    <Button\n      className=\"btn-default btn-sm btn-block\"\n      disabled={true}\n      type=\"button\"\n    >\n      {gettext(\"Download is expired\")}\n    </Button>\n  )\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport Select from \"misago/components/select\"\nimport YesNoSwitch from \"misago/components/yes-no-switch\"\nimport { patch } from \"misago/reducers/auth\"\nimport ajax from \"misago/services/ajax\"\nimport title from \"misago/services/page-title\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      is_hiding_presence: props.user.is_hiding_presence,\n      limits_private_thread_invites_to:\n        props.user.limits_private_thread_invites_to,\n      subscribe_to_started_threads: props.user.subscribe_to_started_threads,\n      subscribe_to_replied_threads: props.user.subscribe_to_replied_threads,\n\n      errors: {},\n    }\n\n    this.privateThreadInvitesChoices = [\n      {\n        value: 0,\n        icon: \"help_outline\",\n        label: gettext(\"Everybody\"),\n      },\n      {\n        value: 1,\n        icon: \"done_all\",\n        label: gettext(\"Users I follow\"),\n      },\n      {\n        value: 2,\n        icon: \"highlight_off\",\n        label: gettext(\"Nobody\"),\n      },\n    ]\n\n    this.subscribeToChoices = [\n      {\n        value: 0,\n        icon: \"star_border\",\n        label: gettext(\"No\"),\n      },\n      {\n        value: 1,\n        icon: \"star_half\",\n        label: gettext(\"Notify\"),\n      },\n      {\n        value: 2,\n        icon: \"star\",\n        label: gettext(\"Notify with e-mail\"),\n      },\n    ]\n  }\n\n  send() {\n    return ajax.post(this.props.user.api.options, {\n      is_hiding_presence: this.state.is_hiding_presence,\n      limits_private_thread_invites_to:\n        this.state.limits_private_thread_invites_to,\n      subscribe_to_started_threads: this.state.subscribe_to_started_threads,\n      subscribe_to_replied_threads: this.state.subscribe_to_replied_threads,\n    })\n  }\n\n  handleSuccess() {\n    store.dispatch(\n      patch({\n        is_hiding_presence: this.state.is_hiding_presence,\n        limits_private_thread_invites_to:\n          this.state.limits_private_thread_invites_to,\n        subscribe_to_started_threads: this.state.subscribe_to_started_threads,\n        subscribe_to_replied_threads: this.state.subscribe_to_replied_threads,\n      })\n    )\n    snackbar.success(gettext(\"Your forum options have been changed.\"))\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      snackbar.error(gettext(\"Please reload page and try again.\"))\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  componentDidMount() {\n    title.set({\n      title: gettext(\"Forum options\"),\n      parent: gettext(\"Change your options\"),\n    })\n  }\n\n  render() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"panel panel-default panel-form\">\n          <div className=\"panel-heading\">\n            <h3 className=\"panel-title\">{gettext(\"Change forum options\")}</h3>\n          </div>\n          <div className=\"panel-body\">\n            <fieldset>\n              <legend>{gettext(\"Privacy settings\")}</legend>\n\n              <FormGroup\n                label={gettext(\"Hide my presence\")}\n                helpText={gettext(\n                  \"If you hide your presence, only members with permission to see hidden users will see when you are online.\"\n                )}\n                for=\"id_is_hiding_presence\"\n              >\n                <YesNoSwitch\n                  id=\"id_is_hiding_presence\"\n                  disabled={this.state.isLoading}\n                  iconOn=\"visibility_off\"\n                  iconOff=\"visibility\"\n                  labelOn={gettext(\"Hide my presence from other users\")}\n                  labelOff={gettext(\"Show my presence to other users\")}\n                  onChange={this.bindInput(\"is_hiding_presence\")}\n                  value={this.state.is_hiding_presence}\n                />\n              </FormGroup>\n\n              <FormGroup\n                label={gettext(\"Private thread invitations\")}\n                for=\"id_limits_private_thread_invites_to\"\n              >\n                <Select\n                  id=\"id_limits_private_thread_invites_to\"\n                  disabled={this.state.isLoading}\n                  onChange={this.bindInput(\"limits_private_thread_invites_to\")}\n                  value={this.state.limits_private_thread_invites_to}\n                  choices={this.privateThreadInvitesChoices}\n                />\n              </FormGroup>\n            </fieldset>\n\n            <fieldset>\n              <legend>{gettext(\"Automatic subscriptions\")}</legend>\n\n              <FormGroup\n                label={gettext(\"Threads I start\")}\n                for=\"id_subscribe_to_started_threads\"\n              >\n                <Select\n                  id=\"id_subscribe_to_started_threads\"\n                  disabled={this.state.isLoading}\n                  onChange={this.bindInput(\"subscribe_to_started_threads\")}\n                  value={this.state.subscribe_to_started_threads}\n                  choices={this.subscribeToChoices}\n                />\n              </FormGroup>\n\n              <FormGroup\n                label={gettext(\"Threads I reply to\")}\n                for=\"id_subscribe_to_replied_threads\"\n              >\n                <Select\n                  id=\"id_subscribe_to_replied_threads\"\n                  disabled={this.state.isLoading}\n                  onChange={this.bindInput(\"subscribe_to_replied_threads\")}\n                  value={this.state.subscribe_to_replied_threads}\n                  choices={this.subscribeToChoices}\n                />\n              </FormGroup>\n            </fieldset>\n          </div>\n          <div className=\"panel-footer\">\n            <Button className=\"btn-primary\" loading={this.state.isLoading}>\n              {gettext(\"Save changes\")}\n            </Button>\n          </div>\n        </div>\n      </form>\n    )\n  }\n}\n","import React from \"react\"\nimport PanelLoader from \"misago/components/panel-loader\"\n\nexport default function () {\n  return (\n    <div className=\"panel panel-default panel-form\">\n      <div className=\"panel-heading\">\n        <h3 className=\"panel-title\">{gettext(\"Change username\")}</h3>\n      </div>\n      <PanelLoader />\n    </div>\n  )\n}\n","import React from \"react\"\nimport PanelMessage from \"misago/components/panel-message\"\n\nexport default class extends React.Component {\n  getHelpText() {\n    if (this.props.options.next_on) {\n      return interpolate(\n        gettext(\"You will be able to change your username %(next_change)s.\"),\n        { next_change: this.props.options.next_on.fromNow() },\n        true\n      )\n    } else {\n      return gettext(\"You have used up available name changes.\")\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"panel panel-default panel-form\">\n        <div className=\"panel-heading\">\n          <h3 className=\"panel-title\">{gettext(\"Change username\")}</h3>\n        </div>\n        <PanelMessage\n          helpText={this.getHelpText()}\n          message={gettext(\"You can't change your username at the moment.\")}\n        />\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport * as validators from \"misago/utils/validators\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      username: \"\",\n\n      validators: {\n        username: [\n          validators.usernameContent(),\n          validators.usernameMinLength(props.options.length_min),\n          validators.usernameMaxLength(props.options.length_max),\n        ],\n      },\n\n      isLoading: false,\n    }\n  }\n\n  getHelpText() {\n    let phrases = []\n\n    if (this.props.options.changes_left > 0) {\n      let message = ngettext(\n        \"You can change your username %(changes_left)s more time.\",\n        \"You can change your username %(changes_left)s more times.\",\n        this.props.options.changes_left\n      )\n\n      phrases.push(\n        interpolate(\n          message,\n          {\n            changes_left: this.props.options.changes_left,\n          },\n          true\n        )\n      )\n    }\n\n    if (this.props.user.acl.name_changes_expire > 0) {\n      let message = ngettext(\n        \"Used changes become available again after %(name_changes_expire)s day.\",\n        \"Used changes become available again after %(name_changes_expire)s days.\",\n        this.props.user.acl.name_changes_expire\n      )\n\n      phrases.push(\n        interpolate(\n          message,\n          {\n            name_changes_expire: this.props.user.acl.name_changes_expire,\n          },\n          true\n        )\n      )\n    }\n\n    return phrases.length ? phrases.join(\" \") : null\n  }\n\n  clean() {\n    let errors = this.validate()\n    if (errors.username) {\n      snackbar.error(errors.username[0])\n      return false\n    }\n    if (this.state.username.trim() === this.props.user.username) {\n      snackbar.info(gettext(\"Your new username is same as current one.\"))\n      return false\n    } else {\n      return true\n    }\n  }\n\n  send() {\n    return ajax.post(this.props.user.api.username, {\n      username: this.state.username,\n    })\n  }\n\n  handleSuccess(success) {\n    this.setState({\n      username: \"\",\n    })\n\n    this.props.complete(success.username, success.slug, success.options)\n  }\n\n  handleError(rejection) {\n    snackbar.apiError(rejection)\n  }\n\n  render() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"panel panel-default panel-form\">\n          <div className=\"panel-heading\">\n            <h3 className=\"panel-title\">{gettext(\"Change username\")}</h3>\n          </div>\n          <div className=\"panel-body\">\n            <FormGroup\n              label={gettext(\"New username\")}\n              for=\"id_username\"\n              helpText={this.getHelpText()}\n            >\n              <input\n                type=\"text\"\n                id=\"id_username\"\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                onChange={this.bindInput(\"username\")}\n                value={this.state.username}\n              />\n            </FormGroup>\n          </div>\n          <div className=\"panel-footer\">\n            <Button className=\"btn-primary\" loading={this.state.isLoading}>\n              {gettext(\"Change username\")}\n            </Button>\n          </div>\n        </div>\n      </form>\n    )\n  }\n}\n","import moment from \"moment\"\nimport React from \"react\"\nimport FormLoading from \"misago/components/options/change-username/form-loading\"\nimport FormLocked from \"misago/components/options/change-username/form-locked\"\nimport Form from \"misago/components/options/change-username/form\"\nimport UsernameHistory from \"misago/components/username-history/root\"\nimport misago from \"misago/index\"\nimport { hydrate, addNameChange } from \"misago/reducers/username-history\"\nimport { updateUsername } from \"misago/reducers/users\"\nimport ajax from \"misago/services/ajax\"\nimport title from \"misago/services/page-title\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoaded: false,\n      options: null,\n    }\n  }\n\n  componentDidMount() {\n    title.set({\n      title: gettext(\"Change username\"),\n      parent: gettext(\"Change your options\"),\n    })\n\n    Promise.all([\n      ajax.get(this.props.user.api.username),\n      ajax.get(misago.get(\"USERNAME_CHANGES_API\"), {\n        user: this.props.user.id,\n      }),\n    ]).then((data) => {\n      store.dispatch(hydrate(data[1].results))\n\n      this.setState({\n        isLoaded: true,\n        options: {\n          changes_left: data[0].changes_left,\n          length_min: data[0].length_min,\n          length_max: data[0].length_max,\n          next_on: data[0].next_on ? moment(data[0].next_on) : null,\n        },\n      })\n    })\n  }\n\n  onComplete = (username, slug, options) => {\n    this.setState({\n      options,\n    })\n\n    store.dispatch(\n      addNameChange({ username, slug }, this.props.user, this.props.user)\n    )\n    store.dispatch(updateUsername(this.props.user, username, slug))\n\n    snackbar.success(gettext(\"Your username has been changed successfully.\"))\n  }\n\n  getChangeForm() {\n    if (!this.state.isLoaded) {\n      return <FormLoading />\n    }\n\n    if (this.state.options.changes_left === 0) {\n      return <FormLocked options={this.state.options} />\n    }\n\n    return (\n      <Form\n        complete={this.onComplete}\n        options={this.state.options}\n        user={this.props.user}\n      />\n    )\n  }\n\n  render() {\n    return (\n      <div>\n        {this.getChangeForm()}\n        <UsernameHistory\n          changes={this.props[\"username-history\"]}\n          isLoaded={this.state.isLoaded}\n        />\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport * as validators from \"misago/utils/validators\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      new_email: \"\",\n      password: \"\",\n\n      validators: {\n        new_email: [validators.email()],\n        password: [],\n      },\n\n      isLoading: false,\n    }\n  }\n\n  clean() {\n    let errors = this.validate()\n    let lengths = [\n      this.state.new_email.trim().length,\n      this.state.password.trim().length,\n    ]\n\n    if (lengths.indexOf(0) !== -1) {\n      snackbar.error(gettext(\"Fill out all fields.\"))\n      return false\n    }\n\n    if (errors.new_email) {\n      snackbar.error(errors.new_email[0])\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.post(this.props.user.api.change_email, {\n      new_email: this.state.new_email,\n      password: this.state.password,\n    })\n  }\n\n  handleSuccess(response) {\n    this.setState({\n      new_email: \"\",\n      password: \"\",\n    })\n\n    snackbar.success(response.detail)\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      if (rejection.new_email) {\n        snackbar.error(rejection.new_email)\n      } else {\n        snackbar.error(rejection.password)\n      }\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <input type=\"type\" style={{ display: \"none\" }} />\n        <input type=\"password\" style={{ display: \"none\" }} />\n        <div className=\"panel panel-default panel-form\">\n          <div className=\"panel-heading\">\n            <h3 className=\"panel-title\">{gettext(\"Change e-mail address\")}</h3>\n          </div>\n          <div className=\"panel-body\">\n            <FormGroup label={gettext(\"New e-mail\")} for=\"id_new_email\">\n              <input\n                type=\"text\"\n                id=\"id_new_email\"\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                onChange={this.bindInput(\"new_email\")}\n                value={this.state.new_email}\n              />\n            </FormGroup>\n\n            <hr />\n\n            <FormGroup\n              label={gettext(\"Your current password\")}\n              for=\"id_confirm_email\"\n            >\n              <input\n                type=\"password\"\n                id=\"id_confirm_email\"\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                onChange={this.bindInput(\"password\")}\n                value={this.state.password}\n              />\n            </FormGroup>\n          </div>\n          <div className=\"panel-footer\">\n            <Button className=\"btn-primary\" loading={this.state.isLoading}>\n              {gettext(\"Change e-mail\")}\n            </Button>\n          </div>\n        </div>\n      </form>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      new_password: \"\",\n      repeat_password: \"\",\n      password: \"\",\n\n      validators: {\n        new_password: [],\n        repeat_password: [],\n        password: [],\n      },\n\n      isLoading: false,\n    }\n  }\n\n  clean() {\n    let errors = this.validate()\n    let lengths = [\n      this.state.new_password.trim().length,\n      this.state.repeat_password.trim().length,\n      this.state.password.trim().length,\n    ]\n\n    if (lengths.indexOf(0) !== -1) {\n      snackbar.error(gettext(\"Fill out all fields.\"))\n      return false\n    }\n\n    if (errors.new_password) {\n      snackbar.error(errors.new_password[0])\n      return false\n    }\n\n    if (this.state.new_password !== this.state.repeat_password) {\n      snackbar.error(gettext(\"New passwords are different.\"))\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.post(this.props.user.api.change_password, {\n      new_password: this.state.new_password,\n      password: this.state.password,\n    })\n  }\n\n  handleSuccess(response) {\n    this.setState({\n      new_password: \"\",\n      repeat_password: \"\",\n      password: \"\",\n    })\n\n    snackbar.success(response.detail)\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      if (rejection.new_password) {\n        snackbar.error(rejection.new_password)\n      } else {\n        snackbar.error(rejection.password)\n      }\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <input type=\"type\" style={{ display: \"none\" }} />\n        <input type=\"password\" style={{ display: \"none\" }} />\n        <div className=\"panel panel-default panel-form\">\n          <div className=\"panel-heading\">\n            <h3 className=\"panel-title\">{gettext(\"Change password\")}</h3>\n          </div>\n          <div className=\"panel-body\">\n            <FormGroup label={gettext(\"New password\")} for=\"id_new_password\">\n              <input\n                type=\"password\"\n                id=\"id_new_password\"\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                onChange={this.bindInput(\"new_password\")}\n                value={this.state.new_password}\n              />\n            </FormGroup>\n\n            <FormGroup\n              label={gettext(\"Repeat password\")}\n              for=\"id_repeat_password\"\n            >\n              <input\n                type=\"password\"\n                id=\"id_repeat_password\"\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                onChange={this.bindInput(\"repeat_password\")}\n                value={this.state.repeat_password}\n              />\n            </FormGroup>\n\n            <hr />\n\n            <FormGroup\n              label={gettext(\"Your current password\")}\n              for=\"id_confirm_password\"\n            >\n              <input\n                type=\"password\"\n                id=\"id_confirm_password\"\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                onChange={this.bindInput(\"password\")}\n                value={this.state.password}\n              />\n            </FormGroup>\n          </div>\n          <div className=\"panel-footer\">\n            <Button className=\"btn-primary\" loading={this.state.isLoading}>\n              {gettext(\"Change password\")}\n            </Button>\n          </div>\n        </div>\n      </form>\n    )\n  }\n}\n","import React from \"react\"\nimport misago from \"misago/index\"\n\nconst UnusablePasswordMessage = () => {\n  return (\n    <div className=\"panel panel-default panel-form\">\n      <div className=\"panel-heading\">\n        <h3 className=\"panel-title\">{gettext(\"Change email or password\")}</h3>\n      </div>\n      <div className=\"panel-body panel-message-body\">\n        <div className=\"message-icon\">\n          <span className=\"material-icon\">info_outline</span>\n        </div>\n        <div className=\"message-body\">\n          <p className=\"lead\">\n            {gettext(\n              \"You need to set a password for your account to be able to change your username or email.\"\n            )}\n          </p>\n          <p className=\"help-block\">\n            <a\n              className=\"btn btn-primary\"\n              href={misago.get(\"FORGOTTEN_PASSWORD_URL\")}\n            >\n              {gettext(\"Set password\")}\n            </a>\n          </p>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default UnusablePasswordMessage\n","import React from \"react\"\nimport ChangeEmail from \"misago/components/options/sign-in-credentials/change-email\"\nimport ChangePassword from \"misago/components/options/sign-in-credentials/change-password\"\nimport misago from \"misago/index\"\nimport title from \"misago/services/page-title\"\nimport UnusablePasswordMessage from \"./UnusablePasswordMessage\"\n\nexport default class extends React.Component {\n  componentDidMount() {\n    title.set({\n      title: gettext(\"Change email or password\"),\n      parent: gettext(\"Change your options\"),\n    })\n  }\n\n  render() {\n    if (!this.props.user.has_usable_password) {\n      return <UnusablePasswordMessage />\n    }\n\n    return (\n      <div>\n        <ChangeEmail user={this.props.user} />\n        <ChangePassword user={this.props.user} />\n\n        <p className=\"message-line\">\n          <span className=\"material-icon\">warning</span>\n          <a href={misago.get(\"FORGOTTEN_PASSWORD_URL\")}>\n            {gettext(\"Change forgotten password\")}\n          </a>\n        </p>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport { connect } from \"react-redux\"\nimport { SideNav, CompactNav } from \"misago/components/options/navs\"\nimport DeleteAccount from \"misago/components/options/delete-account\"\nimport EditDetails from \"misago/components/options/edit-details\"\nimport DownloadData from \"misago/components/options/download-data\"\nimport ChangeForumOptions from \"misago/components/options/forum-options\"\nimport ChangeUsername from \"misago/components/options/change-username/root\"\nimport ChangeSignInCredentials from \"misago/components/options/sign-in-credentials/root\"\nimport WithDropdown from \"misago/components/with-dropdown\"\nimport misago from \"misago/index\"\nimport { FlexRow, FlexRowCol, FlexRowSection } from \"../FlexRow\"\nimport PageContainer from \"../PageContainer\"\nimport {\n  PageHeader,\n  PageHeaderBanner,\n  PageHeaderContainer,\n} from \"../PageHeader\"\n\nexport default class extends WithDropdown {\n  render() {\n    const page = misago.get(\"USER_OPTIONS\").filter((page) => {\n      const url = misago.get(\"USERCP_URL\") + page.component + \"/\"\n      return this.props.location.pathname.substr(0, url.length) === url\n    })[0]\n\n    return (\n      <div className=\"page page-options\">\n        <PageHeaderContainer>\n          <PageHeader styleName=\"options\">\n            <PageHeaderBanner styleName=\"options\">\n              <FlexRow>\n                <FlexRowSection auto>\n                  <FlexRowCol auto>\n                    <h1>{gettext(\"Change your options\")}</h1>\n                  </FlexRowCol>\n                  <FlexRowCol className=\"hidden-xs hidden-md hidden-lg\" shrink>\n                    <div className=\"dropdown\">\n                      <button\n                        type=\"button\"\n                        className=\"btn btn-default btn-outline btn-icon dropdown-toggle\"\n                        title={gettext(\"Menu\")}\n                        data-toggle=\"dropdown\"\n                        aria-haspopup=\"true\"\n                        aria-expanded=\"false\"\n                      >\n                        <span className=\"material-icon\">menu</span>\n                      </button>\n                      <CompactNav\n                        className=\"dropdown-menu dropdown-menu-right\"\n                        baseUrl={misago.get(\"USERCP_URL\")}\n                        options={misago.get(\"USER_OPTIONS\")}\n                      />\n                    </div>\n                  </FlexRowCol>\n                </FlexRowSection>\n                <FlexRowSection className=\"hidden-sm hidden-md hidden-lg\">\n                  <FlexRowCol>\n                    <div className=\"dropdown\">\n                      <button\n                        type=\"button\"\n                        className=\"btn btn-default btn-outline btn-block dropdown-toggle\"\n                        data-toggle=\"dropdown\"\n                        aria-haspopup=\"true\"\n                        aria-expanded=\"false\"\n                      >\n                        <span className=\"material-icon\">{page.icon}</span>\n                        {page.name}\n                      </button>\n                      <CompactNav\n                        className=\"dropdown-menu\"\n                        baseUrl={misago.get(\"USERCP_URL\")}\n                        options={misago.get(\"USER_OPTIONS\")}\n                      />\n                    </div>\n                  </FlexRowCol>\n                </FlexRowSection>\n              </FlexRow>\n            </PageHeaderBanner>\n          </PageHeader>\n        </PageHeaderContainer>\n        <PageContainer>\n          <div className=\"row\">\n            <div className=\"col-md-3 hidden-xs hidden-sm\">\n              <SideNav\n                baseUrl={misago.get(\"USERCP_URL\")}\n                options={misago.get(\"USER_OPTIONS\")}\n              />\n            </div>\n            <div className=\"col-md-9\">{this.props.children}</div>\n          </div>\n        </PageContainer>\n      </div>\n    )\n  }\n}\n\nexport function select(store) {\n  return {\n    tick: store.tick.tick,\n    user: store.auth.user,\n    \"username-history\": store[\"username-history\"],\n  }\n}\n\nexport function paths() {\n  const paths = [\n    {\n      path: misago.get(\"USERCP_URL\") + \"forum-options/\",\n      component: connect(select)(ChangeForumOptions),\n    },\n    {\n      path: misago.get(\"USERCP_URL\") + \"edit-details/\",\n      component: connect(select)(EditDetails),\n    },\n  ]\n\n  const delegateAuth = misago.get(\"SETTINGS\").DELEGATE_AUTH\n  if (!delegateAuth)  {\n    paths.push({\n      path: misago.get(\"USERCP_URL\") + \"change-username/\",\n      component: connect(select)(ChangeUsername),\n    })\n    paths.push({\n      path: misago.get(\"USERCP_URL\") + \"sign-in-credentials/\",\n      component: connect(select)(ChangeSignInCredentials),\n    })\n  }\n\n  if (misago.get(\"ENABLE_DOWNLOAD_OWN_DATA\")) {\n    paths.push({\n      path: misago.get(\"USERCP_URL\") + \"download-data/\",\n      component: connect(select)(DownloadData),\n    })\n  }\n\n  if (!delegateAuth && misago.get(\"ENABLE_DELETE_OWN_ACCOUNT\")) {\n    paths.push({\n      path: misago.get(\"USERCP_URL\") + \"delete-account/\",\n      component: connect(select)(DeleteAccount),\n    })\n  }\n\n  return paths\n}\n","import Options, { paths } from \"misago/components/options/root\"\nimport misago from \"misago/index\"\nimport mount from \"misago/utils/routed-component\"\n\nexport default function initializer(context) {\n  if (context.has(\"USER_OPTIONS\")) {\n    mount({\n      root: misago.get(\"USERCP_URL\"),\n      component: Options,\n      paths: paths(),\n    })\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:options\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import moment from \"moment\"\nimport React from \"react\"\nimport PanelLoader from \"misago/components/panel-loader\"\nimport PanelMessage from \"misago/components/panel-message\"\nimport misago from \"misago/index\"\nimport polls from \"misago/services/polls\"\nimport title from \"misago/services/page-title\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    if (misago.has(\"PROFILE_BAN\")) {\n      this.initWithPreloadedData(misago.pop(\"PROFILE_BAN\"))\n    } else {\n      this.initWithoutPreloadedData()\n    }\n\n    this.startPolling(props.profile.api.ban)\n  }\n\n  initWithPreloadedData(ban) {\n    if (ban.expires_on) {\n      ban.expires_on = moment(ban.expires_on)\n    }\n\n    this.state = {\n      isLoaded: true,\n      ban,\n    }\n  }\n\n  initWithoutPreloadedData() {\n    this.state = {\n      isLoaded: false,\n    }\n  }\n\n  startPolling(api) {\n    polls.start({\n      poll: \"ban-details\",\n      url: api,\n      frequency: 90 * 1000,\n      update: this.update,\n      error: this.error,\n    })\n  }\n\n  update = (ban) => {\n    if (ban.expires_on) {\n      ban.expires_on = moment(ban.expires_on)\n    }\n\n    this.setState({\n      isLoaded: true,\n      error: null,\n\n      ban,\n    })\n  }\n\n  error = (error) => {\n    this.setState({\n      isLoaded: true,\n      error: error.detail,\n      ban: null,\n    })\n  }\n\n  componentDidMount() {\n    title.set({\n      title: gettext(\"Ban details\"),\n      parent: this.props.profile.username,\n    })\n  }\n\n  componentWillUnmount() {\n    polls.stop(\"ban-details\")\n  }\n\n  getUserMessage() {\n    if (this.state.ban.user_message) {\n      return (\n        <div className=\"panel-body ban-message ban-user-message\">\n          <h4>{gettext(\"User-shown ban message\")}</h4>\n          <div\n            className=\"lead\"\n            dangerouslySetInnerHTML={{\n              __html: this.state.ban.user_message.html,\n            }}\n          />\n        </div>\n      )\n    } else {\n      return null\n    }\n  }\n\n  getStaffMessage() {\n    if (this.state.ban.staff_message) {\n      return (\n        <div className=\"panel-body ban-message ban-staff-message\">\n          <h4>{gettext(\"Team-shown ban message\")}</h4>\n          <div\n            className=\"lead\"\n            dangerouslySetInnerHTML={{\n              __html: this.state.ban.staff_message.html,\n            }}\n          />\n        </div>\n      )\n    } else {\n      return null\n    }\n  }\n\n  getExpirationMessage() {\n    if (this.state.ban.expires_on) {\n      if (this.state.ban.expires_on.isAfter(moment())) {\n        let title = interpolate(\n          gettext(\"This ban expires on %(expires_on)s.\"),\n          {\n            expires_on: this.state.ban.expires_on.format(\"LL, LT\"),\n          },\n          true\n        )\n\n        let message = interpolate(\n          gettext(\"This ban expires %(expires_on)s.\"),\n          {\n            expires_on: this.state.ban.expires_on.fromNow(),\n          },\n          true\n        )\n\n        return <abbr title={title}>{message}</abbr>\n      } else {\n        return gettext(\"This ban has expired.\")\n      }\n    } else {\n      return interpolate(\n        gettext(\"%(username)s's ban is permanent.\"),\n        {\n          username: this.props.profile.username,\n        },\n        true\n      )\n    }\n  }\n\n  getPanelBody() {\n    if (this.state.ban) {\n      if (Object.keys(this.state.ban).length) {\n        return (\n          <div>\n            {this.getUserMessage()}\n            {this.getStaffMessage()}\n\n            <div className=\"panel-body ban-expires\">\n              <h4>{gettext(\"Ban expiration\")}</h4>\n              <p className=\"lead\">{this.getExpirationMessage()}</p>\n            </div>\n          </div>\n        )\n      } else {\n        return (\n          <div>\n            <PanelMessage\n              message={gettext(\"No ban is active at the moment.\")}\n            />\n          </div>\n        )\n      }\n    } else if (this.state.error) {\n      return (\n        <div>\n          <PanelMessage icon=\"error_outline\" message={this.state.error} />\n        </div>\n      )\n    } else {\n      return (\n        <div>\n          <PanelLoader />\n        </div>\n      )\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"profile-ban-details\">\n        <div className=\"panel panel-default\">\n          <div className=\"panel-heading\">\n            <h3 className=\"panel-title\">{gettext(\"Ban details\")}</h3>\n          </div>\n\n          {this.getPanelBody()}\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Form from \"misago/components/edit-details\"\n\nexport default function ({ api, display, onCancel, onSuccess }) {\n  if (!display) return null\n\n  return <Form api={api} onCancel={onCancel} onSuccess={onSuccess} />\n}\n","import React from \"react\"\n\nexport default function ({ isAuthenticated, profile }) {\n  let message = null\n  if (isAuthenticated) {\n    message = gettext(\"You are not sharing any details with others.\")\n  } else {\n    message = interpolate(\n      gettext(\"%(username)s is not sharing any details with others.\"),\n      {\n        username: profile.username,\n      },\n      true\n    )\n  }\n\n  return (\n    <div className=\"panel panel-default\">\n      <div className=\"panel-body text-center lead\">{message}</div>\n    </div>\n  )\n}\n","import React from \"react\"\n\nexport default function ({ html, text, url }) {\n  if (html) {\n    return (\n      <div\n        className=\"form-control-static col-md-9\"\n        dangerouslySetInnerHTML={{ __html: html }}\n      />\n    )\n  }\n\n  return (\n    <div className=\"form-control-static col-md-9\">\n      <SafeValue text={text} url={url} />\n    </div>\n  )\n}\n\nexport function SafeValue({ text, url }) {\n  if (url) {\n    return (\n      <p>\n        <a href={url} target=\"_blank\" rel=\"nofollow\">\n          {text || url}\n        </a>\n      </p>\n    )\n  }\n\n  if (text) {\n    return <p>{text}</p>\n  }\n\n  return null\n}\n","import React from \"react\"\nimport FieldValue from \"./field-value\"\n\nexport default function (props) {\n  return (\n    <div className=\"form-group\">\n      <strong className=\"control-label col-md-3\">{props.name}:</strong>\n      <FieldValue {...props} />\n    </div>\n  )\n}\n","import React from \"react\"\nimport Field from \"./field\"\n\nexport default function ({ fields, name }) {\n  return (\n    <div className=\"panel panel-default panel-profile-details-group\">\n      <div className=\"panel-heading\">\n        <h3 className=\"panel-title\">{name}</h3>\n      </div>\n      <div className=\"panel-body\">\n        <div className=\"form-horizontal\">\n          {fields.map(({ fieldname, html, name, text, url }) => {\n            return (\n              <Field\n                key={fieldname}\n                name={name}\n                html={html}\n                text={text}\n                url={url}\n              />\n            )\n          })}\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport EmptyMessage from \"./empty-message\"\nimport Group from \"./group\"\nimport Loader from \"misago/components/loader\"\n\nexport default function ({\n  display,\n  groups,\n  isAuthenticated,\n  loading,\n  profile,\n}) {\n  if (!display) return null\n\n  if (loading) {\n    return <Loader />\n  }\n\n  if (!groups.length) {\n    return <EmptyMessage isAuthenticated={isAuthenticated} profile={profile} />\n  }\n\n  return (\n    <div>\n      {groups.map((group, i) => {\n        return <Group fields={group.fields} key={i} name={group.name} />\n      })}\n    </div>\n  )\n}\n","import React from \"react\"\nimport { Toolbar, ToolbarItem, ToolbarSection } from \"../../Toolbar\"\n\nconst ProfileDetailsHeader = ({ onEdit, showEditButton }) => (\n  <Toolbar>\n    <ToolbarSection auto>\n      <ToolbarItem auto>\n        <h3>{gettext(\"Details\")}</h3>\n      </ToolbarItem>\n    </ToolbarSection>\n    {showEditButton && (\n      <ToolbarSection>\n        <ToolbarItem>\n          <button\n            className=\"btn btn-default btn-outline btn-block\"\n            onClick={onEdit}\n            type=\"button\"\n          >\n            {gettext(\"Edit\")}\n          </button>\n        </ToolbarItem>\n      </ToolbarSection>\n    )}\n  </Toolbar>\n)\n\nexport default ProfileDetailsHeader\n","import React from \"react\"\nimport { load } from \"misago/reducers/profile-details\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends React.Component {\n  componentDidMount() {\n    const { data, dispatch, user } = this.props\n    if (data && data.id === user.id) return\n\n    ajax.get(this.props.user.api.details).then(\n      (data) => {\n        dispatch(load(data))\n      },\n      (rejection) => {\n        snackbar.apiError(rejection)\n      }\n    )\n  }\n\n  render() {\n    return this.props.children\n  }\n}\n","import React from \"react\"\nimport Form from \"./form\"\nimport GroupsList from \"./groups-list\"\nimport Header from \"./header\"\nimport ProfileDetailsData from \"misago/data/profile-details\"\nimport { load as loadDetails } from \"misago/reducers/profile-details\"\nimport title from \"misago/services/page-title\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      editing: false,\n    }\n  }\n\n  componentDidMount() {\n    title.set({\n      title: gettext(\"Details\"),\n      parent: this.props.profile.username,\n    })\n  }\n\n  onCancel = () => {\n    this.setState({ editing: false })\n  }\n\n  onEdit = () => {\n    this.setState({ editing: true })\n  }\n\n  onSuccess = (newDetails) => {\n    const { dispatch, isAuthenticated, profile } = this.props\n\n    let message = null\n    if (isAuthenticated) {\n      message = gettext(\"Your details have been updated.\")\n    } else {\n      message = interpolate(\n        gettext(\"%(username)s's details have been updated.\"),\n        {\n          username: profile.username,\n        },\n        true\n      )\n    }\n\n    snackbar.info(message)\n    dispatch(loadDetails(newDetails))\n    this.setState({ editing: false })\n  }\n\n  render() {\n    const { dispatch, isAuthenticated, profile, profileDetails } = this.props\n    const loading = profileDetails.id !== profile.id\n\n    return (\n      <ProfileDetailsData\n        data={profileDetails}\n        dispatch={dispatch}\n        user={profile}\n      >\n        <div className=\"profile-details\">\n          <Header\n            onEdit={this.onEdit}\n            showEditButton={!!profileDetails.edit && !this.state.editing}\n          />\n          <GroupsList\n            display={!this.state.editing}\n            groups={profileDetails.groups}\n            isAuthenticated={isAuthenticated}\n            loading={loading}\n            profile={profile}\n          />\n          <Form\n            api={profile.api.edit_details}\n            dispatch={dispatch}\n            display={this.state.editing}\n            onCancel={this.onCancel}\n            onSuccess={this.onSuccess}\n          />\n        </div>\n      </ProfileDetailsData>\n    )\n  }\n}\n","import React from \"react\"\nimport PostFeed from \"misago/components/post-feed\"\nimport Button from \"misago/components/button\"\nimport * as posts from \"misago/reducers/posts\"\nimport title from \"misago/services/page-title\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport { Toolbar, ToolbarItem, ToolbarSection } from \"../../Toolbar\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n    }\n  }\n\n  loadItems(start = 0) {\n    ajax\n      .get(this.props.api, {\n        start: start || 0,\n      })\n      .then(\n        (data) => {\n          if (start === 0) {\n            store.dispatch(posts.load(data))\n          } else {\n            store.dispatch(posts.append(data))\n          }\n\n          this.setState({\n            isLoading: false,\n          })\n        },\n        (rejection) => {\n          this.setState({\n            isLoading: false,\n          })\n\n          snackbar.apiError(rejection)\n        }\n      )\n  }\n\n  loadMore = () => {\n    this.setState({\n      isLoading: true,\n    })\n\n    this.loadItems(this.props.posts.next)\n  }\n\n  componentDidMount() {\n    title.set({\n      title: this.props.title,\n      parent: this.props.profile.username,\n    })\n\n    this.loadItems()\n  }\n\n  render() {\n    return (\n      <div className=\"profile-feed\">\n        <Toolbar>\n          <ToolbarSection auto>\n            <ToolbarItem auto>\n              <h3>{this.props.header}</h3>\n            </ToolbarItem>\n          </ToolbarSection>\n        </Toolbar>\n        <Feed\n          isLoading={this.state.isLoading}\n          loadMore={this.loadMore}\n          {...this.props}\n        />\n      </div>\n    )\n  }\n}\n\nexport function Feed(props) {\n  if (props.posts.isLoaded && !props.posts.results.length) {\n    return <p className=\"lead\">{props.emptyMessage}</p>\n  }\n\n  return (\n    <div>\n      <PostFeed\n        isReady={props.posts.isLoaded}\n        posts={props.posts.results}\n        poster={props.profile}\n      />\n      <LoadMoreButton\n        isLoading={props.isLoading}\n        loadMore={props.loadMore}\n        next={props.posts.next}\n      />\n    </div>\n  )\n}\n\nexport function LoadMoreButton(props) {\n  if (!props.next) return null\n\n  return (\n    <div className=\"pager-more\">\n      <Button\n        className=\"btn btn-default btn-outline\"\n        loading={props.isLoading}\n        onClick={props.loadMore}\n      >\n        {gettext(\"Show older activity\")}\n      </Button>\n    </div>\n  )\n}\n","import React from \"react\"\n\nexport default class extends React.Component {\n  getClassName() {\n    if (this.props.className) {\n      return \"form-search \" + this.props.className\n    } else {\n      return \"form-search\"\n    }\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()}>\n        <input\n          type=\"text\"\n          className=\"form-control\"\n          value={this.props.value}\n          onChange={this.props.onChange}\n          placeholder={this.props.placeholder || gettext(\"Search...\")}\n        />\n        <span className=\"material-icon\">search</span>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Search from \"misago/components/quick-search\"\nimport UsersList from \"misago/components/users-list\"\nimport misago from \"misago/index\"\nimport { hydrate, append } from \"misago/reducers/users\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport title from \"misago/services/page-title\"\nimport { Toolbar, ToolbarItem, ToolbarSection } from \"../Toolbar\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.setSpecialProps()\n\n    if (misago.has(this.PRELOADED_DATA_KEY)) {\n      this.initWithPreloadedData(misago.pop(this.PRELOADED_DATA_KEY))\n    } else {\n      this.initWithoutPreloadedData()\n    }\n  }\n\n  setSpecialProps() {\n    this.PRELOADED_DATA_KEY = \"PROFILE_FOLLOWERS\"\n    this.TITLE = gettext(\"Followers\")\n    this.API_FILTER = \"followers\"\n  }\n\n  initWithPreloadedData(data) {\n    this.state = {\n      isLoaded: true,\n      isBusy: false,\n\n      search: \"\",\n\n      count: data.count,\n      more: data.more,\n\n      page: data.page,\n      pages: data.pages,\n    }\n\n    store.dispatch(hydrate(data.results))\n  }\n\n  initWithoutPreloadedData() {\n    this.state = {\n      isLoaded: false,\n      isBusy: false,\n\n      search: \"\",\n\n      count: 0,\n      more: 0,\n\n      page: 1,\n      pages: 1,\n    }\n\n    this.loadUsers()\n  }\n\n  loadUsers(page = 1, search = null) {\n    const apiUrl = this.props.profile.api[this.API_FILTER]\n\n    ajax\n      .get(\n        apiUrl,\n        {\n          search: search,\n          page: page || 1,\n        },\n        \"user-\" + this.API_FILTER\n      )\n      .then(\n        (data) => {\n          if (page === 1) {\n            store.dispatch(hydrate(data.results))\n          } else {\n            store.dispatch(append(data.results))\n          }\n\n          this.setState({\n            isLoaded: true,\n            isBusy: false,\n\n            count: data.count,\n            more: data.more,\n\n            page: data.page,\n            pages: data.pages,\n          })\n        },\n        (rejection) => {\n          snackbar.apiError(rejection)\n        }\n      )\n  }\n\n  componentDidMount() {\n    title.set({\n      title: this.TITLE,\n      parent: this.props.profile.username,\n    })\n  }\n\n  loadMore = () => {\n    this.setState({\n      isBusy: true,\n    })\n\n    this.loadUsers(this.state.page + 1, this.state.search)\n  }\n\n  search = (ev) => {\n    this.setState({\n      isLoaded: false,\n      isBusy: true,\n\n      search: ev.target.value,\n\n      count: 0,\n      more: 0,\n\n      page: 1,\n      pages: 1,\n    })\n\n    this.loadUsers(1, ev.target.value)\n  }\n\n  getLabel() {\n    if (!this.state.isLoaded) {\n      return gettext(\"Loading...\")\n    } else if (this.state.search) {\n      let message = ngettext(\n        \"Found %(users)s user.\",\n        \"Found %(users)s users.\",\n        this.state.count\n      )\n\n      return interpolate(\n        message,\n        {\n          users: this.state.count,\n        },\n        true\n      )\n    } else if (this.props.profile.id === this.props.user.id) {\n      let message = ngettext(\n        \"You have %(users)s follower.\",\n        \"You have %(users)s followers.\",\n        this.state.count\n      )\n\n      return interpolate(\n        message,\n        {\n          users: this.state.count,\n        },\n        true\n      )\n    } else {\n      let message = ngettext(\n        \"%(username)s has %(users)s follower.\",\n        \"%(username)s has %(users)s followers.\",\n        this.state.count\n      )\n\n      return interpolate(\n        message,\n        {\n          username: this.props.profile.username,\n          users: this.state.count,\n        },\n        true\n      )\n    }\n  }\n\n  getEmptyMessage() {\n    if (this.state.search) {\n      return gettext(\"Search returned no users matching specified criteria.\")\n    } else if (this.props.user.id === this.props.profile.id) {\n      return gettext(\"You have no followers.\")\n    } else {\n      return interpolate(\n        gettext(\"%(username)s has no followers.\"),\n        {\n          username: this.props.profile.username,\n        },\n        true\n      )\n    }\n  }\n\n  getMoreButton() {\n    if (!this.state.more) return null\n\n    return (\n      <div className=\"pager-more\">\n        <Button\n          className=\"btn btn-default btn-outline\"\n          loading={this.state.isBusy}\n          onClick={this.loadMore}\n        >\n          {interpolate(\n            gettext(\"Show more (%(more)s)\"),\n            {\n              more: this.state.more,\n            },\n            true\n          )}\n        </Button>\n      </div>\n    )\n  }\n\n  getListBody() {\n    if (this.state.isLoaded && this.state.count === 0) {\n      return <p className=\"lead\">{this.getEmptyMessage()}</p>\n    }\n\n    return (\n      <div>\n        <UsersList\n          cols={3}\n          isReady={this.state.isLoaded}\n          users={this.props.users}\n        />\n\n        {this.getMoreButton()}\n      </div>\n    )\n  }\n\n  getClassName() {\n    return \"profile-\" + this.API_FILTER\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()}>\n        <Toolbar>\n          <ToolbarSection auto>\n            <ToolbarItem auto>\n              <h3>{this.getLabel()}</h3>\n            </ToolbarItem>\n          </ToolbarSection>\n          <ToolbarSection>\n            <ToolbarItem>\n              <Search\n                value={this.state.search}\n                onChange={this.search}\n                placeholder={gettext(\"Search users...\")}\n              />\n            </ToolbarItem>\n          </ToolbarSection>\n        </Toolbar>\n\n        {this.getListBody()}\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Followers from \"misago/components/profile/followers\"\n\nexport default class extends Followers {\n  setSpecialProps() {\n    this.PRELOADED_DATA_KEY = \"PROFILE_FOLLOWS\"\n    this.TITLE = gettext(\"Follows\")\n    this.API_FILTER = \"follows\"\n  }\n\n  getLabel() {\n    if (!this.state.isLoaded) {\n      return gettext(\"Loading...\")\n    } else if (this.state.search) {\n      let message = ngettext(\n        \"Found %(users)s user.\",\n        \"Found %(users)s users.\",\n        this.state.count\n      )\n\n      return interpolate(\n        message,\n        {\n          users: this.state.count,\n        },\n        true\n      )\n    } else if (this.props.profile.id === this.props.user.id) {\n      let message = ngettext(\n        \"You are following %(users)s user.\",\n        \"You are following %(users)s users.\",\n        this.state.count\n      )\n\n      return interpolate(\n        message,\n        {\n          users: this.state.count,\n        },\n        true\n      )\n    } else {\n      let message = ngettext(\n        \"%(username)s is following %(users)s user.\",\n        \"%(username)s is following %(users)s users.\",\n        this.state.count\n      )\n\n      return interpolate(\n        message,\n        {\n          username: this.props.profile.username,\n          users: this.state.count,\n        },\n        true\n      )\n    }\n  }\n\n  getEmptyMessage() {\n    if (this.state.search) {\n      return gettext(\"Search returned no users matching specified criteria.\")\n    } else if (this.props.user.id === this.props.profile.id) {\n      return gettext(\"You are not following any users.\")\n    } else {\n      return interpolate(\n        gettext(\"%(username)s is not following any users.\"),\n        {\n          username: this.props.profile.username,\n        },\n        true\n      )\n    }\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Search from \"misago/components/quick-search\"\nimport UsernameHistory from \"misago/components/username-history/root\"\nimport misago from \"misago/index\"\nimport { hydrate, append } from \"misago/reducers/username-history\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport title from \"misago/services/page-title\"\nimport { Toolbar, ToolbarItem, ToolbarSection } from \"../Toolbar\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    if (misago.has(\"PROFILE_NAME_HISTORY\")) {\n      this.initWithPreloadedData(misago.pop(\"PROFILE_NAME_HISTORY\"))\n    } else {\n      this.initWithoutPreloadedData()\n    }\n  }\n\n  initWithPreloadedData(data) {\n    this.state = {\n      isLoaded: true,\n      isBusy: false,\n\n      search: \"\",\n\n      count: data.count,\n      more: data.more,\n\n      page: data.page,\n      pages: data.pages,\n    }\n\n    store.dispatch(hydrate(data.results))\n  }\n\n  initWithoutPreloadedData() {\n    this.state = {\n      isLoaded: false,\n      isBusy: false,\n\n      search: \"\",\n\n      count: 0,\n      more: 0,\n\n      page: 1,\n      pages: 1,\n    }\n\n    this.loadChanges()\n  }\n\n  loadChanges(page = 1, search = null) {\n    ajax\n      .get(\n        misago.get(\"USERNAME_CHANGES_API\"),\n        {\n          user: this.props.profile.id,\n          search: search,\n          page: page || 1,\n        },\n        \"search-username-history\"\n      )\n      .then(\n        (data) => {\n          if (page === 1) {\n            store.dispatch(hydrate(data.results))\n          } else {\n            store.dispatch(append(data.results))\n          }\n\n          this.setState({\n            isLoaded: true,\n            isBusy: false,\n\n            count: data.count,\n            more: data.more,\n\n            page: data.page,\n            pages: data.pages,\n          })\n        },\n        (rejection) => {\n          snackbar.apiError(rejection)\n        }\n      )\n  }\n\n  componentDidMount() {\n    title.set({\n      title: gettext(\"Username history\"),\n      parent: this.props.profile.username,\n    })\n  }\n\n  loadMore = () => {\n    this.setState({\n      isBusy: true,\n    })\n\n    this.loadChanges(this.state.page + 1, this.state.search)\n  }\n\n  search = (ev) => {\n    this.setState({\n      isLoaded: false,\n      isBusy: true,\n\n      search: ev.target.value,\n\n      count: 0,\n      more: 0,\n\n      page: 1,\n      pages: 1,\n    })\n\n    this.loadChanges(1, ev.target.value)\n  }\n\n  getLabel() {\n    if (!this.state.isLoaded) {\n      return gettext(\"Loading...\")\n    } else if (this.state.search) {\n      let message = ngettext(\n        \"Found %(changes)s username change.\",\n        \"Found %(changes)s username changes.\",\n        this.state.count\n      )\n\n      return interpolate(\n        message,\n        {\n          changes: this.state.count,\n        },\n        true\n      )\n    } else if (this.props.profile.id === this.props.user.id) {\n      let message = ngettext(\n        \"Your username was changed %(changes)s time.\",\n        \"Your username was changed %(changes)s times.\",\n        this.state.count\n      )\n\n      return interpolate(\n        message,\n        {\n          changes: this.state.count,\n        },\n        true\n      )\n    } else {\n      let message = ngettext(\n        \"%(username)s's username was changed %(changes)s time.\",\n        \"%(username)s's username was changed %(changes)s times.\",\n        this.state.count\n      )\n\n      return interpolate(\n        message,\n        {\n          username: this.props.profile.username,\n          changes: this.state.count,\n        },\n        true\n      )\n    }\n  }\n\n  getEmptyMessage() {\n    if (this.state.search) {\n      return gettext(\n        \"Search returned no username changes matching specified criteria.\"\n      )\n    } else if (this.props.user.id === this.props.profile.id) {\n      return gettext(\"No name changes have been recorded for your account.\")\n    } else {\n      return interpolate(\n        gettext(\"%(username)s's username was never changed.\"),\n        {\n          username: this.props.profile.username,\n        },\n        true\n      )\n    }\n  }\n\n  getMoreButton() {\n    if (!this.state.more) return null\n\n    return (\n      <div className=\"pager-more\">\n        <Button\n          className=\"btn btn-default btn-outline\"\n          loading={this.state.isBusy}\n          onClick={this.loadMore}\n        >\n          {interpolate(\n            gettext(\"Show older (%(more)s)\"),\n            {\n              more: this.state.more,\n            },\n            true\n          )}\n        </Button>\n      </div>\n    )\n  }\n\n  render() {\n    return (\n      <div className=\"profile-username-history\">\n        <Toolbar>\n          <ToolbarSection auto>\n            <ToolbarItem auto>\n              <h3>{this.getLabel()}</h3>\n            </ToolbarItem>\n          </ToolbarSection>\n          <ToolbarSection>\n            <ToolbarItem>\n              <Search\n                value={this.state.search}\n                onChange={this.search}\n                placeholder={gettext(\"Search history...\")}\n              />\n            </ToolbarItem>\n          </ToolbarSection>\n        </Toolbar>\n\n        <UsernameHistory\n          isLoaded={this.state.isLoaded}\n          emptyMessage={this.getEmptyMessage()}\n          changes={this.props[\"username-history\"]}\n        />\n\n        {this.getMoreButton()}\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport { patch } from \"misago/reducers/profile\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n    }\n  }\n\n  getClassName() {\n    if (this.props.profile.is_followed) {\n      return this.props.className + \" btn-default btn-following\"\n    } else {\n      return this.props.className + \" btn-default btn-follow\"\n    }\n  }\n\n  getIcon() {\n    if (this.props.profile.is_followed) {\n      return \"favorite\"\n    } else {\n      return \"favorite_border\"\n    }\n  }\n\n  getLabel() {\n    if (this.props.profile.is_followed) {\n      return gettext(\"Following\")\n    } else {\n      return gettext(\"Follow\")\n    }\n  }\n\n  action = () => {\n    this.setState({\n      isLoading: true,\n    })\n\n    if (this.props.profile.is_followed) {\n      store.dispatch(\n        patch({\n          is_followed: false,\n          followers: this.props.profile.followers - 1,\n        })\n      )\n    } else {\n      store.dispatch(\n        patch({\n          is_followed: true,\n          followers: this.props.profile.followers + 1,\n        })\n      )\n    }\n\n    ajax.post(this.props.profile.api.follow).then(\n      (data) => {\n        this.setState({\n          isLoading: false,\n        })\n\n        store.dispatch(patch(data))\n      },\n      (rejection) => {\n        this.setState({\n          isLoading: false,\n        })\n        snackbar.apiError(rejection)\n      }\n    )\n  }\n\n  render() {\n    return (\n      <Button\n        className={this.getClassName()}\n        disabled={this.state.isLoading}\n        onClick={this.action}\n      >\n        <span className=\"material-icon\">{this.getIcon()}</span>\n        {this.getLabel()}\n      </Button>\n    )\n  }\n}\n","import React from \"react\"\nimport posting from \"misago/services/posting\"\nimport misago from \"misago\"\n\nexport default class extends React.Component {\n  onClick = () => {\n    posting.open({\n      mode: \"START_PRIVATE\",\n      submit: misago.get(\"PRIVATE_THREADS_API\"),\n\n      to: [this.props.profile],\n    })\n  }\n\n  render() {\n    const canMessage = this.props.user.acl.can_start_private_threads\n    const isProfileOwner = this.props.user.id === this.props.profile.id\n\n    if (!canMessage || isProfileOwner) return null\n\n    return (\n      <button\n        className={this.props.className}\n        onClick={this.onClick}\n        type=\"button\"\n      >\n        <span className=\"material-icon\">comment</span>\n        {gettext(\"Message\")}\n      </button>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport Loader from \"misago/components/modal-loader\"\nimport YesNoSwitch from \"misago/components/yes-no-switch\"\nimport ModalMessage from \"misago/components/modal-message\"\nimport { updateAvatar } from \"misago/reducers/users\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoaded: false,\n      isLoading: false,\n      error: null,\n\n      is_avatar_locked: \"\",\n      avatar_lock_user_message: \"\",\n      avatar_lock_staff_message: \"\",\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(this.props.profile.api.moderate_avatar).then(\n      (options) => {\n        this.setState({\n          isLoaded: true,\n\n          is_avatar_locked: options.is_avatar_locked,\n          avatar_lock_user_message: options.avatar_lock_user_message || \"\",\n          avatar_lock_staff_message: options.avatar_lock_staff_message || \"\",\n        })\n      },\n      (rejection) => {\n        this.setState({\n          isLoaded: true,\n          error: rejection.detail,\n        })\n      }\n    )\n  }\n\n  clean() {\n    if (this.isValid()) {\n      return true\n    } else {\n      snackbar.error(this.validate().username[0])\n      return false\n    }\n  }\n\n  send() {\n    return ajax.post(this.props.profile.api.moderate_avatar, {\n      is_avatar_locked: this.state.is_avatar_locked,\n      avatar_lock_user_message: this.state.avatar_lock_user_message,\n      avatar_lock_staff_message: this.state.avatar_lock_staff_message,\n    })\n  }\n\n  handleSuccess(apiResponse) {\n    store.dispatch(updateAvatar(this.props.profile, apiResponse.avatar_hash))\n    snackbar.success(gettext(\"Avatar controls have been changed.\"))\n  }\n\n  getFormBody() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"modal-body\">\n          <FormGroup\n            label={gettext(\"Lock avatar\")}\n            helpText={gettext(\n              \"Locking user avatar will prohibit user from changing his avatar and will reset his/her avatar to default one.\"\n            )}\n            for=\"id_is_avatar_locked\"\n          >\n            <YesNoSwitch\n              id=\"id_is_avatar_locked\"\n              disabled={this.state.isLoading}\n              iconOn=\"lock_outline\"\n              iconOff=\"lock_open\"\n              labelOn={gettext(\"Disallow user from changing avatar\")}\n              labelOff={gettext(\"Allow user to change avatar\")}\n              onChange={this.bindInput(\"is_avatar_locked\")}\n              value={this.state.is_avatar_locked}\n            />\n          </FormGroup>\n\n          <FormGroup\n            label={gettext(\"User message\")}\n            helpText={gettext(\n              \"Optional message for user explaining why he/she is prohibited form changing avatar.\"\n            )}\n            for=\"id_avatar_lock_user_message\"\n          >\n            <textarea\n              id=\"id_avatar_lock_user_message\"\n              className=\"form-control\"\n              rows=\"4\"\n              disabled={this.state.isLoading}\n              onChange={this.bindInput(\"avatar_lock_user_message\")}\n              value={this.state.avatar_lock_user_message}\n            />\n          </FormGroup>\n\n          <FormGroup\n            label={gettext(\"Staff message\")}\n            helpText={gettext(\n              \"Optional message for forum team members explaining why user is prohibited form changing avatar.\"\n            )}\n            for=\"id_avatar_lock_staff_message\"\n          >\n            <textarea\n              id=\"id_avatar_lock_staff_message\"\n              className=\"form-control\"\n              rows=\"4\"\n              disabled={this.state.isLoading}\n              onChange={this.bindInput(\"avatar_lock_staff_message\")}\n              value={this.state.avatar_lock_staff_message}\n            />\n          </FormGroup>\n        </div>\n        <div className=\"modal-footer\">\n          <button\n            type=\"button\"\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n          >\n            {gettext(\"Close\")}\n          </button>\n          <Button className=\"btn-primary\" loading={this.state.isLoading}>\n            {gettext(\"Save changes\")}\n          </Button>\n        </div>\n      </form>\n    )\n  }\n\n  getModalBody() {\n    if (this.state.error) {\n      return (\n        <ModalMessage icon=\"remove_circle_outline\" message={this.state.error} />\n      )\n    } else if (this.state.isLoaded) {\n      return this.getFormBody()\n    } else {\n      return <Loader />\n    }\n  }\n\n  getClassName() {\n    if (this.state.error) {\n      return \"modal-dialog modal-message modal-avatar-controls\"\n    } else {\n      return \"modal-dialog modal-avatar-controls\"\n    }\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()} role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              type=\"button\"\n              className=\"close\"\n              data-dismiss=\"modal\"\n              aria-label={gettext(\"Close\")}\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Avatar controls\")}</h4>\n          </div>\n          {this.getModalBody()}\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport Loader from \"misago/components/modal-loader\"\nimport ModalMessage from \"misago/components/modal-message\"\nimport { addNameChange } from \"misago/reducers/username-history\"\nimport { updateUsername } from \"misago/reducers/users\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport * as validators from \"misago/utils/validators\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoaded: false,\n      isLoading: false,\n      error: null,\n\n      username: \"\",\n      validators: {\n        username: [validators.usernameContent()],\n      },\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(this.props.profile.api.moderate_username).then(\n      () => {\n        this.setState({\n          isLoaded: true,\n        })\n      },\n      (rejection) => {\n        this.setState({\n          isLoaded: true,\n          error: rejection.detail,\n        })\n      }\n    )\n  }\n\n  clean() {\n    if (this.isValid()) {\n      return true\n    } else {\n      snackbar.error(this.validate().username[0])\n      return false\n    }\n  }\n\n  send() {\n    return ajax.post(this.props.profile.api.moderate_username, {\n      username: this.state.username,\n    })\n  }\n\n  handleSuccess(apiResponse) {\n    this.setState({\n      username: \"\",\n    })\n\n    store.dispatch(\n      addNameChange(apiResponse, this.props.profile, this.props.user)\n    )\n    store.dispatch(\n      updateUsername(this.props.profile, apiResponse.username, apiResponse.slug)\n    )\n\n    snackbar.success(gettext(\"Username has been changed.\"))\n  }\n\n  getFormBody() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"modal-body\">\n          <FormGroup label={gettext(\"New username\")} for=\"id_username\">\n            <input\n              type=\"text\"\n              id=\"id_username\"\n              className=\"form-control\"\n              disabled={this.state.isLoading}\n              onChange={this.bindInput(\"username\")}\n              value={this.state.username}\n            />\n          </FormGroup>\n        </div>\n        <div className=\"modal-footer\">\n          <button\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n            disabled={this.state.isLoading}\n            type=\"button\"\n          >\n            {gettext(\"Cancel\")}\n          </button>\n          <Button className=\"btn-primary\" loading={this.state.isLoading}>\n            {gettext(\"Change username\")}\n          </Button>\n        </div>\n      </form>\n    )\n  }\n\n  getModalBody() {\n    if (this.state.error) {\n      return (\n        <ModalMessage icon=\"remove_circle_outline\" message={this.state.error} />\n      )\n    } else if (this.state.isLoaded) {\n      return this.getFormBody()\n    } else {\n      return <Loader />\n    }\n  }\n\n  getClassName() {\n    if (this.state.error) {\n      return \"modal-dialog modal-message modal-rename-user\"\n    } else {\n      return \"modal-dialog modal-rename-user\"\n    }\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()} role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              type=\"button\"\n              className=\"close\"\n              data-dismiss=\"modal\"\n              aria-label={gettext(\"Close\")}\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Change username\")}</h4>\n          </div>\n          {this.getModalBody()}\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport Loader from \"misago/components/modal-loader\"\nimport ModalMessage from \"misago/components/modal-message\"\nimport YesNoSwitch from \"misago/components/yes-no-switch\"\nimport misago from \"misago/index\"\nimport ajax from \"misago/services/ajax\"\nimport polls from \"misago/services/polls\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoaded: false,\n      isLoading: false,\n      isDeleted: false,\n      error: null,\n\n      countdown: 5,\n      confirm: false,\n\n      with_content: false,\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(this.props.profile.api.delete).then(\n      () => {\n        this.setState({\n          isLoaded: true,\n        })\n\n        this.countdown()\n      },\n      (rejection) => {\n        this.setState({\n          isLoaded: true,\n          error: rejection.detail,\n        })\n      }\n    )\n  }\n\n  countdown = () => {\n    window.setTimeout(() => {\n      if (this.state.countdown > 1) {\n        this.setState({\n          countdown: this.state.countdown - 1,\n        })\n        this.countdown()\n      } else if (!this.state.confirm) {\n        this.setState({\n          confirm: true,\n        })\n      }\n    }, 1000)\n  }\n\n  send() {\n    return ajax.post(this.props.profile.api.delete, {\n      with_content: this.state.with_content,\n    })\n  }\n\n  handleSuccess() {\n    polls.stop(\"user-profile\")\n\n    if (this.state.with_content) {\n      this.setState({\n        isDeleted: interpolate(\n          gettext(\n            \"%(username)s's account, threads, posts and other content has been deleted.\"\n          ),\n          {\n            username: this.props.profile.username,\n          },\n          true\n        ),\n      })\n    } else {\n      this.setState({\n        isDeleted: interpolate(\n          gettext(\n            \"%(username)s's account has been deleted and other content has been hidden.\"\n          ),\n          {\n            username: this.props.profile.username,\n          },\n          true\n        ),\n      })\n    }\n  }\n\n  getButtonLabel() {\n    if (this.state.confirm) {\n      return interpolate(\n        gettext(\"Delete %(username)s\"),\n        {\n          username: this.props.profile.username,\n        },\n        true\n      )\n    } else {\n      return interpolate(\n        gettext(\"Please wait... (%(countdown)ss)\"),\n        {\n          countdown: this.state.countdown,\n        },\n        true\n      )\n    }\n  }\n\n  getForm() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"modal-body\">\n          <FormGroup label={gettext(\"User content\")} for=\"id_with_content\">\n            <YesNoSwitch\n              id=\"id_with_content\"\n              disabled={this.state.isLoading}\n              labelOn={gettext(\"Delete together with user's account\")}\n              labelOff={gettext(\"Hide after deleting user's account\")}\n              onChange={this.bindInput(\"with_content\")}\n              value={this.state.with_content}\n            />\n          </FormGroup>\n        </div>\n        <div className=\"modal-footer\">\n          <button\n            type=\"button\"\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n          >\n            {gettext(\"Cancel\")}\n          </button>\n\n          <Button\n            className=\"btn-danger\"\n            loading={this.state.isLoading}\n            disabled={!this.state.confirm}\n          >\n            {this.getButtonLabel()}\n          </Button>\n        </div>\n      </form>\n    )\n  }\n\n  getDeletedBody() {\n    return (\n      <div className=\"modal-body\">\n        <div className=\"message-icon\">\n          <span className=\"material-icon\">info_outline</span>\n        </div>\n        <div className=\"message-body\">\n          <p className=\"lead\">{this.state.isDeleted}</p>\n          <p>\n            <a href={misago.get(\"USERS_LIST_URL\")}>\n              {gettext(\"Return to users list\")}\n            </a>\n          </p>\n        </div>\n      </div>\n    )\n  }\n\n  getModalBody() {\n    if (this.state.error) {\n      return (\n        <ModalMessage icon=\"remove_circle_outline\" message={this.state.error} />\n      )\n    } else if (this.state.isLoaded) {\n      if (this.state.isDeleted) {\n        return this.getDeletedBody()\n      } else {\n        return this.getForm()\n      }\n    } else {\n      return <Loader />\n    }\n  }\n\n  getClassName() {\n    if (this.state.error || this.state.isDeleted) {\n      return \"modal-dialog modal-message modal-delete-account\"\n    } else {\n      return \"modal-dialog modal-delete-account\"\n    }\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()} role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              type=\"button\"\n              className=\"close\"\n              data-dismiss=\"modal\"\n              aria-label={gettext(\"Close\")}\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Delete user account\")}</h4>\n          </div>\n          {this.getModalBody()}\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport { connect } from \"react-redux\"\nimport AvatarControls from \"misago/components/profile/moderation/avatar-controls\"\nimport ChangeUsername from \"misago/components/profile/moderation/change-username\"\nimport DeleteAccount from \"misago/components/profile/moderation/delete-account\"\nimport modal from \"misago/services/modal\"\n\nlet select = function (store) {\n  return {\n    tick: store.tick,\n    user: store.auth,\n    profile: store.profile,\n  }\n}\n\nexport default class extends React.Component {\n  showAvatarDialog = () => {\n    modal.show(connect(select)(AvatarControls))\n  }\n\n  showRenameDialog = () => {\n    modal.show(connect(select)(ChangeUsername))\n  }\n\n  showDeleteDialog = () => {\n    modal.show(connect(select)(DeleteAccount))\n  }\n\n  render() {\n    const { moderation } = this.props\n\n    return (\n      <ul className=\"dropdown-menu dropdown-menu-right\" role=\"menu\">\n        {!!moderation.avatar && (\n          <li>\n            <button\n              type=\"button\"\n              className=\"btn btn-link\"\n              onClick={this.showAvatarDialog}\n            >\n              <span className=\"material-icon\">portrait</span>\n              {gettext(\"Avatar controls\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.rename && (\n          <li>\n            <button\n              type=\"button\"\n              className=\"btn btn-link\"\n              onClick={this.showRenameDialog}\n            >\n              <span className=\"material-icon\">credit_card</span>\n              {gettext(\"Change username\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.delete && (\n          <li>\n            <button\n              type=\"button\"\n              className=\"btn btn-link\"\n              onClick={this.showDeleteDialog}\n            >\n              <span className=\"material-icon\">clear</span>\n              {gettext(\"Delete account\")}\n            </button>\n          </li>\n        )}\n      </ul>\n    )\n  }\n}\n","import React from \"react\"\nimport Status, { StatusIcon, StatusLabel } from \"../user-status\"\n\nconst ProfileDataList = ({ profile }) => (\n  <ul className=\"profile-data-list\">\n    {profile.is_active === false && (\n      <li className=\"user-account-disabled\">\n        <abbr\n          title={gettext(\n            \"This user's account has been disabled by administrator.\"\n          )}\n        >\n          {gettext(\"Account disabled\")}\n        </abbr>\n      </li>\n    )}\n    <li className=\"user-status-display\">\n      <Status user={profile} status={profile.status}>\n        <StatusIcon user={profile} status={profile.status} />\n        <StatusLabel\n          user={profile}\n          status={profile.status}\n          className=\"status-label\"\n        />\n      </Status>\n    </li>\n    {profile.rank.is_tab ? (\n      <li className=\"user-rank\">\n        <a href={profile.rank.url} className=\"item-title\">\n          {profile.rank.name}\n        </a>\n      </li>\n    ) : (\n      <li className=\"user-rank\">\n        <span className=\"item-title\">{profile.rank.name}</span>\n      </li>\n    )}\n    {(profile.title || profile.rank.title) && (\n      <li className=\"user-title\">{profile.title || profile.rank.title}</li>\n    )}\n    <li className=\"user-joined-on\">\n      <abbr\n        title={interpolate(\n          gettext(\"Joined on %(joined_on)s\"),\n          {\n            joined_on: profile.joined_on.format(\"LL, LT\"),\n          },\n          true\n        )}\n      >\n        {interpolate(\n          gettext(\"Joined %(joined_on)s\"),\n          {\n            joined_on: profile.joined_on.fromNow(),\n          },\n          true\n        )}\n      </abbr>\n    </li>\n    {profile.email && (\n      <li className=\"user-email\">\n        <a href={\"mailto:\" + profile.email} className=\"item-title\">\n          {profile.email}\n        </a>\n      </li>\n    )}\n  </ul>\n)\n\nexport default ProfileDataList\n","import React from \"react\"\nimport Avatar from \"../avatar\"\nimport { FlexRow, FlexRowCol, FlexRowSection } from \"../FlexRow\"\nimport {\n  PageHeader,\n  PageHeaderBanner,\n  PageHeaderContainer,\n  PageHeaderDetails,\n} from \"../PageHeader\"\nimport FollowButton from \"./follow-button\"\nimport MessageButton from \"./message-button\"\nimport ModerationOptions from \"./moderation/nav\"\nimport ProfileDataList from \"./ProfileDataList\"\n\nconst ProfileHeader = ({ profile, user, moderation, message, follow }) => (\n  <PageHeaderContainer>\n    <PageHeader\n      styleName={\n        profile.rank.css_class ? \"rank-\" + profile.rank.css_class : \"profile\"\n      }\n    >\n      <PageHeaderBanner\n        styleName={\n          profile.rank.css_class ? \"rank-\" + profile.rank.css_class : \"profile\"\n        }\n      >\n        <div className=\"profile-page-header\">\n          <div className=\"profile-page-header-avatar\">\n            <Avatar\n              className=\"user-avatar hidden-sm hidden-md hidden-lg\"\n              user={profile}\n              size={200}\n              size2x={400}\n            />\n            <Avatar\n              className=\"user-avatar hidden-xs hidden-md hidden-lg\"\n              user={profile}\n              size={64}\n              size2x={128}\n            />\n            <Avatar\n              className=\"user-avatar hidden-xs hidden-sm\"\n              user={profile}\n              size={128}\n              size2x={256}\n            />\n          </div>\n          <h1>{profile.username}</h1>\n        </div>\n      </PageHeaderBanner>\n      <PageHeaderDetails className=\"profile-page-header-details\">\n        <FlexRow>\n          <FlexRowSection auto>\n            <FlexRowCol>\n              <ProfileDataList profile={profile} />\n            </FlexRowCol>\n          </FlexRowSection>\n          {message && (\n            <FlexRowSection>\n              <FlexRowCol>\n                <MessageButton\n                  className=\"btn btn-default btn-block btn-outline\"\n                  profile={profile}\n                  user={user}\n                />\n              </FlexRowCol>\n              {moderation.available && !follow && (\n                <FlexRowCol shrink>\n                  <div className=\"dropdown\">\n                    <ProfileModerationButton />\n                    <ModerationOptions\n                      profile={profile}\n                      moderation={moderation}\n                    />\n                  </div>\n                </FlexRowCol>\n              )}\n            </FlexRowSection>\n          )}\n          {follow && (\n            <FlexRowSection>\n              <FlexRowCol>\n                <FollowButton\n                  className=\"btn btn-block btn-outline\"\n                  profile={profile}\n                />\n              </FlexRowCol>\n              {moderation.available && (\n                <FlexRowCol shrink>\n                  <div className=\"dropdown\">\n                    <ProfileModerationButton />\n                    <ModerationOptions\n                      profile={profile}\n                      moderation={moderation}\n                    />\n                  </div>\n                </FlexRowCol>\n              )}\n            </FlexRowSection>\n          )}\n          {moderation.available && !follow && !message && (\n            <FlexRowSection>\n              <FlexRowCol className=\"hidden-xs\" shrink>\n                <div className=\"dropdown\">\n                  <ProfileModerationButton />\n                  <ModerationOptions\n                    profile={profile}\n                    moderation={moderation}\n                  />\n                </div>\n              </FlexRowCol>\n              <FlexRowCol className=\"hidden-sm hidden-md hidden-lg\">\n                <div className=\"dropdown\">\n                  <button\n                    className=\"btn btn-default btn-block btn-outline dropdown-toggle\"\n                    type=\"button\"\n                    data-toggle=\"dropdown\"\n                    aria-haspopup=\"true\"\n                    aria-expanded=\"false\"\n                  >\n                    <span className=\"material-icon\">settings</span>\n                    {gettext(\"Options\")}\n                  </button>\n                  <ModerationOptions\n                    profile={profile}\n                    moderation={moderation}\n                  />\n                </div>\n              </FlexRowCol>\n            </FlexRowSection>\n          )}\n        </FlexRow>\n      </PageHeaderDetails>\n    </PageHeader>\n  </PageHeaderContainer>\n)\n\nconst ProfileModerationButton = () => (\n  <button\n    className=\"btn btn-default btn-icon btn-outline dropdown-toggle\"\n    type=\"button\"\n    title={gettext(\"Options\")}\n    data-toggle=\"dropdown\"\n    aria-haspopup=\"true\"\n    aria-expanded=\"false\"\n  >\n    <span className=\"material-icon\">settings</span>\n  </button>\n)\n\nexport default ProfileHeader\n","import React from \"react\"\nimport { Link } from \"react-router\"\nimport Li from \"misago/components/li\"\n\nconst ProfileNav = ({ baseUrl, page, pages }) => (\n  <div className=\"nav-container\">\n    <div className=\"dropdown hidden-sm hidden-md hidden-lg\">\n      <button\n        className=\"btn btn-default btn-block btn-outline dropdown-toggle\"\n        type=\"button\"\n        data-toggle=\"dropdown\"\n        aria-haspopup=\"true\"\n        aria-expanded=\"false\"\n      >\n        <span className=\"material-icon\">{page.icon}</span>\n        {page.name}\n      </button>\n      <ul className=\"dropdown-menu stick-to-bottom\">\n        {pages.map((page) => (\n          <li key={page.component}>\n            <Link to={baseUrl + page.component + \"/\"}>\n              <span className=\"material-icon\">{page.icon}</span>\n              {page.name}\n            </Link>\n          </li>\n        ))}\n      </ul>\n    </div>\n    <ul className=\"nav nav-pills hidden-xs\" role=\"menu\">\n      {pages.map((page) => (\n        <Li path={baseUrl + page.component + \"/\"} key={page.component}>\n          <Link to={baseUrl + page.component + \"/\"}>\n            <span className=\"material-icon\">{page.icon}</span>\n            {page.name}\n          </Link>\n        </Li>\n      ))}\n    </ul>\n  </div>\n)\n\nexport default ProfileNav\n","import React from \"react\"\nimport { connect } from \"react-redux\"\nimport BanDetails from \"./ban-details\"\nimport Details from \"./details\"\nimport { Posts, Threads } from \"./feed\"\nimport Followers from \"./followers\"\nimport Follows from \"./follows\"\nimport UsernameHistory from \"./username-history\"\nimport WithDropdown from \"misago/components/with-dropdown\"\nimport misago from \"misago\"\nimport { hydrate } from \"misago/reducers/profile\"\nimport polls from \"misago/services/polls\"\nimport store from \"misago/services/store\"\nimport PageContainer from \"../PageContainer\"\nimport ProfileHeader from \"./ProfileHeader\"\nimport ProfileNav from \"./ProfileNav\"\n\nexport default class extends WithDropdown {\n  constructor(props) {\n    super(props)\n\n    this.startPolling(props.profile.api.index)\n  }\n\n  startPolling(api) {\n    polls.start({\n      poll: \"user-profile\",\n      url: api,\n      frequency: 90 * 1000,\n      update: this.update,\n    })\n  }\n\n  update = (data) => {\n    store.dispatch(hydrate(data))\n  }\n\n  render() {\n    const baseUrl = misago.get(\"PROFILE\").url\n    const pages = misago.get(\"PROFILE_PAGES\")\n    const page = pages.filter((page) => {\n      const url = baseUrl + page.component + \"/\"\n      return this.props.location.pathname === url\n    })[0]\n    const { profile, user } = this.props\n    const moderation = getModeration(profile, user)\n    const message = user.acl.can_start_private_threads && profile.id !== user.id\n    const follow = profile.acl.can_follow && profile.id !== user.id\n\n    return (\n      <div className=\"page page-user-profile\">\n        <ProfileHeader\n          profile={this.props.profile}\n          user={this.props.user}\n          moderation={moderation}\n          message={message}\n          follow={follow}\n        />\n        <PageContainer>\n          <ProfileNav baseUrl={baseUrl} page={page} pages={pages} />\n\n          {this.props.children}\n        </PageContainer>\n      </div>\n    )\n  }\n}\n\nconst getModeration = (profile, user) => {\n  const moderation = {\n    available: false,\n    rename: false,\n    avatar: false,\n    delete: false,\n  }\n\n  if (user.is_anonymouse) return moderation\n\n  moderation.rename = profile.acl.can_rename\n  moderation.avatar = profile.acl.can_moderate_avatar\n  moderation.delete = profile.acl.can_delete\n  moderation.available = (\n    moderation.rename || moderation.avatar || moderation.delete\n  )\n\n  return moderation\n}\n\nexport function select(store) {\n  return {\n    isAuthenticated: store.auth.user.id === store.profile.id,\n\n    tick: store.tick.tick,\n    user: store.auth.user,\n    users: store.users,\n    posts: store.posts,\n    profile: store.profile,\n    profileDetails: store[\"profile-details\"],\n    \"username-history\": store[\"username-history\"],\n  }\n}\n\nconst COMPONENTS = {\n  posts: Posts,\n  threads: Threads,\n  followers: Followers,\n  follows: Follows,\n  details: Details,\n  \"username-history\": UsernameHistory,\n  \"ban-details\": BanDetails,\n}\n\nexport function paths() {\n  let paths = []\n  misago.get(\"PROFILE_PAGES\").forEach(function (item) {\n    paths.push(\n      Object.assign({}, item, {\n        path: misago.get(\"PROFILE\").url + item.component + \"/\",\n        component: connect(select)(COMPONENTS[item.component]),\n      })\n    )\n  })\n\n  return paths\n}\n","import React from \"react\"\nimport Route from \"./route\"\n\nexport function Threads(props) {\n  let emptyMessage = null\n  if (props.user.id === props.profile.id) {\n    emptyMessage = gettext(\"You have no started threads.\")\n  } else {\n    emptyMessage = interpolate(\n      gettext(\"%(username)s started no threads.\"),\n      {\n        username: props.profile.username,\n      },\n      true\n    )\n  }\n\n  let header = null\n  if (!props.posts.isLoaded) {\n    header = gettext(\"Loading...\")\n  } else if (props.profile.id === props.user.id) {\n    const message = ngettext(\n      \"You have started %(threads)s thread.\",\n      \"You have started %(threads)s threads.\",\n      props.profile.threads\n    )\n\n    header = interpolate(\n      message,\n      {\n        threads: props.profile.threads,\n      },\n      true\n    )\n  } else {\n    const message = ngettext(\n      \"%(username)s has started %(threads)s thread.\",\n      \"%(username)s has started %(threads)s threads.\",\n      props.profile.threads\n    )\n\n    header = interpolate(\n      message,\n      {\n        username: props.profile.username,\n        threads: props.profile.threads,\n      },\n      true\n    )\n  }\n\n  return (\n    <Route\n      api={props.profile.api.threads}\n      emptyMessage={emptyMessage}\n      header={header}\n      title={gettext(\"Threads\")}\n      {...props}\n    />\n  )\n}\n\nexport function Posts(props) {\n  let emptyMessage = null\n  if (props.user.id === props.profile.id) {\n    emptyMessage = gettext(\"You have posted no messages.\")\n  } else {\n    emptyMessage = interpolate(\n      gettext(\"%(username)s posted no messages.\"),\n      {\n        username: props.profile.username,\n      },\n      true\n    )\n  }\n\n  let header = null\n  if (!props.posts.isLoaded) {\n    header = gettext(\"Loading...\")\n  } else if (props.profile.id === props.user.id) {\n    const message = ngettext(\n      \"You have posted %(posts)s message.\",\n      \"You have posted %(posts)s messages.\",\n      props.profile.posts\n    )\n\n    header = interpolate(\n      message,\n      {\n        posts: props.profile.posts,\n      },\n      true\n    )\n  } else {\n    const message = ngettext(\n      \"%(username)s has posted %(posts)s message.\",\n      \"%(username)s has posted %(posts)s messages.\",\n      props.profile.posts\n    )\n\n    header = interpolate(\n      message,\n      {\n        username: props.profile.username,\n        posts: props.profile.posts,\n      },\n      true\n    )\n  }\n\n  return (\n    <Route\n      api={props.profile.api.posts}\n      emptyMessage={emptyMessage}\n      header={header}\n      title={gettext(\"Posts\")}\n      {...props}\n    />\n  )\n}\n","import { connect } from \"react-redux\"\nimport Profile, { paths, select } from \"misago/components/profile/root\"\nimport misago from \"misago/index\"\nimport mount from \"misago/utils/routed-component\"\n\nexport default function initializer(context) {\n  if (context.has(\"PROFILE\") && context.has(\"PROFILE_PAGES\")) {\n    mount({\n      root: misago.get(\"PROFILE\").url,\n      component: connect(select)(Profile),\n      paths: paths(),\n    })\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:profile\",\n  initializer: initializer,\n  after: \"reducer:profile-hydrate\",\n})\n","import React from \"react\"\nimport misago from \"misago/index\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport * as validators from \"misago/utils/validators\"\nimport showBannedPage from \"misago/utils/banned-page\"\n\nexport class RequestLinkForm extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      email: \"\",\n\n      validators: {\n        email: [validators.email()],\n      },\n    }\n  }\n\n  clean() {\n    if (this.isValid()) {\n      return true\n    } else {\n      snackbar.error(gettext(\"Enter a valid email address.\"))\n      return false\n    }\n  }\n\n  send() {\n    return ajax.post(misago.get(\"SEND_ACTIVATION_API\"), {\n      email: this.state.email,\n    })\n  }\n\n  handleSuccess(apiResponse) {\n    this.props.callback(apiResponse)\n  }\n\n  handleError(rejection) {\n    if ([\"already_active\", \"inactive_admin\"].indexOf(rejection.code) > -1) {\n      snackbar.info(rejection.detail)\n    } else if (rejection.status === 403 && rejection.ban) {\n      showBannedPage(rejection.ban)\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"well well-form well-form-request-activation-link\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"form-group\">\n            <div className=\"control-input\">\n              <input\n                type=\"text\"\n                className=\"form-control\"\n                placeholder={gettext(\"Your e-mail address\")}\n                disabled={this.state.isLoading}\n                onChange={this.bindInput(\"email\")}\n                value={this.state.email}\n              />\n            </div>\n          </div>\n\n          <Button\n            className=\"btn-primary btn-block\"\n            loading={this.state.isLoading}\n          >\n            {gettext(\"Send link\")}\n          </Button>\n        </form>\n      </div>\n    )\n  }\n}\n\nexport class LinkSent extends React.Component {\n  getMessage() {\n    return interpolate(\n      gettext(\"Activation link was sent to %(email)s\"),\n      {\n        email: this.props.user.email,\n      },\n      true\n    )\n  }\n\n  render() {\n    return (\n      <div className=\"well well-form well-form-request-activation-link well-done\">\n        <div className=\"done-message\">\n          <div className=\"message-icon\">\n            <span className=\"material-icon\">check</span>\n          </div>\n          <div className=\"message-body\">\n            <p>{this.getMessage()}</p>\n          </div>\n          <button\n            className=\"btn btn-primary btn-block\"\n            type=\"button\"\n            onClick={this.props.callback}\n          >\n            {gettext(\"Request another link\")}\n          </button>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      complete: false,\n    }\n  }\n\n  complete = (apiResponse) => {\n    this.setState({\n      complete: apiResponse,\n    })\n  }\n\n  reset = () => {\n    this.setState({\n      complete: false,\n    })\n  }\n\n  render() {\n    if (this.state.complete) {\n      return <LinkSent user={this.state.complete} callback={this.reset} />\n    } else {\n      return <RequestLinkForm callback={this.complete} />\n    }\n  }\n}\n","import misago from \"misago/index\"\nimport RequestActivationLink from \"misago/components/request-activation-link\"\nimport mount from \"misago/utils/mount-component\"\n\nexport default function initializer() {\n  if (document.getElementById(\"request-activation-link-mount\")) {\n    mount(RequestActivationLink, \"request-activation-link-mount\", false)\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:request-activation-link\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport misago from \"misago/index\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport * as validators from \"misago/utils/validators\"\nimport showBannedPage from \"misago/utils/banned-page\"\n\nexport class RequestResetForm extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      email: \"\",\n\n      validators: {\n        email: [validators.email()],\n      },\n    }\n  }\n\n  clean() {\n    if (this.isValid()) {\n      return true\n    } else {\n      snackbar.error(gettext(\"Enter a valid email address.\"))\n      return false\n    }\n  }\n\n  send() {\n    return ajax.post(misago.get(\"SEND_PASSWORD_RESET_API\"), {\n      email: this.state.email,\n    })\n  }\n\n  handleSuccess(apiResponse) {\n    this.props.callback(apiResponse)\n  }\n\n  handleError(rejection) {\n    if ([\"inactive_user\", \"inactive_admin\"].indexOf(rejection.code) > -1) {\n      this.props.showInactivePage(rejection)\n    } else if (rejection.status === 403 && rejection.ban) {\n      showBannedPage(rejection.ban)\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"well well-form well-form-request-password-reset\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"form-group\">\n            <div className=\"control-input\">\n              <input\n                type=\"text\"\n                className=\"form-control\"\n                placeholder={gettext(\"Your e-mail address\")}\n                disabled={this.state.isLoading}\n                onChange={this.bindInput(\"email\")}\n                value={this.state.email}\n              />\n            </div>\n          </div>\n\n          <Button\n            className=\"btn-primary btn-block\"\n            loading={this.state.isLoading}\n          >\n            {gettext(\"Send link\")}\n          </Button>\n        </form>\n      </div>\n    )\n  }\n}\n\nexport class LinkSent extends React.Component {\n  getMessage() {\n    return interpolate(\n      gettext(\"Reset password link was sent to %(email)s\"),\n      {\n        email: this.props.user.email,\n      },\n      true\n    )\n  }\n\n  render() {\n    return (\n      <div className=\"well well-form well-form-request-password-reset well-done\">\n        <div className=\"done-message\">\n          <div className=\"message-icon\">\n            <span className=\"material-icon\">check</span>\n          </div>\n          <div className=\"message-body\">\n            <p>{this.getMessage()}</p>\n          </div>\n          <button\n            type=\"button\"\n            className=\"btn btn-primary btn-block\"\n            onClick={this.props.callback}\n          >\n            {gettext(\"Request another link\")}\n          </button>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport class AccountInactivePage extends React.Component {\n  getActivateButton() {\n    if (this.props.activation === \"inactive_user\") {\n      return (\n        <p>\n          <a href={misago.get(\"REQUEST_ACTIVATION_URL\")}>\n            {gettext(\"Activate your account.\")}\n          </a>\n        </p>\n      )\n    } else {\n      return null\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"page page-message page-message-info page-forgotten-password-inactive\">\n        <div className=\"container\">\n          <div className=\"message-panel\">\n            <div className=\"message-icon\">\n              <span className=\"material-icon\">info_outline</span>\n            </div>\n\n            <div className=\"message-body\">\n              <p className=\"lead\">{gettext(\"Your account is inactive.\")}</p>\n              <p>{this.props.message}</p>\n              {this.getActivateButton()}\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      complete: false,\n    }\n  }\n\n  complete = (apiResponse) => {\n    this.setState({\n      complete: apiResponse,\n    })\n  }\n\n  reset = () => {\n    this.setState({\n      complete: false,\n    })\n  }\n\n  showInactivePage(apiResponse) {\n    ReactDOM.render(\n      <AccountInactivePage\n        activation={apiResponse.code}\n        message={apiResponse.detail}\n      />,\n      document.getElementById(\"page-mount\")\n    )\n  }\n\n  render() {\n    if (this.state.complete) {\n      return <LinkSent callback={this.reset} user={this.state.complete} />\n    }\n\n    return (\n      <RequestResetForm\n        callback={this.complete}\n        showInactivePage={this.showInactivePage}\n      />\n    )\n  }\n}\n","import misago from \"misago/index\"\nimport RequestPasswordReset from \"misago/components/request-password-reset\"\nimport mount from \"misago/utils/mount-component\"\n\nexport default function initializer() {\n  if (document.getElementById(\"request-password-reset-mount\")) {\n    mount(RequestPasswordReset, \"request-password-reset-mount\", false)\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:request-password-reset\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport misago from \"misago/index\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport SignInModal from \"misago/components/sign-in.js\"\nimport ajax from \"misago/services/ajax\"\nimport auth from \"misago/services/auth\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport showBannedPage from \"misago/utils/banned-page\"\n\nexport class ResetPasswordForm extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      password: \"\",\n    }\n  }\n\n  clean() {\n    if (this.state.password.trim().length) {\n      return true\n    } else {\n      snackbar.error(gettext(\"Enter new password.\"))\n      return false\n    }\n  }\n\n  send() {\n    return ajax.post(misago.get(\"CHANGE_PASSWORD_API\"), {\n      password: this.state.password,\n    })\n  }\n\n  handleSuccess(apiResponse) {\n    this.props.callback(apiResponse)\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 403 && rejection.ban) {\n      showBannedPage(rejection.ban)\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"well well-form well-form-reset-password\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"form-group\">\n            <div className=\"control-input\">\n              <input\n                type=\"password\"\n                className=\"form-control\"\n                placeholder={gettext(\"Enter new password\")}\n                disabled={this.state.isLoading}\n                onChange={this.bindInput(\"password\")}\n                value={this.state.password}\n              />\n            </div>\n          </div>\n\n          <Button\n            className=\"btn-primary btn-block\"\n            loading={this.state.isLoading}\n          >\n            {gettext(\"Change password\")}\n          </Button>\n        </form>\n      </div>\n    )\n  }\n}\n\nexport class PasswordChangedPage extends React.Component {\n  getMessage() {\n    return interpolate(\n      gettext(\"%(username)s, your password has been changed successfully.\"),\n      {\n        username: this.props.user.username,\n      },\n      true\n    )\n  }\n\n  showSignIn() {\n    modal.show(SignInModal)\n  }\n\n  render() {\n    return (\n      <div className=\"page page-message page-message-success page-forgotten-password-changed\">\n        <div className=\"container\">\n          <div className=\"message-panel\">\n            <div className=\"message-icon\">\n              <span className=\"material-icon\">check</span>\n            </div>\n\n            <div className=\"message-body\">\n              <p className=\"lead\">{this.getMessage()}</p>\n              <p>\n                {gettext(\n                  \"You will have to sign in using new password before continuing.\"\n                )}\n              </p>\n              <p>\n                <button\n                  type=\"button\"\n                  className=\"btn btn-primary\"\n                  onClick={this.showSignIn}\n                >\n                  {gettext(\"Sign in\")}\n                </button>\n              </p>\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default class extends React.Component {\n  complete = (apiResponse) => {\n    auth.softSignOut()\n\n    // nuke \"redirect_to\" field so we don't end\n    // coming back to error page after sign in\n    $('#hidden-login-form input[name=\"redirect_to\"]').remove()\n\n    ReactDOM.render(\n      <PasswordChangedPage user={apiResponse} />,\n      document.getElementById(\"page-mount\")\n    )\n  }\n\n  render() {\n    return <ResetPasswordForm callback={this.complete} />\n  }\n}\n","import misago from \"misago\"\nimport ResetPasswordForm from \"misago/components/reset-password-form\"\nimport mount from \"misago/utils/mount-component\"\n\nexport default function initializer() {\n  if (document.getElementById(\"reset-password-form-mount\")) {\n    mount(ResetPasswordForm, \"reset-password-form-mount\", false)\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:reset-password-form\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import React from \"react\"\nimport misago from \"misago\"\nimport Form from \"misago/components/form\"\nimport { load as updatePosts } from \"misago/reducers/posts\"\nimport { update as updateSearch } from \"misago/reducers/search\"\nimport { hydrate as updateUsers } from \"misago/reducers/users\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport { FlexRow, FlexRowCol, FlexRowSection } from \"../FlexRow\"\nimport {\n  PageHeader,\n  PageHeaderContainer,\n  PageHeaderBanner,\n  PageHeaderDetails,\n} from \"../PageHeader\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n      query: props.search.query,\n    }\n  }\n\n  componentDidMount() {\n    if (this.state.query.length) {\n      this.handleSubmit()\n    }\n  }\n\n  onQueryChange = (event) => {\n    this.changeValue(\"query\", event.target.value)\n  }\n\n  clean() {\n    if (!this.state.query.trim().length) {\n      snackbar.error(gettext(\"You have to enter search query.\"))\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    store.dispatch(\n      updateSearch({\n        isLoading: true,\n      })\n    )\n\n    const query = this.state.query.trim()\n\n    let url = window.location.href\n    const urlQuery = url.indexOf(\"?q=\")\n    if (urlQuery > 0) {\n      url = url.substring(0, urlQuery + 3)\n    }\n    window.history.pushState({}, \"\", url + encodeURIComponent(query))\n\n    return ajax.get(misago.get(\"SEARCH_API\"), { q: query })\n  }\n\n  handleSuccess(providers) {\n    store.dispatch(\n      updateSearch({\n        query: this.state.query.trim(),\n        isLoading: false,\n        providers,\n      })\n    )\n\n    providers.forEach((provider) => {\n      if (provider.id === \"users\") {\n        store.dispatch(updateUsers(provider.results.results))\n      } else if (provider.id === \"threads\") {\n        store.dispatch(updatePosts(provider.results))\n      }\n    })\n  }\n\n  handleError(rejection) {\n    snackbar.apiError(rejection)\n\n    store.dispatch(\n      updateSearch({\n        isLoading: false,\n      })\n    )\n  }\n\n  render() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <PageHeaderContainer>\n          <PageHeader styleName=\"site-search\">\n            <PageHeaderBanner styleName=\"site-search\">\n              <h1>{gettext(\"Search\")}</h1>\n            </PageHeaderBanner>\n            <PageHeaderDetails className=\"page-header-search-form\">\n              <FlexRow>\n                <FlexRowSection auto>\n                  <FlexRowCol>\n                    <input\n                      className=\"form-control\"\n                      disabled={this.state.isLoading}\n                      type=\"text\"\n                      value={this.state.query}\n                      placeholder={gettext(\"Search\")}\n                      onChange={this.onQueryChange}\n                    />\n                  </FlexRowCol>\n                  <FlexRowCol shrink>\n                    <button\n                      className=\"btn btn-secondary btn-icon btn-outline\"\n                      disabled={this.state.isLoading}\n                    >\n                      <span className=\"material-icon\">search</span>\n                    </button>\n                  </FlexRowCol>\n                </FlexRowSection>\n              </FlexRow>\n            </PageHeaderDetails>\n          </PageHeader>\n        </PageHeaderContainer>\n      </form>\n    )\n  }\n}\n","import React from \"react\"\nimport { Link } from \"react-router\"\n\nexport default function (props) {\n  return (\n    <div className=\"list-group nav-side\">\n      {props.providers.map((provider) => {\n        return (\n          <Link\n            activeClassName=\"active\"\n            className=\"list-group-item\"\n            key={provider.id}\n            to={provider.url}\n          >\n            <span className=\"material-icon\">{provider.icon}</span>\n            {provider.name}\n            <Badge results={provider.results} />\n          </Link>\n        )\n      })}\n    </div>\n  )\n}\n\nexport function Badge(props) {\n  if (!props.results) return null\n\n  let count = props.results.count\n  if (count > 1000000) {\n    count = Math.ceil(count / 1000000) + \"KK\"\n  } else if (count > 1000) {\n    count = Math.ceil(count / 1000) + \"K\"\n  }\n\n  return <span className=\"badge\">{count}</span>\n}\n","import React from \"react\"\nimport PageContainer from \"../PageContainer\"\nimport SearchForm from \"./form\"\nimport SideNav from \"./sidenav\"\n\nexport default function (props) {\n  return (\n    <div className=\"page page-search\">\n      <SearchForm provider={props.provider} search={props.search} />\n      <PageContainer>\n        <div className=\"row\">\n          <div className=\"col-md-3\">\n            <SideNav providers={props.search.providers} />\n          </div>\n          <div className=\"col-md-9\">\n            {props.children}\n            <SearchTime provider={props.provider} search={props.search} />\n          </div>\n        </div>\n      </PageContainer>\n    </div>\n  )\n}\n\nexport function SearchTime(props) {\n  let time = null\n  props.search.providers.forEach((p) => {\n    if (p.id === props.provider.id) {\n      time = p.time\n    }\n  })\n\n  if (time === null) return null\n\n  const copy = gettext(\"Search took %(time)s s to complete\")\n\n  return (\n    <footer className=\"search-footer\">\n      <p>{interpolate(copy, { time }, true)}</p>\n    </footer>\n  )\n}\n","import React from \"react\"\nimport PostFeed from \"misago/components/post-feed\"\nimport Button from \"misago/components/button\"\nimport MisagoMarkup from \"misago/components/misago-markup\"\nimport {\n  update as updatePosts,\n  append as appendPosts,\n} from \"misago/reducers/posts\"\nimport { updateProvider } from \"misago/reducers/search\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default function (props) {\n  return (\n    <div>\n      <PostFeed isReady={true} posts={props.results} />\n      <LoadMore {...props} />\n    </div>\n  )\n}\n\nexport class LoadMore extends React.Component {\n  onClick = () => {\n    store.dispatch(\n      updatePosts({\n        isBusy: true,\n      })\n    )\n\n    ajax\n      .get(this.props.provider.api, {\n        q: this.props.query,\n        page: this.props.next,\n      })\n      .then(\n        (providers) => {\n          providers.forEach((provider) => {\n            if (provider.id !== \"threads\") return\n            store.dispatch(appendPosts(provider.results))\n            store.dispatch(updateProvider(provider))\n          })\n\n          store.dispatch(\n            updatePosts({\n              isBusy: false,\n            })\n          )\n        },\n        (rejection) => {\n          snackbar.apiError(rejection)\n\n          store.dispatch(\n            updatePosts({\n              isBusy: false,\n            })\n          )\n        }\n      )\n  }\n\n  render() {\n    if (!this.props.more) return null\n\n    return (\n      <div className=\"pager-more\">\n        <Button\n          className=\"btn btn-default btn-outline\"\n          loading={this.props.isBusy}\n          onClick={this.onClick}\n        >\n          {gettext(\"Show more\")}\n        </Button>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport SearchPage from \"../page\"\nimport Results from \"./results\"\n\nexport default function (props) {\n  return (\n    <SearchPage provider={props.route.provider} search={props.search}>\n      <Blankslate\n        loading={props.search.isLoading}\n        query={props.search.query}\n        posts={props.posts}\n      >\n        <Results\n          provider={props.route.provider}\n          query={props.search.query}\n          {...props.posts}\n        />\n      </Blankslate>\n    </SearchPage>\n  )\n}\n\nexport function Blankslate({ children, loading, posts, query }) {\n  if (posts && posts.count) return children\n\n  if (query.length) {\n    return (\n      <p className=\"lead\">\n        {loading\n          ? gettext(\"Loading results...\")\n          : gettext(\"No threads matching search query have been found.\")}\n      </p>\n    )\n  }\n\n  return (\n    <p className=\"lead\">\n      {gettext(\"Enter at least two characters to search threads.\")}\n    </p>\n  )\n}\n","import React from \"react\"\nimport SearchPage from \"../page\"\nimport UsersList from \"misago/components/users-list\"\n\nexport default function (props) {\n  return (\n    <SearchPage provider={props.route.provider} search={props.search}>\n      <Blankslate\n        loading={props.search.isLoading}\n        query={props.search.query}\n        users={props.users}\n      >\n        <UsersList\n          cols={3}\n          isReady={!props.search.isLoading}\n          users={props.users}\n        />\n      </Blankslate>\n    </SearchPage>\n  )\n}\n\nexport function Blankslate({ children, loading, query, users }) {\n  if (users.length) return children\n\n  if (query.length) {\n    return (\n      <p className=\"lead\">\n        {loading\n          ? gettext(\"Loading results...\")\n          : gettext(\"No users matching search query have been found.\")}\n      </p>\n    )\n  }\n\n  return (\n    <p className=\"lead\">\n      {gettext(\"Enter at least two characters to search users.\")}\n    </p>\n  )\n}\n","import { connect } from \"react-redux\"\nimport SearchThreads from \"./threads\"\nimport SearchUsers from \"./users\"\n\nconst components = {\n  threads: SearchThreads,\n  users: SearchUsers,\n}\n\nexport function select(store) {\n  return {\n    posts: store.posts,\n    search: store.search,\n    tick: store.tick.tick,\n    user: store.auth.user,\n    users: store.users,\n  }\n}\n\nexport default function (providers) {\n  return providers.map((provider) => {\n    return {\n      path: provider.url,\n      component: connect(select)(components[provider.id]),\n      provider: provider,\n    }\n  })\n}\n","import paths from \"misago/components/search\"\nimport misago from \"misago\"\nimport mount from \"misago/utils/routed-component\"\n\nexport default function initializer(context) {\n  if (context.get(\"CURRENT_LINK\") === \"misago:search\") {\n    mount({\n      paths: paths(misago.get(\"SEARCH_PROVIDERS\")),\n    })\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:search\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import React from \"react\"\n\nconst TYPES_CLASSES = {\n  info: \"alert-info\",\n  success: \"alert-success\",\n  warning: \"alert-warning\",\n  error: \"alert-danger\",\n}\n\nexport class Snackbar extends React.Component {\n  getSnackbarClass() {\n    let snackbarClass = \"alerts-snackbar\"\n    if (this.props.isVisible) {\n      snackbarClass += \" in\"\n    } else {\n      snackbarClass += \" out\"\n    }\n    return snackbarClass\n  }\n\n  render() {\n    return (\n      <div className={this.getSnackbarClass()}>\n        <p className={\"alert \" + TYPES_CLASSES[this.props.type]}>\n          {this.props.message}\n        </p>\n      </div>\n    )\n  }\n}\n\nexport function select(state) {\n  return state.snackbar\n}\n","import { connect } from \"react-redux\"\nimport misago from \"misago/index\"\nimport { Snackbar, select } from \"misago/components/snackbar\"\nimport mount from \"misago/utils/mount-component\"\n\nexport default function initializer() {\n  mount(connect(select)(Snackbar), \"snackbar-mount\")\n}\n\nmisago.addInitializer({\n  name: \"component:snackbar\",\n  initializer: initializer,\n  after: \"snackbar\",\n})\n","import React from \"react\"\n\nconst Header = ({ backendName }) => {\n  const pageTitleTpl = gettext(\"Sign in with %(backend)s\")\n  const pageTitle = interpolate(pageTitleTpl, { backend: backendName }, true)\n\n  return (\n    <div className=\"page-header-bg\">\n      <div className=\"page-header\">\n        <div className=\"container\">\n          <h1>{pageTitle}</h1>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default Header\n","import React from \"react\"\nimport misago from \"misago\"\nimport RegisterLegalFootnote from \"misago/components/RegisterLegalFootnote\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport * as validators from \"misago/utils/validators\"\nimport Header from \"./header\"\n\nexport default class Register extends Form {\n  constructor(props) {\n    super(props)\n\n    const formValidators = {\n      email: [validators.email()],\n      username: [validators.usernameContent()],\n    }\n\n    if (!!misago.get(\"TERMS_OF_SERVICE_ID\")) {\n      formValidators.termsOfService = [validators.requiredTermsOfService()]\n    }\n\n    if (!!misago.get(\"PRIVACY_POLICY_ID\")) {\n      formValidators.privacyPolicy = [validators.requiredPrivacyPolicy()]\n    }\n\n    this.state = {\n      email: props.email || \"\",\n      emailProtected: !!props.email,\n      username: props.username || \"\",\n\n      termsOfService: null,\n      privacyPolicy: null,\n\n      validators: formValidators,\n      errors: {},\n\n      isLoading: false,\n    }\n  }\n\n  clean() {\n    let errors = this.validate()\n    let lengths = [\n      this.state.email.trim().length,\n      this.state.username.trim().length,\n    ]\n\n    if (lengths.indexOf(0) !== -1) {\n      snackbar.error(gettext(\"Fill out all fields.\"))\n      return false\n    }\n\n    const { validators } = this.state\n\n    const checkTermsOfService = !!misago.get(\"TERMS_OF_SERVICE_ID\")\n    if (checkTermsOfService && this.state.termsOfService === null) {\n      snackbar.error(validators.termsOfService[0](null))\n      return false\n    }\n\n    const checkPrivacyPolicy = !!misago.get(\"PRIVACY_POLICY_ID\")\n    if (checkPrivacyPolicy && this.state.privacyPolicy === null) {\n      snackbar.error(validators.privacyPolicy[0](null))\n      snackbar.error(gettext(\"You need to accept the privacy policy.\"))\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.post(this.props.url, {\n      email: this.state.email,\n      username: this.state.username,\n      terms_of_service: this.state.termsOfService,\n      privacy_policy: this.state.privacyPolicy,\n    })\n  }\n\n  handleSuccess(response) {\n    const { onRegistrationComplete } = this.props\n    onRegistrationComplete(response)\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 200) {\n      // We've entered \"errored\" state because response is HTML instead of exptected JSON\n      const { onRegistrationComplete } = this.props\n      const { username } = this.state\n      onRegistrationComplete({ activation: \"active\", step: \"done\", username })\n    } else if (rejection.status === 400) {\n      const stateUpdate = { errors: rejection }\n      if (rejection.email) {\n        stateUpdate.emailProtected = false\n      }\n      this.setState(stateUpdate)\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  handlePrivacyPolicyChange = (event) => {\n    const value = event.target.value\n    this.handleToggleAgreement(\"privacyPolicy\", value)\n  }\n\n  handleTermsOfServiceChange = (event) => {\n    const value = event.target.value\n    this.handleToggleAgreement(\"termsOfService\", value)\n  }\n\n  handleToggleAgreement = (agreement, value) => {\n    this.setState((prevState, props) => {\n      if (prevState[agreement] === null) {\n        const errors = { ...prevState.errors, [agreement]: null }\n        return { errors, [agreement]: value }\n      }\n\n      const validator = this.state.validators[agreement][0]\n      const errors = { ...prevState.errors, [agreement]: [validator(null)] }\n      return { errors, [agreement]: null }\n    })\n  }\n\n  render() {\n    const { backend_name } = this.props\n    const { email, emailProtected, username, isLoading } = this.state\n\n    let emailHelpText = null\n    if (emailProtected) {\n      const emailHelpTextTpl = gettext(\n        \"Your e-mail address has been verified by %(backend)s.\"\n      )\n      emailHelpText = interpolate(\n        emailHelpTextTpl,\n        { backend: backend_name },\n        true\n      )\n    }\n\n    return (\n      <div className=\"page page-social-auth page-social-sauth-register\">\n        <Header backendName={backend_name} />\n        <div className=\"container\">\n          <div className=\"row\">\n            <div className=\"col-md-6 col-md-offset-3\">\n              <form onSubmit={this.handleSubmit}>\n                <div className=\"panel panel-default panel-form\">\n                  <div className=\"panel-heading\">\n                    <h3 className=\"panel-title\">\n                      {gettext(\"Complete your details\")}\n                    </h3>\n                  </div>\n                  <div className=\"panel-body\">\n                    <FormGroup\n                      for=\"id_username\"\n                      label={gettext(\"Username\")}\n                      validation={this.state.errors.username}\n                    >\n                      <input\n                        type=\"text\"\n                        id=\"id_username\"\n                        className=\"form-control\"\n                        disabled={isLoading}\n                        onChange={this.bindInput(\"username\")}\n                        value={username}\n                      />\n                    </FormGroup>\n                    <FormGroup\n                      for=\"id_email\"\n                      label={gettext(\"E-mail address\")}\n                      helpText={emailHelpText}\n                      validation={\n                        emailProtected ? null : this.state.errors.email\n                      }\n                    >\n                      <input\n                        type=\"email\"\n                        id=\"id_email\"\n                        className=\"form-control\"\n                        disabled={isLoading || emailProtected}\n                        onChange={this.bindInput(\"email\")}\n                        value={email}\n                      />\n                    </FormGroup>\n                    <RegisterLegalFootnote\n                      errors={this.state.errors}\n                      privacyPolicy={this.state.privacyPolicy}\n                      termsOfService={this.state.termsOfService}\n                      onPrivacyPolicyChange={this.handlePrivacyPolicyChange}\n                      onTermsOfServiceChange={this.handleTermsOfServiceChange}\n                    />\n                  </div>\n                  <div className=\"panel-footer\">\n                    <Button\n                      className=\"btn-primary\"\n                      loading={this.state.isLoading}\n                    >\n                      {gettext(\"Sign in\")}\n                    </Button>\n                  </div>\n                </div>\n              </form>\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Header from \"./header\"\nimport misago from \"misago\"\n\nconst Complete = ({ activation, backend_name, username }) => {\n  let icon = \"\"\n  let message = \"\"\n  if (activation === \"user\") {\n    message = gettext(\n      \"%(username)s, your account has been created but you need to activate it before you will be able to sign in.\"\n    )\n  } else if (activation === \"admin\") {\n    message = gettext(\n      \"%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in.\"\n    )\n  } else {\n    message = gettext(\n      \"%(username)s, your account has been created and you have been signed in to it.\"\n    )\n  }\n\n  if (activation === \"active\") {\n    icon = \"check\"\n  } else {\n    icon = \"info_outline\"\n  }\n\n  return (\n    <div className=\"page page-social-auth page-social-sauth-register\">\n      <Header backendName={backend_name} />\n      <div className=\"container\">\n        <div className=\"row\">\n          <div className=\"col-md-6 col-md-offset-3\">\n            <div className=\"panel panel-default panel-form\">\n              <div className=\"panel-heading\">\n                <h3 className=\"panel-title\">\n                  {gettext(\"Registration completed!\")}\n                </h3>\n              </div>\n              <div className=\"panel-body panel-message-body\">\n                <div className=\"message-icon\">\n                  <span className=\"material-icon\">{icon}</span>\n                </div>\n                <div className=\"message-body\">\n                  <p className=\"lead\">\n                    {interpolate(message, { username }, true)}\n                  </p>\n                  <p className=\"help-block\">\n                    <a\n                      className=\"btn btn-default\"\n                      href={misago.get(\"MISAGO_PATH\")}\n                    >\n                      {gettext(\"Return to forum index\")}\n                    </a>\n                  </p>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default Complete\n","import React from \"react\"\nimport Register from \"./register\"\nimport Complete from \"./complete\"\n\nexport default class SocialAuth extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      step: props.step,\n\n      activation: props.activation || \"\",\n      email: props.email || \"\",\n      username: props.username || \"\",\n    }\n  }\n\n  handleRegistrationComplete = ({ activation, email, step, username }) => {\n    this.setState({ activation, email, step, username })\n  }\n\n  render() {\n    const { backend_name, url } = this.props\n    const { activation, email, step, username } = this.state\n\n    if (step === \"register\") {\n      return (\n        <Register\n          backend_name={backend_name}\n          email={email}\n          url={url}\n          username={username}\n          onRegistrationComplete={this.handleRegistrationComplete}\n        />\n      )\n    }\n\n    return (\n      <Complete\n        activation={activation}\n        backend_name={backend_name}\n        email={email}\n        url={url}\n        username={username}\n      />\n    )\n  }\n}\n","import React from \"react\"\nimport SocialAuth from \"misago/components/social-auth\"\nimport misago from \"misago\"\nimport mount from \"misago/utils/mount-component\"\n\nexport default function initializer(context) {\n  if (context.get(\"CURRENT_LINK\") === \"misago:social-complete\") {\n    const props = context.get(\"SOCIAL_AUTH_FORM\")\n    mount(<SocialAuth {...props} />, \"page-mount\")\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:social-auth\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import React from \"react\"\nimport Form from \"./form\"\nimport FormGroup from \"misago/components/form-group\"\nimport * as participants from \"misago/reducers/participants\"\nimport { updateAcl } from \"misago/reducers/thread\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      username: \"\",\n    }\n  }\n\n  onUsernameChange = (event) => {\n    this.changeValue(\"username\", event.target.value)\n  }\n\n  clean() {\n    if (!this.state.username.trim().length) {\n      snackbar.error(gettext(\"You have to enter user name.\"))\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.patch(this.props.thread.api.index, [\n      { op: \"add\", path: \"participants\", value: this.state.username },\n      { op: \"add\", path: \"acl\", value: 1 },\n    ])\n  }\n\n  handleSuccess(data) {\n    store.dispatch(updateAcl(data))\n    store.dispatch(participants.replace(data.participants))\n\n    snackbar.success(gettext(\"New participant has been added to thread.\"))\n\n    modal.hide()\n  }\n\n  render() {\n    return (\n      <div className=\"modal-dialog modal-sm\" role=\"document\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"modal-content\">\n            <ModalHeader />\n            <div className=\"modal-body\">\n              <FormGroup for=\"id_username\" label={gettext(\"User to add\")}>\n                <input\n                  id=\"id_username\"\n                  className=\"form-control\"\n                  disabled={this.state.isLoading}\n                  onChange={this.onUsernameChange}\n                  type=\"text\"\n                  value={this.state.username}\n                />\n              </FormGroup>\n            </div>\n            <div className=\"modal-footer\">\n              <button\n                className=\"btn btn-block btn-primary\"\n                disabled={this.state.isLoading}\n              >\n                {gettext(\"Add participant\")}\n              </button>\n              <button\n                className=\"btn btn-block btn-default\"\n                data-dismiss=\"modal\"\n                disabled={this.state.isLoading}\n                type=\"button\"\n              >\n                {gettext(\"Cancel\")}\n              </button>\n            </div>\n          </div>\n        </form>\n      </div>\n    )\n  }\n}\n\nexport function ModalHeader(props) {\n  return (\n    <div className=\"modal-header\">\n      <button\n        aria-label={gettext(\"Close\")}\n        className=\"close\"\n        data-dismiss=\"modal\"\n        type=\"button\"\n      >\n        <span aria-hidden=\"true\">&times;</span>\n      </button>\n      <h4 className=\"modal-title\">{gettext(\"Add participant\")}</h4>\n    </div>\n  )\n}\n","import React from \"react\"\nimport AddParticipantModal from \"misago/components/add-participant\"\nimport modal from \"misago/services/modal\"\n\nexport default class extends React.Component {\n  onClick = () => {\n    modal.show(<AddParticipantModal thread={this.props.thread} />)\n  }\n\n  render() {\n    if (!this.props.thread.acl.can_add_participants) return null\n\n    return (\n      <div className=\"col-xs-12 col-sm-3\">\n        <button\n          className=\"btn btn-default btn-block\"\n          onClick={this.onClick}\n          type=\"button\"\n        >\n          <span className=\"material-icon\">person_add</span>\n          {gettext(\"Add participant\")}\n        </button>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport { changeOwner } from \"./actions\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.isUser = props.participant.id === props.user.id\n  }\n\n  onClick = () => {\n    let confirmed = false\n    if (this.isUser) {\n      confirmed = window.confirm(\n        gettext(\"Are you sure you want to take over this thread?\")\n      )\n    } else {\n      const message = gettext(\n        \"Are you sure you want to change thread owner to %(user)s?\"\n      )\n      confirmed = window.confirm(\n        interpolate(\n          message,\n          {\n            user: this.props.participant.username,\n          },\n          true\n        )\n      )\n    }\n\n    if (!confirmed) return\n\n    changeOwner(this.props.thread, this.props.participant)\n  }\n\n  render() {\n    if (this.props.participant.is_owner) return null\n    if (!this.props.thread.acl.can_change_owner) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          {gettext(\"Make owner\")}\n        </button>\n      </li>\n    )\n  }\n}\n","import * as participants from \"misago/reducers/participants\"\nimport { updateAcl } from \"misago/reducers/thread\"\nimport misago from \"misago\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport function leave(thread, participant) {\n  ajax\n    .patch(thread.api.index, [\n      { op: \"remove\", path: \"participants\", value: participant.id },\n    ])\n    .then(\n      () => {\n        snackbar.success(gettext(\"You have left this thread.\"))\n        window.setTimeout(() => {\n          window.location = misago.get(\"PRIVATE_THREADS_URL\")\n        }, 3 * 1000)\n      },\n      (rejection) => {\n        snackbar.apiError(rejection)\n      }\n    )\n}\n\nexport function remove(thread, participant) {\n  ajax\n    .patch(thread.api.index, [\n      { op: \"remove\", path: \"participants\", value: participant.id },\n      { op: \"add\", path: \"acl\", value: 1 },\n    ])\n    .then(\n      (data) => {\n        store.dispatch(updateAcl(data))\n        store.dispatch(participants.replace(data.participants))\n\n        const message = gettext(\"%(user)s has been removed from this thread.\")\n        snackbar.success(\n          interpolate(\n            message,\n            {\n              user: participant.username,\n            },\n            true\n          )\n        )\n      },\n      (rejection) => {\n        snackbar.apiError(rejection)\n      }\n    )\n}\n\nexport function changeOwner(thread, participant) {\n  ajax\n    .patch(thread.api.index, [\n      { op: \"replace\", path: \"owner\", value: participant.id },\n      { op: \"add\", path: \"acl\", value: 1 },\n    ])\n    .then(\n      (data) => {\n        store.dispatch(updateAcl(data))\n        store.dispatch(participants.replace(data.participants))\n\n        const message = gettext(\"%(user)s has been made new thread owner.\")\n        snackbar.success(\n          interpolate(\n            message,\n            {\n              user: participant.username,\n            },\n            true\n          )\n        )\n      },\n      (rejection) => {\n        snackbar.apiError(rejection)\n      }\n    )\n}\n","import React from \"react\"\nimport { remove, leave } from \"./actions\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.isUser = props.participant.id === props.user.id\n  }\n\n  onClick = () => {\n    let confirmed = false\n    if (this.isUser) {\n      confirmed = window.confirm(\n        gettext(\"Are you sure you want to leave this thread?\")\n      )\n    } else {\n      const message = gettext(\n        \"Are you sure you want to remove %(user)s from this thread?\"\n      )\n      confirmed = window.confirm(\n        interpolate(\n          message,\n          {\n            user: this.props.participant.username,\n          },\n          true\n        )\n      )\n    }\n\n    if (!confirmed) return\n\n    if (this.isUser) {\n      leave(this.props.thread, this.props.participant)\n    } else {\n      remove(this.props.thread, this.props.participant)\n    }\n  }\n\n  render() {\n    const isModerator = this.props.user.acl.can_moderate_private_threads\n\n    if (!(this.props.userIsOwner || this.isUser || isModerator)) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          {this.isUser ? gettext(\"Leave thread\") : gettext(\"Remove\")}\n        </button>\n      </li>\n    )\n  }\n}\n","import React from \"react\"\nimport MakeOwner from \"./make-owner\"\nimport Remove from \"./remove\"\nimport Avatar from \"misago/components/avatar\"\n\nexport default function (props) {\n  const participant = props.participant\n\n  let className = \"btn btn-default\"\n  if (participant.is_owner) {\n    className = \"btn btn-primary\"\n  }\n  className += \" btn-user btn-block\"\n\n  return (\n    <div className=\"col-xs-12 col-sm-3 col-md-2 participant-card\">\n      <div className=\"dropdown\">\n        <button\n          aria-haspopup=\"true\"\n          aria-expanded=\"false\"\n          className={className}\n          data-toggle=\"dropdown\"\n          type=\"button\"\n        >\n          <Avatar size=\"34\" user={participant} />\n          <span className=\"btn-text\">{participant.username}</span>\n        </button>\n        <ul className=\"dropdown-menu stick-to-bottom\">\n          <UserStatus isOwner={participant.is_owner} />\n          <li className=\"dropdown-header\" />\n          <li>\n            <a href={participant.url}>{gettext(\"See profile\")}</a>\n          </li>\n          <li role=\"separator\" className=\"divider\" />\n          <MakeOwner {...props} />\n          <Remove {...props} />\n        </ul>\n      </div>\n    </div>\n  )\n}\n\nexport function UserStatus({ isOwner }) {\n  if (!isOwner) return null\n\n  return (\n    <li className=\"dropdown-header dropdown-header-owner\">\n      <span className=\"material-icon\">start</span>\n      <span className=\"icon-text\">{gettext(\"Thread owner\")}</span>\n    </li>\n  )\n}\n","import React from \"react\"\nimport Card from \"./card\"\n\nexport default function ({ participants, thread, user, userIsOwner }) {\n  return (\n    <div className=\"participants-cards\">\n      <div className=\"row\">\n        {participants.map((participant) => {\n          return (\n            <Card\n              key={participant.id}\n              participant={participant}\n              thread={thread}\n              user={user}\n              userIsOwner={userIsOwner}\n            />\n          )\n        })}\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport AddParticipant from \"./add-participant\"\nimport CardsList from \"./cards-list\"\nimport * as utils from \"./utils\"\n\nexport default function (props) {\n  if (!props.participants.length) return null\n\n  return (\n    <div className=\"panel panel-default panel-participants\">\n      <div className=\"panel-body\">\n        <CardsList\n          userIsOwner={getUserIsOwner(props.user, props.participants)}\n          {...props}\n        />\n        <div className=\"row\">\n          <AddParticipant thread={props.thread} />\n          <div className=\"col-xs-12 col-sm-9\">\n            <p>{utils.getParticipantsCopy(props.participants)}</p>\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport function getUserIsOwner(user, participants) {\n  return participants[0].id === user.id\n}\n","export function getParticipantsCopy(participants) {\n  const count = participants.length\n  const message = ngettext(\n    \"This thread has %(users)s participant.\",\n    \"This thread has %(users)s participants.\",\n    count\n  )\n\n  return interpolate(\n    message,\n    {\n      users: count,\n    },\n    true\n  )\n}\n","import React from \"react\"\n\nconst ICON = {\n  changed_title: \"edit\",\n\n  pinned_globally: \"bookmark\",\n  pinned_locally: \"bookmark_border\",\n  unpinned: \"panorama_fish_eye\",\n\n  moved: \"arrow_forward\",\n  merged: \"call_merge\",\n\n  approved: \"done\",\n\n  opened: \"lock_open\",\n  closed: \"lock_outline\",\n\n  unhid: \"visibility\",\n  hid: \"visibility_off\",\n\n  changed_owner: \"grade\",\n  tookover: \"grade\",\n\n  added_participant: \"person_add\",\n\n  owner_left: \"person_outline\",\n  participant_left: \"person_outline\",\n  removed_participant: \"remove_circle_outline\",\n}\n\nconst EventIcon = (props) => (\n  <span className=\"event-icon-bg\">\n    <span className=\"material-icon\">{ICON[props.post.event_type]}</span>\n  </span>\n)\n\nexport default EventIcon\n","import React from \"react\"\nimport moment from \"moment\"\nimport * as post from \"misago/reducers/post\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default function (props) {\n  if (isVisible(props.post.acl)) {\n    return (\n      <li className=\"event-controls\">\n        <Hide {...props} />\n        <Unhide {...props} />\n        <Delete {...props} />\n      </li>\n    )\n  } else {\n    return null\n  }\n}\n\nexport function isVisible(acl) {\n  return acl.can_hide\n}\n\nexport class Hide extends React.Component {\n  onClick = () => {\n    store.dispatch(\n      post.patch(this.props.post, {\n        is_hidden: true,\n        hidden_on: moment(),\n        hidden_by_name: this.props.user.username,\n        url: Object.assign(this.props.post.url, {\n          hidden_by: this.props.user.url,\n        }),\n      })\n    )\n\n    const op = { op: \"replace\", path: \"is-hidden\", value: true }\n\n    ajax.patch(this.props.post.api.index, [op]).then(\n      (patch) => {\n        store.dispatch(post.patch(this.props.post, patch))\n      },\n      (rejection) => {\n        if (rejection.status === 400) {\n          snackbar.error(rejection.detail[0])\n        } else {\n          snackbar.apiError(rejection)\n        }\n\n        store.dispatch(\n          post.patch(this.props.post, {\n            is_hidden: false,\n          })\n        )\n      }\n    )\n  }\n\n  render() {\n    if (!this.props.post.is_hidden) {\n      return (\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          {gettext(\"Hide\")}\n        </button>\n      )\n    } else {\n      return null\n    }\n  }\n}\n\nexport class Unhide extends React.Component {\n  onClick = () => {\n    store.dispatch(\n      post.patch(this.props.post, {\n        is_hidden: false,\n      })\n    )\n\n    const op = { op: \"replace\", path: \"is-hidden\", value: false }\n\n    ajax.patch(this.props.post.api.index, [op]).then(\n      (patch) => {\n        store.dispatch(post.patch(this.props.post, patch))\n      },\n      (rejection) => {\n        if (rejection.status === 400) {\n          snackbar.error(rejection.detail[0])\n        } else {\n          snackbar.apiError(rejection)\n        }\n\n        store.dispatch(\n          post.patch(this.props.post, {\n            is_hidden: true,\n          })\n        )\n      }\n    )\n  }\n\n  render() {\n    if (this.props.post.is_hidden) {\n      return (\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          {gettext(\"Unhide\")}\n        </button>\n      )\n    } else {\n      return null\n    }\n  }\n}\n\nexport class Delete extends React.Component {\n  onClick = () => {\n    const decision = window.confirm(\n      gettext(\n        \"Are you sure you wish to delete this event? This action is not reversible!\"\n      )\n    )\n    if (decision) {\n      this.delete()\n    }\n  }\n\n  delete = () => {\n    store.dispatch(\n      post.patch(this.props.post, {\n        isDeleted: true,\n      })\n    )\n\n    ajax.delete(this.props.post.api.index).then(\n      () => {\n        snackbar.success(gettext(\"Event has been deleted.\"))\n      },\n      (rejection) => {\n        if (rejection.status === 400) {\n          snackbar.error(rejection.detail[0])\n        } else {\n          snackbar.apiError(rejection)\n        }\n\n        store.dispatch(\n          post.patch(this.props.post, {\n            isDeleted: false,\n          })\n        )\n      }\n    )\n  }\n\n  render() {\n    return (\n      <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n        {gettext(\"Delete\")}\n      </button>\n    )\n  }\n}\n","import React from \"react\"\nimport escapeHtml from \"misago/utils/escape-html\"\nimport Controls from \"./controls\"\n\nconst DATE_ABBR = '<abbr title=\"%(absolute)s\">%(relative)s</abbr>'\nconst DATE_URL = '<a href=\"%(url)s\" title=\"%(absolute)s\">%(relative)s</a>'\nconst USER_SPAN = '<span class=\"item-title\">%(user)s</span>'\nconst USER_URL = '<a href=\"%(url)s\" class=\"item-title\">%(user)s</a>'\n\nexport default function (props) {\n  return (\n    <ul className=\"list-inline event-info\">\n      <Hidden {...props} />\n      <Poster {...props} />\n      <Controls {...props} />\n    </ul>\n  )\n}\n\nexport function Hidden(props) {\n  if (props.post.is_hidden) {\n    let user = null\n    if (props.post.url.hidden_by) {\n      user = interpolate(\n        USER_URL,\n        {\n          url: escapeHtml(props.post.url.hidden_by),\n          user: escapeHtml(props.post.hidden_by_name),\n        },\n        true\n      )\n    } else {\n      user = interpolate(\n        USER_SPAN,\n        {\n          user: escapeHtml(props.post.hidden_by_name),\n        },\n        true\n      )\n    }\n\n    const date = interpolate(\n      DATE_ABBR,\n      {\n        absolute: escapeHtml(props.post.hidden_on.format(\"LLL\")),\n        relative: escapeHtml(props.post.hidden_on.fromNow()),\n      },\n      true\n    )\n\n    const message = interpolate(\n      escapeHtml(gettext(\"Hidden by %(event_by)s %(event_on)s.\")),\n      {\n        event_by: user,\n        event_on: date,\n      },\n      true\n    )\n\n    return (\n      <li\n        className=\"event-hidden-message\"\n        dangerouslySetInnerHTML={{ __html: message }}\n      />\n    )\n  } else {\n    return null\n  }\n}\n\nexport function Poster(props) {\n  let user = null\n  if (props.post.poster) {\n    user = interpolate(\n      USER_URL,\n      {\n        url: escapeHtml(props.post.poster.url),\n        user: escapeHtml(props.post.poster_name),\n      },\n      true\n    )\n  } else {\n    user = interpolate(\n      USER_SPAN,\n      {\n        user: escapeHtml(props.post.poster_name),\n      },\n      true\n    )\n  }\n\n  const date = interpolate(\n    DATE_URL,\n    {\n      url: escapeHtml(props.post.url.index),\n      absolute: escapeHtml(props.post.posted_on.format(\"LLL\")),\n      relative: escapeHtml(props.post.posted_on.fromNow()),\n    },\n    true\n  )\n\n  const message = interpolate(\n    escapeHtml(gettext(\"By %(event_by)s %(event_on)s.\")),\n    {\n      event_by: user,\n      event_on: date,\n    },\n    true\n  )\n\n  return (\n    <li\n      className=\"event-posters\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n","import React from \"react\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nconst MESSAGE = {\n  pinned_globally: gettext(\"Thread has been pinned globally.\"),\n  pinned_locally: gettext(\"Thread has been pinned locally.\"),\n  unpinned: gettext(\"Thread has been unpinned.\"),\n\n  approved: gettext(\"Thread has been approved.\"),\n\n  opened: gettext(\"Thread has been opened.\"),\n  closed: gettext(\"Thread has been closed.\"),\n\n  unhid: gettext(\"Thread has been revealed.\"),\n  hid: gettext(\"Thread has been made hidden.\"),\n\n  tookover: gettext(\"Took thread over.\"),\n\n  owner_left: gettext(\"Owner has left thread. This thread is now closed.\"),\n  participant_left: gettext(\"Participant has left thread.\"),\n}\n\nconst ITEM_LINK = '<a href=\"%(url)s\" class=\"item-title\">%(name)s</a>'\nconst ITEM_SPAN = '<span class=\"item-title\">%(name)s</span>'\n\nexport default function (props) {\n  if (MESSAGE[props.post.event_type]) {\n    return <p className=\"event-message\">{MESSAGE[props.post.event_type]}</p>\n  } else if (props.post.event_type === \"changed_title\") {\n    return <ChangedTitle {...props} />\n  } else if (props.post.event_type === \"moved\") {\n    return <Moved {...props} />\n  } else if (props.post.event_type === \"merged\") {\n    return <Merged {...props} />\n  } else if (props.post.event_type === \"changed_owner\") {\n    return <ChangedOwner {...props} />\n  } else if (props.post.event_type === \"added_participant\") {\n    return <AddedParticipant {...props} />\n  } else if (props.post.event_type === \"removed_participant\") {\n    return <RemovedParticipant {...props} />\n  } else {\n    return null\n  }\n}\n\nexport function ChangedTitle(props) {\n  const msgstring = escapeHtml(\n    gettext(\"Thread title has been changed from %(old_title)s.\")\n  )\n  const oldTitle = interpolate(\n    ITEM_SPAN,\n    {\n      name: escapeHtml(props.post.event_context.old_title),\n    },\n    true\n  )\n  const message = interpolate(\n    msgstring,\n    {\n      old_title: oldTitle,\n    },\n    true\n  )\n\n  return (\n    <p\n      className=\"event-message\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n\nexport function Moved(props) {\n  const msgstring = escapeHtml(\n    gettext(\"Thread has been moved from %(from_category)s.\")\n  )\n  const fromCategory = interpolate(\n    ITEM_LINK,\n    {\n      url: escapeHtml(props.post.event_context.from_category.url),\n      name: escapeHtml(props.post.event_context.from_category.name),\n    },\n    true\n  )\n\n  const message = interpolate(\n    msgstring,\n    {\n      from_category: fromCategory,\n    },\n    true\n  )\n\n  return (\n    <p\n      className=\"event-message\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n\nexport function Merged(props) {\n  const msgstring = escapeHtml(\n    gettext(\"The %(merged_thread)s thread has been merged into this thread.\")\n  )\n  const mergedThread = interpolate(\n    ITEM_SPAN,\n    {\n      name: escapeHtml(props.post.event_context.merged_thread),\n    },\n    true\n  )\n\n  const message = interpolate(\n    msgstring,\n    {\n      merged_thread: mergedThread,\n    },\n    true\n  )\n\n  return (\n    <p\n      className=\"event-message\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n\nexport function ChangedOwner(props) {\n  const msgstring = escapeHtml(gettext(\"Changed thread owner to %(user)s.\"))\n  const newOwner = interpolate(\n    ITEM_LINK,\n    {\n      url: escapeHtml(props.post.event_context.user.url),\n      name: escapeHtml(props.post.event_context.user.username),\n    },\n    true\n  )\n\n  const message = interpolate(\n    msgstring,\n    {\n      user: newOwner,\n    },\n    true\n  )\n\n  return (\n    <p\n      className=\"event-message\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n\nexport function AddedParticipant(props) {\n  const msgstring = escapeHtml(gettext(\"Added %(user)s to thread.\"))\n  const newOwner = interpolate(\n    ITEM_LINK,\n    {\n      url: escapeHtml(props.post.event_context.user.url),\n      name: escapeHtml(props.post.event_context.user.username),\n    },\n    true\n  )\n\n  const message = interpolate(\n    msgstring,\n    {\n      user: newOwner,\n    },\n    true\n  )\n\n  return (\n    <p\n      className=\"event-message\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n\nexport function RemovedParticipant(props) {\n  const msgstring = escapeHtml(gettext(\"Removed %(user)s from thread.\"))\n  const newOwner = interpolate(\n    ITEM_LINK,\n    {\n      url: escapeHtml(props.post.event_context.user.url),\n      name: escapeHtml(props.post.event_context.user.username),\n    },\n    true\n  )\n\n  const message = interpolate(\n    msgstring,\n    {\n      user: newOwner,\n    },\n    true\n  )\n\n  return (\n    <p\n      className=\"event-message\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n","import React from \"react\"\n\nexport default function ({ post }) {\n  if (post.is_read) return null\n\n  return (\n    <div className=\"event-label\">\n      <span className=\"label label-unread\">{gettext(\"New event\")}</span>\n    </div>\n  )\n}\n","import React from \"react\"\nimport * as post from \"misago/reducers/post\"\nimport * as thread from \"misago/reducers/thread\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends React.Component {\n  /*\n  Super naive and de-facto placeholder implementation for reading posts on scroll\n  */\n  componentDidMount() {\n    if (this.props.post.is_read) return // don't register read tracker\n\n    $(this.element).waypoint({\n      handler: (direction) => {\n        if (direction !== \"down\" || this.props.post.is_read) return\n\n        // after 1500ms run flag post as read logic\n        window.setTimeout(() => {\n          // check if post's bottom edge is still in viewport\n          const boundingClientRect = this.element.getBoundingClientRect()\n          const offsetBottom =\n            boundingClientRect.height + boundingClientRect.top\n          const clientHeight = document.documentElement.clientHeight\n\n          if (offsetBottom < 5) return // scrolled past the post\n          if (offsetBottom > clientHeight) return // scrolled back up\n\n          // mark post as read\n          store.dispatch(\n            post.patch(this.props.post, {\n              is_read: true,\n            })\n          )\n\n          // call API to let it know we have unread post\n          ajax.post(this.props.post.api.read).then(\n            (data) => {\n              store.dispatch(\n                thread.update(this.props.thread, {\n                  is_read: data.thread_is_read,\n                })\n              )\n            },\n            (rejection) => {\n              snackbar.apiError(rejection)\n            }\n          )\n        }, 1000)\n      },\n      offset: \"bottom-in-view\",\n    })\n  }\n\n  render() {\n    return (\n      <div\n        className={this.props.className}\n        ref={(node) => {\n          if (node) this.element = node\n        }}\n      >\n        {this.props.children}\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Icon from \"./icon\"\nimport Info from \"./info\"\nimport Message from \"./message\"\nimport UnreadLabel from \"./unread-label\"\nimport Waypoint from \"../waypoint\"\n\nexport default function (props) {\n  let className = \"event\"\n  if (props.post.isDeleted) {\n    className = \"hide\"\n  } else if (props.post.is_hidden) {\n    className = \"event post-hidden\"\n  }\n\n  return (\n    <li id={\"post-\" + props.post.id} className={className}>\n      <UnreadLabel post={props.post} />\n      <div className=\"event-body\">\n        <div className=\"event-icon\">\n          <Icon {...props} />\n        </div>\n        <Waypoint className=\"event-content\" post={props.post}>\n          <Message {...props} />\n          <Info {...props} />\n        </Waypoint>\n      </div>\n    </li>\n  )\n}\n","import React from \"react\"\nimport misago from \"misago\"\nimport escapeHtml from \"misago/utils/escape-html\"\nimport formatFilesize from \"misago/utils/file-size\"\n\nconst DATE_ABBR = '<abbr title=\"%(absolute)s\">%(relative)s</abbr>'\nconst USER_SPAN = '<span class=\"item-title\">%(user)s</span>'\nconst USER_URL = '<a href=\"%(url)s\" class=\"item-title\">%(user)s</a>'\n\nexport default function (props) {\n  return (\n    <div className=\"col-xs-12 col-md-6\">\n      <AttachmentPreview {...props} />\n      <div className=\"post-attachment\">\n        <a\n          href={props.attachment.url.index}\n          className=\"attachment-name item-title\"\n        >\n          {props.attachment.filename}\n        </a>\n        <AttachmentDetails {...props} />\n      </div>\n    </div>\n  )\n}\n\nexport function AttachmentPreview(props) {\n  if (props.attachment.is_image) {\n    return (\n      <div className=\"post-attachment-preview\">\n        <AttachmentThumbnail {...props} />\n      </div>\n    )\n  } else {\n    return (\n      <div className=\"post-attachment-preview\">\n        <AttachmentIcon {...props} />\n      </div>\n    )\n  }\n}\n\nexport function AttachmentIcon(props) {\n  return (\n    <a href={props.attachment.url.index} className=\"material-icon\">\n      insert_drive_file\n    </a>\n  )\n}\n\nexport function AttachmentThumbnail(props) {\n  const url = props.attachment.url.thumb || props.attachment.url.index\n  return (\n    <a\n      className=\"post-thumbnail\"\n      href={props.attachment.url.index}\n      style={{ backgroundImage: 'url(\"' + escapeHtml(url) + '\")' }}\n    />\n  )\n}\n\nexport function AttachmentDetails(props) {\n  let user = null\n  if (props.attachment.url.uploader) {\n    user = interpolate(\n      USER_URL,\n      {\n        url: escapeHtml(props.attachment.url.uploader),\n        user: escapeHtml(props.attachment.uploader_name),\n      },\n      true\n    )\n  } else {\n    user = interpolate(\n      USER_SPAN,\n      {\n        user: escapeHtml(props.attachment.uploader_name),\n      },\n      true\n    )\n  }\n\n  const date = interpolate(\n    DATE_ABBR,\n    {\n      absolute: escapeHtml(props.attachment.uploaded_on.format(\"LLL\")),\n      relative: escapeHtml(props.attachment.uploaded_on.fromNow()),\n    },\n    true\n  )\n\n  const message = interpolate(\n    escapeHtml(\n      gettext(\n        \"%(filetype)s, %(size)s, uploaded by %(uploader)s %(uploaded_on)s.\"\n      )\n    ),\n    {\n      filetype: props.attachment.filetype,\n      size: formatFilesize(props.attachment.size),\n      uploader: user,\n      uploaded_on: date,\n    },\n    true\n  )\n\n  return (\n    <p\n      className=\"post-attachment-description\"\n      dangerouslySetInnerHTML={{ __html: message }}\n    />\n  )\n}\n","import React from \"react\"\nimport batch from \"misago/utils/batch\"\nimport Attachment from \"./attachment\"\n\nexport default function (props) {\n  if (!isVisible(props.post)) {\n    return null\n  }\n\n  return (\n    <div className=\"post-attachments\">\n      {batch(props.post.attachments, 2).map((row) => {\n        const key = row\n          .map((a) => {\n            return a ? a.id : 0\n          })\n          .join(\"_\")\n        return <Row key={key} row={row} />\n      })}\n    </div>\n  )\n}\n\nexport function isVisible(post) {\n  return (!post.is_hidden || post.acl.can_see_hidden) && post.attachments\n}\n\nexport function Row(props) {\n  return (\n    <div className=\"row\">\n      {props.row.map((attachment) => {\n        return (\n          <Attachment\n            attachment={attachment}\n            key={attachment ? attachment.id : 0}\n          />\n        )\n      })}\n    </div>\n  )\n}\n","import React from \"react\"\nimport Waypoint from \"../waypoint\"\nimport MisagoMarkup from \"misago/components/misago-markup\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nconst HIDDEN_BY_URL = '<a href=\"%(url)s\" class=\"item-title\">%(user)s</a>'\nconst HIDDEN_BY_SPAN = '<span class=\"item-title\">%(user)s</span>'\nconst HIDDEN_ON =\n  '<abbr class=\"last-title\" title=\"%(absolute)s\">%(relative)s</abbr>'\n\nexport default function (props) {\n  if (props.post.is_hidden && !props.post.acl.can_see_hidden) {\n    return <Hidden {...props} />\n  } else if (props.post.content) {\n    return <Default {...props} />\n  } else {\n    return <Invalid {...props} />\n  }\n}\n\nexport function Default(props) {\n  return (\n    <Waypoint className=\"post-body\" post={props.post}>\n      <MisagoMarkup markup={props.post.content} />\n    </Waypoint>\n  )\n}\n\nexport function Hidden(props) {\n  let user = null\n  if (props.post.hidden_by) {\n    user = interpolate(\n      HIDDEN_BY_URL,\n      {\n        url: escapeHtml(props.post.url.hidden_by),\n        user: escapeHtml(props.post.hidden_by_name),\n      },\n      true\n    )\n  } else {\n    user = interpolate(\n      HIDDEN_BY_SPAN,\n      {\n        user: escapeHtml(props.post.hidden_by_name),\n      },\n      true\n    )\n  }\n\n  const date = interpolate(\n    HIDDEN_ON,\n    {\n      absolute: escapeHtml(props.post.hidden_on.format(\"LLL\")),\n      relative: escapeHtml(props.post.hidden_on.fromNow()),\n    },\n    true\n  )\n\n  const message = interpolate(\n    escapeHtml(gettext(\"Hidden by %(hidden_by)s %(hidden_on)s.\")),\n    {\n      hidden_by: user,\n      hidden_on: date,\n    },\n    true\n  )\n\n  return (\n    <Waypoint className=\"post-body post-body-hidden\" post={props.post}>\n      <p className=\"lead\">\n        {gettext(\"This post is hidden. You cannot see its contents.\")}\n      </p>\n      <p className=\"text-muted\" dangerouslySetInnerHTML={{ __html: message }} />\n    </Waypoint>\n  )\n}\n\nexport function Invalid(props) {\n  return (\n    <Waypoint className=\"post-body post-body-invalid\" post={props.post}>\n      <p className=\"lead\">\n        {gettext(\"This post's contents cannot be displayed.\")}\n      </p>\n      <p className=\"text-muted\">\n        {gettext(\"This error is caused by invalid post content manipulation.\")}\n      </p>\n    </Waypoint>\n  )\n}\n","import React from \"react\"\n\nexport function FlagBestAnswer({ post, thread, user }) {\n  if (!(isVisible(post) && post.id === thread.best_answer)) {\n    return null\n  }\n\n  let message = null\n  if (user.id && thread.best_answer_marked_by === user.id) {\n    message = interpolate(\n      gettext(\"Marked as best answer by you %(marked_on)s.\"),\n      {\n        marked_on: thread.best_answer_marked_on.fromNow(),\n      },\n      true\n    )\n  } else {\n    message = interpolate(\n      gettext(\"Marked as best answer by %(marked_by)s %(marked_on)s.\"),\n      {\n        marked_by: thread.best_answer_marked_by_name,\n        marked_on: thread.best_answer_marked_on.fromNow(),\n      },\n      true\n    )\n  }\n\n  return (\n    <div className=\"post-status-message post-status-best-answer\">\n      <span className=\"material-icon\">check_box</span>\n      <p>{message}</p>\n    </div>\n  )\n}\n\nexport function FlagHidden(props) {\n  if (!(isVisible(props.post) && props.post.is_hidden)) {\n    return null\n  }\n\n  return (\n    <div className=\"post-status-message post-status-hidden\">\n      <span className=\"material-icon\">visibility_off</span>\n      <p>\n        {gettext(\n          \"This post is hidden. Only users with permission may see its contents.\"\n        )}\n      </p>\n    </div>\n  )\n}\n\nexport function FlagUnapproved(props) {\n  if (!(isVisible(props.post) && props.post.is_unapproved)) {\n    return null\n  }\n\n  return (\n    <div className=\"post-status-message post-status-unapproved\">\n      <span className=\"material-icon\">remove_circle_outline</span>\n      <p>\n        {gettext(\n          \"This post is unapproved. Only users with permission to approve posts and its author may see its contents.\"\n        )}\n      </p>\n    </div>\n  )\n}\n\nexport function FlagProtected(props) {\n  if (!(isVisible(props.post) && props.post.is_protected)) {\n    return null\n  }\n\n  return (\n    <div className=\"post-status-message post-status-protected visible-xs-block\">\n      <span className=\"material-icon\">lock_outline</span>\n      <p>{gettext(\"This post is protected. Only moderators may change it.\")}</p>\n    </div>\n  )\n}\n\nexport function isVisible(post) {\n  return !post.is_hidden || post.acl.can_see_hidden\n}\n","import moment from \"moment\"\nimport * as thread from \"misago/reducers/thread\"\nimport * as post from \"misago/reducers/post\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport function approve(props) {\n  store.dispatch(\n    post.patch(props.post, {\n      is_unapproved: false,\n    })\n  )\n\n  const ops = [{ op: \"replace\", path: \"is-unapproved\", value: false }]\n\n  const previousState = {\n    is_unapproved: props.post.is_unapproved,\n  }\n\n  patch(props, ops, previousState)\n}\n\nexport function protect(props) {\n  store.dispatch(\n    post.patch(props.post, {\n      is_protected: true,\n    })\n  )\n\n  const ops = [{ op: \"replace\", path: \"is-protected\", value: true }]\n\n  const previousState = {\n    is_protected: props.post.is_protected,\n  }\n\n  patch(props, ops, previousState)\n}\n\nexport function unprotect(props) {\n  store.dispatch(\n    post.patch(props.post, {\n      is_protected: false,\n    })\n  )\n\n  const ops = [{ op: \"replace\", path: \"is-protected\", value: false }]\n\n  const previousState = {\n    is_protected: props.post.is_protected,\n  }\n\n  patch(props, ops, previousState)\n}\n\nexport function hide(props) {\n  store.dispatch(\n    post.patch(props.post, {\n      is_hidden: true,\n      hidden_on: moment(),\n      hidden_by_name: props.user.username,\n      url: Object.assign(props.post.url, {\n        hidden_by: props.user.url,\n      }),\n    })\n  )\n\n  const ops = [{ op: \"replace\", path: \"is-hidden\", value: true }]\n\n  const previousState = {\n    is_hidden: props.post.is_hidden,\n    hidden_on: props.post.hidden_on,\n    hidden_by_name: props.post.hidden_by_name,\n    url: props.post.url,\n  }\n\n  patch(props, ops, previousState)\n}\n\nexport function unhide(props) {\n  store.dispatch(\n    post.patch(props.post, {\n      is_hidden: false,\n    })\n  )\n\n  const ops = [{ op: \"replace\", path: \"is-hidden\", value: false }]\n\n  const previousState = {\n    is_hidden: props.post.is_hidden,\n  }\n\n  patch(props, ops, previousState)\n}\n\nexport function like(props) {\n  const lastLikes = props.post.last_likes || []\n  const concatedLikes = [props.user].concat(lastLikes)\n  const finalLikes =\n    concatedLikes.length > 3 ? concatedLikes.slice(0, -1) : concatedLikes\n\n  store.dispatch(\n    post.patch(props.post, {\n      is_liked: true,\n      likes: props.post.likes + 1,\n      last_likes: finalLikes,\n    })\n  )\n\n  const ops = [{ op: \"replace\", path: \"is-liked\", value: true }]\n\n  const previousState = {\n    is_liked: props.post.is_liked,\n    likes: props.post.likes,\n    last_likes: props.post.last_likes,\n  }\n\n  patch(props, ops, previousState)\n}\n\nexport function unlike(props) {\n  store.dispatch(\n    post.patch(props.post, {\n      is_liked: false,\n      likes: props.post.likes - 1,\n      last_likes: props.post.last_likes.filter((user) => {\n        return !user.id || user.id !== props.user.id\n      }),\n    })\n  )\n\n  const ops = [{ op: \"replace\", path: \"is-liked\", value: false }]\n\n  const previousState = {\n    is_liked: props.post.is_liked,\n    likes: props.post.likes,\n    last_likes: props.post.last_likes,\n  }\n\n  patch(props, ops, previousState)\n}\n\nexport function patch(props, ops, previousState) {\n  ajax.patch(props.post.api.index, ops).then(\n    (newState) => {\n      store.dispatch(post.patch(props.post, newState))\n    },\n    (rejection) => {\n      if (rejection.status === 400) {\n        snackbar.error(rejection.detail[0])\n      } else {\n        snackbar.apiError(rejection)\n      }\n\n      store.dispatch(post.patch(props.post, previousState))\n    }\n  )\n}\n\nexport function remove(props) {\n  let confirmed = window.confirm(\n    gettext(\n      \"Are you sure you want to delete this post? This action is not reversible!\"\n    )\n  )\n  if (!confirmed) {\n    return\n  }\n\n  store.dispatch(\n    post.patch(props.post, {\n      isDeleted: true,\n    })\n  )\n\n  ajax.delete(props.post.api.index).then(\n    () => {\n      snackbar.success(gettext(\"Post has been deleted.\"))\n    },\n    (rejection) => {\n      if (rejection.status === 400) {\n        snackbar.error(rejection.detail)\n      } else {\n        snackbar.apiError(rejection)\n      }\n\n      store.dispatch(\n        post.patch(props.post, {\n          isDeleted: false,\n        })\n      )\n    }\n  )\n}\n\nexport function markAsBestAnswer(props) {\n  const { post, user } = props\n\n  store.dispatch(\n    thread.update({\n      best_answer: post.id,\n      best_answer_is_protected: post.is_protected,\n      best_answer_marked_on: moment(),\n      best_answer_marked_by: user.id,\n      best_answer_marked_by_name: user.username,\n      best_answer_marked_by_slug: user.slug,\n    })\n  )\n\n  const ops = [\n    { op: \"replace\", path: \"best-answer\", value: post.id },\n    { op: \"add\", path: \"acl\", value: true },\n  ]\n\n  const previousState = {\n    best_answer: props.thread.best_answer,\n    best_answer_is_protected: props.thread.best_answer_is_protected,\n    best_answer_marked_on: props.thread.best_answer_marked_on,\n    best_answer_marked_by: props.thread.best_answer_marked_by,\n    best_answer_marked_by_name: props.thread.best_answer_marked_by_name,\n    best_answer_marked_by_slug: props.thread.best_answer_marked_by_slug,\n  }\n\n  patchThread(props, ops, previousState)\n}\n\nexport function unmarkBestAnswer(props) {\n  const { post } = props\n\n  store.dispatch(\n    thread.update({\n      best_answer: null,\n      best_answer_is_protected: false,\n      best_answer_marked_on: null,\n      best_answer_marked_by: null,\n      best_answer_marked_by_name: null,\n      best_answer_marked_by_slug: null,\n    })\n  )\n\n  const ops = [\n    { op: \"remove\", path: \"best-answer\", value: post.id },\n    { op: \"add\", path: \"acl\", value: true },\n  ]\n\n  const previousState = {\n    best_answer: props.thread.best_answer,\n    best_answer_is_protected: props.thread.best_answer_is_protected,\n    best_answer_marked_on: props.thread.best_answer_marked_on,\n    best_answer_marked_by: props.thread.best_answer_marked_by,\n    best_answer_marked_by_name: props.thread.best_answer_marked_by_name,\n    best_answer_marked_by_slug: props.thread.best_answer_marked_by_slug,\n  }\n\n  patchThread(props, ops, previousState)\n}\n\nexport function patchThread(props, ops, previousState) {\n  ajax.patch(props.thread.api.index, ops).then(\n    (newState) => {\n      if (newState.best_answer_marked_on) {\n        newState.best_answer_marked_on = moment(newState.best_answer_marked_on)\n      }\n      store.dispatch(thread.update(newState))\n    },\n    (rejection) => {\n      if (rejection.status === 400) {\n        snackbar.error(rejection.detail[0])\n      } else {\n        snackbar.apiError(rejection)\n      }\n\n      store.dispatch(thread.update(previousState))\n    }\n  )\n}\n","import React from \"react\"\nimport moment from \"moment\"\nimport Avatar from \"misago/components/avatar\"\nimport Message from \"misago/components/modal-message\"\nimport Loader from \"misago/components/modal-loader\"\nimport ajax from \"misago/services/ajax\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isReady: false,\n\n      error: null,\n      likes: [],\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(this.props.post.api.likes).then(\n      (data) => {\n        this.setState({\n          isReady: true,\n          likes: data.map(hydrateLike),\n        })\n      },\n      (rejection) => {\n        this.setState({\n          isReady: true,\n          error: rejection.detail,\n        })\n      }\n    )\n  }\n\n  render() {\n    if (this.state.error) {\n      return (\n        <ModalDialog className=\"modal-message\">\n          <Message message={this.state.error} />\n        </ModalDialog>\n      )\n    } else if (this.state.isReady) {\n      if (this.state.likes.length) {\n        return (\n          <ModalDialog className=\"modal-sm\" likes={this.state.likes}>\n            <LikesList likes={this.state.likes} />\n          </ModalDialog>\n        )\n      }\n\n      return (\n        <ModalDialog className=\"modal-message\">\n          <Message message={gettext(\"No users have liked this post.\")} />\n        </ModalDialog>\n      )\n    }\n\n    return (\n      <ModalDialog className=\"modal-sm\">\n        <Loader />\n      </ModalDialog>\n    )\n  }\n}\n\nexport function hydrateLike(data) {\n  return Object.assign({}, data, {\n    liked_on: moment(data.liked_on),\n  })\n}\n\nexport function ModalDialog({ className, children, likes }) {\n  let title = gettext(\"Post Likes\")\n  if (likes) {\n    const likesCount = likes.length\n    const message = ngettext(\"%(likes)s like\", \"%(likes)s likes\", likesCount)\n\n    title = interpolate(message, { likes: likesCount }, true)\n  }\n\n  return (\n    <div className={\"modal-dialog \" + (className || \"\")} role=\"document\">\n      <div className=\"modal-content\">\n        <div className=\"modal-header\">\n          <button\n            aria-label={gettext(\"Close\")}\n            className=\"close\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            <span aria-hidden=\"true\">&times;</span>\n          </button>\n          <h4 className=\"modal-title\">{title}</h4>\n        </div>\n        {children}\n      </div>\n    </div>\n  )\n}\n\nexport function LikesList(props) {\n  return (\n    <div className=\"modal-body modal-post-likers\">\n      <ul className=\"media-list\">\n        {props.likes.map((like) => {\n          return <LikeDetails key={like.id} {...like} />\n        })}\n      </ul>\n    </div>\n  )\n}\n\nexport function LikeDetails(props) {\n  if (props.url) {\n    const user = {\n      id: props.liker_id,\n      avatars: props.avatars,\n    }\n\n    return (\n      <li className=\"media\">\n        <div className=\"media-left\">\n          <a className=\"user-avatar\" href={props.url}>\n            <Avatar size=\"50\" user={user} />\n          </a>\n        </div>\n        <div className=\"media-body\">\n          <a className=\"item-title\" href={props.url}>\n            {props.username}\n          </a>{\" \"}\n          <LikeDate likedOn={props.liked_on} />\n        </div>\n      </li>\n    )\n  }\n\n  return (\n    <li className=\"media\">\n      <div className=\"media-left\">\n        <span className=\"user-avatar\">\n          <Avatar size=\"50\" />\n        </span>\n      </div>\n      <div className=\"media-body\">\n        <strong>{props.username}</strong> <LikeDate likedOn={props.liked_on} />\n      </div>\n    </li>\n  )\n}\n\nexport function LikeDate(props) {\n  return (\n    <span className=\"text-muted\" title={props.likedOn.format(\"LLL\")}>\n      {props.likedOn.fromNow()}\n    </span>\n  )\n}\n","import React from \"react\"\nimport * as actions from \"./controls/actions\"\nimport LikesModal from \"misago/components/post-likes\"\nimport modal from \"misago/services/modal\"\nimport posting from \"misago/services/posting\"\n\nexport default function (props) {\n  if (!isVisible(props.post)) return null\n\n  return (\n    <div className=\"post-footer\">\n      <MarkAsBestAnswer {...props} />\n      <MarkAsBestAnswerCompact {...props} />\n      <Like {...props} />\n      <Likes\n        lastLikes={props.post.last_likes}\n        likes={props.post.likes}\n        {...props}\n      />\n      <LikesCompact likes={props.post.likes} {...props} />\n      <Reply {...props} />\n      <Edit {...props} />\n    </div>\n  )\n}\n\nexport function isVisible(post) {\n  return (\n    (!post.is_hidden || post.acl.can_see_hidden) &&\n    (post.acl.can_reply ||\n      post.acl.can_edit ||\n      (post.acl.can_see_likes && (post.last_likes || []).length) ||\n      post.acl.can_like)\n  )\n}\n\nexport class MarkAsBestAnswer extends React.Component {\n  onClick = () => {\n    actions.markAsBestAnswer(this.props)\n  }\n\n  render() {\n    const { post, thread } = this.props\n\n    if (!thread.acl.can_mark_best_answer) return null\n    if (!post.acl.can_mark_as_best_answer) return null\n    if (thread.best_answer && !thread.acl.can_change_best_answer) return null\n\n    return (\n      <button\n        className=\"hidden-xs btn btn-default btn-sm pull-left\"\n        disabled={this.props.post.isBusy || post.id === thread.best_answer}\n        onClick={this.onClick}\n        type=\"button\"\n      >\n        <span className=\"material-icon\">check_box</span>\n        {gettext(\"Best answer\")}\n      </button>\n    )\n  }\n}\n\nexport class MarkAsBestAnswerCompact extends React.Component {\n  onClick = () => {\n    actions.markAsBestAnswer(this.props)\n  }\n\n  render() {\n    const { post, thread } = this.props\n\n    if (!thread.acl.can_mark_best_answer) return null\n    if (!post.acl.can_mark_as_best_answer) return null\n    if (thread.best_answer && !thread.acl.can_change_best_answer) return null\n\n    return (\n      <button\n        className=\"visible-xs-inline-block btn btn-default btn-sm pull-left\"\n        disabled={this.props.post.isBusy || post.id === thread.best_answer}\n        onClick={this.onClick}\n        type=\"button\"\n      >\n        <span className=\"material-icon\">check_box</span>\n      </button>\n    )\n  }\n}\n\nexport class Like extends React.Component {\n  onClick = () => {\n    if (this.props.post.is_liked) {\n      actions.unlike(this.props)\n    } else {\n      actions.like(this.props)\n    }\n  }\n\n  render() {\n    if (!this.props.post.acl.can_like) return null\n\n    let className = \"btn btn-default btn-sm pull-left\"\n    if (this.props.post.is_liked) {\n      className = \"btn btn-success btn-sm pull-left\"\n    }\n\n    return (\n      <button\n        className={className}\n        disabled={this.props.post.isBusy}\n        onClick={this.onClick}\n        type=\"button\"\n      >\n        {this.props.post.is_liked ? gettext(\"Liked\") : gettext(\"Like\")}\n      </button>\n    )\n  }\n}\n\nexport class Likes extends React.Component {\n  onClick = () => {\n    modal.show(<LikesModal post={this.props.post} />)\n  }\n\n  render() {\n    const hasLikes = (this.props.post.last_likes || []).length > 0\n    if (!this.props.post.acl.can_see_likes || !hasLikes) return null\n\n    if (this.props.post.acl.can_see_likes === 2) {\n      return (\n        <button\n          className=\"btn btn-link btn-sm pull-left hidden-xs\"\n          onClick={this.onClick}\n          type=\"button\"\n        >\n          {getLikesMessage(this.props.likes, this.props.lastLikes)}\n        </button>\n      )\n    }\n\n    return (\n      <p className=\"pull-left hidden-xs\">\n        {getLikesMessage(this.props.likes, this.props.lastLikes)}\n      </p>\n    )\n  }\n}\n\nexport class LikesCompact extends Likes {\n  render() {\n    const hasLikes = (this.props.post.last_likes || []).length > 0\n    if (!this.props.post.acl.can_see_likes || !hasLikes) return null\n\n    if (this.props.post.acl.can_see_likes === 2) {\n      return (\n        <button\n          className=\"btn btn-link btn-sm likes-compact pull-left visible-xs-block\"\n          onClick={this.onClick}\n          type=\"button\"\n        >\n          <span className=\"material-icon\">favorite</span>\n          {this.props.likes}\n        </button>\n      )\n    }\n\n    return (\n      <p className=\"likes-compact pull-left visible-xs-block\">\n        <span className=\"material-icon\">favorite</span>\n        {this.props.likes}\n      </p>\n    )\n  }\n}\n\nexport function getLikesMessage(likes, users) {\n  const usernames = users.slice(0, 3).map((u) => u.username)\n\n  if (usernames.length == 1) {\n    return interpolate(\n      gettext(\"%(user)s likes this.\"),\n      {\n        user: usernames[0],\n      },\n      true\n    )\n  }\n\n  const hiddenLikes = likes - usernames.length\n\n  const otherUsers = usernames.slice(0, -1).join(\", \")\n  const lastUser = usernames.slice(-1)[0]\n\n  const usernamesList = interpolate(\n    gettext(\"%(users)s and %(last_user)s\"),\n    {\n      users: otherUsers,\n      last_user: lastUser,\n    },\n    true\n  )\n\n  if (hiddenLikes === 0) {\n    return interpolate(\n      gettext(\"%(users)s like this.\"),\n      {\n        users: usernamesList,\n      },\n      true\n    )\n  }\n\n  const message = ngettext(\n    \"%(users)s and %(likes)s other user like this.\",\n    \"%(users)s and %(likes)s other users like this.\",\n    hiddenLikes\n  )\n\n  return interpolate(\n    message,\n    {\n      users: usernames.join(\", \"),\n      likes: hiddenLikes,\n    },\n    true\n  )\n}\n\nexport class Reply extends React.Component {\n  onClick = () => {\n    posting.open({\n      mode: \"REPLY\",\n\n      config: this.props.thread.api.editor,\n      submit: this.props.thread.api.posts.index,\n\n      context: {\n        reply: this.props.post.id,\n      },\n    })\n  }\n\n  render() {\n    if (this.props.post.acl.can_reply) {\n      return (\n        <button\n          className=\"btn btn-primary btn-sm pull-right\"\n          type=\"button\"\n          onClick={this.onClick}\n        >\n          {gettext(\"Reply\")}\n        </button>\n      )\n    } else {\n      return null\n    }\n  }\n}\n\nexport class Edit extends React.Component {\n  onClick = () => {\n    posting.open({\n      mode: \"EDIT\",\n\n      config: this.props.post.api.editor,\n      submit: this.props.post.api.index,\n    })\n  }\n\n  render() {\n    if (this.props.post.acl.can_edit) {\n      return (\n        <button\n          className=\"hidden-xs btn btn-default btn-sm pull-right\"\n          type=\"button\"\n          onClick={this.onClick}\n        >\n          {gettext(\"Edit\")}\n        </button>\n      )\n    } else {\n      return null\n    }\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport * as post from \"misago/reducers/post\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      url: \"\",\n\n      validators: {\n        url: [],\n      },\n      errors: {},\n    }\n  }\n\n  clean() {\n    if (!this.state.url.trim().length) {\n      snackbar.error(gettext(\"You have to enter link to the other thread.\"))\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.post(this.props.thread.api.posts.move, {\n      new_thread: this.state.url,\n      posts: [this.props.post.id],\n    })\n  }\n\n  handleSuccess(success) {\n    store.dispatch(\n      post.patch(this.props.post, {\n        isDeleted: true,\n      })\n    )\n\n    modal.hide()\n\n    snackbar.success(gettext(\"Selected post was moved to the other thread.\"))\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      snackbar.error(rejection.detail)\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  onUrlChange = (event) => {\n    this.changeValue(\"url\", event.target.value)\n  }\n\n  render() {\n    return (\n      <div className=\"modal-dialog\" role=\"document\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"modal-content\">\n            <ModalHeader />\n            <div className=\"modal-body\">\n              <FormGroup\n                for=\"id_url\"\n                label={gettext(\"Link to thread you want to move post to\")}\n              >\n                <input\n                  className=\"form-control\"\n                  disabled={this.state.isLoading}\n                  id=\"id_url\"\n                  onChange={this.onUrlChange}\n                  value={this.state.url}\n                />\n              </FormGroup>\n            </div>\n            <div className=\"modal-footer\">\n              <button\n                className=\"btn btn-primary\"\n                disabled={this.state.isLoading}\n              >\n                {gettext(\"Move post\")}\n              </button>\n            </div>\n          </div>\n        </form>\n      </div>\n    )\n  }\n}\n\nexport function ModalHeader(props) {\n  return (\n    <div className=\"modal-header\">\n      <button\n        aria-label={gettext(\"Close\")}\n        className=\"close\"\n        data-dismiss=\"modal\"\n        type=\"button\"\n      >\n        <span aria-hidden=\"true\">&times;</span>\n      </button>\n      <h4 className=\"modal-title\">{gettext(\"Move post\")}</h4>\n    </div>\n  )\n}\n","import React from \"react\"\n\nexport default function (props) {\n  return (\n    <div className=\"modal-body post-changelog-diff\">\n      <ul className=\"list-unstyled\">\n        {props.diff.map((item, i) => {\n          return <DiffItem item={item} key={i} />\n        })}\n      </ul>\n    </div>\n  )\n}\n\nexport function DiffItem(props) {\n  if (props.item[0] === \"?\") return null\n\n  return (\n    <li className={getItemClassName(props.item)}>{cleanItem(props.item)}</li>\n  )\n}\n\nexport function getItemClassName(item) {\n  let className = \"diff-item\"\n  if (item[0] === \"-\") {\n    className += \" diff-item-sub\"\n  } else if (item[0] === \"+\") {\n    className += \" diff-item-add\"\n  }\n  return className\n}\n\nexport function cleanItem(item) {\n  return item.substr(2)\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\n\nexport default class extends React.Component {\n  onClick = () => {\n    this.props.revertEdit(this.props.edit.id)\n  }\n\n  render() {\n    if (!this.props.canRevert) return null\n\n    return (\n      <div className=\"modal-footer visible-xs-block\">\n        <Button\n          className=\"btn-default btn-sm btn-block\"\n          disabled={this.props.disabled}\n          onClick={this.onClick}\n          title={gettext(\"Revert post to state from before this edit.\")}\n        >\n          {gettext(\"Revert\")}\n        </Button>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nconst DATE_ABBR = '<abbr title=\"%(absolute)s\">%(relative)s</abbr>'\nconst USER_SPAN = '<span class=\"item-title\">%(user)s</span>'\nconst USER_URL = '<a href=\"%(url)s\" class=\"item-title\">%(user)s</a>'\n\nexport default class extends React.Component {\n  goLast = () => {\n    this.props.goToEdit()\n  }\n\n  goForward = () => {\n    this.props.goToEdit(this.props.edit.next)\n  }\n\n  goBack = () => {\n    this.props.goToEdit(this.props.edit.previous)\n  }\n\n  revertEdit = () => {\n    this.props.revertEdit(this.props.edit.id)\n  }\n\n  render() {\n    return (\n      <div className=\"modal-toolbar post-changelog-toolbar\">\n        <div className=\"row\">\n          <div className=\"col-xs-12 col-sm-4\">\n            <div className=\"row\">\n              <div className=\"col-xs-4\">\n                <GoBackBtn\n                  disabled={this.props.disabled}\n                  edit={this.props.edit}\n                  onClick={this.goBack}\n                />\n              </div>\n              <div className=\"col-xs-4\">\n                <GoForwardBtn\n                  disabled={this.props.disabled}\n                  edit={this.props.edit}\n                  onClick={this.goForward}\n                />\n              </div>\n              <div className=\"col-xs-4\">\n                <GoLastBtn\n                  disabled={this.props.disabled}\n                  edit={this.props.edit}\n                  onClick={this.goLast}\n                />\n              </div>\n            </div>\n          </div>\n          <div className=\"col-xs-12 col-sm-5 xs-margin-top-half post-change-label\">\n            <Label edit={this.props.edit} />\n          </div>\n          <RevertBtn\n            canRevert={this.props.canRevert}\n            disabled={this.props.disabled}\n            onClick={this.revertEdit}\n          />\n        </div>\n      </div>\n    )\n  }\n}\n\nexport function GoBackBtn(props) {\n  return (\n    <Button\n      className=\"btn-default btn-block btn-icon btn-sm\"\n      disabled={props.disabled || !props.edit.previous}\n      onClick={props.onClick}\n      title={gettext(\"See previous change\")}\n    >\n      <span className=\"material-icon\">chevron_left</span>\n    </Button>\n  )\n}\n\nexport function GoForwardBtn(props) {\n  return (\n    <Button\n      className=\"btn-default btn-block btn-icon btn-sm\"\n      disabled={props.disabled || !props.edit.next}\n      onClick={props.onClick}\n      title={gettext(\"See next change\")}\n    >\n      <span className=\"material-icon\">chevron_right</span>\n    </Button>\n  )\n}\n\nexport function GoLastBtn(props) {\n  return (\n    <Button\n      className=\"btn-default btn-block btn-icon btn-sm\"\n      disabled={props.disabled || !props.edit.next}\n      onClick={props.onClick}\n      title={gettext(\"See previous change\")}\n    >\n      <span className=\"material-icon\">last_page</span>\n    </Button>\n  )\n}\n\nexport function RevertBtn(props) {\n  if (!props.canRevert) return null\n\n  return (\n    <div className=\"col-sm-3 hidden-xs\">\n      <Button\n        className=\"btn-default btn-sm btn-block\"\n        disabled={props.disabled}\n        onClick={props.onClick}\n        title={gettext(\"Revert post to state from before this edit.\")}\n      >\n        {gettext(\"Revert\")}\n      </Button>\n    </div>\n  )\n}\n\nexport function Label(props) {\n  let user = null\n  if (props.edit.url.editor) {\n    user = interpolate(\n      USER_URL,\n      {\n        url: escapeHtml(props.edit.url.editor),\n        user: escapeHtml(props.edit.editor_name),\n      },\n      true\n    )\n  } else {\n    user = interpolate(\n      USER_SPAN,\n      {\n        user: escapeHtml(props.edit.editor_name),\n      },\n      true\n    )\n  }\n\n  const date = interpolate(\n    DATE_ABBR,\n    {\n      absolute: escapeHtml(props.edit.edited_on.format(\"LLL\")),\n      relative: escapeHtml(props.edit.edited_on.fromNow()),\n    },\n    true\n  )\n\n  const message = interpolate(\n    escapeHtml(gettext(\"By %(edited_by)s %(edited_on)s.\")),\n    {\n      edited_by: user,\n      edited_on: date,\n    },\n    true\n  )\n\n  return <p dangerouslySetInnerHTML={{ __html: message }} />\n}\n","import moment from \"moment\"\n\nexport function hydrateEdit(json) {\n  return Object.assign({}, json, {\n    edited_on: moment(json.edited_on),\n  })\n}\n","import React from \"react\"\nimport Diff from \"./diff\"\nimport Footer from \"./footer\"\nimport Toolbar from \"./toolbar\"\nimport { hydrateEdit } from \"./utils\"\nimport Message from \"misago/components/modal-message\"\nimport Loader from \"misago/components/modal-loader\"\nimport * as post from \"misago/reducers/post\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isReady: false,\n      isBusy: true,\n\n      canRevert: props.post.acl.can_edit,\n\n      error: null,\n      edit: null,\n    }\n  }\n\n  componentDidMount() {\n    this.goToEdit()\n  }\n\n  goToEdit = (edit = null) => {\n    this.setState({\n      isBusy: true,\n    })\n\n    let url = this.props.post.api.edits\n    if (edit !== null) {\n      url += \"?edit=\" + edit\n    }\n\n    ajax.get(url).then(\n      (data) => {\n        this.setState({\n          isReady: true,\n          isBusy: false,\n          edit: hydrateEdit(data),\n        })\n      },\n      (rejection) => {\n        this.setState({\n          isReady: true,\n          isBusy: false,\n          error: rejection.detail,\n        })\n      }\n    )\n  }\n\n  revertEdit = (edit) => {\n    if (this.state.isBusy) return\n\n    const confirmation = window.confirm(\n      gettext(\n        \"Are you sure you with to revert this post to the state from before this edit?\"\n      )\n    )\n    if (!confirmation) return\n\n    this.setState({\n      isBusy: true,\n    })\n\n    const url = this.props.post.api.edits + \"?edit=\" + edit\n    ajax.post(url).then(\n      (data) => {\n        const hydratedPost = post.hydrate(data)\n        store.dispatch(post.patch(data, hydratedPost))\n\n        snackbar.success(gettext(\"Post has been reverted to previous state.\"))\n        modal.hide()\n      },\n      (rejection) => {\n        snackbar.apiError(rejection)\n\n        this.setState({\n          isBusy: false,\n        })\n      }\n    )\n  }\n\n  render() {\n    if (this.state.error) {\n      return (\n        <ModalDialog className=\"modal-dialog modal-message\">\n          <Message message={this.state.error} />\n        </ModalDialog>\n      )\n    } else if (this.state.isReady) {\n      return (\n        <ModalDialog>\n          <Toolbar\n            canRevert={this.state.canRevert}\n            disabled={this.state.isBusy}\n            edit={this.state.edit}\n            goToEdit={this.goToEdit}\n            revertEdit={this.revertEdit}\n          />\n          <Diff diff={this.state.edit.diff} />\n          <Footer\n            canRevert={this.state.canRevert}\n            disabled={this.state.isBusy}\n            edit={this.state.edit}\n            revertEdit={this.revertEdit}\n          />\n        </ModalDialog>\n      )\n    }\n\n    return (\n      <ModalDialog>\n        <Loader />\n      </ModalDialog>\n    )\n  }\n}\n\nexport function ModalDialog(props) {\n  return (\n    <div className={props.className || \"modal-dialog\"} role=\"document\">\n      <div className=\"modal-content\">\n        <div className=\"modal-header\">\n          <button\n            aria-label={gettext(\"Close\")}\n            className=\"close\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            <span aria-hidden=\"true\">&times;</span>\n          </button>\n          <h4 className=\"modal-title\">{gettext(\"Post edits history\")}</h4>\n        </div>\n        {props.children}\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport CategorySelect from \"misago/components/category-select\"\nimport ModalLoader from \"misago/components/modal-loader\"\nimport Select from \"misago/components/select\"\nimport * as post from \"misago/reducers/post\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport * as validators from \"misago/utils/validators\"\n\nexport default function (props) {\n  return <PostingConfig {...props} Form={ModerationForm} />\n}\n\nexport class PostingConfig extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoaded: false,\n      isError: false,\n\n      categories: [],\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(misago.get(\"THREAD_EDITOR_API\")).then(\n      (data) => {\n        // hydrate categories, extract posting options\n        const categories = data.map((item) => {\n          return Object.assign(item, {\n            disabled: item.post === false,\n            label: item.name,\n            value: item.id,\n            post: item.post,\n          })\n        })\n\n        this.setState({\n          isLoaded: true,\n          categories,\n        })\n      },\n      (rejection) => {\n        this.setState({\n          isError: rejection.detail,\n        })\n      }\n    )\n  }\n\n  render() {\n    if (this.state.isError) {\n      return <Error message={this.state.isError} />\n    } else if (this.state.isLoaded) {\n      return (\n        <ModerationForm {...this.props} categories={this.state.categories} />\n      )\n    } else {\n      return <Loader />\n    }\n  }\n}\n\nexport class ModerationForm extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      title: \"\",\n      category: null,\n      categories: props.categories,\n      weight: 0,\n      is_hidden: 0,\n      is_closed: false,\n\n      validators: {\n        title: [validators.required()],\n      },\n\n      errors: {},\n    }\n\n    this.isHiddenChoices = [\n      {\n        value: 0,\n        icon: \"visibility\",\n        label: gettext(\"No\"),\n      },\n      {\n        value: 1,\n        icon: \"visibility_off\",\n        label: gettext(\"Yes\"),\n      },\n    ]\n\n    this.isClosedChoices = [\n      {\n        value: false,\n        icon: \"lock_outline\",\n        label: gettext(\"No\"),\n      },\n      {\n        value: true,\n        icon: \"lock\",\n        label: gettext(\"Yes\"),\n      },\n    ]\n\n    this.acl = {}\n    this.props.categories.forEach((category) => {\n      if (category.post) {\n        if (!this.state.category) {\n          this.state.category = category.id\n        }\n\n        this.acl[category.id] = {\n          can_pin_threads: category.post.pin,\n          can_close_threads: category.post.close,\n          can_hide_threads: category.post.hide,\n        }\n      }\n    })\n  }\n\n  clean() {\n    if (this.isValid()) {\n      return true\n    } else {\n      snackbar.error(gettext(\"Form contains errors.\"))\n      this.setState({\n        errors: this.validate(),\n      })\n      return false\n    }\n  }\n\n  send() {\n    return ajax.post(this.props.thread.api.posts.split, {\n      title: this.state.title,\n      category: this.state.category,\n      weight: this.state.weight,\n      is_hidden: this.state.is_hidden,\n      is_closed: this.state.is_closed,\n      posts: [this.props.post.id],\n    })\n  }\n\n  handleSuccess(apiResponse) {\n    store.dispatch(\n      post.patch(this.props.post, {\n        isDeleted: true,\n      })\n    )\n\n    modal.hide()\n\n    snackbar.success(gettext(\"Selected post was split into new thread.\"))\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      this.setState({\n        errors: Object.assign({}, this.state.errors, rejection),\n      })\n      snackbar.error(gettext(\"Form contains errors.\"))\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  onCategoryChange = (ev) => {\n    const categoryId = ev.target.value\n    const newState = {\n      category: categoryId,\n    }\n\n    if (this.acl[categoryId].can_pin_threads < newState.weight) {\n      newState.weight = 0\n    }\n\n    if (!this.acl[categoryId].can_hide_threads) {\n      newState.is_hidden = 0\n    }\n\n    if (!this.acl[categoryId].can_close_threads) {\n      newState.is_closed = false\n    }\n\n    this.setState(newState)\n  }\n\n  getWeightChoices() {\n    const choices = [\n      {\n        value: 0,\n        icon: \"remove\",\n        label: gettext(\"Not pinned\"),\n      },\n      {\n        value: 1,\n        icon: \"bookmark_border\",\n        label: gettext(\"Pinned locally\"),\n      },\n    ]\n\n    if (this.acl[this.state.category].can_pin_threads == 2) {\n      choices.push({\n        value: 2,\n        icon: \"bookmark\",\n        label: gettext(\"Pinned globally\"),\n      })\n    }\n\n    return choices\n  }\n\n  renderWeightField() {\n    if (this.acl[this.state.category].can_pin_threads) {\n      return (\n        <FormGroup\n          label={gettext(\"Thread weight\")}\n          for=\"id_weight\"\n          labelClass=\"col-sm-4\"\n          controlClass=\"col-sm-8\"\n        >\n          <Select\n            id=\"id_weight\"\n            onChange={this.bindInput(\"weight\")}\n            value={this.state.weight}\n            choices={this.getWeightChoices()}\n          />\n        </FormGroup>\n      )\n    } else {\n      return null\n    }\n  }\n\n  renderHiddenField() {\n    if (this.acl[this.state.category].can_hide_threads) {\n      return (\n        <FormGroup\n          label={gettext(\"Hide thread\")}\n          for=\"id_is_hidden\"\n          labelClass=\"col-sm-4\"\n          controlClass=\"col-sm-8\"\n        >\n          <Select\n            id=\"id_is_closed\"\n            onChange={this.bindInput(\"is_hidden\")}\n            value={this.state.is_hidden}\n            choices={this.isHiddenChoices}\n          />\n        </FormGroup>\n      )\n    } else {\n      return null\n    }\n  }\n\n  renderClosedField() {\n    if (this.acl[this.state.category].can_close_threads) {\n      return (\n        <FormGroup\n          label={gettext(\"Close thread\")}\n          for=\"id_is_closed\"\n          labelClass=\"col-sm-4\"\n          controlClass=\"col-sm-8\"\n        >\n          <Select\n            id=\"id_is_closed\"\n            onChange={this.bindInput(\"is_closed\")}\n            value={this.state.is_closed}\n            choices={this.isClosedChoices}\n          />\n        </FormGroup>\n      )\n    } else {\n      return null\n    }\n  }\n\n  render() {\n    return (\n      <Modal className=\"modal-dialog\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"modal-body\">\n            <FormGroup\n              label={gettext(\"Thread title\")}\n              for=\"id_title\"\n              labelClass=\"col-sm-4\"\n              controlClass=\"col-sm-8\"\n              validation={this.state.errors.title}\n            >\n              <input\n                id=\"id_title\"\n                className=\"form-control\"\n                type=\"text\"\n                onChange={this.bindInput(\"title\")}\n                value={this.state.title}\n              />\n            </FormGroup>\n            <div className=\"clearfix\" />\n\n            <FormGroup\n              label={gettext(\"Category\")}\n              for=\"id_category\"\n              labelClass=\"col-sm-4\"\n              controlClass=\"col-sm-8\"\n              validation={this.state.errors.category}\n            >\n              <CategorySelect\n                id=\"id_category\"\n                onChange={this.onCategoryChange}\n                value={this.state.category}\n                choices={this.state.categories}\n              />\n            </FormGroup>\n            <div className=\"clearfix\" />\n\n            {this.renderWeightField()}\n            {this.renderHiddenField()}\n            {this.renderClosedField()}\n          </div>\n          <div className=\"modal-footer\">\n            <Button className=\"btn-primary\" loading={this.state.isLoading}>\n              {gettext(\"Split post\")}\n            </Button>\n          </div>\n        </form>\n      </Modal>\n    )\n  }\n}\n\nexport function Loader() {\n  return (\n    <Modal className=\"modal-dialog\">\n      <ModalLoader />\n    </Modal>\n  )\n}\n\nexport function Error(props) {\n  return (\n    <Modal className=\"modal-dialog modal-message\">\n      <div className=\"message-icon\">\n        <span className=\"material-icon\">info_outline</span>\n      </div>\n      <div className=\"message-body\">\n        <p className=\"lead\">\n          {gettext(\"You can't move this post at the moment.\")}\n        </p>\n        <p>{props.message}</p>\n      </div>\n    </Modal>\n  )\n}\n\nexport function Modal(props) {\n  return (\n    <div className={props.className} role=\"document\">\n      <div className=\"modal-content\">\n        <div className=\"modal-header\">\n          <button\n            aria-label={gettext(\"Close\")}\n            className=\"close\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            <span aria-hidden=\"true\">&times;</span>\n          </button>\n          <h4 className=\"modal-title\">\n            {gettext(\"Split post into new thread\")}\n          </h4>\n        </div>\n        {props.children}\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport modal from \"misago/services/modal\"\nimport posting from \"misago/services/posting\"\nimport * as moderation from \"./actions\"\nimport MoveModal from \"./move\"\nimport PostChangelog from \"misago/components/post-changelog\"\nimport SplitModal from \"./split\"\n\nexport default function (props) {\n  return (\n    <ul className=\"dropdown-menu dropdown-menu-right stick-to-bottom\">\n      <Permalink {...props} />\n      <Edit {...props} />\n      <MarkAsBestAnswer {...props} />\n      <UnmarkMarkBestAnswer {...props} />\n      <PostEdits {...props} />\n      <Approve {...props} />\n      <Move {...props} />\n      <Split {...props} />\n      <Protect {...props} />\n      <Unprotect {...props} />\n      <Hide {...props} />\n      <Unhide {...props} />\n      <Delete {...props} />\n    </ul>\n  )\n}\n\nexport class Permalink extends React.Component {\n  onClick = () => {\n    let permaUrl = window.location.protocol + \"//\"\n    permaUrl += window.location.host\n    permaUrl += this.props.post.url.index\n\n    prompt(gettext(\"Permament link to this post:\"), permaUrl)\n  }\n\n  render() {\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">link</span>\n          {gettext(\"Permament link\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Edit extends React.Component {\n  onClick = () => {\n    posting.open({\n      mode: \"EDIT\",\n\n      config: this.props.post.api.editor,\n      submit: this.props.post.api.index,\n    })\n  }\n\n  render() {\n    if (!this.props.post.acl.can_edit) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">edit</span>\n          {gettext(\"Edit\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class MarkAsBestAnswer extends React.Component {\n  onClick = () => {\n    moderation.markAsBestAnswer(this.props)\n  }\n\n  render() {\n    const { post, thread } = this.props\n\n    if (!thread.acl.can_mark_best_answer) return null\n    if (!post.acl.can_mark_as_best_answer) return null\n    if (post.id === thread.best_answer) return null\n    if (thread.best_answer && !thread.acl.can_change_best_answer) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">check_box</span>\n          {gettext(\"Mark as best answer\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class UnmarkMarkBestAnswer extends React.Component {\n  onClick = () => {\n    moderation.unmarkBestAnswer(this.props)\n  }\n\n  render() {\n    const { post, thread } = this.props\n\n    if (post.id !== thread.best_answer) return null\n    if (!thread.acl.can_unmark_best_answer) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">check_box_outline_blank</span>\n          {gettext(\"Unmark best answer\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class PostEdits extends React.Component {\n  onClick = () => {\n    modal.show(<PostChangelog post={this.props.post} />)\n  }\n\n  render() {\n    const isHidden =\n      this.props.post.is_hidden && !this.props.post.acl.can_see_hidden\n    const isUnedited = this.props.post.edits === 0\n    if (isHidden || isUnedited) return null\n\n    const message = ngettext(\n      \"This post was edited %(edits)s time.\",\n      \"This post was edited %(edits)s times.\",\n      this.props.post.edits\n    )\n\n    const title = interpolate(\n      message,\n      {\n        edits: this.props.post.edits,\n      },\n      true\n    )\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">edit</span>\n          {gettext(\"Changes history\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Approve extends React.Component {\n  onClick = () => {\n    moderation.approve(this.props)\n  }\n\n  render() {\n    if (!this.props.post.acl.can_approve) return null\n    if (!this.props.post.is_unapproved) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">done</span>\n          {gettext(\"Approve\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Move extends React.Component {\n  onClick = () => {\n    modal.show(<MoveModal {...this.props} />)\n  }\n\n  render() {\n    if (!this.props.post.acl.can_move) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">arrow_forward</span>\n          {gettext(\"Move\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Split extends React.Component {\n  onClick = () => {\n    modal.show(<SplitModal {...this.props} />)\n  }\n\n  render() {\n    if (!this.props.post.acl.can_move) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">call_split</span>\n          {gettext(\"Split\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Protect extends React.Component {\n  onClick = () => {\n    moderation.protect(this.props)\n  }\n\n  render() {\n    if (!this.props.post.acl.can_protect) return null\n    if (this.props.post.is_protected) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">lock_outline</span>\n          {gettext(\"Protect\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Unprotect extends React.Component {\n  onClick = () => {\n    moderation.unprotect(this.props)\n  }\n\n  render() {\n    if (!this.props.post.acl.can_protect) return null\n    if (!this.props.post.is_protected) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">lock_open</span>\n          {gettext(\"Remove protection\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Hide extends React.Component {\n  onClick = () => {\n    moderation.hide(this.props)\n  }\n\n  render() {\n    const { post, thread } = this.props\n\n    if (post.id === thread.best_answer) return null\n    if (!post.acl.can_hide) return null\n    if (post.is_hidden) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">visibility_off</span>\n          {gettext(\"Hide\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Unhide extends React.Component {\n  onClick = () => {\n    moderation.unhide(this.props)\n  }\n\n  render() {\n    if (!this.props.post.acl.can_unhide) return null\n    if (!this.props.post.is_hidden) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">visibility</span>\n          {gettext(\"Unhide\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Delete extends React.Component {\n  onClick = () => {\n    moderation.remove(this.props)\n  }\n\n  render() {\n    const { post, thread } = this.props\n\n    if (post.id === thread.best_answer) return null\n    if (!post.acl.can_delete) return null\n\n    return (\n      <li>\n        <button className=\"btn btn-link\" onClick={this.onClick} type=\"button\">\n          <span className=\"material-icon\">clear</span>\n          {gettext(\"Delete\")}\n        </button>\n      </li>\n    )\n  }\n}\n","import React from \"react\"\nimport Dropdown from \"./dropdown\"\n\nexport default function (props) {\n  return (\n    <div className=\"pull-right dropdown\">\n      <button\n        aria-expanded=\"true\"\n        aria-haspopup=\"true\"\n        className=\"btn btn-default btn-icon dropdown-toggle\"\n        data-toggle=\"dropdown\"\n        type=\"button\"\n      >\n        <span className=\"material-icon\">expand_more</span>\n      </button>\n      <Dropdown {...props} />\n    </div>\n  )\n}\n","import React from \"react\"\nimport * as posts from \"misago/reducers/posts\"\nimport store from \"misago/services/store\"\n\nexport default class extends React.Component {\n  onClick = () => {\n    if (this.props.post.isSelected) {\n      store.dispatch(posts.deselect(this.props.post))\n    } else {\n      store.dispatch(posts.select(this.props.post))\n    }\n  }\n\n  render() {\n    if (\n      !(this.props.thread.acl.can_merge_posts || isVisible(this.props.post.acl))\n    ) {\n      return null\n    }\n\n    return (\n      <div className=\"pull-right\">\n        <button\n          className=\"btn btn-default btn-icon\"\n          onClick={this.onClick}\n          type=\"button\"\n        >\n          <span className=\"material-icon\">\n            {this.props.post.isSelected\n              ? \"check_box\"\n              : \"check_box_outline_blank\"}\n          </span>\n        </button>\n      </div>\n    )\n  }\n}\n\nexport function isVisible(acl) {\n  return (\n    acl.can_approve ||\n    acl.can_hide ||\n    acl.can_protect ||\n    acl.can_unhide ||\n    acl.can_delete ||\n    acl.can_move\n  )\n}\n","import React from \"react\"\nimport Controls from \"./controls\"\nimport Select from \"./select\"\nimport {\n  StatusIcon,\n  getStatusClassName,\n  getStatusDescription,\n} from \"misago/components/user-status\"\nimport PostChangelog from \"misago/components/post-changelog\"\nimport modal from \"misago/services/modal\"\n\nexport default function (props) {\n  return (\n    <div className=\"post-heading\">\n      <UnreadLabel {...props} />\n      <UnreadCompact {...props} />\n      <PostedOn {...props} />\n      <PostedOnCompact {...props} />\n      <PostEdits {...props} />\n      <PostEditsCompacts {...props} />\n      <ProtectedLabel {...props} />\n      <Select {...props} />\n      <Controls {...props} />\n    </div>\n  )\n}\n\nexport function UnreadLabel(props) {\n  if (props.post.is_read) return null\n\n  return (\n    <span className=\"label label-unread hidden-xs\">{gettext(\"New post\")}</span>\n  )\n}\n\nexport function UnreadCompact(props) {\n  if (props.post.is_read) return null\n\n  return (\n    <span className=\"label label-unread visible-xs-inline-block\">\n      {gettext(\"New\")}\n    </span>\n  )\n}\n\nexport function PostedOn(props) {\n  const tooltip = interpolate(\n    gettext(\"posted %(posted_on)s\"),\n    {\n      posted_on: props.post.posted_on.format(\"LL, LT\"),\n    },\n    true\n  )\n\n  return (\n    <a\n      href={props.post.url.index}\n      className=\"btn btn-link posted-on hidden-xs\"\n      title={tooltip}\n    >\n      {props.post.posted_on.fromNow()}\n    </a>\n  )\n}\n\nexport function PostedOnCompact(props) {\n  return (\n    <a\n      href={props.post.url.index}\n      className=\"btn btn-link posted-on visible-xs-inline-block\"\n    >\n      {props.post.posted_on.fromNow()}\n    </a>\n  )\n}\n\nexport class PostEdits extends React.Component {\n  onClick = () => {\n    modal.show(<PostChangelog post={this.props.post} />)\n  }\n\n  render() {\n    const isHidden =\n      this.props.post.is_hidden && !this.props.post.acl.can_see_hidden\n    const isUnedited = this.props.post.edits === 0\n    if (isHidden || isUnedited) return null\n\n    const tooltip = ngettext(\n      \"This post was edited %(edits)s time.\",\n      \"This post was edited %(edits)s times.\",\n      this.props.post.edits\n    )\n\n    const title = interpolate(\n      tooltip,\n      {\n        edits: this.props.post.edits,\n      },\n      true\n    )\n\n    const label = ngettext(\n      \"edited %(edits)s time\",\n      \"edited %(edits)s times\",\n      this.props.post.edits\n    )\n\n    return (\n      <button\n        className=\"btn btn-link btn-see-edits hidden-xs\"\n        onClick={this.onClick}\n        title={title}\n        type=\"button\"\n      >\n        {interpolate(\n          label,\n          {\n            edits: this.props.post.edits,\n          },\n          true\n        )}\n      </button>\n    )\n  }\n}\n\nexport class PostEditsCompacts extends PostEdits {\n  render() {\n    const isHidden =\n      this.props.post.is_hidden && !this.props.post.acl.can_see_hidden\n    const isUnedited = this.props.post.edits === 0\n    if (isHidden || isUnedited) return null\n\n    const label = ngettext(\n      \"%(edits)s edit\",\n      \"%(edits)s edits\",\n      this.props.post.edits\n    )\n\n    return (\n      <button\n        className=\"btn btn-link btn-see-edits visible-xs-inline-block\"\n        onClick={this.onClick}\n        type=\"button\"\n      >\n        {interpolate(\n          label,\n          {\n            edits: this.props.post.edits,\n          },\n          true\n        )}\n      </button>\n    )\n  }\n}\n\nexport function ProtectedLabel(props) {\n  const postAuthor = props.post.poster && props.post.poster.id === props.user.id\n  const hasAcl = props.post.acl.can_protect\n  const isVisible =\n    props.user.id && props.post.is_protected && (postAuthor || hasAcl)\n\n  if (!isVisible) {\n    return null\n  }\n\n  return (\n    <span\n      className=\"label label-protected hidden-xs\"\n      title={gettext(\"This post is protected and may not be edited.\")}\n    >\n      <span className=\"material-icon\">lock_outline</span>\n      {gettext(\"protected\")}\n    </span>\n  )\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport Controls from \"misago/components/posts-list/post/controls\"\nimport Select from \"misago/components/posts-list/post/select\"\n\nexport default function ({ post, thread }) {\n  return (\n    <div className=\"post-side post-side-anonymous\">\n      <Select post={post} thread={thread} />\n      <Controls post={post} thread={thread} />\n      <div className=\"media\">\n        <div className=\"media-left\">\n          <span>\n            <Avatar className=\"poster-avatar\" size={100} />\n          </span>\n        </div>\n        <div className=\"media-body\">\n          <span className=\"media-heading item-title\">{post.poster_name}</span>\n\n          <span className=\"user-title user-title-anonymous\">\n            {gettext(\"Removed user\")}\n          </span>\n        </div>\n      </div>\n    </div>\n  )\n}\n","export default function ({ title, rank }) {\n  return rank.is_tab || !!title || !!rank.title\n}\n","import React from \"react\"\nimport hasVisibleTitle from \"./has-visible-title\"\n\nexport default function ({ poster }) {\n  const message = ngettext(\"%(posts)s post\", \"%(posts)s posts\", poster.posts)\n\n  let className = \"user-postcount\"\n  if (hasVisibleTitle(poster)) {\n    className += \" hidden-xs hidden-sm\"\n  }\n\n  return (\n    <span className={className}>\n      {interpolate(\n        message,\n        {\n          posts: poster.posts,\n        },\n        true\n      )}\n    </span>\n  )\n}\n","import React from \"react\"\nimport UserStatus, { StatusLabel } from \"misago/components/user-status\"\nimport hasVisibleTitle from \"./has-visible-title\"\n\nexport default function ({ poster }) {\n  let className = \"hidden-xs\"\n  if (hasVisibleTitle(poster)) {\n    className += \" hidden-sm\"\n  }\n\n  return (\n    <span className={className}>\n      <UserStatus status={poster.status}>\n        <StatusLabel status={poster.status} user={poster} />\n      </UserStatus>\n    </span>\n  )\n}\n","import React from \"react\"\n\nexport default function ({ rank, title }) {\n  let userTitle = title || rank.title\n  if (!userTitle && rank.is_tab) {\n    userTitle = rank.name\n  }\n\n  if (!userTitle) return null\n\n  let className = \"user-title\"\n  if (rank.css_class) {\n    className += \" user-title-\" + rank.css_class\n  }\n\n  if (rank.is_tab) {\n    return (\n      <div className={className}>\n        <a href={rank.url}>{userTitle}</a>\n      </div>\n    )\n  }\n\n  return <div className={className}>{userTitle}</div>\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport Controls from \"misago/components/posts-list/post/controls\"\nimport Select from \"misago/components/posts-list/post/select\"\nimport UserStatus, { StatusIcon } from \"misago/components/user-status\"\nimport UserPostcount from \"./user-postcount\"\nimport UserStatusLabel from \"./user-status\"\nimport UserTitle from \"./user-title\"\n\nexport default function ({ post, thread }) {\n  const { poster } = post\n\n  return (\n    <div className=\"post-side post-side-registered\">\n      <Select post={post} thread={thread} />\n      <Controls post={post} thread={thread} />\n      <div className=\"media\">\n        <div className=\"media-left\">\n          <a href={poster.url}>\n            <Avatar className=\"poster-avatar\" size={100} user={poster} />\n          </a>\n        </div>\n        <div className=\"media-body\">\n          <div className=\"media-heading\">\n            <a className=\"item-title\" href={poster.url}>\n              {poster.username}\n            </a>\n            <UserStatus status={poster.status}>\n              <StatusIcon status={poster.status} />\n            </UserStatus>\n          </div>\n\n          <UserTitle rank={poster.rank} title={poster.title} />\n\n          <UserStatusLabel poster={poster} />\n          <UserPostcount poster={poster} />\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Anonymous from \"./anonymous\"\nimport Registered from \"./registered\"\n\nexport default function (props) {\n  if (props.post.poster) {\n    return <Registered {...props} />\n  }\n\n  return <Anonymous {...props} />\n}\n","import React from \"react\"\nimport Attachments from \"./attachments\"\nimport Body from \"./body\"\nimport {\n  FlagBestAnswer,\n  FlagHidden,\n  FlagUnapproved,\n  FlagProtected,\n} from \"./flags\"\nimport Footer from \"./footer\"\nimport Header from \"./header\"\nimport PostSide from \"./post-side\"\n\nexport default function (props) {\n  let className = \"post\"\n  if (props.post.isDeleted) {\n    className = \"hide\"\n  } else if (props.post.is_hidden && !props.post.acl.can_see_hidden) {\n    className = \"post post-hidden\"\n  }\n\n  if (props.post.poster && props.post.poster.rank.css_class) {\n    className += \" post-\" + props.post.poster.rank.css_class\n  }\n\n  if (!props.post.is_read) {\n    className += \" post-new\"\n  }\n\n  return (\n    <li id={\"post-\" + props.post.id} className={className}>\n      <div className=\"panel panel-default panel-post\">\n        <div className=\"panel-body\">\n          <PostSide {...props} />\n          <div className=\"panel-content\">\n            <Header {...props} />\n            <FlagBestAnswer {...props} />\n            <FlagUnapproved {...props} />\n            <FlagProtected {...props} />\n            <FlagHidden {...props} />\n            <Body {...props} />\n            <Attachments {...props} />\n            <Footer {...props} />\n          </div>\n        </div>\n      </div>\n    </li>\n  )\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport * as random from \"misago/utils/random\"\n\nconst PostPreview = () => (\n  <li className=\"post\">\n    <div className=\"panel panel-default panel-post\">\n      <div className=\"panel-body\">\n        <div className=\"post-side post-side-registered\">\n          <div className=\"media\">\n            <div className=\"media-left\">\n              <span>\n                <Avatar className=\"poster-avatar\" size=\"100\" />\n              </span>\n            </div>\n            <div className=\"media-body\">\n              <span className=\"media-heading item-title\">\n                <span className=\"ui-preview-text\" style={{ width: \"80px\" }}>\n                  &nbsp;\n                </span>\n              </span>\n              <span className=\"user-title user-title-anonymous\">\n                <span className=\"ui-preview-text\" style={{ width: \"60px\" }}>\n                  &nbsp;\n                </span>\n              </span>\n            </div>\n          </div>\n        </div>\n        <div className=\"panel-content\">\n          <div className=\"post-body\">\n            <article className=\"misago-markup\">\n              <p className=\"ui-preview-text\" style={{ width: \"100%\" }}>\n                &nbsp;\n              </p>\n              <p className=\"ui-preview-text\" style={{ width: \"70%\" }}>\n                &nbsp;\n              </p>\n              <p\n                className=\"ui-preview-text hidden-xs hidden-sm\"\n                style={{ width: \"85%\" }}\n              >\n                &nbsp;\n              </p>\n            </article>\n          </div>\n        </div>\n      </div>\n    </div>\n  </li>\n)\n\nexport default PostPreview\n","import React from \"react\"\nimport Event from \"./event\"\nimport Post from \"./post\"\nimport PostPreview from \"./post/preview\"\n\nexport default function (props) {\n  if (!props.posts.isLoaded) {\n    return (\n      <ul className=\"posts-list ui-preview\">\n        <PostPreview />\n      </ul>\n    )\n  }\n\n  return (\n    <ul className=\"posts-list ui-ready\">\n      {props.posts.results.map((post) => {\n        return <ListItem key={post.id} post={post} {...props} />\n      })}\n    </ul>\n  )\n}\n\nexport function ListItem(props) {\n  if (props.post.is_event) {\n    return <Event {...props} />\n  }\n\n  return <Post {...props} />\n}\n","import React from \"react\"\nimport Avatar from \"./avatar\"\n\nconst ThreadStarterCard = ({ thread }) => (\n  <div className=\"thread-user-card\">\n    <div className=\"thread-user-card-media\">\n      {thread.starter ? (\n        <a href={thread.url.starter}>\n          <Avatar size={40} user={thread.starter} />\n        </a>\n      ) : (\n        <Avatar size={40} />\n      )}\n    </div>\n    <div className=\"thread-user-card-body\">\n      <div className=\"thread-user-card-header\">\n        {thread.starter ? (\n          <a\n            className=\"item-title\"\n            href={thread.url.starter}\n            title={gettext(\"Thread author\")}\n          >\n            {thread.starter.username}\n          </a>\n        ) : (\n          <span className=\"item-title\" title={gettext(\"Thread author\")}>\n            {thread.starter_name}\n          </span>\n        )}\n      </div>\n      <div>\n        <span\n          className=\"text-muted\"\n          title={interpolate(\n            gettext(\"Started on: %(timestamp)s\"),\n            {\n              timestamp: thread.started_on.format(\"LLL\"),\n            },\n            true\n          )}\n        >\n          {thread.started_on.fromNow()}\n        </span>\n      </div>\n    </div>\n  </div>\n)\n\nexport default ThreadStarterCard\n","import React from \"react\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport { getTitleValidators } from \"misago/components/posting/utils/validators\"\nimport * as thread from \"misago/reducers/thread\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      title: props.thread.title,\n\n      validators: {\n        title: getTitleValidators(),\n      },\n      errors: {},\n    }\n  }\n\n  clean() {\n    if (!this.state.title.trim().length) {\n      snackbar.error(gettext(\"You have to enter thread title.\"))\n      return false\n    }\n\n    const errors = this.validate()\n\n    if (errors.title) {\n      snackbar.error(errors.title[0])\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    // freeze thread\n    store.dispatch(thread.busy())\n\n    return ajax.patch(this.props.thread.api.index, [\n      { op: \"replace\", path: \"title\", value: this.state.title },\n    ])\n  }\n\n  handleSuccess = (data) => {\n    this.handleSuccessUnmounted(data)\n\n    // keep form loading\n    this.setState({\n      isLoading: true,\n    })\n\n    modal.hide()\n  }\n\n  handleSuccessUnmounted = (data) => {\n    store.dispatch(thread.release())\n    store.dispatch(thread.update(data))\n  }\n\n  handleError = (rejection) => {\n    store.dispatch(thread.release())\n\n    if (rejection.status === 400) {\n      snackbar.error(rejection.detail[0])\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  onChange = (event) => {\n    this.changeValue(\"title\", event.target.value)\n  }\n\n  render() {\n    return (\n      <div className=\"modal-dialog\" role=\"document\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"modal-content\">\n            <ModalHeader />\n            <div className=\"modal-body\">\n              <FormGroup for=\"id_modal_title\" label={gettext(\"Thread title\")}>\n                <input\n                  className=\"form-control\"\n                  disabled={this.state.isLoading || this.props.thread.isBusy}\n                  id=\"id_modal_title\"\n                  onChange={this.onChange}\n                  value={this.state.title}\n                />\n              </FormGroup>\n            </div>\n            <div className=\"modal-footer\">\n              <button\n                className=\"btn btn-default\"\n                data-dismiss=\"modal\"\n                disabled={this.state.isLoading}\n                type=\"button\"\n              >\n                {gettext(\"Cancel\")}\n              </button>\n              <button\n                className=\"btn btn-primary\"\n                disabled={this.state.isLoading || this.props.thread.isBusy}\n              >\n                {gettext(\"Change title\")}\n              </button>\n            </div>\n          </div>\n        </form>\n      </div>\n    )\n  }\n}\n\nexport function ModalHeader(props) {\n  return (\n    <div className=\"modal-header\">\n      <button\n        aria-label={gettext(\"Close\")}\n        className=\"close\"\n        data-dismiss=\"modal\"\n        type=\"button\"\n      >\n        <span aria-hidden=\"true\">&times;</span>\n      </button>\n      <h4 className=\"modal-title\">{gettext(\"Change title\")}</h4>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport MergeConflict from \"misago/components/merge-conflict\"\nimport * as thread from \"misago/reducers/thread\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      url: \"\",\n\n      validators: {\n        url: [],\n      },\n      errors: {},\n    }\n  }\n\n  clean() {\n    if (!this.state.url.trim().length) {\n      snackbar.error(gettext(\"You have to enter link to the other thread.\"))\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    // freeze thread\n    store.dispatch(thread.busy())\n\n    return ajax.post(this.props.thread.api.merge, {\n      other_thread: this.state.url,\n    })\n  }\n\n  handleSuccess = (success) => {\n    this.handleSuccessUnmounted(success)\n\n    // keep form loading\n    this.setState({\n      isLoading: true,\n    })\n  }\n\n  handleSuccessUnmounted = (success) => {\n    snackbar.success(gettext(\"Thread has been merged with other one.\"))\n    window.location = success.url\n  }\n\n  handleError = (rejection) => {\n    store.dispatch(thread.release())\n\n    if (rejection.status === 400) {\n      if (rejection.best_answers || rejection.polls) {\n        modal.show(\n          <MergeConflict\n            api={this.props.thread.api.merge}\n            bestAnswers={rejection.best_answers}\n            data={{ other_thread: this.state.url }}\n            polls={rejection.polls}\n            onError={this.handleError}\n            onSuccess={this.handleSuccessUnmounted}\n          />\n        )\n      } else if (rejection.best_answer) {\n        snackbar.error(rejection.best_answer[0])\n      } else if (rejection.poll) {\n        snackbar.error(rejection.poll[0])\n      } else {\n        snackbar.error(rejection.detail)\n      }\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  onUrlChange = (event) => {\n    this.changeValue(\"url\", event.target.value)\n  }\n\n  render() {\n    return (\n      <div className=\"modal-dialog\" role=\"document\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"modal-content\">\n            <ModalHeader />\n            <div className=\"modal-body\">\n              <FormGroup\n                for=\"id_url\"\n                label={gettext(\"Link to thread you want to merge with\")}\n                help_text={gettext(\n                  \"Merge will delete current thread and move its contents to the thread specified here.\"\n                )}\n              >\n                <input\n                  className=\"form-control\"\n                  disabled={this.state.isLoading || this.props.thread.isBusy}\n                  id=\"id_url\"\n                  onChange={this.onUrlChange}\n                  value={this.state.url}\n                />\n              </FormGroup>\n            </div>\n            <div className=\"modal-footer\">\n              <button\n                className=\"btn btn-default\"\n                data-dismiss=\"modal\"\n                disabled={this.state.isLoading}\n                type=\"button\"\n              >\n                {gettext(\"Cancel\")}\n              </button>\n              <button\n                className=\"btn btn-primary\"\n                disabled={this.state.isLoading || this.props.thread.isBusy}\n              >\n                {gettext(\"Merge thread\")}\n              </button>\n            </div>\n          </div>\n        </form>\n      </div>\n    )\n  }\n}\n\nexport function ModalHeader(props) {\n  return (\n    <div className=\"modal-header\">\n      <button\n        aria-label={gettext(\"Close\")}\n        className=\"close\"\n        data-dismiss=\"modal\"\n        type=\"button\"\n      >\n        <span aria-hidden=\"true\">&times;</span>\n      </button>\n      <h4 className=\"modal-title\">{gettext(\"Merge thread\")}</h4>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport CategorySelect from \"misago/components/category-select\"\nimport ModalLoader from \"misago/components/modal-loader\"\nimport * as posts from \"misago/reducers/posts\"\nimport * as thread from \"misago/reducers/thread\"\nimport misago from \"misago\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isReady: false,\n      isLoading: false,\n      isError: false,\n\n      category: null,\n      categories: [],\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(misago.get(\"THREAD_EDITOR_API\")).then(\n      (data) => {\n        let category = null\n\n        // hydrate categories, extract posting options\n        const categories = data.map((item) => {\n          // pick first category that allows posting and if it may, override it with initial one\n          if (item.post !== false && !category) {\n            category = item.id\n          }\n\n          return Object.assign(item, {\n            disabled: item.post === false,\n            label: item.name,\n            value: item.id,\n          })\n        })\n\n        this.setState({\n          isReady: true,\n\n          category,\n          categories,\n        })\n      },\n      (rejection) => {\n        this.setState({\n          isError: rejection.detail,\n        })\n      }\n    )\n  }\n\n  send() {\n    // freeze thread\n    store.dispatch(thread.busy())\n\n    return ajax.patch(this.props.thread.api.index, [\n      { op: \"replace\", path: \"category\", value: this.state.category },\n    ])\n  }\n\n  handleSuccess() {\n    // refresh thread and displayed posts\n    ajax\n      .get(this.props.thread.api.posts.index, { page: this.props.posts.page })\n      .then(\n        (data) => {\n          store.dispatch(thread.replace(data))\n          store.dispatch(posts.load(data.post_set))\n          store.dispatch(thread.release())\n\n          snackbar.success(gettext(\"Thread has been moved.\"))\n          modal.hide()\n        },\n        (rejection) => {\n          store.dispatch(thread.release())\n          snackbar.apiError(rejection)\n        }\n      )\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      snackbar.error(rejection.detail[0])\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  onCategoryChange = (event) => {\n    this.changeValue(\"category\", event.target.value)\n  }\n\n  render() {\n    if (this.state.isReady) {\n      return (\n        <div className=\"modal-dialog\" role=\"document\">\n          <form onSubmit={this.handleSubmit}>\n            <div className=\"modal-content\">\n              <ModalHeader />\n              <div className=\"modal-body\">\n                <FormGroup for=\"id_category\" label={gettext(\"New category\")}>\n                  <CategorySelect\n                    choices={this.state.categories}\n                    disabled={this.state.isLoading || this.props.thread.isBusy}\n                    id=\"id_category\"\n                    onChange={this.onCategoryChange}\n                    value={this.state.category}\n                  />\n                </FormGroup>\n              </div>\n              <div className=\"modal-footer\">\n                <button\n                  className=\"btn btn-default\"\n                  data-dismiss=\"modal\"\n                  disabled={this.state.isLoading}\n                  type=\"button\"\n                >\n                  {gettext(\"Cancel\")}\n                </button>\n                <button\n                  className=\"btn btn-primary\"\n                  disabled={this.state.isLoading || this.props.thread.isBusy}\n                >\n                  {gettext(\"Move thread\")}\n                </button>\n              </div>\n            </div>\n          </form>\n        </div>\n      )\n    } else if (this.state.isError) {\n      return <ModalMessage message={this.state.isError} />\n    } else {\n      return <ModalLoading />\n    }\n  }\n}\n\nexport function ModalHeader(props) {\n  return (\n    <div className=\"modal-header\">\n      <button\n        aria-label={gettext(\"Close\")}\n        className=\"close\"\n        data-dismiss=\"modal\"\n        type=\"button\"\n      >\n        <span aria-hidden=\"true\">&times;</span>\n      </button>\n      <h4 className=\"modal-title\">{gettext(\"Move thread\")}</h4>\n    </div>\n  )\n}\n\nexport function ModalLoading(props) {\n  return (\n    <div className=\"modal-dialog\" role=\"document\">\n      <div className=\"modal-content\">\n        <ModalHeader />\n        <ModalLoader />\n      </div>\n    </div>\n  )\n}\n\nexport function ModalMessage(props) {\n  return (\n    <div className=\"modal-dialog modal-message\" role=\"document\">\n      <div className=\"modal-content\">\n        <ModalHeader />\n        <div className=\"message-icon\">\n          <span className=\"material-icon\">info_outline</span>\n        </div>\n        <div className=\"message-body\">\n          <p className=\"lead\">\n            {gettext(\"You can't move this thread at the moment.\")}\n          </p>\n          <p>{props.message}</p>\n          <button\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            {gettext(\"Ok\")}\n          </button>\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport * as thread from \"misago/reducers/thread\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport ThreadChangeTitleModal from \"./ThreadChangeTitleModal\"\nimport MergeModal from \"./merge\"\nimport MoveModal from \"./move\"\n\nexport default class extends React.Component {\n  callApi = (ops, successMessage) => {\n    store.dispatch(thread.busy())\n\n    // by the chance update thread acl too\n    ops.push({ op: \"add\", path: \"acl\", value: true })\n\n    ajax.patch(this.props.thread.api.index, ops).then(\n      (data) => {\n        store.dispatch(thread.update(data))\n        store.dispatch(thread.release())\n        snackbar.success(successMessage)\n      },\n      (rejection) => {\n        store.dispatch(thread.release())\n        if (rejection.status === 400) {\n          snackbar.error(rejection.detail[0])\n        } else {\n          snackbar.apiError(rejection)\n        }\n      }\n    )\n  }\n\n  changeTitle = () => {\n    modal.show(<ThreadChangeTitleModal thread={this.props.thread} />)\n  }\n\n  pinGlobally = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"weight\",\n          value: 2,\n        },\n      ],\n      gettext(\"Thread has been pinned globally.\")\n    )\n  }\n\n  pinLocally = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"weight\",\n          value: 1,\n        },\n      ],\n      gettext(\"Thread has been pinned locally.\")\n    )\n  }\n\n  unpin = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"weight\",\n          value: 0,\n        },\n      ],\n      gettext(\"Thread has been unpinned.\")\n    )\n  }\n\n  approve = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-unapproved\",\n          value: false,\n        },\n      ],\n      gettext(\"Thread has been approved.\")\n    )\n  }\n\n  open = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-closed\",\n          value: false,\n        },\n      ],\n      gettext(\"Thread has been opened.\")\n    )\n  }\n\n  close = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-closed\",\n          value: true,\n        },\n      ],\n      gettext(\"Thread has been closed.\")\n    )\n  }\n\n  unhide = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-hidden\",\n          value: false,\n        },\n      ],\n      gettext(\"Thread has been made visible.\")\n    )\n  }\n\n  hide = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-hidden\",\n          value: true,\n        },\n      ],\n      gettext(\"Thread has been made hidden.\")\n    )\n  }\n\n  move = () => {\n    modal.show(\n      <MoveModal posts={this.props.posts} thread={this.props.thread} />\n    )\n  }\n\n  merge = () => {\n    modal.show(<MergeModal thread={this.props.thread} />)\n  }\n\n  delete = () => {\n    if (\n      !window.confirm(gettext(\"Are you sure you want to delete this thread?\"))\n    ) {\n      return\n    }\n\n    store.dispatch(thread.busy())\n\n    ajax.delete(this.props.thread.api.index).then(\n      (data) => {\n        snackbar.success(gettext(\"Thread has been deleted.\"))\n        window.location = this.props.thread.category.url.index\n      },\n      (rejection) => {\n        store.dispatch(thread.release())\n        snackbar.apiError(rejection)\n      }\n    )\n  }\n\n  render() {\n    const { moderation } = this.props\n\n    return (\n      <ul className=\"dropdown-menu dropdown-menu-right stick-to-bottom\">\n        {!!moderation.edit && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              onClick={this.changeTitle}\n              type=\"button\"\n            >\n              <span className=\"material-icon\">edit</span>\n              {gettext(\"Change title\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.pinGlobally && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              onClick={this.pinGlobally}\n              type=\"button\"\n            >\n              <span className=\"material-icon\">bookmark</span>\n              {gettext(\"Pin globally\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.pinLocally && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              onClick={this.pinLocally}\n              type=\"button\"\n            >\n              <span className=\"material-icon\">bookmark_border</span>\n              {gettext(\"Pin locally\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.unpin && (\n          <li>\n            <button className=\"btn btn-link\" onClick={this.unpin} type=\"button\">\n              <span className=\"material-icon\">panorama_fish_eye</span>\n              {gettext(\"Unpin\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.move && (\n          <li>\n            <button className=\"btn btn-link\" onClick={this.move} type=\"button\">\n              <span className=\"material-icon\">arrow_forward</span>\n              {gettext(\"Move\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.merge && (\n          <li>\n            <button className=\"btn btn-link\" onClick={this.merge} type=\"button\">\n              <span className=\"material-icon\">call_merge</span>\n              {gettext(\"Merge\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.approve && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              onClick={this.approve}\n              type=\"button\"\n            >\n              <span className=\"material-icon\">done</span>\n              {gettext(\"Approve\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.open && (\n          <li>\n            <button className=\"btn btn-link\" onClick={this.open} type=\"button\">\n              <span className=\"material-icon\">lock_open</span>\n              {gettext(\"Open\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.close && (\n          <li>\n            <button className=\"btn btn-link\" onClick={this.close} type=\"button\">\n              <span className=\"material-icon\">lock_outline</span>\n              {gettext(\"Close\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.unhide && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              onClick={this.unhide}\n              type=\"button\"\n            >\n              <span className=\"material-icon\">visibility</span>\n              {gettext(\"Unhide\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.hide && (\n          <li>\n            <button className=\"btn btn-link\" onClick={this.hide} type=\"button\">\n              <span className=\"material-icon\">visibility_off</span>\n              {gettext(\"Hide\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.delete && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              onClick={this.delete}\n              type=\"button\"\n            >\n              <span className=\"material-icon\">clear</span>\n              {gettext(\"Delete\")}\n            </button>\n          </li>\n        )}\n      </ul>\n    )\n  }\n}\n","import ThreadModerationOptions from \"./controls\"\n\nexport default ThreadModerationOptions\n","import React from \"react\"\nimport ThreadModerationOptions from \"./moderation/thread\"\n\nconst ThreadModeration = ({ thread, posts, moderation }) => (\n  <div className=\"dropdown\">\n    <button\n      type=\"button\"\n      className=\"btn btn-default btn-outline btn-icon dropdown-toggle\"\n      title={gettext(\"Thread options\")}\n      data-toggle=\"dropdown\"\n      aria-haspopup=\"true\"\n      aria-expanded=\"false\"\n      disabled={thread.isBusy}\n    >\n      <span className=\"material-icon\">settings</span>\n    </button>\n    <ThreadModerationOptions\n      thread={thread}\n      posts={posts}\n      moderation={moderation}\n    />\n  </div>\n)\n\nexport default ThreadModeration\n","import classnames from \"classnames\"\nimport React from \"react\"\nimport * as actions from \"../../reducers/thread\"\nimport ajax from \"../../services/ajax\"\nimport snackbar from \"../../services/snackbar\"\nimport store from \"../../services/store\"\n\nconst ThreadSubscriptionButton = ({ stickToBottom, thread }) => (\n  <div className=\"dropdown\">\n    <button\n      className=\"btn btn-default btn-outline btn-block\"\n      aria-expanded=\"true\"\n      aria-haspopup=\"true\"\n      data-toggle=\"dropdown\"\n      type=\"button\"\n    >\n      <span className=\"material-icon\">{getIcon(thread.subscription)}</span>\n      {getLabel(thread.subscription)}\n    </button>\n    <ul\n      className={classnames(\"dropdown-menu dropdown-menu-right\", {\n        \"stick-to-bottom\": stickToBottom,\n      })}\n    >\n      <li>\n        <button className=\"btn btn-link\" onClick={() => unsubscribe(thread)}>\n          <span className=\"material-icon\">star_border</span>\n          {gettext(\"Unsubscribe\")}\n        </button>\n      </li>\n      <li>\n        <button className=\"btn btn-link\" onClick={() => alert(thread)}>\n          <span className=\"material-icon\">star_half</span>\n          {gettext(\"Subscribe\")}\n        </button>\n      </li>\n      <li>\n        <button className=\"btn btn-link\" onClick={() => email(thread)}>\n          <span className=\"material-icon\">star</span>\n          {gettext(\"Subscribe with e-mail\")}\n        </button>\n      </li>\n    </ul>\n  </div>\n)\n\nfunction getIcon(subscription) {\n  if (subscription === true) return \"star\"\n  if (subscription === false) return \"star_half\"\n\n  return \"star_border\"\n}\n\nfunction getLabel(subscription) {\n  if (subscription === true) return gettext(\"E-mail\")\n  if (subscription === false) return gettext(\"Enabled\")\n\n  return gettext(\"Disabled\")\n}\n\nfunction alert(thread) {\n  if (thread.subscription !== false) {\n    update(thread, false, \"notify\")\n  }\n}\n\nfunction email(thread) {\n  if (thread.subscription !== true) {\n    update(thread, true, \"email\")\n  }\n}\n\nfunction unsubscribe(thread) {\n  if (thread.subscription !== null) {\n    update(thread, null, \"unsubscribe\")\n  }\n}\n\nfunction update(thread, newState, value) {\n  const oldState = {\n    subscription: thread.subscription,\n  }\n\n  store.dispatch(\n    actions.update({\n      subscription: newState,\n    })\n  )\n\n  ajax\n    .patch(thread.api.index, [\n      { op: \"replace\", path: \"subscription\", value: value },\n    ])\n    .then(\n      (finalState) => {\n        store.dispatch(actions.update(finalState))\n      },\n      (rejection) => {\n        if (rejection.status === 400) {\n          snackbar.error(rejection.detail[0])\n        } else {\n          snackbar.apiError(rejection)\n        }\n\n        store.dispatch(actions.update(oldState))\n      }\n    )\n}\n\nexport default ThreadSubscriptionButton\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst Breadcrumbs = ({ children, className }) => (\n  <ul className={classnames(\"breadcrumbs\", className)}>{children}</ul>\n)\n\nexport default Breadcrumbs\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst BreadcrumbsCategory = ({ category, className }) => (\n  <li className={classnames(\"breadcrumbs-item\", className)}>\n    <a href={category.url.index}>\n      <span\n        className=\"material-icon\"\n        style={{ color: category.color || \"inherit\" }}\n      >\n        label\n      </span>\n      {!!category.short_name && (\n        <span\n          className=\"breadcrumbs-item-name hidden-sm hidden-md hidden-lg\"\n          title={category.name}\n        >\n          {category.short_name}\n        </span>\n      )}\n      {!!category.short_name && (\n        <span className=\"breadcrumbs-item-name hidden-xs\">{category.name}</span>\n      )}\n      {!category.short_name && (\n        <span className=\"breadcrumbs-item-name\">{category.name}</span>\n      )}\n    </a>\n  </li>\n)\n\nexport default BreadcrumbsCategory\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst BreadcrumbsRootCategory = ({ category, className }) => (\n  <li className={classnames(\"breadcrumbs-item\", className)}>\n    <a href={category.url.index}>\n      <span className=\"material-icon\">chevron_right</span>\n      <span className=\"breadcrumbs-item-name\">\n        {category.special_role === \"root_category\"\n          ? gettext(\"Threads\")\n          : gettext(\"Private threads\")}\n      </span>\n    </a>\n  </li>\n)\n\nexport default BreadcrumbsRootCategory\n","import React from \"react\"\nimport {\n  Breadcrumbs,\n  BreadcrumbsCategory,\n  BreadcrumbsRootCategory,\n} from \"../../Breadcrumbs\"\n\nconst ThreadHeaderBreadcrumbs = ({ breadcrumbs }) => (\n  <Breadcrumbs>\n    {breadcrumbs.map((category) =>\n      category.special_role ? (\n        <BreadcrumbsRootCategory key={category.id} category={category} />\n      ) : (\n        <BreadcrumbsCategory key={category.id} category={category} />\n      )\n    )}\n  </Breadcrumbs>\n)\n\nexport default ThreadHeaderBreadcrumbs\n","import ThreadHeader from \"./ThreadHeader\"\n\nexport default ThreadHeader\n","import React from \"react\"\nimport { FlexRow, FlexRowCol, FlexRowSection } from \"../../FlexRow\"\nimport ThreadFlags from \"../../ThreadFlags\"\nimport ThreadReplies from \"../../ThreadReplies\"\nimport ThreadStarterCard from \"../../ThreadStarterCard\"\nimport {\n  PageHeader,\n  PageHeaderBanner,\n  PageHeaderContainer,\n  PageHeaderDetails,\n} from \"../../PageHeader\"\nimport ThreadModeration from \"../ThreadModeration\"\nimport ThreadSubscriptionButton from \"../ThreadSubscriptionButton\"\nimport ThreadHeaderBreadcrumbs from \"./ThreadHeaderBreadcrumbs\"\n\nconst ThreadHeader = ({ styleName, thread, posts, user, moderation }) => (\n  <PageHeaderContainer>\n    <PageHeader styleName={styleName}>\n      <PageHeaderBanner styleName={styleName}>\n        <ThreadHeaderBreadcrumbs breadcrumbs={thread.path} />\n        <h1>{thread.title}</h1>\n      </PageHeaderBanner>\n      <PageHeaderDetails className=\"page-header-thread-details\">\n        <FlexRow>\n          <FlexRowSection auto>\n            <FlexRowCol shrink>\n              <ThreadStarterCard thread={thread} />\n            </FlexRowCol>\n            <FlexRowCol auto />\n            {thread.replies > 0 && (\n              <FlexRowCol shrink>\n                <ThreadReplies thread={thread} />\n              </FlexRowCol>\n            )}\n            {hasFlags(thread) && (\n              <FlexRowCol shrink>\n                <ThreadFlags thread={thread} />\n              </FlexRowCol>\n            )}\n          </FlexRowSection>\n          {user.is_authenticated && (\n            <FlexRowSection>\n              <FlexRowCol>\n                <ThreadSubscriptionButton thread={thread} />\n              </FlexRowCol>\n              {moderation.enabled && (\n                <FlexRowCol shrink>\n                  <ThreadModeration\n                    thread={thread}\n                    posts={posts}\n                    moderation={moderation}\n                  />\n                </FlexRowCol>\n              )}\n            </FlexRowSection>\n          )}\n        </FlexRow>\n      </PageHeaderDetails>\n    </PageHeader>\n  </PageHeaderContainer>\n)\n\nconst hasFlags = (thread) => {\n  return (\n    thread.is_closed ||\n    thread.is_hidden ||\n    thread.is_unapproved ||\n    thread.weight > 0 ||\n    thread.best_answer ||\n    thread.has_poll ||\n    thread.has_unapproved_posts\n  )\n}\n\nexport default ThreadHeader\n","import React from \"react\"\nimport { Link } from \"react-router\"\n\nconst ThreadPagination = ({ baseUrl, posts }) => (\n  <div className=\"misago-pagination\">\n    {posts.isLoaded && posts.first ? (\n      <Link\n        className=\"btn btn-default btn-outline btn-icon\"\n        to={baseUrl}\n        title={gettext(\"Go to first page\")}\n      >\n        <span className=\"material-icon\">first_page</span>\n      </Link>\n    ) : (\n      <button\n        className=\"btn btn-default btn-outline btn-icon\"\n        title={gettext(\"Go to first page\")}\n        type=\"button\"\n        disabled\n      >\n        <span className=\"material-icon\">first_page</span>\n      </button>\n    )}\n    {posts.isLoaded && posts.previous ? (\n      <Link\n        className=\"btn btn-default btn-outline btn-icon\"\n        to={baseUrl + (posts.previous > 1 ? posts.previous + \"/\" : \"\")}\n        title={gettext(\"Go to previous page\")}\n      >\n        <span className=\"material-icon\">chevron_left</span>\n      </Link>\n    ) : (\n      <button\n        className=\"btn btn-default btn-outline btn-icon\"\n        title={gettext(\"Go to previous page\")}\n        type=\"button\"\n        disabled\n      >\n        <span className=\"material-icon\">chevron_left</span>\n      </button>\n    )}\n    {posts.isLoaded && posts.next ? (\n      <Link\n        className=\"btn btn-default btn-outline btn-icon\"\n        to={baseUrl + posts.next + \"/\"}\n        title={gettext(\"Go to next page\")}\n      >\n        <span className=\"material-icon\">chevron_right</span>\n      </Link>\n    ) : (\n      <button\n        className=\"btn btn-default btn-outline btn-icon\"\n        title={gettext(\"Go to next page\")}\n        type=\"button\"\n        disabled\n      >\n        <span className=\"material-icon\">chevron_right</span>\n      </button>\n    )}\n    {posts.isLoaded && posts.last ? (\n      <Link\n        className=\"btn btn-default btn-outline btn-icon\"\n        to={baseUrl + posts.last + \"/\"}\n        title={gettext(\"Go to last page\")}\n      >\n        <span className=\"material-icon\">last_page</span>\n      </Link>\n    ) : (\n      <button\n        className=\"btn btn-default btn-outline btn-icon\"\n        title={gettext(\"Go to last page\")}\n        type=\"button\"\n        disabled\n      >\n        <span className=\"material-icon\">last_page</span>\n      </button>\n    )}\n  </div>\n)\n\nexport default ThreadPagination\n","import React from \"react\"\n\nconst ThreadPostsLeft = ({ posts }) => {\n  if (posts.more) {\n    return (\n      <p>\n        {interpolate(\n          ngettext(\n            \"There is %(more)s more post in this thread.\",\n            \"There are %(more)s more posts in this thread.\",\n            posts.more\n          ),\n          { more: posts.more },\n          true\n        )}\n      </p>\n    )\n  }\n\n  return <p>{gettext(\"There are no more posts in this thread.\")}</p>\n}\n\nexport default ThreadPostsLeft\n","import React from \"react\"\n\nexport default function ({ errors, posts }) {\n  return (\n    <div className=\"modal-dialog\" role=\"document\">\n      <div className=\"modal-content\">\n        <div className=\"modal-header\">\n          <button\n            aria-label={gettext(\"Close\")}\n            className=\"close\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            <span aria-hidden=\"true\">&times;</span>\n          </button>\n          <h4 className=\"modal-title\">{gettext(\"Moderation\")}</h4>\n        </div>\n        <div className=\"modal-body\">\n          <p className=\"lead\">\n            {gettext(\"One or more posts could not be changed:\")}\n          </p>\n\n          <ul className=\"list-unstyled list-errored-items\">\n            {errors.map((post) => {\n              return (\n                <PostErrors\n                  errors={post.detail}\n                  key={post.id}\n                  post={posts[post.id]}\n                />\n              )\n            })}\n          </ul>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport function PostErrors({ errors, post }) {\n  const heading = interpolate(\n    gettext(\"%(username)s on %(posted_on)s\"),\n    {\n      posted_on: post.posted_on.format(\"LL, LT\"),\n      username: post.poster_name,\n    },\n    true\n  )\n\n  return (\n    <li>\n      <h5>{heading}:</h5>\n      {errors.map((error, i) => {\n        return <p key={i}>{error}</p>\n      })}\n    </li>\n  )\n}\n","import moment from \"moment\"\nimport React from \"react\"\nimport * as post from \"misago/reducers/post\"\nimport * as posts from \"misago/reducers/posts\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport ErrorsList from \"./errors-list\"\n\nexport function approve(props) {\n  const { selection } = props\n\n  const ops = [{ op: \"replace\", path: \"is-unapproved\", value: false }]\n\n  const newState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_unapproved: false,\n    }\n  })\n\n  const previousState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_unapproved: post.is_unapproved,\n    }\n  })\n\n  patch(props, ops, newState, previousState)\n}\n\nexport function protect(props) {\n  const { selection } = props\n\n  const ops = [{ op: \"replace\", path: \"is-protected\", value: true }]\n\n  const newState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_protected: true,\n    }\n  })\n\n  const previousState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_protected: post.is_protected,\n    }\n  })\n\n  patch(props, ops, newState, previousState)\n}\n\nexport function unprotect(props) {\n  const { selection } = props\n\n  const ops = [{ op: \"replace\", path: \"is-protected\", value: false }]\n\n  const newState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_protected: false,\n    }\n  })\n\n  const previousState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_protected: post.is_protected,\n    }\n  })\n\n  patch(props, ops, newState, previousState)\n}\n\nexport function hide(props) {\n  const { selection } = props\n\n  const ops = [{ op: \"replace\", path: \"is-hidden\", value: true }]\n\n  const newState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_hidden: true,\n      hidden_on: moment(),\n      hidden_by_name: props.user.username,\n      url: Object.assign(post.url, {\n        hidden_by: props.user.url,\n      }),\n    }\n  })\n\n  const previousState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_hidden: post.is_hidden,\n      hidden_on: post.hidden_on,\n      hidden_by_name: post.hidden_by_name,\n      url: post.url,\n    }\n  })\n\n  patch(props, ops, newState, previousState)\n}\n\nexport function unhide(props) {\n  const { selection } = props\n\n  const ops = [{ op: \"replace\", path: \"is-hidden\", value: false }]\n\n  const newState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_hidden: false,\n      hidden_on: moment(),\n      hidden_by_name: props.user.username,\n      url: Object.assign(post.url, {\n        hidden_by: props.user.url,\n      }),\n    }\n  })\n\n  const previousState = selection.map((post) => {\n    return {\n      id: post.id,\n      is_hidden: post.is_hidden,\n      hidden_on: post.hidden_on,\n      hidden_by_name: post.hidden_by_name,\n      url: post.url,\n    }\n  })\n\n  patch(props, ops, newState, previousState)\n}\n\nexport function patch(props, ops, newState, previousState) {\n  const { selection, thread } = props\n\n  // patch selected items\n  newState.forEach((item) => {\n    post.patch(item, item)\n  })\n\n  // deselect all the things\n  store.dispatch(posts.deselectAll())\n\n  // call ajax\n  const data = {\n    ops,\n\n    ids: selection.map((post) => {\n      return post.id\n    }),\n  }\n\n  ajax.patch(thread.api.posts.index, data).then(\n    (data) => {\n      data.forEach((item) => {\n        store.dispatch(post.patch(item, item))\n      })\n    },\n    (rejection) => {\n      if (rejection.status !== 400) {\n        // rollback all\n        previousState.forEach((item) => {\n          store.dispatch(post.patch(item, item))\n        })\n        return snackbar.apiError(rejection)\n      }\n\n      let errors = []\n      let rollback = []\n\n      rejection.forEach((item) => {\n        if (item.detail) {\n          errors.push(item)\n          rollback.push(item.id)\n        } else {\n          store.dispatch(post.patch(item, item))\n        }\n\n        previousState.forEach((item) => {\n          if (rollback.indexOf(item) !== -1) {\n            store.dispatch(post.patch(item, item))\n          }\n        })\n      })\n\n      let posts = {}\n      selection.forEach((item) => {\n        posts[item.id] = item\n      })\n\n      modal.show(<ErrorsList errors={errors} posts={posts} />)\n    }\n  )\n}\n\nexport function merge(props) {\n  let confirmed = window.confirm(\n    gettext(\n      \"Are you sure you want to merge selected posts? This action is not reversible!\"\n    )\n  )\n  if (!confirmed) {\n    return\n  }\n\n  props.selection.slice(1).map((selection) => {\n    store.dispatch(\n      post.patch(selection, {\n        isDeleted: true,\n      })\n    )\n  })\n\n  ajax\n    .post(props.thread.api.posts.merge, {\n      posts: props.selection.map((post) => post.id),\n    })\n    .then(\n      (data) => {\n        store.dispatch(post.patch(data, post.hydrate(data)))\n      },\n      (rejection) => {\n        if (rejection.status === 400) {\n          snackbar.error(rejection.detail)\n        } else {\n          snackbar.apiError(rejection)\n        }\n\n        props.selection.slice(1).map((selection) => {\n          store.dispatch(\n            post.patch(selection, {\n              isDeleted: false,\n            })\n          )\n        })\n      }\n    )\n\n  store.dispatch(posts.deselectAll())\n}\n\nexport function remove(props) {\n  let confirmed = window.confirm(\n    gettext(\n      \"Are you sure you want to delete selected posts? This action is not reversible!\"\n    )\n  )\n  if (!confirmed) {\n    return\n  }\n\n  props.selection.map((selection) => {\n    store.dispatch(\n      post.patch(selection, {\n        isDeleted: true,\n      })\n    )\n  })\n\n  const ids = props.selection.map((post) => {\n    return post.id\n  })\n\n  ajax.delete(props.thread.api.posts.index, ids).then(\n    () => {\n      return\n    },\n    (rejection) => {\n      if (rejection.status === 400) {\n        snackbar.error(rejection.detail)\n      } else {\n        snackbar.apiError(rejection)\n      }\n\n      props.selection.map((selection) => {\n        store.dispatch(\n          post.patch(selection, {\n            isDeleted: false,\n          })\n        )\n      })\n    }\n  )\n\n  store.dispatch(posts.deselectAll())\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport * as post from \"misago/reducers/post\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      url: \"\",\n\n      validators: {\n        url: [],\n      },\n      errors: {},\n    }\n  }\n\n  clean() {\n    if (!this.state.url.trim().length) {\n      snackbar.error(gettext(\"You have to enter link to the other thread.\"))\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.post(this.props.thread.api.posts.move, {\n      new_thread: this.state.url,\n      posts: this.props.selection.map((post) => post.id),\n    })\n  }\n\n  handleSuccess(success) {\n    this.props.selection.forEach((selection) => {\n      store.dispatch(\n        post.patch(selection, {\n          isDeleted: true,\n        })\n      )\n    })\n\n    modal.hide()\n\n    snackbar.success(gettext(\"Selected posts were moved to the other thread.\"))\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      snackbar.error(rejection.detail)\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  onUrlChange = (event) => {\n    this.changeValue(\"url\", event.target.value)\n  }\n\n  render() {\n    return (\n      <div className=\"modal-dialog\" role=\"document\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"modal-content\">\n            <ModalHeader />\n            <div className=\"modal-body\">\n              <FormGroup\n                for=\"id_url\"\n                label={gettext(\"Link to thread you want to move posts to\")}\n              >\n                <input\n                  className=\"form-control\"\n                  disabled={this.state.isLoading}\n                  id=\"id_url\"\n                  onChange={this.onUrlChange}\n                  value={this.state.url}\n                />\n              </FormGroup>\n            </div>\n            <div className=\"modal-footer\">\n              <button\n                className=\"btn btn-default\"\n                data-dismiss=\"modal\"\n                disabled={this.state.isLoading}\n                type=\"button\"\n              >\n                {gettext(\"Cancel\")}\n              </button>\n              <button\n                className=\"btn btn-primary\"\n                disabled={this.state.isLoading}\n              >\n                {gettext(\"Move posts\")}\n              </button>\n            </div>\n          </div>\n        </form>\n      </div>\n    )\n  }\n}\n\nexport function ModalHeader(props) {\n  return (\n    <div className=\"modal-header\">\n      <button\n        aria-label={gettext(\"Close\")}\n        className=\"close\"\n        data-dismiss=\"modal\"\n        type=\"button\"\n      >\n        <span aria-hidden=\"true\">&times;</span>\n      </button>\n      <h4 className=\"modal-title\">{gettext(\"Move posts\")}</h4>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport CategorySelect from \"misago/components/category-select\"\nimport ModalLoader from \"misago/components/modal-loader\"\nimport Select from \"misago/components/select\"\nimport * as post from \"misago/reducers/post\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport * as validators from \"misago/utils/validators\"\nimport ErrorsModal from \"./errors-list\"\n\nexport default function (props) {\n  return <PostingConfig {...props} Form={ModerationForm} />\n}\n\nexport class PostingConfig extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoaded: false,\n      isError: false,\n\n      categories: [],\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(misago.get(\"THREAD_EDITOR_API\")).then(\n      (data) => {\n        // hydrate categories, extract posting options\n        const categories = data.map((item) => {\n          return Object.assign(item, {\n            disabled: item.post === false,\n            label: item.name,\n            value: item.id,\n            post: item.post,\n          })\n        })\n\n        this.setState({\n          isLoaded: true,\n          categories,\n        })\n      },\n      (rejection) => {\n        this.setState({\n          isError: rejection.detail,\n        })\n      }\n    )\n  }\n\n  render() {\n    if (this.state.isError) {\n      return <Error message={this.state.isError} />\n    } else if (this.state.isLoaded) {\n      return (\n        <ModerationForm {...this.props} categories={this.state.categories} />\n      )\n    } else {\n      return <Loader />\n    }\n  }\n}\n\nexport class ModerationForm extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      title: \"\",\n      category: null,\n      categories: props.categories,\n      weight: 0,\n      is_hidden: 0,\n      is_closed: false,\n\n      validators: {\n        title: [validators.required()],\n      },\n\n      errors: {},\n    }\n\n    this.isHiddenChoices = [\n      {\n        value: 0,\n        icon: \"visibility\",\n        label: gettext(\"No\"),\n      },\n      {\n        value: 1,\n        icon: \"visibility_off\",\n        label: gettext(\"Yes\"),\n      },\n    ]\n\n    this.isClosedChoices = [\n      {\n        value: false,\n        icon: \"lock_outline\",\n        label: gettext(\"No\"),\n      },\n      {\n        value: true,\n        icon: \"lock\",\n        label: gettext(\"Yes\"),\n      },\n    ]\n\n    this.acl = {}\n    this.props.categories.forEach((category) => {\n      if (category.post) {\n        if (!this.state.category) {\n          this.state.category = category.id\n        }\n\n        this.acl[category.id] = {\n          can_pin_threads: category.post.pin,\n          can_close_threads: category.post.close,\n          can_hide_threads: category.post.hide,\n        }\n      }\n    })\n  }\n\n  clean() {\n    if (this.isValid()) {\n      return true\n    } else {\n      snackbar.error(gettext(\"Form contains errors.\"))\n      this.setState({\n        errors: this.validate(),\n      })\n      return false\n    }\n  }\n\n  send() {\n    return ajax.post(this.props.thread.api.posts.split, {\n      title: this.state.title,\n      category: this.state.category,\n      weight: this.state.weight,\n      is_hidden: this.state.is_hidden,\n      is_closed: this.state.is_closed,\n      posts: this.props.selection.map((post) => post.id),\n    })\n  }\n\n  handleSuccess(apiResponse) {\n    this.props.selection.forEach((selection) => {\n      store.dispatch(\n        post.patch(selection, {\n          isDeleted: true,\n        })\n      )\n    })\n\n    modal.hide()\n\n    snackbar.success(gettext(\"Selected posts were split into new thread.\"))\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      this.setState({\n        errors: Object.assign({}, this.state.errors, rejection),\n      })\n      snackbar.error(gettext(\"Form contains errors.\"))\n    } else if (rejection.status === 403 && Array.isArray(rejection)) {\n      modal.show(<ErrorsModal errors={rejection} />)\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  onCategoryChange = (ev) => {\n    const categoryId = ev.target.value\n    const newState = {\n      category: categoryId,\n    }\n\n    if (this.acl[categoryId].can_pin_threads < newState.weight) {\n      newState.weight = 0\n    }\n\n    if (!this.acl[categoryId].can_hide_threads) {\n      newState.is_hidden = 0\n    }\n\n    if (!this.acl[categoryId].can_close_threads) {\n      newState.is_closed = false\n    }\n\n    this.setState(newState)\n  }\n\n  getWeightChoices() {\n    const choices = [\n      {\n        value: 0,\n        icon: \"remove\",\n        label: gettext(\"Not pinned\"),\n      },\n      {\n        value: 1,\n        icon: \"bookmark_border\",\n        label: gettext(\"Pinned locally\"),\n      },\n    ]\n\n    if (this.acl[this.state.category].can_pin_threads == 2) {\n      choices.push({\n        value: 2,\n        icon: \"bookmark\",\n        label: gettext(\"Pinned globally\"),\n      })\n    }\n\n    return choices\n  }\n\n  renderWeightField() {\n    if (this.acl[this.state.category].can_pin_threads) {\n      return (\n        <FormGroup\n          label={gettext(\"Thread weight\")}\n          for=\"id_weight\"\n          labelClass=\"col-sm-4\"\n          controlClass=\"col-sm-8\"\n        >\n          <Select\n            id=\"id_weight\"\n            onChange={this.bindInput(\"weight\")}\n            value={this.state.weight}\n            choices={this.getWeightChoices()}\n          />\n        </FormGroup>\n      )\n    } else {\n      return null\n    }\n  }\n\n  renderHiddenField() {\n    if (this.acl[this.state.category].can_hide_threads) {\n      return (\n        <FormGroup\n          label={gettext(\"Hide thread\")}\n          for=\"id_is_hidden\"\n          labelClass=\"col-sm-4\"\n          controlClass=\"col-sm-8\"\n        >\n          <Select\n            id=\"id_is_closed\"\n            onChange={this.bindInput(\"is_hidden\")}\n            value={this.state.is_hidden}\n            choices={this.isHiddenChoices}\n          />\n        </FormGroup>\n      )\n    } else {\n      return null\n    }\n  }\n\n  renderClosedField() {\n    if (this.acl[this.state.category].can_close_threads) {\n      return (\n        <FormGroup\n          label={gettext(\"Close thread\")}\n          for=\"id_is_closed\"\n          labelClass=\"col-sm-4\"\n          controlClass=\"col-sm-8\"\n        >\n          <Select\n            id=\"id_is_closed\"\n            onChange={this.bindInput(\"is_closed\")}\n            value={this.state.is_closed}\n            choices={this.isClosedChoices}\n          />\n        </FormGroup>\n      )\n    } else {\n      return null\n    }\n  }\n\n  render() {\n    return (\n      <Modal className=\"modal-dialog\">\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"modal-body\">\n            <FormGroup\n              label={gettext(\"Thread title\")}\n              for=\"id_title\"\n              labelClass=\"col-sm-4\"\n              controlClass=\"col-sm-8\"\n              validation={this.state.errors.title}\n            >\n              <input\n                id=\"id_title\"\n                className=\"form-control\"\n                type=\"text\"\n                onChange={this.bindInput(\"title\")}\n                value={this.state.title}\n              />\n            </FormGroup>\n            <div className=\"clearfix\" />\n\n            <FormGroup\n              label={gettext(\"Category\")}\n              for=\"id_category\"\n              labelClass=\"col-sm-4\"\n              controlClass=\"col-sm-8\"\n              validation={this.state.errors.category}\n            >\n              <CategorySelect\n                id=\"id_category\"\n                onChange={this.onCategoryChange}\n                value={this.state.category}\n                choices={this.state.categories}\n              />\n            </FormGroup>\n            <div className=\"clearfix\" />\n\n            {this.renderWeightField()}\n            {this.renderHiddenField()}\n            {this.renderClosedField()}\n          </div>\n          <div className=\"modal-footer\">\n            <button\n              className=\"btn btn-default\"\n              data-dismiss=\"modal\"\n              disabled={this.state.isLoading}\n              type=\"button\"\n            >\n              {gettext(\"Cancel\")}\n            </button>\n            <Button className=\"btn-primary\" loading={this.state.isLoading}>\n              {gettext(\"Split posts\")}\n            </Button>\n          </div>\n        </form>\n      </Modal>\n    )\n  }\n}\n\nexport function Loader() {\n  return (\n    <Modal className=\"modal-dialog\">\n      <ModalLoader />\n    </Modal>\n  )\n}\n\nexport function Error(props) {\n  return (\n    <Modal className=\"modal-dialog modal-message\">\n      <div className=\"message-icon\">\n        <span className=\"material-icon\">info_outline</span>\n      </div>\n      <div className=\"message-body\">\n        <p className=\"lead\">\n          {gettext(\"You can't move selected posts at the moment.\")}\n        </p>\n        <p>{props.message}</p>\n        <button className=\"btn btn-default\" data-dismiss=\"modal\" type=\"button\">\n          {gettext(\"Ok\")}\n        </button>\n      </div>\n    </Modal>\n  )\n}\n\nexport function Modal(props) {\n  return (\n    <div className={props.className} role=\"document\">\n      <div className=\"modal-content\">\n        <div className=\"modal-header\">\n          <button\n            aria-label={gettext(\"Close\")}\n            className=\"close\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            <span aria-hidden=\"true\">&times;</span>\n          </button>\n          <h4 className=\"modal-title\">\n            {gettext(\"Split posts into new thread\")}\n          </h4>\n        </div>\n        {props.children}\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport modal from \"misago/services/modal\"\nimport * as moderation from \"./actions\"\nimport MoveModal from \"./move\"\nimport SplitModal from \"./split\"\n\nexport default function (props) {\n  return (\n    <ul className=\"dropdown-menu dropdown-menu-right stick-to-bottom\">\n      <Approve {...props} />\n      <Merge {...props} />\n      <Move {...props} />\n      <Split {...props} />\n      <Protect {...props} />\n      <Unprotect {...props} />\n      <Unhide {...props} />\n      <Hide {...props} />\n      <Delete {...props} />\n    </ul>\n  )\n}\n\nexport class Approve extends React.Component {\n  onClick = () => {\n    moderation.approve(this.props)\n  }\n\n  render() {\n    const isVisible = this.props.selection.find((post) => {\n      return post.acl.can_approve && post.is_unapproved\n    })\n\n    if (!isVisible) return null\n\n    return (\n      <li>\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          <span className=\"material-icon\">done</span>\n          {gettext(\"Approve\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Merge extends React.Component {\n  onClick = () => {\n    moderation.merge(this.props)\n  }\n\n  render() {\n    const isVisible =\n      this.props.selection.length > 1 &&\n      this.props.selection.find((post) => {\n        return post.acl.can_merge\n      })\n\n    if (!isVisible) return null\n\n    return (\n      <li>\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          <span className=\"material-icon\">call_merge</span>\n          {gettext(\"Merge\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Move extends React.Component {\n  onClick = () => {\n    modal.show(<MoveModal {...this.props} />)\n  }\n\n  render() {\n    const isVisible = this.props.selection.find((post) => {\n      return post.acl.can_move\n    })\n\n    if (!isVisible) return null\n\n    return (\n      <li>\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          <span className=\"material-icon\">arrow_forward</span>\n          {gettext(\"Move\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Split extends React.Component {\n  onClick = () => {\n    modal.show(<SplitModal {...this.props} />)\n  }\n\n  render() {\n    const isVisible = this.props.selection.find((post) => {\n      return post.acl.can_move\n    })\n\n    if (!isVisible) return null\n\n    return (\n      <li>\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          <span className=\"material-icon\">call_split</span>\n          {gettext(\"Split\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Protect extends React.Component {\n  onClick = () => {\n    moderation.protect(this.props)\n  }\n\n  render() {\n    const isVisible = this.props.selection.find((post) => {\n      return !post.is_protected && post.acl.can_protect\n    })\n\n    if (!isVisible) return null\n\n    return (\n      <li>\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          <span className=\"material-icon\">lock_outline</span>\n          {gettext(\"Protect\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Unprotect extends React.Component {\n  onClick = () => {\n    moderation.unprotect(this.props)\n  }\n\n  render() {\n    const isVisible = this.props.selection.find((post) => {\n      return post.is_protected && post.acl.can_protect\n    })\n\n    if (!isVisible) return null\n\n    return (\n      <li>\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          <span className=\"material-icon\">lock_open</span>\n          {gettext(\"Unprotect\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Hide extends React.Component {\n  onClick = () => {\n    moderation.hide(this.props)\n  }\n\n  render() {\n    const isVisible = this.props.selection.find((post) => {\n      return post.acl.can_hide && !post.is_hidden\n    })\n\n    if (!isVisible) return null\n\n    return (\n      <li>\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          <span className=\"material-icon\">visibility_off</span>\n          {gettext(\"Hide\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Unhide extends React.Component {\n  onClick = () => {\n    moderation.unhide(this.props)\n  }\n\n  render() {\n    const isVisible = this.props.selection.find((post) => {\n      return post.acl.can_unhide && post.is_hidden\n    })\n\n    if (!isVisible) return null\n\n    return (\n      <li>\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          <span className=\"material-icon\">visibility</span>\n          {gettext(\"Unhide\")}\n        </button>\n      </li>\n    )\n  }\n}\n\nexport class Delete extends React.Component {\n  onClick = () => {\n    moderation.remove(this.props)\n  }\n\n  render() {\n    const isVisible = this.props.selection.find((post) => {\n      return post.acl.can_delete\n    })\n\n    if (!isVisible) return null\n\n    return (\n      <li>\n        <button type=\"button\" className=\"btn btn-link\" onClick={this.onClick}>\n          <span className=\"material-icon\">clear</span>\n          {gettext(\"Delete\")}\n        </button>\n      </li>\n    )\n  }\n}\n","import React from \"react\"\nimport { ThreadPostsModerationOptions } from \"./moderation/posts\"\n\nconst ThreadPostsModeration = ({ thread, user, selection, dropup }) => (\n  <div className={dropup ? \"dropup\" : \"dropdown\"}>\n    <button\n      type=\"button\"\n      className=\"btn btn-default btn-outline btn-icon dropdown-toggle\"\n      title={gettext(\"Posts options\")}\n      data-toggle=\"dropdown\"\n      aria-haspopup=\"true\"\n      aria-expanded=\"false\"\n      disabled={selection.length === 0}\n    >\n      <span className=\"material-icon\">settings</span>\n    </button>\n    <ThreadPostsModerationOptions\n      thread={thread}\n      user={user}\n      selection={selection}\n    />\n  </div>\n)\n\nexport default ThreadPostsModeration\n","import React from \"react\"\n\nconst ThreadReplyButton = ({ onClick }) => (\n  <button\n    className=\"btn btn-primary btn-outline btn-block\"\n    type=\"button\"\n    onClick={onClick}\n  >\n    <span className=\"material-icon\">chat</span>\n    {gettext(\"Reply\")}\n  </button>\n)\n\nexport default ThreadReplyButton\n","import React from \"react\"\nimport { Toolbar, ToolbarItem, ToolbarSection, ToolbarSpacer } from \"../Toolbar\"\nimport ThreadPagination from \"./ThreadPagination\"\nimport ThreadPostsLeft from \"./ThreadPostsLeft\"\nimport ThreadPostsModeration from \"./ThreadPostsModeration\"\nimport ThreadReplyButton from \"./ThreadReplyButton\"\nimport ThreadSubscriptionButton from \"./ThreadSubscriptionButton\"\n\nconst ThreadToolbarBottom = ({\n  thread,\n  posts,\n  user,\n  selection,\n  moderation,\n  onReply,\n}) => (\n  <Toolbar>\n    <ToolbarSection>\n      <ToolbarItem>\n        <ThreadPagination baseUrl={thread.url.index} posts={posts} />\n      </ToolbarItem>\n      <ToolbarItem className=\"hidden-sm hidden-md hidden-lg\" shrink>\n        <ThreadPostsModeration\n          thread={thread}\n          user={user}\n          selection={selection}\n          dropup\n        />\n      </ToolbarItem>\n    </ToolbarSection>\n    <ToolbarSection className=\"hidden-xs hidden-sm\" auto>\n      <ToolbarItem>\n        <ThreadPostsLeft posts={posts} />\n      </ToolbarItem>\n    </ToolbarSection>\n    <ToolbarSpacer className=\"hidden-md hidden-lg\" />\n    {user.is_authenticated && (\n      <ToolbarSection>\n        <ToolbarItem>\n          <ThreadSubscriptionButton thread={thread} />\n        </ToolbarItem>\n        {thread.acl.can_reply && (\n          <ToolbarItem>\n            <ThreadReplyButton onClick={onReply} />\n          </ToolbarItem>\n        )}\n        {moderation.enabled && (\n          <ToolbarItem className=\"hidden-xs\" shrink>\n            <ThreadPostsModeration\n              thread={thread}\n              user={user}\n              selection={selection}\n              dropup\n            />\n          </ToolbarItem>\n        )}\n      </ToolbarSection>\n    )}\n  </Toolbar>\n)\n\nexport default ThreadToolbarBottom\n","import classnames from \"classnames\"\nimport React from \"react\"\n\nconst ThreadPollButton = ({ compact, onClick }) => (\n  <button\n    className={classnames(\"btn btn-default btn-outline\", {\n      \"btn-block\": !compact,\n      \"btn-icon\": compact,\n    })}\n    type=\"button\"\n    title={compact ? gettext(\"Add poll\") : null}\n    onClick={onClick}\n  >\n    <span className=\"material-icon\">poll</span>\n    {!compact && gettext(\"Add poll\")}\n  </button>\n)\n\nexport default ThreadPollButton\n","import React from \"react\"\n\nconst ThreadShortcutsButton = ({ user, thread }) => (\n  <div className=\"dropdown\">\n    <button\n      className=\"btn btn-default btn-outline btn-icon\"\n      title={gettext(\"Shortcuts\")}\n      aria-expanded=\"true\"\n      aria-haspopup=\"true\"\n      data-toggle=\"dropdown\"\n      type=\"button\"\n    >\n      <span className=\"material-icon\">bookmark</span>\n    </button>\n    <ul className=\"dropdown-menu\">\n      {user.is_authenticated && thread.is_new && (\n        <li>\n          <a className=\"btn btn-link\" href={thread.url.new_post}>\n            <span className=\"material-icon\">comment</span>\n            {gettext(\"Go to new post\")}\n          </a>\n        </li>\n      )}\n      {thread.best_answer && (\n        <li>\n          <a className=\"btn btn-link\" href={thread.url.best_answer}>\n            <span className=\"material-icon\">check_circle</span>\n            {gettext(\"Go to best answer\")}\n          </a>\n        </li>\n      )}\n      {thread.has_unapproved_posts && thread.acl.can_approve && (\n        <li>\n          <a className=\"btn btn-link\" href={thread.url.unapproved_post}>\n            <span className=\"material-icon\">visibility</span>\n            {gettext(\"Go to unapproved post\")}\n          </a>\n        </li>\n      )}\n      <li>\n        <a className=\"btn btn-link\" href={thread.url.last_post}>\n          <span className=\"material-icon\">reply</span>\n          {gettext(\"Go to last post\")}\n        </a>\n      </li>\n    </ul>\n  </div>\n)\n\nexport default ThreadShortcutsButton\n","import React from \"react\"\nimport { Toolbar, ToolbarItem, ToolbarSection, ToolbarSpacer } from \"../Toolbar\"\nimport ThreadPagination from \"./ThreadPagination\"\nimport ThreadPollButton from \"./ThreadPollButton\"\nimport ThreadPostsModeration from \"./ThreadPostsModeration\"\nimport ThreadReplyButton from \"./ThreadReplyButton\"\nimport ThreadShortcutsButton from \"./ThreadShortcutsButton\"\n\nconst ThreadToolbarTop = ({\n  thread,\n  posts,\n  user,\n  selection,\n  moderation,\n  onPoll,\n  onReply,\n}) => (\n  <Toolbar>\n    <ToolbarSection className=\"hidden-xs\">\n      <ToolbarItem>\n        <ThreadShortcutsButton thread={thread} user={user} />\n      </ToolbarItem>\n      <ToolbarItem className=\"hidden-xs hidden-sm\">\n        <ThreadPagination baseUrl={thread.url.index} posts={posts} />\n      </ToolbarItem>\n    </ToolbarSection>\n    <ToolbarSpacer />\n    {thread.acl.can_start_poll && !thread.poll && (\n      <ToolbarSection className=\"hidden-xs\">\n        <ToolbarItem>\n          <ThreadPollButton onClick={onPoll} />\n        </ToolbarItem>\n      </ToolbarSection>\n    )}\n    {thread.acl.can_reply ? (\n      <ToolbarSection>\n        <ToolbarItem className=\"hidden-sm hidden-md hidden-lg\" shrink>\n          <ThreadShortcutsButton thread={thread} user={user} />\n        </ToolbarItem>\n        <ToolbarItem>\n          <ThreadReplyButton onClick={onReply} />\n        </ToolbarItem>\n        {thread.acl.can_start_poll && !thread.poll && (\n          <ToolbarItem className=\"hidden-sm hidden-md hidden-lg\" shrink>\n            <ThreadPollButton onClick={onPoll} compact />\n          </ToolbarItem>\n        )}\n        {moderation.enabled && (\n          <ToolbarItem className=\"hidden-xs\" shrink>\n            <ThreadPostsModeration\n              thread={thread}\n              user={user}\n              selection={selection}\n            />\n          </ToolbarItem>\n        )}\n      </ToolbarSection>\n    ) : (\n      <ToolbarSection>\n        <ToolbarItem className=\"hidden-sm hidden-md hidden-lg\" shrink>\n          <ThreadShortcutsButton thread={thread} user={user} />\n        </ToolbarItem>\n        {thread.acl.can_start_poll && !thread.poll && (\n          <ToolbarItem>\n            <ThreadPollButton onClick={onPoll} />\n          </ToolbarItem>\n        )}\n        {moderation.enabled && (\n          <ToolbarItem shrink>\n            <ThreadPostsModeration\n              thread={thread}\n              user={user}\n              selection={selection}\n            />\n          </ToolbarItem>\n        )}\n      </ToolbarSection>\n    )}\n  </Toolbar>\n)\n\nexport default ThreadToolbarTop\n","import React from \"react\"\nimport Participants from \"misago/components/participants\"\nimport { Poll } from \"misago/components/poll\"\nimport PostsList from \"misago/components/posts-list\"\nimport * as participants from \"misago/reducers/participants\"\nimport * as poll from \"misago/reducers/poll\"\nimport * as posts from \"misago/reducers/posts\"\nimport * as thread from \"misago/reducers/thread\"\nimport ajax from \"misago/services/ajax\"\nimport polls from \"misago/services/polls\"\nimport snackbar from \"misago/services/snackbar\"\nimport posting from \"misago/services/posting\"\nimport store from \"misago/services/store\"\nimport title from \"misago/services/page-title\"\nimport PageContainer from \"../PageContainer\"\nimport ThreadHeader from \"./ThreadHeader\"\nimport ThreadToolbarBottom from \"./ThreadToolbarBottom\"\nimport ThreadToolbarTop from \"./ThreadToolbarTop\"\n\nexport default class extends React.Component {\n  componentDidMount() {\n    if (this.shouldFetchData()) {\n      this.fetchData()\n      this.setPageTitle()\n    }\n\n    this.startPollingApi()\n  }\n\n  componentDidUpdate() {\n    if (this.shouldFetchData()) {\n      this.fetchData()\n      this.startPollingApi()\n      this.setPageTitle()\n    }\n  }\n\n  componentWillUnmount() {\n    this.stopPollingApi()\n  }\n\n  shouldFetchData() {\n    if (this.props.posts.isLoaded) {\n      const page = (this.props.params.page || 1) * 1\n      return page != this.props.posts.page\n    } else {\n      return false\n    }\n  }\n\n  fetchData() {\n    store.dispatch(posts.unload())\n\n    ajax\n      .get(\n        this.props.thread.api.posts.index,\n        {\n          page: this.props.params.page || 1,\n        },\n        \"posts\"\n      )\n      .then(\n        (data) => {\n          this.update(data)\n        },\n        (rejection) => {\n          snackbar.apiError(rejection)\n        }\n      )\n  }\n\n  startPollingApi() {\n    polls.start({\n      poll: \"thread-posts\",\n\n      url: this.props.thread.api.posts.index,\n      data: {\n        page: this.props.params.page || 1,\n      },\n      update: this.update,\n\n      frequency: 120 * 1000,\n      delayed: true,\n    })\n  }\n\n  stopPollingApi() {\n    polls.stop(\"thread-posts\")\n  }\n\n  setPageTitle() {\n    title.set({\n      title: this.props.thread.title,\n      parent: this.props.thread.category.name,\n      page: (this.props.params.page || 1) * 1,\n    })\n  }\n\n  update = (data) => {\n    store.dispatch(thread.replace(data))\n    store.dispatch(posts.load(data.post_set))\n\n    if (data.participants) {\n      store.dispatch(participants.replace(data.participants))\n    }\n\n    if (data.poll) {\n      store.dispatch(poll.replace(data.poll))\n    }\n\n    this.setPageTitle()\n  }\n\n  openPollForm = () => {\n    posting.open({\n      mode: \"POLL\",\n      submit: this.props.thread.api.poll,\n\n      thread: this.props.thread,\n      poll: null,\n    })\n  }\n\n  openReplyForm = () => {\n    posting.open({\n      mode: \"REPLY\",\n\n      config: this.props.thread.api.editor,\n      submit: this.props.thread.api.posts.index,\n    })\n  }\n\n  render() {\n    const category = this.props.thread.category\n\n    let className = \"page page-thread\"\n    if (category.css_class) {\n      className += \" page-thread-\" + category.css_class\n    }\n\n    const styleName =\n      category.special_role === \"private_threads\"\n        ? \"private-threads\"\n        : category.css_class || \"category-threads\"\n\n    const threadModeration = getThreadModeration(\n      this.props.thread,\n      this.props.user\n    )\n\n    const postsModeration = getPostsModeration(\n      this.props.posts.results,\n      this.props.user\n    )\n    const selection = this.props.posts.results.filter((post) => post.isSelected)\n\n    return (\n      <div className={className}>\n        <ThreadHeader\n          styleName={styleName}\n          thread={this.props.thread}\n          posts={this.props.posts}\n          user={this.props.user}\n          moderation={threadModeration}\n        />\n        <PageContainer>\n          <Participants\n            participants={this.props.participants}\n            thread={this.props.thread}\n            user={this.props.user}\n          />\n          <ThreadToolbarTop\n            thread={this.props.thread}\n            posts={this.props.posts}\n            user={this.props.user}\n            selection={selection}\n            moderation={postsModeration}\n            onPoll={this.openPollForm}\n            onReply={this.openReplyForm}\n          />\n          <Poll\n            poll={this.props.poll}\n            thread={this.props.thread}\n            user={this.props.user}\n          />\n          <PostsList {...this.props} />\n          <ThreadToolbarBottom\n            thread={this.props.thread}\n            posts={this.props.posts}\n            user={this.props.user}\n            selection={selection}\n            moderation={postsModeration}\n            onReply={this.openReplyForm}\n          />\n        </PageContainer>\n      </div>\n    )\n  }\n}\n\nconst getThreadModeration = (thread, user) => {\n  const moderation = {\n    enabled: false,\n    edit: false,\n    approve: false,\n    close: false,\n    open: false,\n    hide: false,\n    unhide: false,\n    move: false,\n    merge: false,\n    pinGlobally: false,\n    pinLocally: false,\n    unpin: false,\n    delete: false,\n  }\n\n  if (!user.is_authenticated) return moderation\n\n  moderation.edit = thread.acl.can_edit\n  moderation.approve = thread.acl.can_approve && thread.is_unapproved\n  moderation.close = thread.acl.can_close && !thread.is_closed\n  moderation.open = thread.acl.can_close && thread.is_closed\n  moderation.hide = thread.acl.can_hide && !thread.is_hidden\n  moderation.unhide = thread.acl.can_unhide && thread.is_hidden\n  moderation.move = thread.acl.can_move\n  moderation.merge = thread.acl.can_merge\n  moderation.pinGlobally = thread.acl.can_pin_globally && thread.weight < 2\n  moderation.pinLocally = thread.acl.can_pin && thread.weight !== 1\n  moderation.unpin =\n    (thread.acl.can_pin && thread.weight === 1) ||\n    (thread.acl.can_pin_globally && thread.weight === 2)\n  moderation.delete = thread.acl.can_delete\n\n  moderation.enabled =\n    moderation.edit ||\n    moderation.approve ||\n    moderation.close ||\n    moderation.open ||\n    moderation.hide ||\n    moderation.unhide ||\n    moderation.move ||\n    moderation.merge ||\n    moderation.pinGlobally ||\n    moderation.pinLocally ||\n    moderation.unpin ||\n    moderation.delete\n\n  return moderation\n}\n\nconst getPostsModeration = (posts, user) => {\n  const moderation = {\n    enabled: false,\n    approve: false,\n    move: false,\n    merge: false,\n    protect: false,\n    hide: false,\n    delete: false,\n  }\n\n  if (!user.is_authenticated) return moderation\n\n  posts.forEach((post) => {\n    if (!post.is_event) {\n      if (post.acl.can_approve && post.is_unapproved) {\n        moderation.approve = true\n      }\n      if (post.acl.can_move) moderation.move = true\n      if (post.acl.can_merge) moderation.merge = true\n      if (post.acl.can_protect || post.acl.can_unprotect) {\n        moderation.protect = true\n      }\n      if (post.acl.can_hide || post.acl.can_unhide) {\n        moderation.hide = true\n      }\n      if (post.acl.can_delete) moderation.delete = true\n\n      if (\n        moderation.approve ||\n        moderation.move ||\n        moderation.merge ||\n        moderation.protect ||\n        moderation.hide ||\n        moderation.delete\n      ) {\n        moderation.enabled = true\n      }\n    }\n  })\n\n  return moderation\n}\n","import { connect } from \"react-redux\"\nimport Route from \"misago/components/thread/route\"\nimport misago from \"misago/index\"\n\nexport function select(store) {\n  return {\n    participants: store.participants,\n    poll: store.poll,\n    posts: store.posts,\n    thread: store.thread,\n    tick: store.tick.tick,\n    user: store.auth.user,\n  }\n}\n\nexport function paths() {\n  const thread = misago.get(\"THREAD\")\n  const basePath = thread.url.index.replace(\n    thread.slug + \"-\" + thread.pk,\n    \":slug\"\n  )\n\n  return [\n    {\n      path: basePath,\n      component: connect(select)(Route),\n    },\n    {\n      path: basePath + \":page/\",\n      component: connect(select)(Route),\n    },\n  ]\n}\n","import { paths } from \"misago/components/thread/root\"\nimport misago from \"misago/index\"\nimport mount from \"misago/utils/routed-component\"\n\nexport default function initializer(context) {\n  if (context.has(\"THREAD\") && context.has(\"POSTS\")) {\n    mount({\n      paths: paths(),\n    })\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:thread\",\n  initializer: initializer,\n  after: \"store\",\n})\n","export function compareLastPostAge(a, b) {\n  if (a.last_post > b.last_post) {\n    return -1\n  } else if (a.last_post < b.last_post) {\n    return 1\n  } else {\n    return 0\n  }\n}\n\nexport function compareGlobalWeight(a, b) {\n  if (a.weight === 2 && a.weight > b.weight) {\n    return -1\n  } else if (b.weight === 2 && a.weight < b.weight) {\n    return 1\n  } else {\n    return compareLastPostAge(a, b)\n  }\n}\n\nexport function compareWeight(a, b) {\n  if (a.weight > b.weight) {\n    return -1\n  } else if (a.weight < b.weight) {\n    return 1\n  } else {\n    return compareLastPostAge(a, b)\n  }\n}\n","import React from \"react\"\nimport { Link } from \"react-router\"\n\nconst ThreadsCategoryPicker = ({\n  allItems,\n  parentUrl,\n  category,\n  categories,\n  list,\n}) => (\n  <div className=\"dropdown threads-category-picker\">\n    <button\n      type=\"button\"\n      className=\"btn btn-default btn-outline dropdown-toggle btn-block text-ellipsis\"\n      data-toggle=\"dropdown\"\n      aria-haspopup=\"true\"\n      aria-expanded=\"false\"\n    >\n      {category && (\n        <span\n          className=\"material-icon\"\n          style={{ color: category.color || \"inherit\" }}\n        >\n          label\n        </span>\n      )}\n      {category && category.short_name && (\n        <span className={category.short_name && \"hidden-md hidden-lg\"}>\n          {category.short_name}\n        </span>\n      )}\n      {category ? (\n        <span className={category.short_name && \"hidden-xs hidden-sm\"}>\n          {category.name}\n        </span>\n      ) : (\n        allItems\n      )}\n    </button>\n    <ul className=\"dropdown-menu\">\n      <li>\n        <Link to={parentUrl + list.path}>{allItems}</Link>\n      </li>\n      <li role=\"separator\" className=\"divider\" />\n      {categories.map((choice) => (\n        <li key={choice.id}>\n          <Link to={choice.url.index + list.path}>\n            <span\n              className=\"material-icon\"\n              style={{ color: choice.color || \"inherit\" }}\n            >\n              label\n            </span>\n            {choice.name}\n          </Link>\n        </li>\n      ))}\n    </ul>\n  </div>\n)\n\nexport default ThreadsCategoryPicker\n","import React from \"react\"\nimport { Link } from \"react-router\"\n\nconst ThreadsListPicker = ({ baseUrl, list, lists }) => (\n  <div className=\"dropdown threads-list-picker\">\n    <button\n      type=\"button\"\n      className=\"btn btn-default btn-outline dropdown-toggle btn-block\"\n      data-toggle=\"dropdown\"\n      aria-haspopup=\"true\"\n      aria-expanded=\"false\"\n    >\n      {list.longName}\n    </button>\n    <ul className=\"dropdown-menu stick-to-bottom\">\n      {lists.map((choice) => (\n        <li key={choice.type}>\n          <Link to={baseUrl + choice.path}>{choice.longName}</Link>\n        </li>\n      ))}\n    </ul>\n  </div>\n)\n\nexport default ThreadsListPicker\n","import React from \"react\"\n\nexport default class extends React.Component {\n  render() {\n    return (\n      <div className=\"modal-dialog\" role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              aria-label={gettext(\"Close\")}\n              className=\"close\"\n              data-dismiss=\"modal\"\n              type=\"button\"\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Threads moderation\")}</h4>\n          </div>\n          <div className=\"modal-body\">\n            <p className=\"lead\">\n              {gettext(\"One or more threads could not be deleted:\")}\n            </p>\n\n            <ul className=\"list-unstyled list-errored-items\">\n              {this.props.errors.map((item) => {\n                return (\n                  <ThreadErrors\n                    errors={item.errors}\n                    key={item.thread.id}\n                    thread={item.thread}\n                  />\n                )\n              })}\n            </ul>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport function ThreadErrors({ errors, thread }) {\n  return (\n    <li>\n      <h5>{thread.title}</h5>\n      {errors.map((message, i) => {\n        return <p>{message}</p>\n      })}\n    </li>\n  )\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport CategorySelect from \"misago/components/category-select\"\nimport Select from \"misago/components/select\"\nimport misago from \"misago/index\"\nimport { filterThreads } from \"misago/reducers/threads\"\nimport * as select from \"misago/reducers/selection\"\nimport ErrorsModal from \"misago/components/threads/moderation/errors-list\"\nimport MergeConflict from \"misago/components/merge-conflict\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport * as validators from \"misago/utils/validators\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n\n      title: \"\",\n      category: null,\n      weight: 0,\n      is_hidden: 0,\n      is_closed: false,\n\n      validators: {\n        title: [validators.required()],\n      },\n\n      errors: {},\n    }\n\n    this.acl = {}\n    for (const i in props.user.acl.categories) {\n      if (!props.user.acl.categories.hasOwnProperty(i)) {\n        continue\n      }\n\n      const acl = props.user.acl.categories[i]\n      this.acl[acl.id] = acl\n    }\n\n    this.categoryChoices = []\n    props.categories.forEach((category) => {\n      if (category.level > 0) {\n        const acl = this.acl[category.id]\n        const disabled =\n          !acl.can_start_threads ||\n          (category.is_closed && !acl.can_close_threads)\n\n        this.categoryChoices.push({\n          value: category.id,\n          disabled: disabled,\n          level: category.level - 1,\n          label: category.name,\n        })\n\n        if (!disabled && !this.state.category) {\n          this.state.category = category.id\n        }\n      }\n    })\n\n    this.isHiddenChoices = [\n      {\n        value: 0,\n        icon: \"visibility\",\n        label: gettext(\"No\"),\n      },\n      {\n        value: 1,\n        icon: \"visibility_off\",\n        label: gettext(\"Yes\"),\n      },\n    ]\n\n    this.isClosedChoices = [\n      {\n        value: false,\n        icon: \"lock_outline\",\n        label: gettext(\"No\"),\n      },\n      {\n        value: true,\n        icon: \"lock\",\n        label: gettext(\"Yes\"),\n      },\n    ]\n  }\n\n  clean() {\n    if (this.isValid()) {\n      return true\n    } else {\n      snackbar.error(gettext(\"Form contains errors.\"))\n      this.setState({\n        errors: this.validate(),\n      })\n      return false\n    }\n  }\n\n  send() {\n    return ajax.post(misago.get(\"MERGE_THREADS_API\"), this.getFormdata())\n  }\n\n  getFormdata = () => {\n    return {\n      threads: this.props.threads.map((thread) => thread.id),\n      title: this.state.title,\n      category: this.state.category,\n      weight: this.state.weight,\n      is_hidden: this.state.is_hidden,\n      is_closed: this.state.is_closed,\n    }\n  }\n\n  handleSuccess = (apiResponse) => {\n    // unfreeze and remove merged threads\n    this.props.threads.forEach((thread) => {\n      this.props.freezeThread(thread.id)\n      this.props.deleteThread(thread)\n    })\n\n    // deselect all threads\n    store.dispatch(select.none())\n\n    // append merged thread, filter threads\n    this.props.addThreads([apiResponse])\n    store.dispatch(\n      filterThreads(this.props.route.category, this.props.categoriesMap)\n    )\n\n    // hide modal\n    modal.hide()\n  }\n\n  handleError = (rejection) => {\n    if (rejection.status === 400) {\n      if (rejection.best_answers || rejection.polls) {\n        modal.show(\n          <MergeConflict\n            api={misago.get(\"MERGE_THREADS_API\")}\n            bestAnswers={rejection.best_answers}\n            data={this.getFormdata()}\n            polls={rejection.polls}\n            onError={this.handleError}\n            onSuccess={this.handleSuccess}\n          />\n        )\n      } else {\n        this.setState({\n          errors: Object.assign({}, this.state.errors, rejection),\n        })\n        snackbar.error(gettext(\"Form contains errors.\"))\n      }\n    } else if (rejection.status === 403 && Array.isArray(rejection)) {\n      modal.show(<ErrorsModal errors={rejection} />)\n    } else if (rejection.best_answer) {\n      snackbar.error(rejection.best_answer[0])\n    } else if (rejection.poll) {\n      snackbar.error(rejection.poll[0])\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  onCategoryChange = (ev) => {\n    const categoryId = ev.target.value\n    const newState = {\n      category: categoryId,\n    }\n\n    if (this.acl[categoryId].can_pin_threads < newState.weight) {\n      newState.weight = 0\n    }\n\n    if (!this.acl[categoryId].can_hide_threads) {\n      newState.is_hidden = 0\n    }\n\n    if (!this.acl[categoryId].can_close_threads) {\n      newState.is_closed = false\n    }\n\n    this.setState(newState)\n  }\n\n  getWeightChoices() {\n    const choices = [\n      {\n        value: 0,\n        icon: \"remove\",\n        label: gettext(\"Not pinned\"),\n      },\n      {\n        value: 1,\n        icon: \"bookmark_border\",\n        label: gettext(\"Pinned locally\"),\n      },\n    ]\n\n    if (this.acl[this.state.category].can_pin_threads == 2) {\n      choices.push({\n        value: 2,\n        icon: \"bookmark\",\n        label: gettext(\"Pinned globally\"),\n      })\n    }\n\n    return choices\n  }\n\n  renderWeightField() {\n    if (this.acl[this.state.category].can_pin_threads) {\n      return (\n        <FormGroup label={gettext(\"Thread weight\")} for=\"id_weight\">\n          <Select\n            id=\"id_weight\"\n            onChange={this.bindInput(\"weight\")}\n            value={this.state.weight}\n            choices={this.getWeightChoices()}\n          />\n        </FormGroup>\n      )\n    } else {\n      return null\n    }\n  }\n\n  renderHiddenField() {\n    if (this.acl[this.state.category].can_hide_threads) {\n      return (\n        <FormGroup label={gettext(\"Hide thread\")} for=\"id_is_hidden\">\n          <Select\n            id=\"id_is_closed\"\n            onChange={this.bindInput(\"is_hidden\")}\n            value={this.state.is_hidden}\n            choices={this.isHiddenChoices}\n          />\n        </FormGroup>\n      )\n    } else {\n      return null\n    }\n  }\n\n  renderClosedField() {\n    if (this.acl[this.state.category].can_close_threads) {\n      return (\n        <FormGroup label={gettext(\"Close thread\")} for=\"id_is_closed\">\n          <Select\n            id=\"id_is_closed\"\n            onChange={this.bindInput(\"is_closed\")}\n            value={this.state.is_closed}\n            choices={this.isClosedChoices}\n          />\n        </FormGroup>\n      )\n    } else {\n      return null\n    }\n  }\n\n  renderForm() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"modal-body\">\n          <FormGroup\n            label={gettext(\"Thread title\")}\n            for=\"id_title\"\n            validation={this.state.errors.title}\n          >\n            <input\n              id=\"id_title\"\n              className=\"form-control\"\n              type=\"text\"\n              onChange={this.bindInput(\"title\")}\n              value={this.state.title}\n            />\n          </FormGroup>\n          <div className=\"clearfix\" />\n\n          <FormGroup\n            label={gettext(\"Category\")}\n            for=\"id_category\"\n            validation={this.state.errors.category}\n          >\n            <CategorySelect\n              id=\"id_category\"\n              onChange={this.onCategoryChange}\n              value={this.state.category}\n              choices={this.categoryChoices}\n            />\n          </FormGroup>\n          <div className=\"clearfix\" />\n\n          {this.renderWeightField()}\n          {this.renderHiddenField()}\n          {this.renderClosedField()}\n        </div>\n        <div className=\"modal-footer\">\n          <button\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n            disabled={this.state.isLoading}\n            type=\"button\"\n          >\n            {gettext(\"Cancel\")}\n          </button>\n          <Button className=\"btn-primary\" loading={this.state.isLoading}>\n            {gettext(\"Merge threads\")}\n          </Button>\n        </div>\n      </form>\n    )\n  }\n\n  renderCantMergeMessage() {\n    return (\n      <div className=\"modal-body\">\n        <div className=\"message-icon\">\n          <span className=\"material-icon\">info_outline</span>\n        </div>\n        <div className=\"message-body\">\n          <p className=\"lead\">\n            {gettext(\n              \"You can't move threads because there are no categories you are allowed to move them to.\"\n            )}\n          </p>\n          <p>\n            {gettext(\n              \"You need permission to start threads in category to be able to merge threads to it.\"\n            )}\n          </p>\n          <button\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            {gettext(\"Ok\")}\n          </button>\n        </div>\n      </div>\n    )\n  }\n\n  getClassName() {\n    if (!this.state.category) {\n      return \"modal-dialog modal-message\"\n    } else {\n      return \"modal-dialog\"\n    }\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()} role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              type=\"button\"\n              className=\"close\"\n              data-dismiss=\"modal\"\n              aria-label={gettext(\"Close\")}\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Merge threads\")}</h4>\n          </div>\n          {this.state.category\n            ? this.renderForm()\n            : this.renderCantMergeMessage()}\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport CategorySelect from \"misago/components/category-select\"\nimport * as select from \"misago/reducers/selection\"\nimport { filterThreads } from \"misago/reducers/threads\"\nimport modal from \"misago/services/modal\"\nimport store from \"misago/services/store\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      category: null,\n    }\n\n    const acls = {}\n    for (const i in props.user.acl.categories) {\n      if (!props.user.acl.categories.hasOwnProperty(i)) {\n        continue\n      }\n\n      const acl = props.user.acl.categories[i]\n      acls[acl.id] = acl\n    }\n\n    this.categoryChoices = []\n    props.categories.forEach((category) => {\n      if (category.level > 0) {\n        const acl = acls[category.id]\n        const disabled =\n          !acl.can_start_threads ||\n          (category.is_closed && !acl.can_close_threads)\n\n        this.categoryChoices.push({\n          value: category.id,\n          disabled: disabled,\n          level: category.level - 1,\n          label: category.name,\n        })\n\n        if (!disabled && !this.state.category) {\n          this.state.category = category.id\n        }\n      }\n    })\n  }\n\n  handleSubmit = (event) => {\n    // we don't reload page on submissions\n    event.preventDefault()\n\n    modal.hide()\n\n    const onSuccess = () => {\n      store.dispatch(\n        filterThreads(this.props.route.category, this.props.categoriesMap)\n      )\n\n      // deselect threads moved outside of visible scope\n      const storeState = store.getState()\n      const leftThreads = storeState.threads.map((thread) => thread.id)\n      store.dispatch(\n        select.all(\n          storeState.selection.filter((thread) => {\n            return leftThreads.indexOf(thread) !== -1\n          })\n        )\n      )\n    }\n\n    this.props.callApi(\n      [\n        { op: \"replace\", path: \"category\", value: this.state.category },\n        { op: \"replace\", path: \"flatten-categories\", value: null },\n        { op: \"add\", path: \"acl\", value: true },\n      ],\n      gettext(\"Selected threads were moved.\"),\n      onSuccess\n    )\n  }\n\n  getClassName() {\n    if (!this.state.category) {\n      return \"modal-dialog modal-message\"\n    } else {\n      return \"modal-dialog\"\n    }\n  }\n\n  renderForm() {\n    return (\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"modal-body\">\n          <FormGroup label={gettext(\"New category\")} for=\"id_new_category\">\n            <CategorySelect\n              id=\"id_new_category\"\n              onChange={this.bindInput(\"category\")}\n              value={this.state.category}\n              choices={this.categoryChoices}\n            />\n          </FormGroup>\n        </div>\n        <div className=\"modal-footer\">\n          <button\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n            disabled={this.state.isLoading}\n            type=\"button\"\n          >\n            {gettext(\"Cancel\")}\n          </button>\n          <button className=\"btn btn-primary\">{gettext(\"Move threads\")}</button>\n        </div>\n      </form>\n    )\n  }\n\n  renderCantMoveMessage() {\n    return (\n      <div className=\"modal-body\">\n        <div className=\"message-icon\">\n          <span className=\"material-icon\">info_outline</span>\n        </div>\n        <div className=\"message-body\">\n          <p className=\"lead\">\n            {gettext(\n              \"You can't move threads because there are no categories you are allowed to move them to.\"\n            )}\n          </p>\n          <p>\n            {gettext(\n              \"You need permission to start threads in category to be able to move threads to it.\"\n            )}\n          </p>\n          <button\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            {gettext(\"Ok\")}\n          </button>\n        </div>\n      </div>\n    )\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()} role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              type=\"button\"\n              className=\"close\"\n              data-dismiss=\"modal\"\n              aria-label={gettext(\"Close\")}\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Move threads\")}</h4>\n          </div>\n          {this.state.category\n            ? this.renderForm()\n            : this.renderCantMoveMessage()}\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport ErrorsModal from \"misago/components/threads/moderation/errors-list\"\nimport MergeThreads from \"misago/components/threads/moderation/merge\"\nimport MoveThreads from \"misago/components/threads/moderation/move\"\nimport * as select from \"misago/reducers/selection\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default class extends React.Component {\n  callApi = (ops, successMessage, onSuccess = null) => {\n    // freeze threads\n    this.props.threads.forEach((thread) => {\n      this.props.freezeThread(thread.id)\n    })\n\n    // list ids\n    const ids = this.props.threads.map((thread) => {\n      return thread.id\n    })\n\n    // always return current acl\n    ops.push({ op: \"add\", path: \"acl\", value: true })\n\n    ajax.patch(this.props.api, { ids, ops }).then(\n      (data) => {\n        // unfreeze\n        this.props.threads.forEach((thread) => {\n          this.props.freezeThread(thread.id)\n        })\n\n        // update threads\n        data.forEach((thread) => {\n          this.props.updateThread(thread)\n        })\n\n        // show success message and call callback\n        snackbar.success(successMessage)\n        if (onSuccess) {\n          onSuccess()\n        }\n      },\n      (rejection) => {\n        // unfreeze\n        this.props.threads.forEach((thread) => {\n          this.props.freezeThread(thread.id)\n        })\n\n        // escape on non-400 error\n        if (rejection.status !== 400) {\n          return snackbar.apiError(rejection)\n        }\n\n        // build errors list\n        let errors = []\n        let threadsMap = {}\n\n        this.props.threads.forEach((thread) => {\n          threadsMap[thread.id] = thread\n        })\n\n        rejection.forEach(({ id, detail }) => {\n          if (typeof threadsMap[id] !== \"undefined\") {\n            errors.push({\n              errors: detail,\n              thread: threadsMap[id],\n            })\n          }\n        })\n\n        modal.show(<ErrorsModal errors={errors} />)\n      }\n    )\n  }\n\n  pinGlobally = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"weight\",\n          value: 2,\n        },\n      ],\n      gettext(\"Selected threads were pinned globally.\")\n    )\n  }\n\n  pinLocally = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"weight\",\n          value: 1,\n        },\n      ],\n      gettext(\"Selected threads were pinned locally.\")\n    )\n  }\n\n  unpin = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"weight\",\n          value: 0,\n        },\n      ],\n      gettext(\"Selected threads were unpinned.\")\n    )\n  }\n\n  approve = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-unapproved\",\n          value: false,\n        },\n      ],\n      gettext(\"Selected threads were approved.\")\n    )\n  }\n\n  open = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-closed\",\n          value: false,\n        },\n      ],\n      gettext(\"Selected threads were opened.\")\n    )\n  }\n\n  close = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-closed\",\n          value: true,\n        },\n      ],\n      gettext(\"Selected threads were closed.\")\n    )\n  }\n\n  unhide = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-hidden\",\n          value: false,\n        },\n      ],\n      gettext(\"Selected threads were unhidden.\")\n    )\n  }\n\n  hide = () => {\n    this.callApi(\n      [\n        {\n          op: \"replace\",\n          path: \"is-hidden\",\n          value: true,\n        },\n      ],\n      gettext(\"Selected threads were hidden.\")\n    )\n  }\n\n  move = () => {\n    modal.show(\n      <MoveThreads\n        callApi={this.callApi}\n        categories={this.props.categories}\n        categoriesMap={this.props.categoriesMap}\n        route={this.props.route}\n        user={this.props.user}\n      />\n    )\n  }\n\n  merge = () => {\n    const errors = []\n    this.props.threads.forEach((thread) => {\n      if (!thread.acl.can_merge) {\n        errors.append({\n          id: thread.id,\n          title: thread.title,\n          errors: [\n            gettext(\n              \"You don't have permission to merge this thread with others.\"\n            ),\n          ],\n        })\n      }\n    })\n\n    if (this.props.threads.length < 2) {\n      snackbar.info(\n        gettext(\"You have to select at least two threads to merge.\")\n      )\n    } else if (errors.length) {\n      modal.show(<ErrorsModal errors={errors} />)\n      return\n    } else {\n      modal.show(<MergeThreads {...this.props} />)\n    }\n  }\n\n  delete = () => {\n    if (\n      !window.confirm(\n        gettext(\"Are you sure you want to delete selected threads?\")\n      )\n    ) {\n      return\n    }\n\n    this.props.threads.map((thread) => {\n      this.props.freezeThread(thread.id)\n    })\n\n    const ids = this.props.threads.map((thread) => {\n      return thread.id\n    })\n\n    ajax.delete(this.props.api, ids).then(\n      () => {\n        this.props.threads.map((thread) => {\n          this.props.freezeThread(thread.id)\n          this.props.deleteThread(thread)\n        })\n\n        snackbar.success(gettext(\"Selected threads were deleted.\"))\n      },\n      (rejection) => {\n        if (rejection.status === 400) {\n          const failedThreads = rejection.map((thread) => {\n            return thread.id\n          })\n\n          this.props.threads.map((thread) => {\n            this.props.freezeThread(thread.id)\n            if (failedThreads.indexOf(thread.id) === -1) {\n              this.props.deleteThread(thread)\n            }\n          })\n\n          modal.show(<ErrorsModal errors={rejection} />)\n        } else {\n          snackbar.apiError(rejection)\n        }\n      }\n    )\n  }\n\n  render() {\n    const { moderation, threads } = this.props\n    const noSelection = this.props.selection.length == 0\n\n    return (\n      <ul className=\"dropdown-menu dropdown-menu-right stick-to-bottom\">\n        <li>\n          <button\n            className=\"btn btn-link\"\n            type=\"button\"\n            onClick={() => store.dispatch(select.all(threads.map((t) => t.id)))}\n          >\n            <span className=\"material-icon\">check_box</span>\n            {gettext(\"Select all\")}\n          </button>\n        </li>\n        <li>\n          <button\n            className=\"btn btn-link\"\n            type=\"button\"\n            disabled={noSelection}\n            onClick={() => store.dispatch(select.none())}\n          >\n            <span className=\"material-icon\">check_box_outline_blank</span>\n            {gettext(\"Select none\")}\n          </button>\n        </li>\n        <li role=\"separator\" className=\"divider\" />\n        {!!moderation.can_pin_globally && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.pinGlobally}\n            >\n              <span className=\"material-icon\">bookmark</span>\n              {gettext(\"Pin threads globally\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_pin && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.pinLocally}\n            >\n              <span className=\"material-icon\">bookmark_border</span>\n              {gettext(\"Pin threads locally\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_pin && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.unpin}\n            >\n              <span className=\"material-icon\">panorama_fish_eye</span>\n              {gettext(\"Unpin threads\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_move && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.move}\n            >\n              <span className=\"material-icon\">arrow_forward</span>\n              {gettext(\"Move threads\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_merge && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.merge}\n            >\n              <span className=\"material-icon\">call_merge</span>\n              {gettext(\"Merge threads\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_approve && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.approve}\n            >\n              <span className=\"material-icon\">done</span>\n              {gettext(\"Approve threads\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_close && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.open}\n            >\n              <span className=\"material-icon\">lock_open</span>\n              {gettext(\"Open threads\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_close && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.close}\n            >\n              <span className=\"material-icon\">lock_outline</span>\n              {gettext(\"Close threads\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_unhide && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.unhide}\n            >\n              <span className=\"material-icon\">visibility</span>\n              {gettext(\"Unhide threads\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_hide && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.hide}\n            >\n              <span className=\"material-icon\">visibility_off</span>\n              {gettext(\"Hide threads\")}\n            </button>\n          </li>\n        )}\n        {!!moderation.can_delete && (\n          <li>\n            <button\n              className=\"btn btn-link\"\n              type=\"button\"\n              disabled={noSelection}\n              onClick={this.delete}\n            >\n              <span className=\"material-icon\">clear</span>\n              {gettext(\"Delete threads\")}\n            </button>\n          </li>\n        )}\n      </ul>\n    )\n  }\n}\n","import React from \"react\"\nimport ModerationControls from \"./moderation/controls\"\n\nconst ThreadsToolbarModeration = ({\n  api,\n  categoriesMap,\n  categories,\n  threads,\n  addThreads,\n  freezeThread,\n  updateThread,\n  deleteThread,\n  selection,\n  moderation,\n  route,\n  user,\n  disabled,\n}) => (\n  <div className=\"dropdown threads-moderation\">\n    <button\n      type=\"button\"\n      className=\"btn btn-default btn-outline btn-icon dropdown-toggle\"\n      title={gettext(\"Moderation\")}\n      data-toggle=\"dropdown\"\n      aria-haspopup=\"true\"\n      aria-expanded=\"false\"\n      disabled={disabled}\n    >\n      <span className=\"material-icon\">settings</span>\n    </button>\n    <ModerationControls\n      api={api}\n      categories={categories}\n      categoriesMap={categoriesMap}\n      threads={threads}\n      addThreads={addThreads}\n      freezeThread={freezeThread}\n      updateThread={updateThread}\n      deleteThread={deleteThread}\n      selection={selection}\n      moderation={moderation}\n      route={route}\n      user={user}\n      disabled={disabled}\n    />\n  </div>\n)\n\nexport default ThreadsToolbarModeration\n","import React from \"react\"\nimport posting from \"../../services/posting\"\nimport Button from \"../button\"\nimport { Toolbar, ToolbarItem, ToolbarSection, ToolbarSpacer } from \"../Toolbar\"\nimport ThreadsCategoryPicker from \"./ThreadsCategoryPicker\"\nimport ThreadsListPicker from \"./ThreadsListPicker\"\nimport ThreadsToolbarModeration from \"./ThreadsToolbarModeration\"\n\nconst ThreadsToolbar = ({\n  api,\n  baseUrl,\n  category,\n  categories,\n  categoriesMap,\n  topCategory,\n  topCategories,\n  subCategory,\n  subCategories,\n  list,\n  lists,\n  threads,\n  addThreads,\n  startThread,\n  freezeThread,\n  updateThread,\n  deleteThread,\n  selection,\n  moderation,\n  route,\n  user,\n  disabled,\n}) => (\n  <Toolbar>\n    {topCategories.length > 0 && (\n      <ToolbarSection>\n        <ToolbarItem>\n          <ThreadsCategoryPicker\n            allItems={gettext(\"All categories\")}\n            parentUrl={list.path}\n            category={topCategory}\n            categories={topCategories}\n            list={list}\n          />\n        </ToolbarItem>\n        {topCategory && subCategories.length > 0 && (\n          <ToolbarItem>\n            <ThreadsCategoryPicker\n              allItems={gettext(\"All subcategories\")}\n              parentUrl={topCategory.url.index}\n              category={subCategory}\n              categories={subCategories}\n              list={list}\n            />\n          </ToolbarItem>\n        )}\n      </ToolbarSection>\n    )}\n    {lists.length > 1 && (\n      <ToolbarSection className=\"hidden-xs\">\n        <ToolbarItem>\n          <ThreadsListPicker baseUrl={baseUrl} list={list} lists={lists} />\n        </ToolbarItem>\n      </ToolbarSection>\n    )}\n    <ToolbarSpacer />\n    {!!user.id && (\n      <ToolbarSection>\n        <ToolbarItem>\n          <Button\n            className=\"btn-primary btn-outline btn-block\"\n            disabled={disabled}\n            onClick={() => {\n              posting.open(\n                startThread || {\n                  mode: \"START\",\n\n                  config: misago.get(\"THREAD_EDITOR_API\"),\n                  submit: misago.get(\"THREADS_API\"),\n\n                  category: category.id,\n                }\n              )\n            }}\n          >\n            <span className=\"material-icon\">chat</span>\n            {gettext(\"Start thread\")}\n          </Button>\n        </ToolbarItem>\n        {!!moderation.allow && (\n          <ToolbarItem shrink>\n            <ThreadsToolbarModeration\n              api={api}\n              categories={categories}\n              categoriesMap={categoriesMap}\n              threads={threads.filter(\n                (thread) => selection.indexOf(thread.id) !== -1\n              )}\n              addThreads={addThreads}\n              freezeThread={freezeThread}\n              updateThread={updateThread}\n              deleteThread={deleteThread}\n              selection={selection}\n              moderation={moderation}\n              route={route}\n              user={user}\n              disabled={disabled}\n            />\n          </ToolbarItem>\n        )}\n      </ToolbarSection>\n    )}\n  </Toolbar>\n)\n\nexport default ThreadsToolbar\n","import React from \"react\"\nimport PageContainer from \"../PageContainer\"\nimport ThreadsToolbar from \"./ThreadsToolbar\"\n\nexport default class extends React.Component {\n  render() {\n    const { root } = this.props\n    const { category, categories, categoriesMap } = this.props.route\n    const topCategory = getTopCategory(root, category, categoriesMap)\n\n    return (\n      <PageContainer>\n        <ThreadsToolbar\n          api={this.props.api}\n          baseUrl={category.url.index}\n          category={category}\n          categories={categories}\n          categoriesMap={categoriesMap}\n          topCategory={topCategory}\n          topCategories={categories.filter((cat) => cat.parent === root.id)}\n          subCategories={\n            !!topCategory\n              ? categories.filter((cat) => cat.parent === topCategory.id)\n              : []\n          }\n          subCategory={category.level === 2 ? category : null}\n          subcategories={this.props.subcategories}\n          list={this.props.route.list}\n          lists={this.props.route.lists}\n          threads={this.props.threads}\n          addThreads={this.props.addThreads}\n          startThread={this.props.startThread}\n          freezeThread={this.props.freezeThread}\n          deleteThread={this.props.deleteThread}\n          updateThread={this.props.updateThread}\n          selection={this.props.selection}\n          moderation={this.props.moderation}\n          route={this.props.route}\n          user={this.props.user}\n          disabled={\n            !this.props.isLoaded ||\n            this.props.isBusy ||\n            this.props.busyThreads.length\n          }\n        />\n        {this.props.children}\n      </PageContainer>\n    )\n  }\n}\n\nconst getTopCategory = (root, category, categoriesMap) => {\n  if (!category.parent) return null\n  if (category.parent === root.id) return category\n  return categoriesMap[category.parent]\n}\n","import misago from \"misago/index\"\n\nexport function getPageTitle(route) {\n  if (route.category.level) {\n    if (route.list.path) {\n      return {\n        title: route.list.longName,\n        parent: route.category.name,\n      }\n    } else {\n      return {\n        title: route.category.name,\n      }\n    }\n  } else if (misago.get(\"THREADS_ON_INDEX\")) {\n    if (route.list.path) {\n      return {\n        title: route.list.longName,\n      }\n    } else {\n      return null\n    }\n  } else {\n    if (route.list.path) {\n      return {\n        title: route.list.longName,\n        parent: gettext(\"Threads\"),\n      }\n    } else {\n      return {\n        title: gettext(\"Threads\"),\n      }\n    }\n  }\n}\n\nexport function getTitle(route) {\n  if (route.category.level) {\n    return route.category.name\n  } else if (misago.get(\"THREADS_ON_INDEX\")) {\n    if (misago.get(\"SETTINGS\").index_header) {\n      return misago.get(\"SETTINGS\").index_header\n    } else {\n      return misago.get(\"SETTINGS\").forum_name\n    }\n  } else {\n    return gettext(\"Threads\")\n  }\n}\n\nexport function isThreadChanged(current, fromDb) {\n  return (\n    [\n      current.title === fromDb.title,\n      current.weight === fromDb.weight,\n      current.category === fromDb.category,\n      current.last_post === fromDb.last_post,\n      current.last_poster_name === fromDb.last_poster_name,\n    ].indexOf(false) >= 0\n  )\n}\n\nexport function diffThreads(current, fromDb) {\n  let currentMap = {}\n  current.forEach(function (thread) {\n    currentMap[thread.id] = thread\n  })\n\n  return fromDb.filter(function (thread) {\n    if (currentMap[thread.id]) {\n      return isThreadChanged(currentMap[thread.id], thread)\n    } else {\n      return true\n    }\n  })\n}\n\nexport function getModerationActions(threads) {\n  let moderation = {\n    allow: false,\n\n    can_approve: 0,\n    can_close: 0,\n    can_delete: 0,\n    can_hide: 0,\n    can_merge: 0,\n    can_move: 0,\n    can_pin: 0,\n    can_pin_globally: 0,\n    can_unhide: 0,\n  }\n\n  threads.forEach(function (thread) {\n    if (\n      thread.is_unapproved &&\n      thread.acl.can_approve > moderation.can_approve\n    ) {\n      moderation.can_approve = thread.acl.can_approve\n    }\n\n    if (thread.acl.can_close > moderation.can_close) {\n      moderation.can_close = thread.acl.can_close\n    }\n\n    if (thread.acl.can_delete > moderation.can_delete) {\n      moderation.can_delete = thread.acl.can_delete\n    }\n\n    if (thread.acl.can_hide > moderation.can_hide) {\n      moderation.can_hide = thread.acl.can_hide\n    }\n\n    if (thread.acl.can_merge > moderation.can_merge) {\n      moderation.can_merge = thread.acl.can_merge\n    }\n\n    if (thread.acl.can_move > moderation.can_move) {\n      moderation.can_move = thread.acl.can_move\n    }\n\n    if (thread.acl.can_pin > moderation.can_pin) {\n      moderation.can_pin = thread.acl.can_pin\n    }\n\n    if (thread.acl.can_pin_globally > moderation.can_pin_globally) {\n      moderation.can_pin_globally = thread.acl.can_pin_globally\n    }\n\n    if (thread.is_hidden && thread.acl.can_unhide > moderation.can_unhide) {\n      moderation.can_unhide = thread.acl.can_unhide\n    }\n\n    moderation.allow =\n      moderation.can_approve ||\n      moderation.can_close ||\n      moderation.can_delete ||\n      moderation.can_hide ||\n      moderation.can_merge ||\n      moderation.can_move ||\n      moderation.can_pin ||\n      moderation.can_pin_globally ||\n      moderation.can_unhide\n  })\n\n  return moderation\n}\n","import React from \"react\"\n\nconst ThreadsListEmpty = ({ category, list, message }) => {\n  if (list.type === \"all\") {\n    if (message) {\n      return (\n        <li className=\"list-group-item empty-message\">\n          <p className=\"lead\">{message}</p>\n          <p>{gettext(\"Why not start one yourself?\")}</p>\n        </li>\n      )\n    }\n\n    return (\n      <li className=\"list-group-item empty-message\">\n        <p className=\"lead\">\n          {category.special_role\n            ? gettext(\"There are no threads on this forum... yet!\")\n            : gettext(\"There are no threads in this category.\")}\n        </p>\n        <p>{gettext(\"Why not start one yourself?\")}</p>\n      </li>\n    )\n  }\n\n  return (\n    <li className=\"list-group-item empty-message\">\n      <p className=\"lead\">\n        {gettext(\"No threads matching specified criteria were found.\")}\n      </p>\n    </li>\n  )\n}\n\nexport default ThreadsListEmpty\n","import React from \"react\"\n\nconst ThreadsListItemActivity = ({ thread }) => (\n  <a\n    href={thread.url.last_post}\n    className=\"threads-list-item-last-activity\"\n    title={interpolate(\n      gettext(\"Last activity: %(timestamp)s\"),\n      {\n        timestamp: thread.last_post_on.format(\"LLL\"),\n      },\n      true\n    )}\n  >\n    {thread.last_post_on.fromNow(true)}\n  </a>\n)\n\nexport default ThreadsListItemActivity\n","import React from \"react\"\n\nconst ThreadsListItemCategory = ({ parent, category }) => (\n  <span>\n    {parent && (\n      <a\n        href={parent.url.index}\n        className={getClassName(parent) + \" threads-list-item-parent-category\"}\n        style={parent.color ? { \"--label-color\": parent.color } : null}\n        title={!!parent.short_name ? parent.name : null}\n      >\n        {parent.short_name || parent.name}\n      </a>\n    )}\n    <a\n      href={category.url.index}\n      className={getClassName(category)}\n      style={category.color ? { \"--label-color\": category.color } : null}\n      title={!!category.short_name ? category.name : null}\n    >\n      {category.short_name || category.name}\n    </a>\n  </span>\n)\n\nconst getClassName = (category) => {\n  let className = \"threads-list-item-category threads-list-category-label\"\n\n  if (category.color) {\n    className += \" threads-list-category-label-color\"\n  }\n\n  return className\n}\n\nexport default ThreadsListItemCategory\n","import React from \"react\"\nimport * as select from \"../../reducers/selection\"\nimport store from \"../../services/store\"\n\nconst ThreadsListItemCheckbox = ({ checked, disabled, thread }) => (\n  <button\n    className=\"btn btn-default btn-icon\"\n    type=\"button\"\n    disabled={disabled}\n    onClick={() => store.dispatch(select.item(thread.id))}\n  >\n    <span className=\"material-icon\">\n      {checked ? \"check_box\" : \"check_box_outline_blank\"}\n    </span>\n  </button>\n)\n\nexport default ThreadsListItemCheckbox\n","import React from \"react\"\n\nconst ThreadsListItemIcon = ({ thread }) => {\n  let className = \"threads-list-icon\"\n  if (!thread.is_read) className += \" threads-list-icon-new\"\n\n  return (\n    <a\n      title={thread.is_read ? gettext(\"No new posts\") : gettext(\"New posts\")}\n      href={thread.is_read ? thread.url.last_post : thread.url.new_post}\n      className={className}\n    >\n      <span className=\"material-icon\">\n        {thread.is_read ? \"chat_bubble_outline\" : \"chat_bubble\"}\n      </span>\n    </a>\n  )\n}\n\nexport default ThreadsListItemIcon\n","import React from \"react\"\nimport Avatar from \"../avatar\"\n\nconst ThreadsListItemLastPoster = ({ thread }) =>\n  !!thread.last_poster ? (\n    <a\n      href={thread.url.last_poster}\n      className=\"threads-list-item-last-poster\"\n      title={interpolate(\n        gettext(\"Last post by: %(poster)s\"),\n        { poster: thread.last_poster.username },\n        true\n      )}\n    >\n      <Avatar size={32} user={thread.last_poster} />\n    </a>\n  ) : (\n    <span\n      className=\"threads-list-item-last-poster\"\n      title={interpolate(\n        gettext(\"Last post by: %(poster)s\"),\n        { poster: thread.last_poster_name },\n        true\n      )}\n    >\n      <Avatar size={32} />\n    </span>\n  )\n\nexport default ThreadsListItemLastPoster\n","import React from \"react\"\nimport { patch } from \"../../reducers/threads\"\nimport ajax from \"../../services/ajax\"\nimport snackbar from \"../../services/snackbar\"\nimport store from \"../../services/store\"\n\nconst SUBSCRIPTION = {\n  unsubscribe: null,\n  notify: false,\n  email: true,\n}\n\nclass ThreadsListItemSubscriptionOptions extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      loading: false,\n    }\n  }\n\n  update = (value) => {\n    const { thread } = this.props\n\n    this.setState({ loading: true })\n    store.dispatch(patch(thread, { subscription: SUBSCRIPTION[value] }))\n\n    ajax\n      .patch(thread.api.index, [{ op: \"replace\", path: \"subscription\", value }])\n      .then(\n        () => {},\n        (rejection) => {\n          store.dispatch(\n            patch(thread, {\n              subscription: SUBSCRIPTION[thread.subscription],\n            })\n          )\n          snackbar.apiError(rejection)\n        }\n      )\n      .then(() => this.setState({ loading: false }))\n  }\n\n  render = () => {\n    const { loading } = this.state\n    const { disabled, thread } = this.props\n\n    return (\n      <ul className=\"dropdown-menu dropdown-menu-right\">\n        <li>\n          <button\n            className=\"btn-link\"\n            disabled={disabled || loading || thread.subscription === null}\n            onClick={() => this.update(\"unsubscribe\")}\n          >\n            <span className=\"material-icon\">star_border</span>\n            {gettext(\"Unsubscribe\")}\n          </button>\n        </li>\n        <li>\n          <button\n            className=\"btn-link\"\n            disabled={disabled || loading || thread.subscription === false}\n            onClick={() => this.update(\"notify\")}\n          >\n            <span className=\"material-icon\">star_half</span>\n            {gettext(\"Subscribe with alert\")}\n          </button>\n        </li>\n        <li>\n          <button\n            className=\"btn-link\"\n            disabled={disabled || loading || thread.subscription === true}\n            onClick={() => this.update(\"email\")}\n          >\n            <span className=\"material-icon\">star</span>\n            {gettext(\"Subscribe with e-mail\")}\n          </button>\n        </li>\n      </ul>\n    )\n  }\n}\n\nexport default ThreadsListItemSubscriptionOptions\n","import React from \"react\"\nimport ThreadsListItemSubscriptionOptions from \"./ThreadsListItemSubscriptionOptions\"\n\nconst ThreadsListItemSubscription = ({ disabled, thread }) => (\n  <div className=\"dropdown\">\n    <button\n      className=\"btn btn-default btn-icon\"\n      type=\"button\"\n      title={getSubscriptionTitle(thread.subscription)}\n      disabled={disabled}\n      data-toggle=\"dropdown\"\n      aria-haspopup=\"true\"\n      aria-expanded=\"false\"\n    >\n      <span className=\"material-icon\">\n        {getSubscriptionIcon(thread.subscription)}\n      </span>\n    </button>\n    <ThreadsListItemSubscriptionOptions disabled={disabled} thread={thread} />\n  </div>\n)\n\nconst getSubscriptionTitle = (subscription) => {\n  if (subscription === true) return gettext(\"Subscribed to e-mails\")\n  if (subscription === false) return gettext(\"Subscribed to alerts\")\n  return gettext(\"Not subscribed\")\n}\n\nconst getSubscriptionIcon = (subscription) => {\n  if (subscription === true) return \"star\"\n  if (subscription === false) return \"star_half\"\n  return \"star_border\"\n}\n\nexport default ThreadsListItemSubscription\n","import React from \"react\"\nimport ThreadFlags from \"../ThreadFlags\"\nimport ThreadReplies from \"../ThreadReplies\"\nimport ThreadsListItemActivity from \"./ThreadsListItemActivity\"\nimport ThreadsListItemCategory from \"./ThreadsListItemCategory\"\nimport ThreadsListItemCheckbox from \"./ThreadsListItemCheckbox\"\nimport ThreadsListItemIcon from \"./ThreadsListItemIcon\"\nimport ThreadsListItemLastPoster from \"./ThreadsListItemLastPoster\"\nimport ThreadsListItemSubscription from \"./ThreadsListItemSubscription\"\n\nconst ThreadsListItem = ({\n  activeCategory,\n  categories,\n  showOptions,\n  showSubscription,\n  thread,\n  isBusy,\n  isSelected,\n}) => {\n  let parent = null\n  let category = null\n\n  if (activeCategory.id !== thread.category) {\n    category = categories[thread.category]\n\n    if (\n      category.parent &&\n      category.parent !== activeCategory.id &&\n      categories[category.parent] &&\n      !categories[category.parent].special_role\n    ) {\n      parent = categories[category.parent]\n    }\n  }\n\n  const hasFlags =\n    thread.is_closed ||\n    thread.is_hidden ||\n    thread.is_unapproved ||\n    thread.weight > 0 ||\n    thread.best_answer ||\n    thread.has_poll ||\n    thread.has_unapproved_posts\n\n  const isNew = showOptions ? thread.is_new : true\n\n  return (\n    <li\n      className={\n        \"list-group-item threads-list-item\" +\n        (isBusy ? \" threads-list-item-is-busy\" : \"\")\n      }\n    >\n      <div className=\"threads-list-item-top-row\">\n        {showOptions && (\n          <div className=\"threads-list-item-col-icon\">\n            <ThreadsListItemIcon thread={thread} />\n          </div>\n        )}\n        <div className=\"threads-list-item-col-title\">\n          <a href={thread.url.index} className=\"threads-list-item-title\">\n            {thread.title}\n          </a>\n          <a\n            href={isNew ? thread.url.new_post : thread.url.index}\n            className={\n              \"threads-list-item-title-sm\" +\n              (isNew ? \" threads-list-item-title-new\" : \"\")\n            }\n          >\n            {thread.title}\n          </a>\n        </div>\n        {showOptions && thread.moderation.length > 0 && (\n          <div className=\"threads-list-item-col-checkbox-sm\">\n            <ThreadsListItemCheckbox\n              checked={isSelected}\n              disabled={isBusy}\n              thread={thread}\n            />\n          </div>\n        )}\n      </div>\n      <div className=\"threads-list-item-bottom-row\">\n        {hasFlags && (\n          <div className=\"threads-list-item-col-flags\">\n            <ThreadFlags thread={thread} />\n          </div>\n        )}\n        {!!category && (\n          <div className=\"threads-list-item-col-category\">\n            <ThreadsListItemCategory parent={parent} category={category} />\n          </div>\n        )}\n        <div className=\"threads-list-item-col-replies\">\n          <ThreadReplies thread={thread} />\n        </div>\n        <div className=\"threads-list-item-col-last-poster\">\n          <ThreadsListItemLastPoster thread={thread} />\n        </div>\n        <div className=\"threads-list-item-col-last-activity\">\n          <ThreadsListItemActivity thread={thread} />\n        </div>\n        {showOptions && showSubscription && (\n          <div className=\"threads-list-item-col-subscription\">\n            <ThreadsListItemSubscription disabled={isBusy} thread={thread} />\n          </div>\n        )}\n        {showOptions && thread.moderation.length > 0 && (\n          <div className=\"threads-list-item-col-checkbox\">\n            <ThreadsListItemCheckbox\n              checked={isSelected}\n              disabled={isBusy}\n              thread={thread}\n            />\n          </div>\n        )}\n      </div>\n    </li>\n  )\n}\n\nexport default ThreadsListItem\n","import React from \"react\"\n\nconst UIPreviewText = ({ width }) => (\n  <span className=\"ui-preview-text\" style={{ width: width + \"px\" }}>\n    &nbsp;\n  </span>\n)\n\nexport default UIPreviewText\n","import React from \"react\"\nimport Avatar from \"../avatar\"\nimport { UIPreviewText } from \"../UIPreview\"\n\nconst ThreadsListLoader = ({ showOptions }) => (\n  <div className=\"threads-list threads-list-loader\">\n    <ul className=\"list-group\">\n      <li className=\"list-group-item threads-list-item\">\n        <div className=\"threads-list-item-top-row\">\n          {showOptions && (\n            <div className=\"threads-list-item-col-icon\">\n              <span className=\"threads-list-icon ui-preview-img\"></span>\n            </div>\n          )}\n          <div className=\"threads-list-item-col-title\">\n            <span className=\"threads-list-item-title\">\n              <UIPreviewText width=\"90\" /> <UIPreviewText width=\"40\" />{\" \"}\n              <UIPreviewText width=\"120\" />\n            </span>\n            <span className=\"threads-list-item-title-sm\">\n              <UIPreviewText width=\"90\" /> <UIPreviewText width=\"40\" />{\" \"}\n              <UIPreviewText width=\"120\" />\n            </span>\n          </div>\n        </div>\n        <div className=\"threads-list-item-bottom-row\">\n          <div className=\"threads-list-item-col-category\">\n            <UIPreviewText width=\"70\" />\n          </div>\n          <div className=\"threads-list-item-col-replies\">\n            <UIPreviewText width=\"50\" />\n          </div>\n          <div className=\"threads-list-item-col-last-poster\">\n            <span className=\"threads-list-item-last-poster\">\n              <Avatar size={32} />\n            </span>\n          </div>\n          <div className=\"threads-list-item-col-last-activity\">\n            <span className=\"threads-list-item-last-activity\">\n              <UIPreviewText width=\"50\" />\n            </span>\n          </div>\n        </div>\n      </li>\n      <li className=\"list-group-item threads-list-item\">\n        <div className=\"threads-list-item-top-row\">\n          {showOptions && (\n            <div className=\"threads-list-item-col-icon\">\n              <span className=\"threads-list-icon ui-preview-img\"></span>\n            </div>\n          )}\n          <div className=\"threads-list-item-col-title\">\n            <span className=\"threads-list-item-title\">\n              <UIPreviewText width=\"120\" /> <UIPreviewText width=\"30\" />{\" \"}\n              <UIPreviewText width=\"60\" />\n            </span>\n            <span className=\"threads-list-item-title-sm\">\n              <UIPreviewText width=\"120\" /> <UIPreviewText width=\"30\" />{\" \"}\n              <UIPreviewText width=\"60\" />\n            </span>\n          </div>\n        </div>\n        <div className=\"threads-list-item-bottom-row\">\n          <div className=\"threads-list-item-col-category\">\n            <UIPreviewText width=\"55\" />\n          </div>\n          <div className=\"threads-list-item-col-replies\">\n            <UIPreviewText width=\"60\" />\n          </div>\n          <div className=\"threads-list-item-col-last-poster\">\n            <span className=\"threads-list-item-last-poster\">\n              <Avatar size={32} />\n            </span>\n          </div>\n          <div className=\"threads-list-item-col-last-activity\">\n            <span className=\"threads-list-item-last-activity\">\n              <UIPreviewText width=\"70\" />\n            </span>\n          </div>\n        </div>\n      </li>\n      <li className=\"list-group-item threads-list-item\">\n        <div className=\"threads-list-item-top-row\">\n          {showOptions && (\n            <div className=\"threads-list-item-col-icon\">\n              <span className=\"threads-list-icon ui-preview-img\"></span>\n            </div>\n          )}\n          <div className=\"threads-list-item-col-title\">\n            <span className=\"threads-list-item-title\">\n              <UIPreviewText width=\"40\" /> <UIPreviewText width=\"120\" />{\" \"}\n              <UIPreviewText width=\"80\" />\n            </span>\n            <span className=\"threads-list-item-title-sm\">\n              <UIPreviewText width=\"40\" /> <UIPreviewText width=\"120\" />{\" \"}\n              <UIPreviewText width=\"80\" />\n            </span>\n          </div>\n        </div>\n        <div className=\"threads-list-item-bottom-row\">\n          <div className=\"threads-list-item-col-category\">\n            <UIPreviewText width=\"75\" />\n          </div>\n          <div className=\"threads-list-item-col-replies\">\n            <UIPreviewText width=\"40\" />\n          </div>\n          <div className=\"threads-list-item-col-last-poster\">\n            <span className=\"threads-list-item-last-poster\">\n              <Avatar size={32} />\n            </span>\n          </div>\n          <div className=\"threads-list-item-col-last-activity\">\n            <span className=\"threads-list-item-last-activity\">\n              <UIPreviewText width=\"60\" />\n            </span>\n          </div>\n        </div>\n      </li>\n    </ul>\n  </div>\n)\n\nexport default ThreadsListLoader\n","import React from \"react\"\n\nconst ThreadsListUpdatePrompt = ({ threads, onClick }) => (\n  <li className=\"list-group-item threads-list-update-prompt\">\n    <button\n      type=\"button\"\n      className=\"btn btn-block threads-list-update-prompt-btn\"\n      onClick={onClick}\n    >\n      <span className=\"material-icon\">cached</span>\n      <span className=\"threads-list-update-prompt-message\">\n        {interpolate(\n          ngettext(\n            \"There is %(threads)s new or updated thread. Click here to show it.\",\n            \"There are %(threads)s new or updated threads. Click here to show them.\",\n            threads\n          ),\n          { threads },\n          true\n        )}\n      </span>\n    </button>\n  </li>\n)\n\nexport default ThreadsListUpdatePrompt\n","import ThreadsList from \"./ThreadsList\"\n\nexport default ThreadsList\n","import React from \"react\"\nimport ThreadsListEmpty from \"./ThreadsListEmpty\"\nimport ThreadsListItem from \"./ThreadsListItem\"\nimport ThreadsListLoader from \"./ThreadsListLoader\"\nimport ThreadsListUpdatePrompt from \"./ThreadsListUpdatePrompt\"\n\nconst ThreadsList = ({\n  list,\n  categories,\n  category,\n  threads,\n  busyThreads,\n  selection,\n  isLoaded,\n  showOptions,\n  updatedThreads,\n  applyUpdate,\n  emptyMessage,\n}) => {\n  if (!isLoaded) {\n    return <ThreadsListLoader showOptions={showOptions} />\n  }\n\n  return (\n    <div className=\"threads-list\">\n      {threads.length > 0 ? (\n        <ul className=\"list-group\">\n          {updatedThreads > 0 && (\n            <ThreadsListUpdatePrompt\n              threads={updatedThreads}\n              onClick={applyUpdate}\n            />\n          )}\n          {threads.map((thread) => (\n            <ThreadsListItem\n              key={thread.id}\n              activeCategory={category}\n              categories={categories}\n              thread={thread}\n              showOptions={showOptions}\n              showSubscription={showOptions && list.type === \"subscribed\"}\n              isBusy={busyThreads.indexOf(thread.id) >= 0}\n              isSelected={selection.indexOf(thread.id) >= 0}\n            />\n          ))}\n        </ul>\n      ) : (\n        <ul className=\"list-group\">\n          {updatedThreads > 0 && (\n            <ThreadsListUpdatePrompt\n              threads={updatedThreads}\n              onClick={applyUpdate}\n            />\n          )}\n          <ThreadsListEmpty\n            category={category}\n            list={list}\n            message={emptyMessage}\n          />\n        </ul>\n      )}\n    </div>\n  )\n}\n\nexport default ThreadsList\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport {\n  compareGlobalWeight,\n  compareWeight,\n} from \"misago/components/threads/compare\"\nimport Container from \"misago/components/threads/container\"\nimport {\n  diffThreads,\n  getModerationActions,\n  getPageTitle,\n  getTitle,\n} from \"misago/components/threads/utils\"\nimport ThreadsList from \"misago/components/ThreadsList\"\nimport WithDropdown from \"misago/components/with-dropdown\"\nimport misago from \"misago/index\"\nimport * as select from \"misago/reducers/selection\"\nimport { append, deleteThread, hydrate, patch } from \"misago/reducers/threads\"\nimport ajax from \"misago/services/ajax\"\nimport polls from \"misago/services/polls\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\nimport title from \"misago/services/page-title\"\nimport * as sets from \"misago/utils/sets\"\nimport {\n  PageHeaderHTMLMessage,\n  PageHeaderMessage,\n  PageHeaderPlain,\n} from \"../PageHeader\"\n\nexport default class extends WithDropdown {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isMounted: true,\n\n      isLoaded: false,\n      isBusy: false,\n\n      diff: {\n        results: [],\n      },\n\n      moderation: [],\n      busyThreads: [],\n\n      dropdown: false,\n      subcategories: [],\n\n      next: 0,\n    }\n\n    let category = this.getCategory()\n\n    if (misago.has(\"THREADS\")) {\n      this.initWithPreloadedData(category, misago.get(\"THREADS\"))\n    } else {\n      this.initWithoutPreloadedData(category)\n    }\n  }\n\n  getCategory() {\n    if (!this.props.route.category.special_role) {\n      return this.props.route.category.id\n    } else {\n      return null\n    }\n  }\n\n  initWithPreloadedData(category, data) {\n    this.state = Object.assign(this.state, {\n      moderation: getModerationActions(data.results),\n      subcategories: data.subcategories,\n      next: data.next,\n    })\n\n    this.startPolling(category)\n  }\n\n  initWithoutPreloadedData(category) {\n    this.loadThreads(category)\n  }\n\n  loadThreads(category, next = 0) {\n    ajax\n      .get(\n        this.props.options.api,\n        {\n          category: category,\n          list: this.props.route.list.type,\n          start: next || 0,\n        },\n        \"threads\"\n      )\n      .then(\n        (data) => {\n          if (!this.state.isMounted) {\n            // user changed route before loading completion\n            return\n          }\n\n          if (next === 0) {\n            store.dispatch(hydrate(data.results))\n          } else {\n            store.dispatch(append(data.results, this.getSorting()))\n          }\n\n          this.setState({\n            isLoaded: true,\n            isBusy: false,\n\n            moderation: getModerationActions(store.getState().threads),\n\n            subcategories: data.subcategories,\n\n            next: data.next,\n          })\n\n          this.startPolling(category)\n        },\n        (rejection) => {\n          snackbar.apiError(rejection)\n        }\n      )\n  }\n\n  startPolling(category) {\n    polls.start({\n      poll: \"threads\",\n      url: this.props.options.api,\n      data: {\n        category: category,\n        list: this.props.route.list.type,\n      },\n      frequency: 120 * 1000,\n      update: this.pollResponse,\n    })\n  }\n\n  componentDidMount() {\n    this.setPageTitle()\n\n    if (misago.has(\"THREADS\")) {\n      // unlike in other components, routes are root components for threads\n      // so we can't dispatch store action from constructor\n      store.dispatch(hydrate(misago.pop(\"THREADS\").results))\n\n      this.setState({\n        isLoaded: true,\n      })\n    }\n\n    store.dispatch(select.none())\n  }\n\n  componentWillUnmount() {\n    this.state.isMounted = false\n    polls.stop(\"threads\")\n  }\n\n  getTitle() {\n    if (this.props.options.title) {\n      return this.props.options.title\n    }\n\n    return getTitle(this.props.route)\n  }\n\n  setPageTitle() {\n    if (this.props.route.category.level || !misago.get(\"THREADS_ON_INDEX\")) {\n      title.set(getPageTitle(this.props.route))\n    } else if (this.props.options.title) {\n      title.set(this.props.options.title)\n    } else {\n      if (misago.get(\"SETTINGS\").index_title) {\n        document.title = misago.get(\"SETTINGS\").index_title\n      } else {\n        document.title = misago.get(\"SETTINGS\").forum_name\n      }\n    }\n  }\n\n  getSorting() {\n    if (this.props.route.category.level) {\n      return compareWeight\n    } else {\n      return compareGlobalWeight\n    }\n  }\n\n  // AJAX\n\n  loadMore = () => {\n    this.setState({\n      isBusy: true,\n    })\n\n    this.loadThreads(this.getCategory(), this.state.next)\n  }\n\n  pollResponse = (data) => {\n    this.setState({\n      diff: Object.assign({}, data, {\n        results: diffThreads(this.props.threads, data.results),\n      }),\n    })\n  }\n\n  addThreads = (threads) => {\n    store.dispatch(append(threads, this.getSorting()))\n  }\n\n  applyDiff = () => {\n    this.addThreads(this.state.diff.results)\n\n    this.setState(\n      Object.assign({}, this.state.diff, {\n        moderation: getModerationActions(store.getState().threads),\n\n        diff: {\n          results: [],\n        },\n      })\n    )\n  }\n\n  // Thread state utils\n\n  freezeThread = (thread) => {\n    this.setState(function (currentState) {\n      return {\n        busyThreads: sets.toggle(currentState.busyThreads, thread),\n      }\n    })\n  }\n\n  updateThread = (thread) => {\n    store.dispatch(patch(thread, thread, this.getSorting()))\n  }\n\n  deleteThread = (thread) => {\n    store.dispatch(deleteThread(thread))\n  }\n\n  getMoreButton() {\n    if (!this.state.next) return null\n\n    return (\n      <div className=\"pager-more\">\n        <Button\n          className=\"btn btn-default btn-outline\"\n          loading={this.state.isBusy || this.state.busyThreads.length}\n          onClick={this.loadMore}\n        >\n          {gettext(\"Show more\")}\n        </Button>\n      </div>\n    )\n  }\n\n  getClassName() {\n    let className = \"page page-threads\"\n    className += \" page-threads-\" + this.props.route.list.type\n    if (isIndex(this.props)) {\n      className += \" page-threads-index\"\n    }\n    if (this.props.route.category.css_class) {\n      className += \" page-threads-\" + this.props.route.category.css_class\n    }\n    return className\n  }\n\n  render() {\n    const root = this.props.route.categories[0]\n    const { category, list } = this.props.route\n    const specialRole = category.special_role\n\n    return (\n      <div className={this.getClassName()}>\n        {specialRole == \"root_category\" &&\n          misago.get(\"THREADS_ON_INDEX\") &&\n          misago.get(\"SETTINGS\").index_header && (\n            <PageHeaderPlain\n              header={misago.get(\"SETTINGS\").index_header}\n              message={\n                category.description && (\n                  <PageHeaderHTMLMessage message={category.description.html} />\n                )\n              }\n              styleName=\"forum-index\"\n            />\n          )}\n        {specialRole == \"root_category\" && !misago.get(\"THREADS_ON_INDEX\") && (\n          <PageHeaderPlain header={gettext(\"Threads\")} styleName=\"threads\" />\n        )}\n        {specialRole == \"private_threads\" && (\n          <PageHeaderPlain\n            header={this.props.options.title}\n            message={\n              this.props.options.pageLead && (\n                <PageHeaderMessage>\n                  <p>{this.props.options.pageLead}</p>\n                </PageHeaderMessage>\n              )\n            }\n            styleName=\"private-threads\"\n          />\n        )}\n        {!specialRole && (\n          <PageHeaderPlain\n            header={category.name}\n            message={\n              category.description && (\n                <PageHeaderHTMLMessage message={category.description.html} />\n              )\n            }\n            styleName={category.css_class || \"category-threads\"}\n          />\n        )}\n        <Container\n          api={this.props.options.api}\n          root={root}\n          route={this.props.route}\n          user={this.props.user}\n          pageLead={this.props.options.pageLead}\n          threads={this.props.threads}\n          threadsCount={this.state.count}\n          moderation={this.state.moderation}\n          selection={this.props.selection}\n          busyThreads={this.state.busyThreads}\n          addThreads={this.addThreads}\n          startThread={this.props.options.startThread}\n          freezeThread={this.freezeThread}\n          deleteThread={this.deleteThread}\n          updateThread={this.updateThread}\n          isLoaded={this.state.isLoaded}\n          isBusy={this.state.isBusy}\n        >\n          <ThreadsList\n            category={category}\n            categories={this.props.route.categoriesMap}\n            list={list}\n            selection={this.props.selection}\n            threads={this.props.threads}\n            updatedThreads={this.state.diff.results.length}\n            applyUpdate={this.applyDiff}\n            showOptions={!!this.props.user.id}\n            isLoaded={this.state.isLoaded}\n            busyThreads={this.state.busyThreads}\n            emptyMessage={this.props.options.emptyMessage}\n          />\n          {this.getMoreButton()}\n        </Container>\n      </div>\n    )\n  }\n}\n\nfunction isIndex(props) {\n  if (props.route.category.level || !misago.get(\"THREADS_ON_INDEX\"))\n    return false\n  if (props.options.title) return false\n\n  return true\n}\n","import { paths } from \"misago/components/threads/root\"\nimport misago from \"misago/index\"\nimport mount from \"misago/utils/routed-component\"\n\nconst PRIVATE_THREADS_LIST = \"misago:private-threads\"\n\nexport default function initializer(context) {\n  if (context.has(\"THREADS\") && context.has(\"CATEGORIES\")) {\n    mount({\n      paths: paths(context.get(\"user\"), getListOptions(context)),\n    })\n  }\n}\n\nexport function getListOptions(context) {\n  const currentLink = context.get(\"CURRENT_LINK\")\n  if (\n    currentLink.substr(0, PRIVATE_THREADS_LIST.length) === PRIVATE_THREADS_LIST\n  ) {\n    return {\n      api: context.get(\"PRIVATE_THREADS_API\"),\n      startThread: {\n        mode: \"START_PRIVATE\",\n        submit: misago.get(\"PRIVATE_THREADS_API\"),\n      },\n      title: gettext(\"Private threads\"),\n      pageLead: gettext(\n        \"Private threads are threads which only those that started them and those they have invited may see and participate in.\"\n      ),\n      emptyMessage: gettext(\"You aren't participating in any private threads.\"),\n    }\n  }\n\n  return {\n    api: context.get(\"THREADS_API\"),\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:threads\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import { connect } from \"react-redux\"\nimport Route from \"misago/components/threads/route\"\nimport misago from \"misago/index\"\n\nexport function getSelect(options) {\n  return function (store) {\n    return {\n      options: options,\n      selection: store.selection,\n      threads: store.threads,\n      tick: store.tick.tick,\n      user: store.auth.user,\n    }\n  }\n}\n\nexport function getLists(user) {\n  let lists = [\n    {\n      type: \"all\",\n      path: \"\",\n      name: gettext(\"All\"),\n      longName: gettext(\"All threads\"),\n    },\n  ]\n\n  if (user.id) {\n    lists.push({\n      type: \"my\",\n      path: \"my/\",\n      name: gettext(\"My\"),\n      longName: gettext(\"My threads\"),\n    })\n    lists.push({\n      type: \"new\",\n      path: \"new/\",\n      name: gettext(\"New\"),\n      longName: gettext(\"New threads\"),\n    })\n    lists.push({\n      type: \"unread\",\n      path: \"unread/\",\n      name: gettext(\"Unread\"),\n      longName: gettext(\"Unread threads\"),\n    })\n    lists.push({\n      type: \"subscribed\",\n      path: \"subscribed/\",\n      name: gettext(\"Subscribed\"),\n      longName: gettext(\"Subscribed threads\"),\n    })\n\n    if (user.acl.can_see_unapproved_content_lists) {\n      lists.push({\n        type: \"unapproved\",\n        path: \"unapproved/\",\n        name: gettext(\"Unapproved\"),\n        longName: gettext(\"Unapproved content\"),\n      })\n    }\n  }\n\n  return lists\n}\n\nexport function paths(user, mode) {\n  let lists = getLists(user)\n  let routes = []\n  let categoriesMap = {}\n\n  misago.get(\"CATEGORIES\").forEach(function (category) {\n    lists.forEach(function (list) {\n      categoriesMap[category.id] = category\n\n      routes.push({\n        path: category.url.index + list.path,\n        component: connect(getSelect(mode))(Route),\n\n        categories: misago.get(\"CATEGORIES\"),\n        categoriesMap,\n        category,\n\n        lists,\n        list,\n      })\n    })\n  })\n\n  return routes\n}\n","const MAX_RESULTS = 5\n\nexport default function (data) {\n  const filtered = data.filter((section) => {\n    return section.results.count > 0\n  })\n\n  return filtered.map((section) => {\n    return Object.assign({}, section, {\n      count: section.results.count,\n      results: section.results.results.slice(0, MAX_RESULTS),\n    })\n  })\n}\n","export const HEADER = \"HEADER\"\nexport const RESULT = \"RESULT\"\nexport const FOOTER = \"FOOTER\"\n","import React from \"react\"\n\nexport default function ({ value, onChange }) {\n  return (\n    <input\n      aria-haspopup=\"true\"\n      aria-expanded=\"false\"\n      aria-controls=\"dropdown-menu dropdown-search-results\"\n      autoComplete=\"off\"\n      className=\"form-control\"\n      value={value}\n      onChange={onChange}\n      placeholder={gettext(\"Search\")}\n      role=\"combobox\"\n      type=\"text\"\n    />\n  )\n}\n","import React from \"react\"\nimport Input from \"./input\"\n\nexport default function ({ children, onChange, query }) {\n  return (\n    <ul className=\"dropdown-menu dropdown-search-results\" role=\"menu\">\n      <li className=\"form-group\">\n        <Input value={query} onChange={onChange} />\n      </li>\n      {children}\n    </ul>\n  )\n}\n","import React from \"react\"\n\nexport default function () {\n  return (\n    <li className=\"dropdown-search-message\">\n      {gettext(\"Search returned no results.\")}\n    </li>\n  )\n}\n","import React from \"react\"\nimport Loader from \"misago/components/loader\"\n\nexport default function ({ message }) {\n  return (\n    <li className=\"dropdown-search-loader\">\n      <Loader />\n    </li>\n  )\n}\n","import React from \"react\"\n\nexport default function ({ provider, query }) {\n  const url = provider.url + \"?q=\" + encodeURI(query)\n  const label = ngettext(\n    'See full \"%(provider)s\" results page with %(count)s result.',\n    'See full \"%(provider)s\" results page with %(count)s results.',\n    provider.count\n  )\n\n  return (\n    <li className=\"dropdown-search-footer\">\n      <a href={url}>\n        {interpolate(\n          label,\n          {\n            count: provider.count,\n            provider: provider.name,\n          },\n          true\n        )}\n      </a>\n    </li>\n  )\n}\n","import React from \"react\"\n\nexport default function ({ provider }) {\n  return <li className=\"dropdown-search-header\">{provider.name}</li>\n}\n","import moment from \"moment\"\nimport React from \"react\"\n\nexport default function ({ result }) {\n  const { poster, thread } = result\n  const footer = gettext(\n    \"Posted by %(poster)s on %(posted_on)s in %(category)s.\"\n  )\n\n  return (\n    <li>\n      <a href={result.url.index} className=\"dropdown-search-thread\">\n        <h5>{thread.title}</h5>\n        <small className=\"dropdown-search-post-content\">\n          {$(result.content).text()}\n        </small>\n        <small className=\"dropdown-search-post-footer\">\n          {interpolate(\n            footer,\n            {\n              category: result.category.name,\n              posted_on: moment(result.posted_on).format(\"LL\"),\n              poster: result.poster_name,\n            },\n            true\n          )}\n        </small>\n      </a>\n    </li>\n  )\n}\n","import moment from \"moment\"\nimport React from \"react\"\nimport Avatar from \"misago/components/avatar\"\n\nexport default function ({ result }) {\n  const { rank } = result\n\n  const detail = gettext(\"%(title)s, joined on %(joined_on)s\")\n  const title = result.title || rank.title || rank.name\n\n  return (\n    <li>\n      <a href={result.url} className=\"dropdown-search-user\">\n        <div className=\"media\">\n          <div className=\"media-left\">\n            <Avatar size={38} user={result} />\n          </div>\n          <div className=\"media-body\">\n            <h5 className=\"media-heading\">{result.username}</h5>\n            <small>\n              {interpolate(\n                detail,\n                {\n                  title,\n                  joined_on: moment(result.joined_on).format(\"LL\"),\n                },\n                true\n              )}\n            </small>\n          </div>\n        </div>\n      </a>\n    </li>\n  )\n}\n","import React from \"react\"\nimport Thread from \"./thread\"\nimport User from \"./user\"\n\nexport default function ({ provider, result }) {\n  if (provider.id === \"threads\") {\n    return <Thread result={result} />\n  }\n\n  return <User result={result} />\n}\n","import React from \"react\"\nimport { HEADER, FOOTER } from \"../constants\"\nimport Footer from \"./footer\"\nimport Header from \"./header\"\nimport Result from \"./result\"\n\nexport default function ({ provider, result, type, query }) {\n  if (type === HEADER) {\n    return <Header provider={provider} />\n  } else if (type === FOOTER) {\n    return <Footer provider={provider} query={query} />\n  }\n\n  return <Result provider={provider} result={result} />\n}\n","import { HEADER, RESULT, FOOTER } from \"./constants\"\n\nexport default function (results) {\n  const flatlist = []\n  flattenProviders(results, flatlist)\n  return flatlist\n}\n\nfunction flattenProviders(results, flatlist) {\n  const arrayLength = results.length\n  for (var i = 0; i < arrayLength; i++) {\n    const provider = results[i]\n\n    flatlist.push({\n      provider,\n      type: HEADER,\n    })\n\n    flattenProvider(provider, flatlist)\n  }\n}\n\nfunction flattenProvider(provider, flatlist) {\n  const arrayLength = provider.results.length\n  for (var i = 0; i < arrayLength; i++) {\n    const result = provider.results[i]\n    flatlist.push({\n      provider,\n      result,\n      type: RESULT,\n    })\n  }\n\n  flatlist.push({\n    provider,\n    type: FOOTER,\n  })\n}\n","import React from \"react\"\nimport { RESULT } from \"./constants\"\nimport DropdownMenu from \"./dropdown-menu\"\nimport Empty from \"./empty\"\nimport Loader from \"./loader\"\nimport Result from \"./result\"\nimport flattenResults from \"./flatten-results\"\n\nexport default function ({ isLoading, onChange, results, query }) {\n  if (!query.trim().length) {\n    return <DropdownMenu onChange={onChange} query={query} />\n  }\n\n  if (results.length) {\n    const flatResults = flattenResults(results)\n\n    return (\n      <DropdownMenu onChange={onChange} query={query}>\n        {flatResults.map((props) => {\n          const { type, provider, result } = props\n\n          if (type === RESULT) {\n            return (\n              <Result\n                key={[provider.id, type, result.id].join(\"_\")}\n                {...props}\n              />\n            )\n          }\n\n          return (\n            <Result\n              key={[provider.id, type].join(\"_\")}\n              query={query}\n              {...props}\n            />\n          )\n        })}\n      </DropdownMenu>\n    )\n  } else if (isLoading) {\n    return (\n      <DropdownMenu onChange={onChange} query={query}>\n        <Loader />\n      </DropdownMenu>\n    )\n  }\n\n  return (\n    <DropdownMenu onChange={onChange} query={query}>\n      <Empty />\n    </DropdownMenu>\n  )\n}\n","import React from \"react\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport misago from \"misago\"\nimport cleanResults from \"./clean-results\"\nimport Dropdown from \"./dropdown\"\n\nexport default class extends React.Component {\n  constructor() {\n    super()\n\n    this.state = {\n      isLoading: false,\n      isOpen: false,\n      query: \"\",\n      results: [],\n    }\n\n    this.intervalId = null\n  }\n\n  componentDidMount() {\n    document.addEventListener(\"mousedown\", this.onDocumentMouseDown)\n    document.addEventListener(\"keydown\", this.onEscape)\n  }\n\n  componentWillUnmount() {\n    document.removeEventListener(\"mousedown\", this.onDocumentMouseDown)\n    document.removeEventListener(\"keydown\", this.onEscape)\n  }\n\n  onToggle = (ev) => {\n    this.setState((prevState, props) => {\n      if (!prevState.isOpen) {\n        window.setTimeout(() => {\n          this.container.querySelector(\"input\").focus()\n        }, 100)\n      }\n\n      return { isOpen: !prevState.isOpen }\n    })\n  }\n\n  onDocumentMouseDown = (ev) => {\n    let closeResults = true\n    let node = ev.target\n\n    while (node !== null && node !== document) {\n      if (node === this.container) {\n        closeResults = false\n        return\n      }\n\n      node = node.parentNode\n    }\n\n    if (closeResults) {\n      this.setState({ isOpen: false })\n    }\n  }\n\n  onEscape = (ev) => {\n    if (ev.key === \"Escape\") {\n      this.setState({ isOpen: false })\n    }\n  }\n\n  onChange = (ev) => {\n    const query = ev.target.value\n\n    this.setState({ query })\n    this.loadResults(query.trim())\n  }\n\n  loadResults(query) {\n    if (!query.length) return\n\n    const delay = 300 + Math.random() * 300\n\n    if (this.intervalId) {\n      window.clearTimeout(this.intervalId)\n    }\n\n    this.setState({ isLoading: true })\n\n    this.intervalId = window.setTimeout(() => {\n      ajax.get(misago.get(\"SEARCH_API\"), { q: query }).then(\n        (data) => {\n          this.setState({\n            intervalId: null,\n            isLoading: false,\n            results: cleanResults(data),\n          })\n        },\n        (rejection) => {\n          snackbar.apiError(rejection)\n\n          this.setState({\n            intervalId: null,\n            isLoading: false,\n            results: [],\n          })\n        }\n      )\n    }, delay)\n  }\n\n  render() {\n    let className = \"navbar-search dropdown\"\n    if (this.state.isOpen) className += \" open\"\n\n    return (\n      <div\n        className={className}\n        ref={(container) => (this.container = container)}\n      >\n        <a\n          aria-haspopup=\"true\"\n          aria-expanded=\"false\"\n          className=\"navbar-icon\"\n          data-toggle=\"dropdown\"\n          href={misago.get(\"SEARCH_URL\")}\n          onClick={this.onToggle}\n        >\n          <i className=\"material-icon\">search</i>\n        </a>\n        <Dropdown\n          isLoading={this.state.isLoading}\n          onChange={this.onChange}\n          results={this.state.results}\n          query={this.state.query}\n        />\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport zxcvbn from \"misago/services/zxcvbn\"\n\nexport const STYLES = [\n  \"progress-bar-danger\",\n  \"progress-bar-warning\",\n  \"progress-bar-warning\",\n  \"progress-bar-primary\",\n  \"progress-bar-success\",\n]\n\nexport const LABELS = [\n  gettext(\"Entered password is very weak.\"),\n  gettext(\"Entered password is weak.\"),\n  gettext(\"Entered password is average.\"),\n  gettext(\"Entered password is strong.\"),\n  gettext(\"Entered password is very strong.\"),\n]\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this._score = 0\n    this._password = null\n    this._inputs = []\n\n    this.state = {\n      loaded: false,\n    }\n  }\n\n  componentDidMount() {\n    zxcvbn.load().then(() => {\n      this.setState({ loaded: true })\n    })\n  }\n\n  getScore(password, inputs) {\n    let cacheStale = false\n\n    if (password !== this._password) {\n      cacheStale = true\n    }\n\n    if (inputs.length !== this._inputs.length) {\n      cacheStale = true\n    } else {\n      inputs.map((value, i) => {\n        if (value.trim() !== this._inputs[i]) {\n          cacheStale = true\n        }\n      })\n    }\n\n    if (cacheStale) {\n      this._score = zxcvbn.scorePassword(password, inputs)\n      this._password = password\n      this._inputs = inputs.map(function (value) {\n        return value.trim()\n      })\n    }\n\n    return this._score\n  }\n\n  render() {\n    if (!this.state.loaded) return null\n\n    let score = this.getScore(this.props.password, this.props.inputs)\n\n    return (\n      <div className=\"help-block password-strength\">\n        <div className=\"progress\">\n          <div\n            className={\"progress-bar \" + STYLES[score]}\n            style={{ width: 20 + 20 * score + \"%\" }}\n            role=\"progress-bar\"\n            aria-valuenow={score}\n            aria-valuemin=\"0\"\n            aria-valuemax=\"4\"\n          >\n            <span className=\"sr-only\">{LABELS[score]}</span>\n          </div>\n        </div>\n        <p className=\"text-small\">{LABELS[score]}</p>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Button from \"misago/components/button\"\nimport Form from \"misago/components/form\"\nimport FormGroup from \"misago/components/form-group\"\nimport PasswordStrength from \"misago/components/password-strength\"\nimport RegisterLegalFootnote from \"misago/components/RegisterLegalFootnote\"\nimport StartSocialAuth from \"misago/components/StartSocialAuth\"\nimport misago from \"misago\"\nimport ajax from \"misago/services/ajax\"\nimport auth from \"misago/services/auth\"\nimport captcha from \"misago/services/captcha\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\nimport showBannedPage from \"misago/utils/banned-page\"\nimport * as validators from \"misago/utils/validators\"\n\nexport class RegisterForm extends Form {\n  constructor(props) {\n    super(props)\n\n    const { username, password } = this.props.criteria\n\n    let passwordMinLength = 0\n    password.forEach((item) => {\n      if (item.name === \"MinimumLengthValidator\") {\n        passwordMinLength = item.min_length\n      }\n    })\n\n    const formValidators = {\n      username: [\n        validators.usernameContent(),\n        validators.usernameMinLength(username.min_length),\n        validators.usernameMaxLength(username.max_length),\n      ],\n      email: [validators.email()],\n      password: [validators.passwordMinLength(passwordMinLength)],\n      captcha: captcha.validator(),\n    }\n\n    if (!!misago.get(\"TERMS_OF_SERVICE_ID\")) {\n      formValidators.termsOfService = [validators.requiredTermsOfService()]\n    }\n\n    if (!!misago.get(\"PRIVACY_POLICY_ID\")) {\n      formValidators.privacyPolicy = [validators.requiredPrivacyPolicy()]\n    }\n\n    this.state = {\n      isLoading: false,\n\n      username: \"\",\n      email: \"\",\n      password: \"\",\n      captcha: \"\",\n\n      termsOfService: null,\n      privacyPolicy: null,\n\n      validators: formValidators,\n      errors: {},\n    }\n  }\n\n  clean() {\n    if (this.isValid()) {\n      return true\n    } else {\n      snackbar.error(gettext(\"Form contains errors.\"))\n      this.setState({\n        errors: this.validate(),\n      })\n      return false\n    }\n  }\n\n  send() {\n    return ajax.post(misago.get(\"USERS_API\"), {\n      username: this.state.username,\n      email: this.state.email,\n      password: this.state.password,\n      captcha: this.state.captcha,\n      terms_of_service: this.state.termsOfService,\n      privacy_policy: this.state.privacyPolicy,\n    })\n  }\n\n  handleSuccess(apiResponse) {\n    this.props.callback(apiResponse)\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      this.setState({\n        errors: Object.assign({}, this.state.errors, rejection),\n      })\n\n      if (rejection.__all__ && rejection.__all__.length > 0) {\n        snackbar.error(rejection.__all__[0])\n      } else {\n        snackbar.error(gettext(\"Form contains errors.\"))\n      }\n    } else if (rejection.status === 403 && rejection.ban) {\n      showBannedPage(rejection.ban)\n      modal.hide()\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  handlePrivacyPolicyChange = (event) => {\n    const value = event.target.value\n    this.handleToggleAgreement(\"privacyPolicy\", value)\n  }\n\n  handleTermsOfServiceChange = (event) => {\n    const value = event.target.value\n    this.handleToggleAgreement(\"termsOfService\", value)\n  }\n\n  handleToggleAgreement = (agreement, value) => {\n    this.setState((prevState, props) => {\n      if (prevState[agreement] === null) {\n        const errors = { ...prevState.errors, [agreement]: null }\n        return { errors, [agreement]: value }\n      }\n\n      const validator = this.state.validators[agreement][0]\n      const errors = { ...prevState.errors, [agreement]: [validator(null)] }\n      return { errors, [agreement]: null }\n    })\n  }\n\n  render() {\n    return (\n      <div className=\"modal-dialog modal-register\" role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              type=\"button\"\n              className=\"close\"\n              data-dismiss=\"modal\"\n              aria-label={gettext(\"Close\")}\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Register\")}</h4>\n          </div>\n          <form onSubmit={this.handleSubmit}>\n            <input type=\"type\" style={{ display: \"none\" }} />\n            <input type=\"password\" style={{ display: \"none\" }} />\n            <div className=\"modal-body\">\n              <StartSocialAuth\n                buttonClassName=\"col-xs-12 col-sm-6\"\n                buttonLabel={gettext(\"Join with %(site)s\")}\n                formLabel={gettext(\"Or create forum account:\")}\n              />\n\n              <FormGroup\n                label={gettext(\"Username\")}\n                for=\"id_username\"\n                validation={this.state.errors.username}\n              >\n                <input\n                  type=\"text\"\n                  id=\"id_username\"\n                  className=\"form-control\"\n                  aria-describedby=\"id_username_status\"\n                  disabled={this.state.isLoading}\n                  onChange={this.bindInput(\"username\")}\n                  value={this.state.username}\n                />\n              </FormGroup>\n\n              <FormGroup\n                label={gettext(\"E-mail\")}\n                for=\"id_email\"\n                validation={this.state.errors.email}\n              >\n                <input\n                  type=\"text\"\n                  id=\"id_email\"\n                  className=\"form-control\"\n                  aria-describedby=\"id_email_status\"\n                  disabled={this.state.isLoading}\n                  onChange={this.bindInput(\"email\")}\n                  value={this.state.email}\n                />\n              </FormGroup>\n\n              <FormGroup\n                label={gettext(\"Password\")}\n                for=\"id_password\"\n                validation={this.state.errors.password}\n                extra={\n                  <PasswordStrength\n                    password={this.state.password}\n                    inputs={[this.state.username, this.state.email]}\n                  />\n                }\n              >\n                <input\n                  type=\"password\"\n                  id=\"id_password\"\n                  className=\"form-control\"\n                  aria-describedby=\"id_password_status\"\n                  disabled={this.state.isLoading}\n                  onChange={this.bindInput(\"password\")}\n                  value={this.state.password}\n                />\n              </FormGroup>\n\n              {captcha.component({\n                form: this,\n              })}\n\n              <RegisterLegalFootnote\n                errors={this.state.errors}\n                privacyPolicy={this.state.privacyPolicy}\n                termsOfService={this.state.termsOfService}\n                onPrivacyPolicyChange={this.handlePrivacyPolicyChange}\n                onTermsOfServiceChange={this.handleTermsOfServiceChange}\n              />\n            </div>\n            <div className=\"modal-footer\">\n              <button\n                className=\"btn btn-default\"\n                data-dismiss=\"modal\"\n                disabled={this.state.isLoading}\n                type=\"button\"\n              >\n                {gettext(\"Cancel\")}\n              </button>\n              <Button className=\"btn-primary\" loading={this.state.isLoading}>\n                {gettext(\"Register account\")}\n              </Button>\n            </div>\n          </form>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport class RegisterComplete extends React.Component {\n  getLead() {\n    if (this.props.activation === \"user\") {\n      return gettext(\n        \"%(username)s, your account has been created but you need to activate it before you will be able to sign in.\"\n      )\n    } else if (this.props.activation === \"admin\") {\n      return gettext(\n        \"%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in.\"\n      )\n    }\n  }\n\n  getSubscript() {\n    if (this.props.activation === \"user\") {\n      return gettext(\n        \"We have sent an e-mail to %(email)s with link that you have to click to activate your account.\"\n      )\n    } else if (this.props.activation === \"admin\") {\n      return gettext(\n        \"We will send an e-mail to %(email)s when this takes place.\"\n      )\n    }\n  }\n\n  render() {\n    return (\n      <div\n        className=\"modal-dialog modal-message modal-register\"\n        role=\"document\"\n      >\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              type=\"button\"\n              className=\"close\"\n              data-dismiss=\"modal\"\n              aria-label={gettext(\"Close\")}\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Registration complete\")}</h4>\n          </div>\n          <div className=\"modal-body\">\n            <div className=\"message-icon\">\n              <span className=\"material-icon\">info_outline</span>\n            </div>\n            <div className=\"message-body\">\n              <p className=\"lead\">\n                {interpolate(\n                  this.getLead(),\n                  { username: this.props.username },\n                  true\n                )}\n              </p>\n              <p>\n                {interpolate(\n                  this.getSubscript(),\n                  { email: this.props.email },\n                  true\n                )}\n              </p>\n              <button\n                className=\"btn btn-default\"\n                data-dismiss=\"modal\"\n                type=\"button\"\n              >\n                {gettext(\"Ok\")}\n              </button>\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      complete: false,\n    }\n  }\n\n  completeRegistration = (apiResponse) => {\n    if (apiResponse.activation === \"active\") {\n      modal.hide()\n      auth.signIn(apiResponse)\n    } else {\n      this.setState({\n        complete: apiResponse,\n      })\n    }\n  }\n\n  render() {\n    if (this.state.complete) {\n      return (\n        <RegisterComplete\n          activation={this.state.complete.activation}\n          email={this.state.complete.email}\n          username={this.state.complete.username}\n        />\n      )\n    }\n\n    return <RegisterForm callback={this.completeRegistration} {...this.props} />\n  }\n}\n","import React from \"react\"\nimport Loader from \"misago/components/loader\"\nimport RegisterForm from \"misago/components/register.js\"\nimport ajax from \"misago/services/ajax\"\nimport captcha from \"misago/services/captcha\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n      isLoaded: false,\n\n      criteria: null,\n    }\n  }\n\n  showRegisterForm = () => {\n    if (misago.get(\"SETTINGS\").account_activation === \"closed\") {\n      snackbar.info(gettext(\"New registrations are currently disabled.\"))\n    } else if (this.state.isLoaded) {\n      modal.show(<RegisterForm criteria={this.state.criteria} />)\n    } else {\n      this.setState({ isLoading: true })\n\n      Promise.all([\n        captcha.load(),\n        ajax.get(misago.get(\"AUTH_CRITERIA_API\")),\n      ]).then(\n        (result) => {\n          this.setState({\n            isLoading: false,\n            isLoaded: true,\n            criteria: result[1],\n          })\n\n          modal.show(<RegisterForm criteria={result[1]} />)\n        },\n        () => {\n          this.setState({ isLoading: false })\n\n          snackbar.error(\n            gettext(\"Registration is currently unavailable due to an error.\")\n          )\n        }\n      )\n    }\n  }\n\n  getClassName() {\n    return this.props.className + (this.state.isLoading ? \" btn-loading\" : \"\")\n  }\n\n  render() {\n    return (\n      <button\n        className={\"btn \" + this.getClassName()}\n        disabled={this.state.isLoading}\n        onClick={this.showRegisterForm}\n        type=\"button\"\n      >\n        {gettext(\"Register\")}\n        {this.state.isLoading ? <Loader /> : null}\n      </button>\n    )\n  }\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport NavbarSearch from \"misago/components/navbar-search\"\nimport RegisterButton from \"misago/components/register-button\"\nimport SignInModal from \"misago/components/sign-in.js\"\nimport misago from \"misago\"\nimport dropdown from \"misago/services/mobile-navbar-dropdown\"\nimport modal from \"misago/services/modal\"\n\nexport class GuestMenu extends React.Component {\n  showSignInModal() {\n    modal.show(SignInModal)\n  }\n\n  render() {\n    const delegateAuth = misago.get(\"SETTINGS\").DELEGATE_AUTH\n  \n    return (\n      <ul\n        className=\"dropdown-menu user-dropdown dropdown-menu-right\"\n        role=\"menu\"\n      >\n        <li className=\"guest-preview\">\n          <h4>{gettext(\"You are browsing as guest.\")}</h4>\n          <p>\n            {gettext(\n              \"Sign in or register to start and participate in discussions.\"\n            )}\n          </p>\n          {delegateAuth ? (\n            <div className=\"row\">\n              <div className=\"col-xs-12\">\n                <a\n                  className=\"btn btn-default btn-sign-in btn-block\"\n                  href={misago.get(\"SETTINGS\").LOGIN_URL}\n                >\n                  {gettext(\"Sign in\")}\n                </a>\n              </div>\n            </div>\n          ) : (\n            <div className=\"row\">\n              <div className=\"col-xs-6\">\n                <button\n                  className=\"btn btn-default btn-sign-in btn-block\"\n                  onClick={this.showSignInModal}\n                  type=\"button\"\n                >\n                  {gettext(\"Sign in\")}\n                </button>\n              </div>\n              <div className=\"col-xs-6\">\n                <RegisterButton className=\"btn-primary btn-register btn-block\">\n                  {gettext(\"Register\")}\n                </RegisterButton>\n              </div>\n            </div>\n          )}\n        </li>\n      </ul>\n    )\n  }\n}\n\nexport class GuestNav extends GuestMenu {\n  render() {\n    if (misago.get(\"SETTINGS\").DELEGATE_AUTH)  {\n      return (\n        <div className=\"nav nav-guest\">\n          <a\n            className=\"btn navbar-btn btn-default btn-sign-in\"\n            href={misago.get(\"SETTINGS\").LOGIN_URL}\n          >\n            {gettext(\"Sign in\")}\n          </a>\n          <div className=\"navbar-left\">\n            <NavbarSearch />\n          </div>\n        </div>\n      )\n    }\n\n    return (\n      <div className=\"nav nav-guest\">\n        <button\n          className=\"btn navbar-btn btn-default btn-sign-in\"\n          onClick={this.showSignInModal}\n          type=\"button\"\n        >\n          {gettext(\"Sign in\")}\n        </button>\n        <RegisterButton className=\"navbar-btn btn-primary btn-register\">\n          {gettext(\"Register\")}\n        </RegisterButton>\n        <div className=\"navbar-left\">\n          <NavbarSearch />\n        </div>\n      </div>\n    )\n  }\n}\n\nexport class CompactGuestNav extends React.Component {\n  showGuestMenu() {\n    dropdown.show(GuestMenu)\n  }\n\n  render() {\n    return (\n      <button type=\"button\" onClick={this.showGuestMenu}>\n        <Avatar size=\"64\" />\n      </button>\n    )\n  }\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport Button from \"misago/components/button\"\nimport Loader from \"misago/components/loader\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n    }\n  }\n\n  callApi(avatarType) {\n    if (this.state.isLoading) {\n      return false\n    }\n\n    this.setState({\n      isLoading: true,\n    })\n\n    ajax\n      .post(this.props.user.api.avatar, {\n        avatar: avatarType,\n      })\n      .then(\n        (response) => {\n          this.setState({\n            isLoading: false,\n          })\n\n          snackbar.success(response.detail)\n          this.props.onComplete(response)\n        },\n        (rejection) => {\n          if (rejection.status === 400) {\n            snackbar.error(rejection.detail)\n            this.setState({\n              isLoading: false,\n            })\n          } else {\n            this.props.showError(rejection)\n          }\n        }\n      )\n  }\n\n  setGravatar = () => {\n    this.callApi(\"gravatar\")\n  }\n\n  setGenerated = () => {\n    this.callApi(\"generated\")\n  }\n\n  getGravatarButton() {\n    if (this.props.options.gravatar) {\n      return (\n        <Button\n          onClick={this.setGravatar}\n          disabled={this.state.isLoading}\n          className=\"btn-default btn-block btn-avatar-gravatar\"\n        >\n          {gettext(\"Download my Gravatar\")}\n        </Button>\n      )\n    } else {\n      return null\n    }\n  }\n\n  getCropButton() {\n    if (!this.props.options.crop_src) return null\n\n    return (\n      <Button\n        className=\"btn-default btn-block btn-avatar-crop\"\n        disabled={this.state.isLoading}\n        onClick={this.props.showCrop}\n      >\n        {gettext(\"Re-crop uploaded image\")}\n      </Button>\n    )\n  }\n\n  getUploadButton() {\n    if (!this.props.options.upload) return null\n\n    return (\n      <Button\n        className=\"btn-default btn-block btn-avatar-upload\"\n        disabled={this.state.isLoading}\n        onClick={this.props.showUpload}\n      >\n        {gettext(\"Upload new image\")}\n      </Button>\n    )\n  }\n\n  getGalleryButton() {\n    if (!this.props.options.galleries) return null\n\n    return (\n      <Button\n        className=\"btn-default btn-block btn-avatar-gallery\"\n        disabled={this.state.isLoading}\n        onClick={this.props.showGallery}\n      >\n        {gettext(\"Pick avatar from gallery\")}\n      </Button>\n    )\n  }\n\n  getAvatarPreview() {\n    let userPeview = {\n      id: this.props.user.id,\n      avatars: this.props.options.avatars,\n    }\n\n    if (this.state.isLoading) {\n      return (\n        <div className=\"avatar-preview preview-loading\">\n          <Avatar size=\"200\" user={userPeview} />\n          <Loader />\n        </div>\n      )\n    }\n\n    return (\n      <div className=\"avatar-preview\">\n        <Avatar size=\"200\" user={userPeview} />\n      </div>\n    )\n  }\n\n  render() {\n    return (\n      <div className=\"modal-body modal-avatar-index\">\n        <div className=\"row\">\n          <div className=\"col-md-5\">{this.getAvatarPreview()}</div>\n          <div className=\"col-md-7\">\n            {this.getGravatarButton()}\n\n            <Button\n              onClick={this.setGenerated}\n              disabled={this.state.isLoading}\n              className=\"btn-default btn-block btn-avatar-generate\"\n            >\n              {gettext(\"Generate my individual avatar\")}\n            </Button>\n\n            {this.getCropButton()}\n            {this.getUploadButton()}\n            {this.getGalleryButton()}\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport Button from \"misago/components/button\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isLoading: false,\n      deviceRatio: 1,\n    }\n  }\n\n  getAvatarSize() {\n    if (this.props.upload) {\n      return this.props.options.crop_tmp.size\n    } else {\n      return this.props.options.crop_src.size\n    }\n  }\n\n  getImagePath() {\n    if (this.props.upload) {\n      return this.props.dataUrl\n    } else {\n      return this.props.options.crop_src.url\n    }\n  }\n\n  componentDidMount() {\n    let cropit = $(\".crop-form\")\n    let cropperWidth = this.getAvatarSize()\n\n    const initialWidth = cropit.width()\n    while (initialWidth < cropperWidth) {\n      cropperWidth = cropperWidth / 2\n    }\n\n    const deviceRatio = this.getAvatarSize() / cropperWidth\n\n    cropit.width(cropperWidth)\n\n    cropit.cropit({\n      width: cropperWidth,\n      height: cropperWidth,\n      exportZoom: deviceRatio,\n      imageState: {\n        src: this.getImagePath(),\n      },\n      onImageLoaded: () => {\n        if (this.props.upload) {\n          // center uploaded image\n          let zoomLevel = cropit.cropit(\"zoom\")\n          let imageSize = cropit.cropit(\"imageSize\")\n\n          // is it wider than taller?\n          if (imageSize.width > imageSize.height) {\n            let displayedWidth = imageSize.width * zoomLevel\n            let offsetX = (displayedWidth - this.getAvatarSize()) / -2\n\n            cropit.cropit(\"offset\", {\n              x: offsetX,\n              y: 0,\n            })\n          } else if (imageSize.width < imageSize.height) {\n            let displayedHeight = imageSize.height * zoomLevel\n            let offsetY = (displayedHeight - this.getAvatarSize()) / -2\n\n            cropit.cropit(\"offset\", {\n              x: 0,\n              y: offsetY,\n            })\n          } else {\n            cropit.cropit(\"offset\", {\n              x: 0,\n              y: 0,\n            })\n          }\n        } else {\n          // use preserved crop\n          let crop = this.props.options.crop_src.crop\n\n          if (crop) {\n            cropit.cropit(\"zoom\", crop.zoom)\n            cropit.cropit(\"offset\", {\n              x: crop.x,\n              y: crop.y,\n            })\n          }\n        }\n      },\n    })\n  }\n\n  componentWillUnmount() {\n    $(\".crop-form\").cropit(\"disable\")\n  }\n\n  cropAvatar = () => {\n    if (this.state.isLoading) {\n      return false\n    }\n\n    this.setState({\n      isLoading: true,\n    })\n\n    let avatarType = this.props.upload ? \"crop_tmp\" : \"crop_src\"\n    let cropit = $(\".crop-form\")\n\n    const deviceRatio = cropit.cropit(\"exportZoom\")\n    const cropitOffset = cropit.cropit(\"offset\")\n\n    ajax\n      .post(this.props.user.api.avatar, {\n        avatar: avatarType,\n        crop: {\n          offset: {\n            x: cropitOffset.x * deviceRatio,\n            y: cropitOffset.y * deviceRatio,\n          },\n          zoom: cropit.cropit(\"zoom\") * deviceRatio,\n        },\n      })\n      .then(\n        (data) => {\n          this.props.onComplete(data)\n          snackbar.success(data.detail)\n        },\n        (rejection) => {\n          if (rejection.status === 400) {\n            snackbar.error(rejection.detail)\n            this.setState({\n              isLoading: false,\n            })\n          } else {\n            this.props.showError(rejection)\n          }\n        }\n      )\n  }\n\n  render() {\n    return (\n      <div>\n        <div className=\"modal-body modal-avatar-crop\">\n          <div className=\"crop-form\">\n            <div className=\"cropit-preview\" />\n            <input type=\"range\" className=\"cropit-image-zoom-input\" />\n          </div>\n        </div>\n        <div className=\"modal-footer\">\n          <div className=\"col-md-6 col-md-offset-3\">\n            <Button\n              onClick={this.cropAvatar}\n              loading={this.state.isLoading}\n              className=\"btn-primary btn-block\"\n            >\n              {this.props.upload\n                ? gettext(\"Set avatar\")\n                : gettext(\"Crop image\")}\n            </Button>\n\n            <Button\n              onClick={this.props.showIndex}\n              disabled={this.state.isLoading}\n              className=\"btn-default btn-block\"\n            >\n              {gettext(\"Cancel\")}\n            </Button>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport AvatarCrop from \"misago/components/change-avatar/crop\"\nimport Button from \"misago/components/button\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport fileSize from \"misago/utils/file-size\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      image: null,\n      preview: null,\n      progress: 0,\n      uploaded: null,\n      dataUrl: null,\n    }\n  }\n\n  validateFile(image) {\n    if (image.size > this.props.options.upload.limit) {\n      return interpolate(\n        gettext(\"Selected file is too big. (%(filesize)s)\"),\n        {\n          filesize: fileSize(image.size),\n        },\n        true\n      )\n    }\n\n    let invalidTypeMsg = gettext(\"Selected file type is not supported.\")\n    if (\n      this.props.options.upload.allowed_mime_types.indexOf(image.type) === -1\n    ) {\n      return invalidTypeMsg\n    }\n\n    let extensionFound = false\n    let loweredFilename = image.name.toLowerCase()\n    this.props.options.upload.allowed_extensions.map(function (extension) {\n      if (loweredFilename.substr(extension.length * -1) === extension) {\n        extensionFound = true\n      }\n    })\n\n    if (!extensionFound) {\n      return invalidTypeMsg\n    }\n\n    return false\n  }\n\n  pickFile = () => {\n    document.getElementById(\"avatar-hidden-upload\").click()\n  }\n\n  uploadFile = () => {\n    let image = document.getElementById(\"avatar-hidden-upload\").files[0]\n    if (!image) return\n\n    let validationError = this.validateFile(image)\n    if (validationError) {\n      snackbar.error(validationError)\n      return\n    }\n\n    this.setState({\n      image,\n      preview: URL.createObjectURL(image),\n      progress: 0,\n    })\n\n    let data = new FormData()\n    data.append(\"avatar\", \"upload\")\n    data.append(\"image\", image)\n\n    ajax\n      .upload(this.props.user.api.avatar, data, (progress) => {\n        this.setState({\n          progress,\n        })\n      })\n      .then(\n        (data) => {\n          this.setState({\n            options: data,\n            uploaded: data.detail,\n          })\n\n          snackbar.info(\n            gettext(\"Your image has been uploaded and you may now crop it.\")\n          )\n        },\n        (rejection) => {\n          if (rejection.status === 400 || rejection.status === 413) {\n            snackbar.error(rejection.detail)\n            this.setState({\n              isLoading: false,\n              image: null,\n              progress: 0,\n            })\n          } else {\n            this.props.showError(rejection)\n          }\n        }\n      )\n  }\n\n  getUploadRequirements(options) {\n    let extensions = options.allowed_extensions.map(function (extension) {\n      return extension.substr(1)\n    })\n\n    return interpolate(\n      gettext(\"%(files)s files smaller than %(limit)s\"),\n      {\n        files: extensions.join(\", \"),\n        limit: fileSize(options.limit),\n      },\n      true\n    )\n  }\n\n  getUploadButton() {\n    return (\n      <div className=\"modal-body modal-avatar-upload\">\n        <Button className=\"btn-pick-file\" onClick={this.pickFile}>\n          <div className=\"material-icon\">input</div>\n          {gettext(\"Select file\")}\n        </Button>\n        <p className=\"text-muted\">\n          {this.getUploadRequirements(this.props.options.upload)}\n        </p>\n      </div>\n    )\n  }\n\n  getUploadProgressLabel() {\n    return interpolate(\n      gettext(\"%(progress)s % complete\"),\n      {\n        progress: this.state.progress,\n      },\n      true\n    )\n  }\n\n  getUploadProgress() {\n    return (\n      <div className=\"modal-body modal-avatar-upload\">\n        <div className=\"upload-progress\">\n          <img src={this.state.preview} />\n\n          <div className=\"progress\">\n            <div\n              className=\"progress-bar\"\n              role=\"progressbar\"\n              aria-valuenow=\"{this.state.progress}\"\n              aria-valuemin=\"0\"\n              aria-valuemax=\"100\"\n              style={{ width: this.state.progress + \"%\" }}\n            >\n              <span className=\"sr-only\">{this.getUploadProgressLabel()}</span>\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n\n  renderUpload() {\n    return (\n      <div>\n        <input\n          type=\"file\"\n          id=\"avatar-hidden-upload\"\n          className=\"hidden-file-upload\"\n          onChange={this.uploadFile}\n        />\n        {this.state.image ? this.getUploadProgress() : this.getUploadButton()}\n        <div className=\"modal-footer\">\n          <div className=\"col-md-6 col-md-offset-3\">\n            <Button\n              onClick={this.props.showIndex}\n              disabled={!!this.state.image}\n              className=\"btn-default btn-block\"\n            >\n              {gettext(\"Cancel\")}\n            </Button>\n          </div>\n        </div>\n      </div>\n    )\n  }\n\n  renderCrop() {\n    return (\n      <AvatarCrop\n        options={this.state.options}\n        user={this.props.user}\n        upload={this.state.uploaded}\n        dataUrl={this.state.preview}\n        onComplete={this.props.onComplete}\n        showError={this.props.showError}\n        showIndex={this.props.showIndex}\n      />\n    )\n  }\n\n  render() {\n    if (this.state.uploaded) return this.renderCrop()\n\n    return this.renderUpload()\n  }\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport Button from \"misago/components/button\"\nimport misago from \"misago/index\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport batch from \"misago/utils/batch\"\n\nexport class GalleryItem extends React.Component {\n  select = () => {\n    this.props.select(this.props.id)\n  }\n\n  getClassName() {\n    if (this.props.selection === this.props.id) {\n      if (this.props.disabled) {\n        return \"btn btn-avatar btn-disabled avatar-selected\"\n      } else {\n        return \"btn btn-avatar avatar-selected\"\n      }\n    } else if (this.props.disabled) {\n      return \"btn btn-avatar btn-disabled\"\n    } else {\n      return \"btn btn-avatar\"\n    }\n  }\n\n  render() {\n    return (\n      <button\n        type=\"button\"\n        className={this.getClassName()}\n        disabled={this.props.disabled}\n        onClick={this.select}\n      >\n        <img src={this.props.url} />\n      </button>\n    )\n  }\n}\n\nexport class Gallery extends React.Component {\n  render() {\n    return (\n      <div className=\"avatars-gallery\">\n        <h3>{this.props.name}</h3>\n\n        <div className=\"avatars-gallery-images\">\n          {batch(this.props.images, 4, null).map((row, i) => {\n            return (\n              <div className=\"row\" key={i}>\n                {row.map((item, i) => {\n                  return (\n                    <div className=\"col-xs-3\" key={i}>\n                      {item ? (\n                        <GalleryItem\n                          disabled={this.props.disabled}\n                          select={this.props.select}\n                          selection={this.props.selection}\n                          {...item}\n                        />\n                      ) : (\n                        <div className=\"blank-avatar\" />\n                      )}\n                    </div>\n                  )\n                })}\n              </div>\n            )\n          })}\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      selection: null,\n      isLoading: false,\n    }\n  }\n\n  select = (image) => {\n    this.setState({\n      selection: image,\n    })\n  }\n\n  save = () => {\n    if (this.state.isLoading) {\n      return false\n    }\n\n    this.setState({\n      isLoading: true,\n    })\n\n    ajax\n      .post(this.props.user.api.avatar, {\n        avatar: \"galleries\",\n        image: this.state.selection,\n      })\n      .then(\n        (response) => {\n          this.setState({\n            isLoading: false,\n          })\n\n          snackbar.success(response.detail)\n          this.props.onComplete(response)\n          this.props.showIndex()\n        },\n        (rejection) => {\n          if (rejection.status === 400) {\n            snackbar.error(rejection.detail)\n            this.setState({\n              isLoading: false,\n            })\n          } else {\n            this.props.showError(rejection)\n          }\n        }\n      )\n  }\n\n  render() {\n    return (\n      <div>\n        <div className=\"modal-body modal-avatar-gallery\">\n          {this.props.options.galleries.map((item, i) => {\n            return (\n              <Gallery\n                name={item.name}\n                images={item.images}\n                selection={this.state.selection}\n                disabled={this.state.isLoading}\n                select={this.select}\n                key={i}\n              />\n            )\n          })}\n        </div>\n        <div className=\"modal-footer\">\n          <div className=\"row\">\n            <div className=\"col-md-6 col-md-offset-3\">\n              <Button\n                onClick={this.save}\n                loading={this.state.isLoading}\n                disabled={!this.state.selection}\n                className=\"btn-primary btn-block\"\n              >\n                {this.state.selection\n                  ? gettext(\"Save choice\")\n                  : gettext(\"Select avatar\")}\n              </Button>\n\n              <Button\n                onClick={this.props.showIndex}\n                disabled={this.state.isLoading}\n                className=\"btn-default btn-block\"\n              >\n                {gettext(\"Cancel\")}\n              </Button>\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport AvatarIndex from \"misago/components/change-avatar/index\"\nimport AvatarCrop from \"misago/components/change-avatar/crop\"\nimport AvatarUpload from \"misago/components/change-avatar/upload\"\nimport AvatarGallery from \"misago/components/change-avatar/gallery\"\nimport Loader from \"misago/components/modal-loader\"\nimport { updateAvatar } from \"misago/reducers/users\"\nimport ajax from \"misago/services/ajax\"\nimport store from \"misago/services/store\"\n\nexport class ChangeAvatarError extends React.Component {\n  getErrorReason() {\n    if (this.props.reason) {\n      return <p dangerouslySetInnerHTML={{ __html: this.props.reason }} />\n    } else {\n      return null\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"modal-body\">\n        <div className=\"message-icon\">\n          <span className=\"material-icon\">remove_circle_outline</span>\n        </div>\n        <div className=\"message-body\">\n          <p className=\"lead\">{this.props.message}</p>\n          {this.getErrorReason()}\n          <button\n            className=\"btn btn-default\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            {gettext(\"Ok\")}\n          </button>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default class extends React.Component {\n  componentDidMount() {\n    ajax.get(this.props.user.api.avatar).then(\n      (options) => {\n        this.setState({\n          component: AvatarIndex,\n          options: options,\n          error: null,\n        })\n      },\n      (rejection) => {\n        this.showError(rejection)\n      }\n    )\n  }\n\n  showError = (error) => {\n    this.setState({\n      error,\n    })\n  }\n\n  showIndex = () => {\n    this.setState({\n      component: AvatarIndex,\n    })\n  }\n\n  showUpload = () => {\n    this.setState({\n      component: AvatarUpload,\n    })\n  }\n\n  showCrop = () => {\n    this.setState({\n      component: AvatarCrop,\n    })\n  }\n\n  showGallery = () => {\n    this.setState({\n      component: AvatarGallery,\n    })\n  }\n\n  completeFlow = (options) => {\n    store.dispatch(updateAvatar(this.props.user, options.avatars))\n\n    this.setState({\n      component: AvatarIndex,\n      options,\n    })\n  }\n\n  getBody() {\n    if (this.state) {\n      if (this.state.error) {\n        return (\n          <ChangeAvatarError\n            message={this.state.error.detail}\n            reason={this.state.error.reason}\n          />\n        )\n      } else {\n        return (\n          <this.state.component\n            options={this.state.options}\n            user={this.props.user}\n            onComplete={this.completeFlow}\n            showError={this.showError}\n            showIndex={this.showIndex}\n            showCrop={this.showCrop}\n            showUpload={this.showUpload}\n            showGallery={this.showGallery}\n          />\n        )\n      }\n    } else {\n      return <Loader />\n    }\n  }\n\n  getClassName() {\n    if (this.state && this.state.error) {\n      return \"modal-dialog modal-message modal-change-avatar\"\n    } else {\n      return \"modal-dialog modal-change-avatar\"\n    }\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()} role=\"document\">\n        <div className=\"modal-content\">\n          <div className=\"modal-header\">\n            <button\n              type=\"button\"\n              className=\"close\"\n              data-dismiss=\"modal\"\n              aria-label={gettext(\"Close\")}\n            >\n              <span aria-hidden=\"true\">&times;</span>\n            </button>\n            <h4 className=\"modal-title\">{gettext(\"Change your avatar\")}</h4>\n          </div>\n\n          {this.getBody()}\n        </div>\n      </div>\n    )\n  }\n}\n\nexport function select(state) {\n  return {\n    user: state.auth.user,\n  }\n}\n","import React from \"react\"\nimport { connect } from \"react-redux\"\nimport Avatar from \"misago/components/avatar\"\nimport ChangeAvatarModal, { select } from \"misago/components/change-avatar/root\"\nimport NavbarSearch from \"misago/components/navbar-search\"\nimport misago from \"misago\"\nimport dropdown from \"misago/services/mobile-navbar-dropdown\"\nimport modal from \"misago/services/modal\"\n\nexport class UserMenu extends React.Component {\n  changeAvatar() {\n    modal.show(connect(select)(ChangeAvatarModal))\n  }\n\n  render() {\n    const { user } = this.props\n\n    return (\n      <ul\n        className=\"dropdown-menu user-dropdown dropdown-menu-right\"\n        role=\"menu\"\n      >\n        <li className=\"dropdown-header\">\n          <strong>{user.username}</strong>\n          <div className=\"row user-stats\">\n            <div className=\"col-sm-3\">\n              <span className=\"material-icon\">message</span>\n              {user.posts}\n            </div>\n            <div className=\"col-sm-3\">\n              <span className=\"material-icon\">forum</span>\n              {user.threads}\n            </div>\n            <div className=\"col-sm-3\">\n              <span className=\"material-icon\">favorite</span>\n              {user.followers}\n            </div>\n            <div className=\"col-sm-3\">\n              <span className=\"material-icon\">favorite_outline</span>\n              {user.following}\n            </div>\n          </div>\n        </li>\n        <li className=\"divider\" />\n        <li>\n          <a href={user.url}>\n            <span className=\"material-icon\">account_circle</span>\n            {gettext(\"See your profile\")}\n          </a>\n        </li>\n        <li>\n          <a href={misago.get(\"USERCP_URL\")}>\n            <span className=\"material-icon\">done_all</span>\n            {gettext(\"Change options\")}\n          </a>\n        </li>\n        <li>\n          <button\n            className=\"btn-link\"\n            onClick={this.changeAvatar}\n            type=\"button\"\n          >\n            <span className=\"material-icon\">portrait</span>\n            {gettext(\"Change avatar\")}\n          </button>\n        </li>\n        {!!user.acl.can_use_private_threads && (\n          <li>\n            <a href={misago.get(\"PRIVATE_THREADS_URL\")}>\n              <span className=\"material-icon\">message</span>\n              {gettext(\"Private threads\")}\n              <PrivateThreadsBadge user={user} />\n            </a>\n          </li>\n        )}\n        <li className=\"divider\" />\n        <li className=\"dropdown-buttons\">\n          <button\n            className=\"btn btn-default btn-block\"\n            onClick={() =>\n              document.getElementById(\"hidden-logout-form\").submit()\n            }\n            type=\"button\"\n          >\n            {gettext(\"Log out\")}\n          </button>\n        </li>\n      </ul>\n    )\n  }\n}\n\nexport function PrivateThreadsBadge({ user }) {\n  if (!user.unread_private_threads) return null\n\n  return <span className=\"badge\">{user.unread_private_threads}</span>\n}\n\nexport function UserNav({ user }) {\n  return (\n    <ul className=\"ul nav navbar-nav nav-user\">\n      <li>\n        <NavbarSearch />\n      </li>\n      <UserPrivateThreadsLink user={user} />\n      <li className=\"dropdown\">\n        <a\n          aria-haspopup=\"true\"\n          aria-expanded=\"false\"\n          className=\"dropdown-toggle\"\n          data-toggle=\"dropdown\"\n          href={user.url}\n          role=\"button\"\n        >\n          <Avatar user={user} size=\"64\" />\n        </a>\n        <UserMenu user={user} />\n      </li>\n    </ul>\n  )\n}\n\nexport function UserPrivateThreadsLink({ user }) {\n  if (!user.acl.can_use_private_threads) return null\n\n  let title = null\n  if (user.unread_private_threads) {\n    title = gettext(\"You have unread private threads!\")\n  } else {\n    title = gettext(\"Private threads\")\n  }\n\n  return (\n    <li>\n      <a\n        className=\"navbar-icon\"\n        href={misago.get(\"PRIVATE_THREADS_URL\")}\n        title={title}\n      >\n        <span className=\"material-icon\">message</span>\n        {user.unread_private_threads > 0 && (\n          <span className=\"badge\">{user.unread_private_threads}</span>\n        )}\n      </a>\n    </li>\n  )\n}\n\nexport function selectUserMenu(state) {\n  return {\n    user: state.auth.user,\n  }\n}\n\nexport class CompactUserNav extends React.Component {\n  showUserMenu() {\n    dropdown.showConnected(\"user-menu\", connect(selectUserMenu)(UserMenu))\n  }\n\n  render() {\n    return (\n      <button type=\"button\" onClick={this.showUserMenu}>\n        <Avatar user={this.props.user} size=\"50\" />\n      </button>\n    )\n  }\n}\n","import React from \"react\"\nimport { GuestNav, CompactGuestNav } from \"./guest-nav\"\nimport { UserNav, CompactUserNav } from \"./user-nav\"\n\nexport class UserMenu extends React.Component {\n  render() {\n    if (this.props.isAuthenticated) {\n      return <UserNav user={this.props.user} />\n    } else {\n      return <GuestNav />\n    }\n  }\n}\n\nexport class CompactUserMenu extends React.Component {\n  render() {\n    if (this.props.isAuthenticated) {\n      return <CompactUserNav user={this.props.user} />\n    } else {\n      return <CompactGuestNav />\n    }\n  }\n}\n\nexport function select(state) {\n  return state.auth\n}\n","import { connect } from \"react-redux\"\nimport misago from \"misago/index\"\nimport {\n  UserMenu,\n  CompactUserMenu,\n  select,\n} from \"misago/components/user-menu/root\"\nimport mount from \"misago/utils/mount-component\"\n\nexport default function initializer() {\n  mount(connect(select)(UserMenu), \"user-menu-mount\")\n  mount(connect(select)(CompactUserMenu), \"user-menu-compact-mount\")\n}\n\nmisago.addInitializer({\n  name: \"component:user-menu\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import React from \"react\"\nimport { Link } from \"react-router\"\nimport Li from \"misago/components/li\"\n\nconst UsersNav = ({ baseUrl, page, pages }) => (\n  <div className=\"nav-container\">\n    <div className=\"dropdown hidden-sm hidden-md hidden-lg\">\n      <button\n        className=\"btn btn-default btn-block btn-outline dropdown-toggle\"\n        type=\"button\"\n        data-toggle=\"dropdown\"\n        aria-haspopup=\"true\"\n        aria-expanded=\"false\"\n      >\n        <span className=\"material-icon\">menu</span>\n        {page.name}\n      </button>\n      <ul className=\"dropdown-menu stick-to-bottom\">\n        {pages.map((page) => {\n          const url = getPageUrl(baseUrl, page)\n          return (\n            <li key={url}>\n              <Link to={url}>{page.name}</Link>\n            </li>\n          )\n        })}\n      </ul>\n    </div>\n    <ul className=\"nav nav-pills hidden-xs\" role=\"menu\">\n      {pages.map((page) => {\n        const url = getPageUrl(baseUrl, page)\n        return (\n          <Li path={url} key={url}>\n            <Link to={url}>{page.name}</Link>\n          </Li>\n        )\n      })}\n    </ul>\n  </div>\n)\n\nconst getPageUrl = (baseUrl, page) => {\n  let url = baseUrl\n  if (page.component === \"rank\") {\n    url += page.slug\n  } else {\n    url += page.component\n  }\n  return url + \"/\"\n}\n\nexport default UsersNav\n","import React from \"react\"\nimport PageContainer from \"../../PageContainer\"\nimport UsersNav from \"../UsersNav\"\n\nexport default class extends React.Component {\n  getEmptyMessage() {\n    return interpolate(\n      gettext(\n        \"No users have posted any new messages during last %(days)s days.\"\n      ),\n      { days: this.props.trackedPeriod },\n      true\n    )\n  }\n\n  render() {\n    return (\n      <div className=\"active-posters-list\">\n        <PageContainer>\n          <UsersNav\n            baseUrl={misago.get(\"USERS_LIST_URL\")}\n            page={this.props.page}\n            pages={misago.get(\"USERS_LISTS\")}\n          />\n          <p className=\"lead\">{this.getEmptyMessage()}</p>\n        </PageContainer>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport Avatar from \"misago/components/avatar\"\nimport * as random from \"misago/utils/random\"\n\nexport default class extends React.Component {\n  shouldComponentUpdate() {\n    return false\n  }\n\n  getClassName() {\n    if (this.props.hiddenOnMobile) {\n      return \"list-group-item hidden-xs hidden-sm\"\n    } else {\n      return \"list-group-item\"\n    }\n  }\n\n  render() {\n    return (\n      <li className={this.getClassName()}>\n        <div className=\"rank-user-avatar\">\n          <span>\n            <Avatar size=\"50\" />\n          </span>\n        </div>\n\n        <div className=\"rank-user\">\n          <div className=\"user-name\">\n            <span className=\"item-title\">\n              <span\n                className=\"ui-preview-text\"\n                style={{ width: random.int(30, 80) + \"px\" }}\n              >\n                &nbsp;\n              </span>\n            </span>\n          </div>\n\n          <div className=\"user-details\">\n            <span className=\"user-status\">\n              <span className=\"status-icon ui-preview-text\">&nbsp;</span>\n              <span\n                className=\"status-label ui-preview-text hidden-xs hidden-sm\"\n                style={{ width: random.int(30, 50) + \"px\" }}\n              >\n                &nbsp;\n              </span>\n            </span>\n            <span className=\"rank-name\">\n              <span\n                className=\"ui-preview-text\"\n                style={{ width: random.int(30, 50) + \"px\" }}\n              >\n                &nbsp;\n              </span>\n            </span>\n            <span className=\"user-title hidden-xs hidden-sm\">\n              <span\n                className=\"ui-preview-text\"\n                style={{ width: random.int(30, 50) + \"px\" }}\n              >\n                &nbsp;\n              </span>\n            </span>\n          </div>\n          <div className=\"user-compact-stats visible-xs-block\">\n            <span className=\"rank-position\">\n              <strong>\n                <span\n                  className=\"ui-preview-text\"\n                  style={{ width: random.int(20, 30) + \"px\" }}\n                >\n                  &nbsp;\n                </span>\n              </strong>\n              <small>{gettext(\"Rank\")}</small>\n            </span>\n            <span className=\"rank-posts-counted\">\n              <strong>\n                <span\n                  className=\"ui-preview-text\"\n                  style={{ width: random.int(20, 30) + \"px\" }}\n                >\n                  &nbsp;\n                </span>\n              </strong>\n              <small>{gettext(\"Ranked posts\")}</small>\n            </span>\n          </div>\n        </div>\n\n        <div className=\"rank-position hidden-xs\">\n          <strong>\n            <span\n              className=\"ui-preview-text\"\n              style={{ width: random.int(20, 30) + \"px\" }}\n            >\n              &nbsp;\n            </span>\n          </strong>\n          <small>{gettext(\"Rank\")}</small>\n        </div>\n\n        <div className=\"rank-posts-counted hidden-xs\">\n          <strong>\n            <span\n              className=\"ui-preview-text\"\n              style={{ width: random.int(20, 30) + \"px\" }}\n            >\n              &nbsp;\n            </span>\n          </strong>\n          <small>{gettext(\"Ranked posts\")}</small>\n        </div>\n\n        <div className=\"rank-posts-total hidden-xs\">\n          <strong>\n            <span\n              className=\"ui-preview-text\"\n              style={{ width: random.int(20, 30) + \"px\" }}\n            >\n              &nbsp;\n            </span>\n          </strong>\n          <small>{gettext(\"Total posts\")}</small>\n        </div>\n      </li>\n    )\n  }\n}\n","import React from \"react\"\nimport ItemPreview from \"misago/components/users/active-posters/list-item-preview\"\nimport * as random from \"misago/utils/random\"\nimport PageContainer from \"../../PageContainer\"\nimport UsersNav from \"../UsersNav\"\n\nexport default class extends React.Component {\n  shouldComponentUpdate() {\n    return false\n  }\n\n  render() {\n    return (\n      <div className=\"active-posters-list\">\n        <PageContainer>\n          <UsersNav\n            baseUrl={misago.get(\"USERS_LIST_URL\")}\n            page={this.props.page}\n            pages={misago.get(\"USERS_LISTS\")}\n          />\n          <p className=\"lead ui-preview\">\n            <span\n              className=\"ui-preview-text\"\n              style={{ width: random.int(50, 220) + \"px\" }}\n            >\n              &nbsp;\n            </span>\n          </p>\n\n          <div className=\"active-posters ui-preview\">\n            <ul className=\"list-group\">\n              {[0, 1, 2].map((i) => {\n                return <ItemPreview hiddenOnMobile={i > 0} key={i} />\n              })}\n            </ul>\n          </div>\n        </PageContainer>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport { Link } from \"react-router\"\nimport Avatar from \"misago/components/avatar\"\nimport Status, { StatusIcon, StatusLabel } from \"misago/components/user-status\"\nimport misago from \"misago/index\"\nimport * as random from \"misago/utils/random\"\n\nexport default class extends React.Component {\n  getClassName() {\n    if (this.props.rank.css_class) {\n      return \"list-group-item list-group-rank-\" + this.props.rank.css_class\n    } else {\n      return \"list-group-item\"\n    }\n  }\n\n  getUserStatus() {\n    if (this.props.user.status) {\n      return (\n        <Status user={this.props.user} status={this.props.user.status}>\n          <StatusIcon user={this.props.user} status={this.props.user.status} />\n          <StatusLabel\n            user={this.props.user}\n            status={this.props.user.status}\n            className=\"status-label hidden-xs hidden-sm\"\n          />\n        </Status>\n      )\n    }\n\n    return (\n      <span className=\"user-status\">\n        <span className=\"status-icon ui-preview-text\">&nbsp;</span>\n        <span\n          className=\"status-label ui-preview-text hidden-xs hidden-sm\"\n          style={{ width: random.int(30, 50) + \"px\" }}\n        >\n          &nbsp;\n        </span>\n      </span>\n    )\n  }\n\n  getRankName() {\n    if (!this.props.rank.is_tab) {\n      return (\n        <span className=\"rank-name item-title\">{this.props.rank.name}</span>\n      )\n    }\n\n    let rankUrl = misago.get(\"USERS_LIST_URL\") + this.props.rank.slug + \"/\"\n    return (\n      <Link to={rankUrl} className=\"rank-name item-title\">\n        {this.props.rank.name}\n      </Link>\n    )\n  }\n\n  getUserTitle() {\n    if (!this.props.user.title) return null\n\n    return (\n      <span className=\"user-title hidden-xs hidden-sm\">\n        {this.props.user.title}\n      </span>\n    )\n  }\n\n  render() {\n    return (\n      <li className={this.getClassName()}>\n        <div className=\"rank-user-avatar\">\n          <a href={this.props.user.url}>\n            <Avatar user={this.props.user} size={50} size2x={64} />\n          </a>\n        </div>\n\n        <div className=\"rank-user\">\n          <div className=\"user-name\">\n            <a href={this.props.user.url} className=\"item-title\">\n              {this.props.user.username}\n            </a>\n          </div>\n          <div className=\"user-details\">\n            {this.getUserStatus()}\n            {this.getRankName()}\n            {this.getUserTitle()}\n          </div>\n          <div className=\"user-compact-stats visible-xs-block\">\n            <span className=\"rank-position\">\n              <strong>#{this.props.counter}</strong>\n              <small>{gettext(\"Rank\")}</small>\n            </span>\n\n            <span className=\"rank-posts-counted\">\n              <strong>{this.props.user.meta.score}</strong>\n              <small>{gettext(\"Ranked posts\")}</small>\n            </span>\n          </div>\n        </div>\n\n        <div className=\"rank-position hidden-xs\">\n          <strong>#{this.props.counter}</strong>\n          <small>{gettext(\"Rank\")}</small>\n        </div>\n\n        <div className=\"rank-posts-counted hidden-xs\">\n          <strong>{this.props.user.meta.score}</strong>\n          <small>{gettext(\"Ranked posts\")}</small>\n        </div>\n\n        <div className=\"rank-posts-total hidden-xs\">\n          <strong>{this.props.user.posts}</strong>\n          <small>{gettext(\"Total posts\")}</small>\n        </div>\n      </li>\n    )\n  }\n}\n","import React from \"react\"\nimport ListItem from \"misago/components/users/active-posters/list-item\"\nimport PageContainer from \"../../PageContainer\"\nimport UsersNav from \"../UsersNav\"\n\nexport default class extends React.Component {\n  getLeadMessage() {\n    let message = ngettext(\n      \"%(posters)s top poster from last %(days)s days.\",\n      \"%(posters)s top posters from last %(days)s days.\",\n      this.props.count\n    )\n\n    return interpolate(\n      message,\n      {\n        posters: this.props.count,\n        days: this.props.trackedPeriod,\n      },\n      true\n    )\n  }\n\n  render() {\n    return (\n      <div className=\"active-posters-list\">\n        <PageContainer>\n          <UsersNav\n            baseUrl={misago.get(\"USERS_LIST_URL\")}\n            page={this.props.page}\n            pages={misago.get(\"USERS_LISTS\")}\n          />\n          <p className=\"lead\">{this.getLeadMessage()}</p>\n\n          <div className=\"active-posters ui-ready\">\n            <ul className=\"list-group\">\n              {this.props.users.map((user, i) => {\n                return (\n                  <ListItem\n                    user={user}\n                    rank={user.rank}\n                    counter={i + 1}\n                    key={user.id}\n                  />\n                )\n              })}\n            </ul>\n          </div>\n        </PageContainer>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport ListEmpty from \"misago/components/users/active-posters/list-empty\"\nimport ListPreview from \"misago/components/users/active-posters/list-preview\"\nimport ListReady from \"misago/components/users/active-posters/list-ready\"\nimport misago from \"misago/index\"\nimport { hydrate } from \"misago/reducers/users\"\nimport polls from \"misago/services/polls\"\nimport store from \"misago/services/store\"\nimport title from \"misago/services/page-title\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    if (misago.has(\"USERS\")) {\n      this.initWithPreloadedData(misago.pop(\"USERS\"))\n    } else {\n      this.initWithoutPreloadedData()\n    }\n\n    this.startPolling()\n  }\n\n  initWithPreloadedData(data) {\n    this.state = {\n      isLoaded: true,\n\n      trackedPeriod: data.tracked_period,\n      count: data.count,\n    }\n\n    store.dispatch(hydrate(data.results))\n  }\n\n  initWithoutPreloadedData() {\n    this.state = {\n      isLoaded: false,\n    }\n  }\n\n  startPolling() {\n    polls.start({\n      poll: \"active-posters\",\n      url: misago.get(\"USERS_API\"),\n      data: {\n        list: \"active\",\n      },\n      frequency: 90 * 1000,\n      update: this.update,\n    })\n  }\n\n  update = (data) => {\n    store.dispatch(hydrate(data.results))\n\n    this.setState({\n      isLoaded: true,\n\n      trackedPeriod: data.tracked_period,\n      count: data.count,\n    })\n  }\n\n  componentDidMount() {\n    title.set({\n      title: this.props.route.extra.name,\n      parent: gettext(\"Users\"),\n    })\n  }\n\n  componentWillUnmount() {\n    polls.stop(\"active-posters\")\n  }\n\n  render() {\n    const page = { name: this.props.route.extra.name }\n\n    if (this.state.isLoaded) {\n      if (this.state.count > 0) {\n        return (\n          <ListReady\n            page={page}\n            users={this.props.users}\n            trackedPeriod={this.state.trackedPeriod}\n            count={this.state.count}\n          />\n        )\n      } else {\n        return (\n          <ListEmpty page={page} trackedPeriod={this.state.trackedPeriod} />\n        )\n      }\n    } else {\n      return <ListPreview page={page} />\n    }\n  }\n}\n","import React from \"react\"\nimport stringCount from \"misago/utils/string-count\"\n\nexport default class extends React.Component {\n  getClassName() {\n    if (this.props.copy && this.props.copy.length) {\n      if (\n        stringCount(this.props.copy, \"<p\") === 1 &&\n        this.props.copy.indexOf(\"<br\") === -1\n      ) {\n        return \"page-lead lead\"\n      }\n    }\n\n    return \"page-lead\"\n  }\n\n  render() {\n    if (this.props.copy && this.props.copy.length) {\n      return (\n        <div\n          className={this.getClassName()}\n          dangerouslySetInnerHTML={{\n            __html: this.props.copy,\n          }}\n        />\n      )\n    } else {\n      return null\n    }\n  }\n}\n","export default function (string, subString) {\n  string = (string + \"\").toLowerCase()\n  subString = (subString + \"\").toLowerCase()\n\n  if (subString.length <= 0) return 0\n\n  let n = 0\n  let pos = 0\n  let step = subString.length\n\n  while (true) {\n    pos = string.indexOf(subString, pos)\n    if (pos >= 0) {\n      n += 1\n      pos += step\n    } else {\n      break\n    }\n  }\n\n  return n\n}\n","import React from \"react\"\nimport UsersList from \"../../users-list\"\n\nconst RankUsersList = ({ users }) => (\n  <UsersList cols={4} isReady={true} showStatus={true} users={users} />\n)\n\nexport default RankUsersList\n","import React from \"react\"\nimport UsersList from \"misago/components/users-list\"\n\nclass RankUsersListLoader extends React.Component {\n  shouldComponentUpdate() {\n    return false\n  }\n\n  render = () => <UsersList cols={4} isReady={false} />\n}\n\nexport default RankUsersListLoader\n","import React from \"react\"\n\nconst RankUsersLeft = ({ users }) => {\n  if (users.more) {\n    return (\n      <p>\n        {interpolate(\n          ngettext(\n            \"There is %(more)s more member with this role.\",\n            \"There are %(more)s more members with this role.\",\n            users.more\n          ),\n          { more: users.more },\n          true\n        )}\n      </p>\n    )\n  }\n\n  return <p>{gettext(\"There are no more members with this role.\")}</p>\n}\n\nexport default RankUsersLeft\n","import React from \"react\"\nimport { Link } from \"react-router\"\n\nconst RankUsersPagination = ({ baseUrl, users }) => (\n  <div className=\"misago-pagination\">\n    {users.isLoaded && users.first ? (\n      <Link\n        className=\"btn btn-default btn-outline btn-icon\"\n        to={baseUrl}\n        title={gettext(\"Go to first page\")}\n      >\n        <span className=\"material-icon\">first_page</span>\n      </Link>\n    ) : (\n      <button\n        className=\"btn btn-default btn-outline btn-icon\"\n        title={gettext(\"Go to first page\")}\n        type=\"button\"\n        disabled\n      >\n        <span className=\"material-icon\">first_page</span>\n      </button>\n    )}\n    {users.isLoaded && users.previous ? (\n      <Link\n        className=\"btn btn-default btn-outline btn-icon\"\n        to={baseUrl + (users.previous > 1 ? users.previous + \"/\" : \"\")}\n        title={gettext(\"Go to previous page\")}\n      >\n        <span className=\"material-icon\">chevron_left</span>\n      </Link>\n    ) : (\n      <button\n        className=\"btn btn-default btn-outline btn-icon\"\n        title={gettext(\"Go to previous page\")}\n        type=\"button\"\n        disabled\n      >\n        <span className=\"material-icon\">chevron_left</span>\n      </button>\n    )}\n    {users.isLoaded && users.next ? (\n      <Link\n        className=\"btn btn-default btn-outline btn-icon\"\n        to={baseUrl + users.next + \"/\"}\n        title={gettext(\"Go to next page\")}\n      >\n        <span className=\"material-icon\">chevron_right</span>\n      </Link>\n    ) : (\n      <button\n        className=\"btn btn-default btn-outline btn-icon\"\n        title={gettext(\"Go to next page\")}\n        type=\"button\"\n        disabled\n      >\n        <span className=\"material-icon\">chevron_right</span>\n      </button>\n    )}\n    {users.isLoaded && users.last ? (\n      <Link\n        className=\"btn btn-default btn-outline btn-icon\"\n        to={baseUrl + users.last + \"/\"}\n        title={gettext(\"Go to last page\")}\n      >\n        <span className=\"material-icon\">last_page</span>\n      </Link>\n    ) : (\n      <button\n        className=\"btn btn-default btn-outline btn-icon\"\n        title={gettext(\"Go to last page\")}\n        type=\"button\"\n        disabled\n      >\n        <span className=\"material-icon\">last_page</span>\n      </button>\n    )}\n  </div>\n)\n\nexport default RankUsersPagination\n","import React from \"react\"\nimport { Toolbar, ToolbarItem, ToolbarSection } from \"../../Toolbar\"\nimport RankUsersLeft from \"./RankUsersLeft\"\nimport RankUsersPagination from \"./RankUsersPagination\"\n\nconst RankUsersToolbar = ({ baseUrl, users }) => (\n  <Toolbar>\n    <ToolbarSection>\n      <ToolbarItem>\n        <RankUsersPagination baseUrl={baseUrl} users={users} />\n      </ToolbarItem>\n    </ToolbarSection>\n    <ToolbarSection auto>\n      <ToolbarItem>\n        <RankUsersLeft users={users} />\n      </ToolbarItem>\n    </ToolbarSection>\n  </Toolbar>\n)\n\nexport default RankUsersToolbar\n","import React from \"react\"\nimport PageLead from \"misago/components/page-lead\"\nimport misago from \"misago/index\"\nimport { hydrate } from \"misago/reducers/users\"\nimport polls from \"misago/services/polls\"\nimport store from \"misago/services/store\"\nimport title from \"misago/services/page-title\"\nimport PageContainer from \"../../PageContainer\"\nimport RankUsersList from \"./RankUsersList\"\nimport RankUsersListLoader from \"./RankUsersListLoader\"\nimport RankUsersToolbar from \"./RankUsersToolbar\"\nimport UsersNav from \"../UsersNav\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    if (misago.has(\"USERS\")) {\n      this.initWithPreloadedData(misago.pop(\"USERS\"))\n    } else {\n      this.initWithoutPreloadedData()\n    }\n\n    this.startPolling(props.params.page || 1)\n  }\n\n  initWithPreloadedData(data) {\n    this.state = Object.assign(data, {\n      isLoaded: true,\n    })\n    store.dispatch(hydrate(data.results))\n  }\n\n  initWithoutPreloadedData() {\n    this.state = {\n      isLoaded: false,\n    }\n  }\n\n  startPolling(page) {\n    polls.start({\n      poll: \"rank-users\",\n      url: misago.get(\"USERS_API\"),\n      data: {\n        rank: this.props.route.rank.id,\n        page: page,\n      },\n      frequency: 90 * 1000,\n      update: this.update,\n    })\n  }\n\n  update = (data) => {\n    store.dispatch(hydrate(data.results))\n\n    data.isLoaded = true\n    this.setState(data)\n  }\n\n  componentDidMount() {\n    title.set({\n      title: this.props.route.rank.name,\n      page: this.props.params.page || null,\n      parent: gettext(\"Users\"),\n    })\n  }\n\n  componentWillUnmount() {\n    polls.stop(\"rank-users\")\n  }\n\n  componentWillReceiveProps(nextProps) {\n    if (this.props.params.page !== nextProps.params.page) {\n      title.set({\n        title: this.props.route.rank.name,\n        page: nextProps.params.page || null,\n        parent: gettext(\"Users\"),\n      })\n\n      this.setState({\n        isLoaded: false,\n      })\n\n      polls.stop(\"rank-users\")\n      this.startPolling(nextProps.params.page)\n    }\n  }\n\n  getClassName() {\n    if (this.props.route.rank.css_class) {\n      return \"rank-users-list rank-users-\" + this.props.route.rank.css_class\n    } else {\n      return \"rank-users-list\"\n    }\n  }\n\n  getRankDescription() {\n    if (this.props.route.rank.description) {\n      return (\n        <div className=\"rank-description\">\n          <PageLead copy={this.props.route.rank.description.html} />\n        </div>\n      )\n    } else {\n      return null\n    }\n  }\n\n  getComponent() {\n    if (this.state.isLoaded) {\n      if (this.state.count > 0) {\n        return <RankUsersList users={this.props.users} />\n      } else {\n        return (\n          <p className=\"lead\">\n            {gettext(\"There are no users with this rank at the moment.\")}\n          </p>\n        )\n      }\n    } else {\n      return <RankUsersListLoader />\n    }\n  }\n\n  render() {\n    return (\n      <div className={this.getClassName()}>\n        <PageContainer>\n          <UsersNav\n            baseUrl={misago.get(\"USERS_LIST_URL\")}\n            page={{ name: this.props.route.rank.name }}\n            pages={misago.get(\"USERS_LISTS\")}\n          />\n          {this.getRankDescription()}\n          {this.getComponent()}\n          <RankUsersToolbar\n            baseUrl={\n              misago.get(\"USERS_LIST_URL\") + this.props.route.rank.slug + \"/\"\n            }\n            users={this.state}\n          />\n        </PageContainer>\n      </div>\n    )\n  }\n}\n","import React from \"react\"\nimport { connect } from \"react-redux\"\nimport ActivePosters from \"misago/components/users/active-posters/root\"\nimport Rank from \"misago/components/users/rank/root\"\nimport WithDropdown from \"misago/components/with-dropdown\"\nimport misago from \"misago/index\"\nimport {\n  PageHeader,\n  PageHeaderBanner,\n  PageHeaderContainer,\n} from \"../PageHeader\"\n\nexport default class extends WithDropdown {\n  render() {\n    return (\n      <div className=\"page page-users-lists\">\n        <PageHeaderContainer>\n          <PageHeader styleName=\"users-lists\">\n            <PageHeaderBanner styleName=\"users-lists\">\n              <h1>{gettext(\"Users\")}</h1>\n            </PageHeaderBanner>\n          </PageHeader>\n        </PageHeaderContainer>\n        {this.props.children}\n      </div>\n    )\n  }\n}\n\nexport function select(store) {\n  return {\n    tick: store.tick.tick,\n    user: store.auth.user,\n    users: store.users,\n  }\n}\n\nexport function paths() {\n  let paths = []\n\n  misago.get(\"USERS_LISTS\").forEach(function (item) {\n    if (item.component === \"rank\") {\n      paths.push({\n        path: misago.get(\"USERS_LIST_URL\") + item.slug + \"/:page/\",\n        component: connect(select)(Rank),\n        rank: item,\n      })\n      paths.push({\n        path: misago.get(\"USERS_LIST_URL\") + item.slug + \"/\",\n        component: connect(select)(Rank),\n        rank: item,\n      })\n    } else if (item.component === \"active-posters\") {\n      paths.push({\n        path: misago.get(\"USERS_LIST_URL\") + item.component + \"/\",\n        component: connect(select)(ActivePosters),\n        extra: {\n          name: item.name,\n        },\n      })\n    }\n  })\n\n  return paths\n}\n","import Users, { paths } from \"misago/components/users/root\"\nimport misago from \"misago/index\"\nimport mount from \"misago/utils/routed-component\"\n\nexport default function initializer(context) {\n  if (context.has(\"USERS_LISTS\")) {\n    mount({\n      root: misago.get(\"USERS_LIST_URL\"),\n      component: Users,\n      paths: paths(),\n    })\n  }\n}\n\nmisago.addInitializer({\n  name: \"component:users\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import misago from \"misago/index\"\nimport include from \"misago/services/include\"\n\nexport default function initializer(context) {\n  include.init(context.get(\"STATIC_URL\"))\n}\n\nmisago.addInitializer({\n  name: \"include\",\n  initializer: initializer,\n})\n","import misago from \"misago/index\"\nimport storage from \"misago/services/local-storage\"\n\nexport default function initializer() {\n  storage.init(\"misago_\")\n}\n\nmisago.addInitializer({\n  name: \"local-storage\",\n  initializer: initializer,\n})\n","import misago from \"misago/index\"\nimport dropdown from \"misago/services/mobile-navbar-dropdown\"\n\nexport default function initializer() {\n  let element = document.getElementById(\"mobile-navbar-dropdown-mount\")\n  if (element) {\n    dropdown.init(element)\n  }\n}\n\nmisago.addInitializer({\n  name: \"dropdown\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport modal from \"misago/services/modal\"\n\nexport default function initializer() {\n  let element = document.getElementById(\"modal-mount\")\n  if (element) {\n    modal.init(element)\n  }\n}\n\nmisago.addInitializer({\n  name: \"modal\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import moment from \"moment\"\nimport misago from \"misago/index\"\n\nexport default function initializer() {\n  moment.locale($(\"html\").attr(\"lang\"))\n}\n\nmisago.addInitializer({\n  name: \"moment\",\n  initializer: initializer,\n})\n","import misago from \"misago/index\"\nimport title from \"misago/services/page-title\"\n\nexport default function initializer(context) {\n  title.init(\n    context.get(\"SETTINGS\").forum_index_title,\n    context.get(\"SETTINGS\").forum_name\n  )\n}\n\nmisago.addInitializer({\n  name: \"page-title\",\n  initializer: initializer,\n})\n","import misago from \"misago/index\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\nimport polls from \"misago/services/polls\"\n\nexport default function initializer() {\n  polls.init(ajax, snackbar)\n}\n\nmisago.addInitializer({\n  name: \"polls\",\n  initializer: initializer,\n})\n","import misago from \"misago/index\"\nimport ajax from \"misago/services/ajax\"\nimport posting from \"misago/services/posting\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default function initializer() {\n  posting.init(ajax, snackbar, document.getElementById(\"posting-placeholder\"))\n}\n\nmisago.addInitializer({\n  name: \"posting\",\n  initializer: initializer,\n})\n","import misago from \"misago/index\"\nimport reducer, { initialState } from \"misago/reducers/auth\"\nimport store from \"misago/services/store\"\n\nexport default function initializer(context) {\n  store.addReducer(\n    \"auth\",\n    reducer,\n    Object.assign(\n      {\n        isAuthenticated: context.get(\"isAuthenticated\"),\n        isAnonymous: !context.get(\"isAuthenticated\"),\n\n        user: context.get(\"user\"),\n      },\n      initialState\n    )\n  )\n}\n\nmisago.addInitializer({\n  name: \"reducer:auth\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer from \"misago/reducers/participants\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  let initialState = null\n  if (misago.has(\"THREAD\")) {\n    initialState = misago.get(\"THREAD\").participants\n  }\n\n  store.addReducer(\"participants\", reducer, initialState || [])\n}\n\nmisago.addInitializer({\n  name: \"reducer:participants\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer, { hydrate } from \"misago/reducers/poll\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  let initialState = null\n  if (misago.has(\"THREAD\") && misago.get(\"THREAD\").poll) {\n    initialState = hydrate(misago.get(\"THREAD\").poll)\n  } else {\n    initialState = {\n      isBusy: false,\n    }\n  }\n\n  store.addReducer(\"poll\", reducer, initialState)\n}\n\nmisago.addInitializer({\n  name: \"reducer:poll\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer, { hydrate } from \"misago/reducers/posts\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  let initialState = null\n  if (misago.has(\"POSTS\")) {\n    initialState = hydrate(misago.get(\"POSTS\"))\n  } else {\n    initialState = {\n      isLoaded: false,\n      isBusy: false,\n    }\n  }\n\n  store.addReducer(\"posts\", reducer, initialState)\n}\n\nmisago.addInitializer({\n  name: \"reducer:posts\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer from \"misago/reducers/profile-details\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  let initialState = null\n  if (misago.has(\"PROFILE_DETAILS\")) {\n    initialState = misago.get(\"PROFILE_DETAILS\")\n  }\n\n  store.addReducer(\"profile-details\", reducer, initialState || {})\n}\n\nmisago.addInitializer({\n  name: \"reducer:profile-details\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport { hydrate } from \"misago/reducers/profile\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  if (misago.has(\"PROFILE\")) {\n    store.dispatch(hydrate(misago.get(\"PROFILE\")))\n  }\n}\n\nmisago.addInitializer({\n  name: \"reducer:profile-hydrate\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer from \"misago/reducers/profile\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  store.addReducer(\"profile\", reducer, {})\n}\n\nmisago.addInitializer({\n  name: \"reducer:profile\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago\"\nimport reducer, { initialState } from \"misago/reducers/search\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  store.addReducer(\n    \"search\",\n    reducer,\n    Object.assign({}, initialState, {\n      providers: misago.get(\"SEARCH_PROVIDERS\") || [],\n      query: misago.get(\"SEARCH_QUERY\") || \"\",\n    })\n  )\n}\n\nmisago.addInitializer({\n  name: \"reducer:search\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer from \"misago/reducers/selection\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  store.addReducer(\"selection\", reducer, [])\n}\n\nmisago.addInitializer({\n  name: \"reducer:selection\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer, { initialState } from \"misago/reducers/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  store.addReducer(\"snackbar\", reducer, initialState)\n}\n\nmisago.addInitializer({\n  name: \"reducer:snackbar\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer, { hydrate } from \"misago/reducers/thread\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  let initialState = null\n  if (misago.has(\"THREAD\")) {\n    initialState = hydrate(misago.get(\"THREAD\"))\n  } else {\n    initialState = {\n      isBusy: false,\n    }\n  }\n\n  store.addReducer(\"thread\", reducer, initialState)\n}\n\nmisago.addInitializer({\n  name: \"reducer:thread\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer from \"misago/reducers/threads\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  store.addReducer(\"threads\", reducer, [])\n}\n\nmisago.addInitializer({\n  name: \"reducer:threads\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer, { initialState } from \"misago/reducers/tick\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  store.addReducer(\"tick\", reducer, initialState)\n}\n\nmisago.addInitializer({\n  name: \"reducer:tick\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer from \"misago/reducers/username-history\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  store.addReducer(\"username-history\", reducer, [])\n}\n\nmisago.addInitializer({\n  name: \"reducer:username-history\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport reducer from \"misago/reducers/users\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  store.addReducer(\"users\", reducer, [])\n}\n\nmisago.addInitializer({\n  name: \"reducer:users\",\n  initializer: initializer,\n  before: \"store\",\n})\n","import misago from \"misago/index\"\nimport snackbar from \"misago/services/snackbar\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  snackbar.init(store)\n}\n\nmisago.addInitializer({\n  name: \"snackbar\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import misago from \"misago/index\"\nimport store from \"misago/services/store\"\n\nexport default function initializer() {\n  store.init()\n}\n\nmisago.addInitializer({\n  name: \"store\",\n  initializer: initializer,\n  before: \"_end\",\n})\n","import misago from \"misago/index\"\nimport { doTick } from \"misago/reducers/tick\"\nimport store from \"misago/services/store\"\n\nconst TICK_PERIOD = 50 * 1000 //do the tick every 50s\n\nexport default function initializer() {\n  window.setInterval(function () {\n    store.dispatch(doTick())\n  }, TICK_PERIOD)\n}\n\nmisago.addInitializer({\n  name: \"tick-start\",\n  initializer: initializer,\n  after: \"store\",\n})\n","import misago from \"misago/index\"\nimport include from \"misago/services/include\"\nimport zxcvbn from \"misago/services/zxcvbn\"\n\nexport default function initializer() {\n  zxcvbn.init(include)\n}\n\nmisago.addInitializer({\n  name: \"zxcvbn\",\n  initializer: initializer,\n})\n","import { UPDATE_AVATAR, UPDATE_USERNAME } from \"misago/reducers/users\"\n\nexport var initialState = {\n  signedIn: false,\n  signedOut: false,\n}\n\nexport const PATCH_USER = \"PATCH_USER\"\nexport const SIGN_IN = \"SIGN_IN\"\nexport const SIGN_OUT = \"SIGN_OUT\"\n\nexport function patch(patch) {\n  return {\n    type: PATCH_USER,\n    patch,\n  }\n}\n\nexport function signIn(user) {\n  return {\n    type: SIGN_IN,\n    user,\n  }\n}\n\nexport function signOut(soft = false) {\n  return {\n    type: SIGN_OUT,\n    soft,\n  }\n}\n\nexport default function auth(state = initialState, action = null) {\n  switch (action.type) {\n    case PATCH_USER:\n      let newState = Object.assign({}, state)\n      newState.user = Object.assign({}, state.user, action.patch)\n      return newState\n\n    case SIGN_IN:\n      return Object.assign({}, state, {\n        signedIn: action.user,\n      })\n\n    case SIGN_OUT:\n      return Object.assign({}, state, {\n        isAuthenticated: false,\n        isAnonymous: true,\n        signedOut: !action.soft,\n      })\n\n    case UPDATE_AVATAR:\n      if (state.isAuthenticated && state.user.id === action.userId) {\n        let newState = Object.assign({}, state)\n        newState.user = Object.assign({}, state.user, {\n          avatars: action.avatars,\n        })\n        return newState\n      }\n      return state\n\n    case UPDATE_USERNAME:\n      if (state.isAuthenticated && state.user.id === action.userId) {\n        let newState = Object.assign({}, state)\n        newState.user = Object.assign({}, state.user, {\n          username: action.username,\n          slug: action.slug,\n        })\n        return newState\n      }\n      return state\n\n    default:\n      return state\n  }\n}\n","export const REPLACE_PARTICIPANTS = \"REPLACE_PARTICIPANTS\"\n\nexport function replace(newState) {\n  return {\n    type: REPLACE_PARTICIPANTS,\n    state: newState,\n  }\n}\n\nexport default function participants(state = [], action = null) {\n  switch (action.type) {\n    case REPLACE_PARTICIPANTS:\n      return action.state\n\n    default:\n      return state\n  }\n}\n","import moment from \"moment\"\n\nexport const BUSY_POLL = \"BUSY_POLL\"\nexport const RELEASE_POLL = \"RELEASE_POLL\"\nexport const REMOVE_POLL = \"REMOVE_POLL\"\nexport const REPLACE_POLL = \"REPLACE_POLL\"\nexport const UPDATE_POLL = \"UPDATE_POLL\"\n\nexport function hydrate(json) {\n  let hasSelectedChoices = false\n  for (const i in json.choices) {\n    const choice = json.choices[i]\n    if (choice.selected) {\n      hasSelectedChoices = true\n      break\n    }\n  }\n\n  return Object.assign({}, json, {\n    posted_on: moment(json.posted_on),\n\n    hasSelectedChoices,\n    endsOn: json.length\n      ? moment(json.posted_on).add(json.length, \"days\")\n      : null,\n\n    isBusy: false,\n  })\n}\n\nexport function busy() {\n  return {\n    type: BUSY_POLL,\n  }\n}\n\nexport function release() {\n  return {\n    type: RELEASE_POLL,\n  }\n}\n\nexport function replace(newState, hydrated = false) {\n  return {\n    type: REPLACE_POLL,\n    state: hydrated ? newState : hydrate(newState),\n  }\n}\n\nexport function update(data) {\n  return {\n    type: UPDATE_POLL,\n    data,\n  }\n}\n\nexport function remove() {\n  return {\n    type: REMOVE_POLL,\n  }\n}\n\nexport default function poll(state = {}, action = null) {\n  switch (action.type) {\n    case BUSY_POLL:\n      return Object.assign({}, state, { isBusy: true })\n\n    case RELEASE_POLL:\n      return Object.assign({}, state, { isBusy: false })\n\n    case REMOVE_POLL:\n      return {\n        isBusy: false,\n      }\n\n    case REPLACE_POLL:\n      return action.state\n\n    case UPDATE_POLL:\n      return Object.assign({}, state, action.data)\n\n    default:\n      return state\n  }\n}\n","import moment from \"moment\"\nimport { hydrateUser } from \"./users\"\n\nexport const PATCH_POST = \"PATCH_POST\"\n\nexport function hydrate(json) {\n  return Object.assign({}, json, {\n    posted_on: moment(json.posted_on),\n    updated_on: moment(json.updated_on),\n    hidden_on: moment(json.hidden_on),\n\n    attachments: json.attachments\n      ? json.attachments.map(hydrateAttachment)\n      : null,\n    poster: json.poster ? hydrateUser(json.poster) : null,\n\n    isSelected: false,\n    isBusy: false,\n    isDeleted: false,\n  })\n}\n\nexport function hydrateAttachment(json) {\n  return Object.assign({}, json, {\n    uploaded_on: moment(json.uploaded_on),\n  })\n}\n\nexport function patch(post, patch) {\n  return {\n    type: PATCH_POST,\n    post,\n    patch,\n  }\n}\n\nexport default function post(state = {}, action = null) {\n  switch (action.type) {\n    case PATCH_POST:\n      if (state.id == action.post.id) {\n        return Object.assign({}, state, action.patch)\n      }\n      return state\n\n    default:\n      return state\n  }\n}\n","import postReducer, {\n  PATCH_POST,\n  hydrate as hydratePost,\n} from \"misago/reducers/post\"\n\nexport const APPEND_POSTS = \"APPEND_POSTS\"\nexport const SELECT_POST = \"SELECT_POST\"\nexport const DESELECT_POST = \"DESELECT_POST\"\nexport const DESELECT_POSTS = \"DESELECT_POSTS\"\nexport const LOAD_POSTS = \"LOAD_POSTS\"\nexport const UNLOAD_POSTS = \"UNLOAD_POSTS\"\nexport const UPDATE_POSTS = \"UPDATE_POSTS\"\n\nexport function select(post) {\n  return {\n    type: SELECT_POST,\n    post,\n  }\n}\n\nexport function deselect(post) {\n  return {\n    type: DESELECT_POST,\n    post,\n  }\n}\n\nexport function deselectAll() {\n  return {\n    type: DESELECT_POSTS,\n  }\n}\n\nexport function hydrate(json) {\n  return Object.assign({}, json, {\n    results: json.results.map(hydratePost),\n    isLoaded: true,\n    isBusy: false,\n    isSelected: false,\n  })\n}\n\nexport function load(newState, hydrated = false) {\n  return {\n    type: LOAD_POSTS,\n    state: hydrated ? newState : hydrate(newState),\n  }\n}\n\nexport function append(newState, hydrated = false) {\n  return {\n    type: APPEND_POSTS,\n    state: hydrated ? newState : hydrate(newState),\n  }\n}\n\nexport function unload() {\n  return {\n    type: UNLOAD_POSTS,\n  }\n}\n\nexport function update(newState) {\n  return {\n    type: UPDATE_POSTS,\n    update: newState,\n  }\n}\n\nexport default function posts(state = {}, action = null) {\n  switch (action.type) {\n    case SELECT_POST:\n      const selectedPosts = state.results.map((post) => {\n        if (post.id == action.post.id) {\n          return Object.assign({}, post, {\n            isSelected: true,\n          })\n        } else {\n          return post\n        }\n      })\n\n      return Object.assign({}, state, {\n        results: selectedPosts,\n      })\n\n    case DESELECT_POST:\n      const deseletedPosts = state.results.map((post) => {\n        if (post.id == action.post.id) {\n          return Object.assign({}, post, {\n            isSelected: false,\n          })\n        } else {\n          return post\n        }\n      })\n\n      return Object.assign({}, state, {\n        results: deseletedPosts,\n      })\n\n    case DESELECT_POSTS:\n      const deseletedAllPosts = state.results.map((post) => {\n        return Object.assign({}, post, {\n          isSelected: false,\n        })\n      })\n\n      return Object.assign({}, state, {\n        results: deseletedAllPosts,\n      })\n\n    case APPEND_POSTS:\n      let results = state.results.slice()\n      const resultsIds = state.results.map((post) => {\n        return post.id\n      })\n\n      action.state.results.map((post) => {\n        if (resultsIds.indexOf(post.id) === -1) {\n          results.push(post)\n        }\n      })\n\n      return Object.assign({}, action.state, {\n        results,\n      })\n\n    case LOAD_POSTS:\n      return action.state\n\n    case UNLOAD_POSTS:\n      return Object.assign({}, state, {\n        isLoaded: false,\n      })\n\n    case UPDATE_POSTS:\n      return Object.assign({}, state, action.update)\n\n    case PATCH_POST:\n      const reducedPosts = state.results.map((post) => {\n        return postReducer(post, action)\n      })\n\n      return Object.assign({}, state, {\n        results: reducedPosts,\n      })\n\n    default:\n      return state\n  }\n}\n","export const LOAD_DETAILS = \"LOAD_DETAILS\"\n\nexport function load(newState) {\n  return {\n    type: LOAD_DETAILS,\n\n    newState,\n  }\n}\n\nexport default function details(state = {}, action = null) {\n  switch (action.type) {\n    case LOAD_DETAILS:\n      return action.newState\n\n    default:\n      return state\n  }\n}\n","import moment from \"moment\"\nimport {\n  UPDATE_AVATAR,\n  UPDATE_USERNAME,\n  hydrateStatus,\n} from \"misago/reducers/users\"\n\nexport const HYDRATE_PROFILE = \"HYDRATE_PROFILE\"\nexport const PATCH_PROFILE = \"PATCH_PROFILE\"\n\nexport function hydrate(profile) {\n  return {\n    type: HYDRATE_PROFILE,\n    profile,\n  }\n}\n\nexport function patch(patch) {\n  return {\n    type: PATCH_PROFILE,\n    patch,\n  }\n}\n\nexport default function auth(state = {}, action = null) {\n  switch (action.type) {\n    case HYDRATE_PROFILE:\n      return Object.assign({}, action.profile, {\n        joined_on: moment(action.profile.joined_on),\n        status: hydrateStatus(action.profile.status),\n      })\n\n    case PATCH_PROFILE:\n      return Object.assign({}, state, action.patch)\n\n    case UPDATE_AVATAR:\n      if (state.id === action.userId) {\n        return Object.assign({}, state, {\n          avatars: action.avatars,\n        })\n      }\n      return state\n\n    case UPDATE_USERNAME:\n      if (state.id === action.userId) {\n        return Object.assign({}, state, {\n          username: action.username,\n          slug: action.slug,\n        })\n      }\n      return state\n\n    default:\n      return state\n  }\n}\n","export const REPLACE_SEARCH = \"REPLACE_SEARCH\"\nexport const UPDATE_SEARCH = \"UPDATE_SEARCH\"\nexport const UPDATE_SEARCH_PROVIDER = \"UPDATE_SEARCH_PROVIDER\"\n\nexport const initialState = {\n  isLoading: false,\n  query: \"\",\n  providers: [],\n}\n\nexport function replace(newState) {\n  return {\n    type: REPLACE_SEARCH,\n    state: {\n      isLoading: false,\n      providers: newState,\n    },\n  }\n}\n\nexport function update(newState) {\n  return {\n    type: UPDATE_SEARCH,\n    update: newState,\n  }\n}\n\nexport function updateProvider(provider) {\n  return {\n    type: UPDATE_SEARCH_PROVIDER,\n    provider: provider,\n  }\n}\n\nexport default function participants(state = {}, action = null) {\n  switch (action.type) {\n    case REPLACE_SEARCH:\n      return action.state\n\n    case UPDATE_SEARCH:\n      return Object.assign({}, state, action.update)\n\n    case UPDATE_SEARCH_PROVIDER:\n      return Object.assign({}, state, {\n        providers: state.providers.map((provider) => {\n          if (provider.id === action.provider.id) {\n            return action.provider\n          } else {\n            return provider\n          }\n        }),\n      })\n\n    default:\n      return state\n  }\n}\n","import { toggle } from \"misago/utils/sets\"\n\nexport const SELECT_ALL = \"SELECT_ALL\"\nexport const SELECT_NONE = \"SELECT_NONE\"\nexport const SELECT_ITEM = \"SELECT_ITEM\"\n\nexport function all(itemsIds) {\n  return {\n    type: SELECT_ALL,\n    items: itemsIds,\n  }\n}\n\nexport function none() {\n  return {\n    type: SELECT_NONE,\n  }\n}\n\nexport function item(itemId) {\n  return {\n    type: SELECT_ITEM,\n    item: itemId,\n  }\n}\n\nexport default function selection(state = [], action = null) {\n  switch (action.type) {\n    case SELECT_ALL:\n      return action.items\n\n    case SELECT_NONE:\n      return []\n\n    case SELECT_ITEM:\n      return toggle(state, action.item)\n\n    default:\n      return state\n  }\n}\n","export var initialState = {\n  type: \"info\",\n  message: \"\",\n  isVisible: false,\n}\n\nexport const SHOW_SNACKBAR = \"SHOW_SNACKBAR\"\nexport const HIDE_SNACKBAR = \"HIDE_SNACKBAR\"\n\nexport function showSnackbar(message, type) {\n  return {\n    type: SHOW_SNACKBAR,\n    message,\n    messageType: type,\n  }\n}\n\nexport function hideSnackbar() {\n  return {\n    type: HIDE_SNACKBAR,\n  }\n}\n\nexport default function snackbar(state = initialState, action = null) {\n  if (action.type === SHOW_SNACKBAR) {\n    return {\n      type: action.messageType,\n      message: action.message,\n      isVisible: true,\n    }\n  } else if (action.type === HIDE_SNACKBAR) {\n    return Object.assign({}, state, {\n      isVisible: false,\n    })\n  } else {\n    return state\n  }\n}\n","import moment from \"moment\"\nimport { REMOVE_POLL, REPLACE_POLL } from \"./poll\"\n\nexport const BUSY_THREAD = \"BUSY_THREAD\"\nexport const RELEASE_THREAD = \"RELEASE_THREAD\"\nexport const REPLACE_THREAD = \"REPLACE_THREAD\"\nexport const UPDATE_THREAD = \"UPDATE_THREAD\"\nexport const UPDATE_THREAD_ACL = \"UPDATE_THREAD_ACL\"\n\nexport function hydrate(json) {\n  return Object.assign({}, json, {\n    started_on: moment(json.started_on),\n    last_post_on: moment(json.last_post_on),\n    best_answer_marked_on: json.best_answer_marked_on\n      ? moment(json.best_answer_marked_on)\n      : null,\n\n    isBusy: false,\n  })\n}\n\nexport function busy() {\n  return {\n    type: BUSY_THREAD,\n  }\n}\n\nexport function release() {\n  return {\n    type: RELEASE_THREAD,\n  }\n}\n\nexport function replace(newState, hydrated = false) {\n  return {\n    type: REPLACE_THREAD,\n    state: hydrated ? newState : hydrate(newState),\n  }\n}\n\nexport function update(data) {\n  return {\n    type: UPDATE_THREAD,\n    data,\n  }\n}\n\nexport function updateAcl(data) {\n  return {\n    type: UPDATE_THREAD_ACL,\n    data,\n  }\n}\n\nexport default function thread(state = {}, action = null) {\n  switch (action.type) {\n    case BUSY_THREAD:\n      return Object.assign({}, state, { isBusy: true })\n\n    case RELEASE_THREAD:\n      return Object.assign({}, state, { isBusy: false })\n\n    case REMOVE_POLL:\n      return Object.assign({}, state, { poll: null })\n\n    case REPLACE_POLL:\n      return Object.assign({}, state, { poll: action.state })\n\n    case REPLACE_THREAD:\n      return action.state\n\n    case UPDATE_THREAD:\n      return Object.assign({}, state, action.data)\n\n    case UPDATE_THREAD_ACL:\n      const acl = Object.assign({}, state.acl, action.data)\n      return Object.assign({}, state, { acl })\n\n    default:\n      return state\n  }\n}\n","import moment from \"moment\"\nimport concatUnique from \"misago/utils/concat-unique\"\n\nexport const APPEND_THREADS = \"APPEND_THREADS\"\nexport const DELETE_THREAD = \"DELETE_THREAD\"\nexport const FILTER_THREADS = \"FILTER_THREADS\"\nexport const HYDRATE_THREADS = \"HYDRATE_THREADS\"\nexport const PATCH_THREAD = \"PATCH_THREAD\"\nexport const SORT_THREADS = \"SORT_THREADS\"\n\nexport const MODERATION_PERMISSIONS = [\n  \"can_announce\",\n  \"can_approve\",\n  \"can_close\",\n  \"can_hide\",\n  \"can_move\",\n  \"can_merge\",\n  \"can_pin\",\n  \"can_review\",\n]\n\nexport function append(items, sorting) {\n  return {\n    type: APPEND_THREADS,\n    items,\n    sorting,\n  }\n}\n\nexport function deleteThread(thread) {\n  return {\n    type: DELETE_THREAD,\n    thread,\n  }\n}\n\nexport function filterThreads(category, categoriesMap) {\n  return {\n    type: FILTER_THREADS,\n    category,\n    categoriesMap,\n  }\n}\n\nexport function hydrate(items) {\n  return {\n    type: HYDRATE_THREADS,\n    items,\n  }\n}\n\nexport function patch(thread, patch, sorting = null) {\n  return {\n    type: PATCH_THREAD,\n    thread,\n    patch,\n    sorting,\n  }\n}\n\nexport function sort(sorting) {\n  return {\n    type: SORT_THREADS,\n    sorting,\n  }\n}\n\nexport function getThreadModerationOptions(thread_acl) {\n  let options = []\n  MODERATION_PERMISSIONS.forEach(function (perm) {\n    if (thread_acl[perm]) {\n      options.push(perm)\n    }\n  })\n  return options\n}\n\nexport function hydrateThread(thread) {\n  return Object.assign({}, thread, {\n    started_on: moment(thread.started_on),\n    last_post_on: moment(thread.last_post_on),\n    moderation: getThreadModerationOptions(thread.acl),\n  })\n}\n\nexport default function thread(state = [], action = null) {\n  switch (action.type) {\n    case APPEND_THREADS:\n      const mergedState = concatUnique(action.items.map(hydrateThread), state)\n      return mergedState.sort(action.sorting)\n\n    case DELETE_THREAD:\n      return state.filter(function (item) {\n        return item.id !== action.thread.id\n      })\n\n    case FILTER_THREADS:\n      return state.filter(function (item) {\n        const itemCategory = action.categoriesMap[item.category]\n        if (\n          itemCategory.lft >= action.category.lft &&\n          itemCategory.rght <= action.category.rght\n        ) {\n          // same or sub category\n          return true\n        } else if (item.weight == 2) {\n          // globally pinned\n          return true\n        } else {\n          // thread moved outside displayed scope, hide it\n          return false\n        }\n      })\n\n    case HYDRATE_THREADS:\n      return action.items.map(hydrateThread)\n\n    case PATCH_THREAD:\n      const patchedState = state.map(function (item) {\n        if (item.id === action.thread.id) {\n          return Object.assign({}, item, action.patch)\n        } else {\n          return item\n        }\n      })\n\n      if (action.sorting) {\n        return patchedState.sort(action.sorting)\n      }\n      return patchedState\n\n    case SORT_THREADS:\n      return state.sort(action.sorting)\n\n    default:\n      return state\n  }\n}\n","export var initialState = {\n  tick: 0,\n}\n\nexport const TICK = \"TICK\"\n\nexport function doTick() {\n  return {\n    type: TICK,\n  }\n}\n\nexport default function tick(state = initialState, action = null) {\n  if (action.type === TICK) {\n    return Object.assign({}, state, {\n      tick: state.tick + 1,\n    })\n  } else {\n    return state\n  }\n}\n","import moment from \"moment\"\nimport { UPDATE_AVATAR, UPDATE_USERNAME } from \"misago/reducers/users\"\nimport concatUnique from \"misago/utils/concat-unique\"\n\nexport const ADD_NAME_CHANGE = \"ADD_NAME_CHANGE\"\nexport const APPEND_HISTORY = \"APPEND_HISTORY\"\nexport const HYDRATE_HISTORY = \"HYDRATE_HISTORY\"\n\nexport function addNameChange(change, user, changedBy) {\n  return {\n    type: ADD_NAME_CHANGE,\n    change,\n    user,\n    changedBy,\n  }\n}\n\nexport function append(items) {\n  return {\n    type: APPEND_HISTORY,\n    items: items,\n  }\n}\n\nexport function hydrate(items) {\n  return {\n    type: HYDRATE_HISTORY,\n    items: items,\n  }\n}\n\nexport function hydrateNamechange(namechange) {\n  return Object.assign({}, namechange, {\n    changed_on: moment(namechange.changed_on),\n  })\n}\n\nexport default function username(state = [], action = null) {\n  switch (action.type) {\n    case ADD_NAME_CHANGE:\n      let newState = state.slice()\n      newState.unshift({\n        id: Math.floor(Date.now() / 1000), // just small hax for getting id\n        changed_by: action.changedBy,\n        changed_by_username: action.changedBy.username,\n        changed_on: moment(),\n        new_username: action.change.username,\n        old_username: action.user.username,\n      })\n      return newState\n\n    case APPEND_HISTORY:\n      return concatUnique(state, action.items.map(hydrateNamechange))\n\n    case HYDRATE_HISTORY:\n      return action.items.map(hydrateNamechange)\n\n    case UPDATE_AVATAR:\n      return state.map(function (item) {\n        item = Object.assign({}, item)\n        if (item.changed_by && item.changed_by.id === action.userId) {\n          item.changed_by = Object.assign({}, item.changed_by, {\n            avatars: action.avatars,\n          })\n        }\n\n        return item\n      })\n\n    case UPDATE_USERNAME:\n      return state.map(function (item) {\n        item = Object.assign({}, item)\n        if (item.changed_by && item.changed_by.id === action.userId) {\n          item.changed_by = Object.assign({}, item.changed_by, {\n            username: action.username,\n            slug: action.slug,\n          })\n        }\n\n        return Object.assign({}, item)\n      })\n\n    default:\n      return state\n  }\n}\n","import moment from \"moment\"\nimport concatUnique from \"misago/utils/concat-unique\"\n\nexport const APPEND_USERS = \"APPEND_USERS\"\nexport const HYDRATE_USERS = \"HYDRATE_USERS\"\nexport const UPDATE_AVATAR = \"UPDATE_AVATAR\"\nexport const UPDATE_USERNAME = \"UPDATE_USERNAME\"\n\nexport function append(items) {\n  return {\n    type: APPEND_USERS,\n    items,\n  }\n}\n\nexport function hydrate(items) {\n  return {\n    type: HYDRATE_USERS,\n    items,\n  }\n}\n\nexport function hydrateStatus(status) {\n  if (status) {\n    return Object.assign({}, status, {\n      last_click: status.last_click ? moment(status.last_click) : null,\n      banned_until: status.banned_until ? moment(status.banned_until) : null,\n    })\n  } else {\n    return null\n  }\n}\n\nexport function hydrateUser(user) {\n  return Object.assign({}, user, {\n    joined_on: moment(user.joined_on),\n    status: hydrateStatus(user.status),\n  })\n}\n\nexport function updateAvatar(user, avatars) {\n  return {\n    type: UPDATE_AVATAR,\n    userId: user.id,\n    avatars,\n  }\n}\n\nexport function updateUsername(user, username, slug) {\n  return {\n    type: UPDATE_USERNAME,\n    userId: user.id,\n    username,\n    slug,\n  }\n}\n\nexport default function user(state = [], action = null) {\n  switch (action.type) {\n    case APPEND_USERS:\n      return concatUnique(state, action.items.map(hydrateUser))\n\n    case HYDRATE_USERS:\n      return action.items.map(hydrateUser)\n\n    case UPDATE_AVATAR:\n      return state.map(function (item) {\n        item = Object.assign({}, item)\n        if (item.id === action.userId) {\n          item.avatars = action.avatars\n        }\n\n        return item\n      })\n\n    default:\n      return state\n  }\n}\n","export class Ajax {\n  constructor() {\n    this._cookieName = null\n    this._csrfToken = null\n    this._locks = {}\n  }\n\n  init(cookieName) {\n    this._cookieName = cookieName\n  }\n\n  getCsrfToken() {\n    if (document.cookie.indexOf(this._cookieName) !== -1) {\n      let cookieRegex = new RegExp(this._cookieName + \"=([^;]*)\")\n      let cookie = document.cookie.match(cookieRegex)[0]\n      return cookie ? cookie.split(\"=\")[1] : null\n    } else {\n      return null\n    }\n  }\n\n  request(method, url, data) {\n    let self = this\n    return new Promise(function (resolve, reject) {\n      let xhr = {\n        url: url,\n        method: method,\n        headers: {\n          \"X-CSRFToken\": self.getCsrfToken(),\n        },\n\n        data: data ? JSON.stringify(data) : null,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\",\n\n        success: function (data) {\n          resolve(data)\n        },\n\n        error: function (jqXHR) {\n          let rejection = jqXHR.responseJSON || {}\n\n          rejection.status = jqXHR.status\n\n          if (rejection.status === 0) {\n            rejection.detail = gettext(\"Lost connection with application.\")\n          }\n\n          if (rejection.status === 404) {\n            if (!rejection.detail || rejection.detail === \"NOT FOUND\") {\n              rejection.detail = gettext(\"Action link is invalid.\")\n            }\n          }\n\n          if (rejection.status === 500 && !rejection.detail) {\n            rejection.detail = gettext(\"Unknown error has occured.\")\n          }\n\n          rejection.statusText = jqXHR.statusText\n\n          reject(rejection)\n        },\n      }\n\n      $.ajax(xhr)\n    })\n  }\n\n  get(url, params, lock) {\n    if (params) {\n      url += \"?\" + $.param(params)\n    }\n\n    if (lock) {\n      let self = this\n\n      // update url in existing lock?\n      if (this._locks[lock]) {\n        this._locks[lock].url = url\n      }\n\n      // immediately dereference promise handlers without doing anything\n      // we are already waiting for existing response to resolve\n      if (this._locks[lock] && this._locks[lock].waiter) {\n        return {\n          then: function () {\n            return\n          },\n        }\n\n        // return promise that will begin when original one resolves\n      } else if (this._locks[lock] && this._locks[lock].wait) {\n        this._locks[lock].waiter = true\n\n        return new Promise(function (resolve, reject) {\n          let wait = function (url) {\n            // keep waiting on promise\n            if (self._locks[lock].wait) {\n              window.setTimeout(function () {\n                wait(url)\n              }, 300)\n\n              // poll for new url\n            } else if (self._locks[lock].url !== url) {\n              wait(self._locks[lock].url)\n\n              // ajax backend for response\n            } else {\n              self._locks[lock].waiter = false\n              self.request(\"GET\", self._locks[lock].url).then(\n                function (data) {\n                  if (self._locks[lock].url === url) {\n                    resolve(data)\n                  } else {\n                    self._locks[lock].waiter = true\n                    wait(self._locks[lock].url)\n                  }\n                },\n                function (rejection) {\n                  if (self._locks[lock].url === url) {\n                    reject(rejection)\n                  } else {\n                    self._locks[lock].waiter = true\n                    wait(self._locks[lock].url)\n                  }\n                }\n              )\n            }\n          }\n\n          window.setTimeout(function () {\n            wait(url)\n          }, 300)\n        })\n\n        // setup new lock without waiter\n      } else {\n        this._locks[lock] = {\n          url,\n          wait: true,\n          waiter: false,\n        }\n\n        return new Promise(function (resolve, reject) {\n          self.request(\"GET\", url).then(\n            function (data) {\n              self._locks[lock].wait = false\n              if (self._locks[lock].url === url) {\n                resolve(data)\n              }\n            },\n            function (rejection) {\n              self._locks[lock].wait = false\n              if (self._locks[lock].url === url) {\n                reject(rejection)\n              }\n            }\n          )\n        })\n      }\n    } else {\n      return this.request(\"GET\", url)\n    }\n  }\n\n  post(url, data) {\n    return this.request(\"POST\", url, data)\n  }\n\n  patch(url, data) {\n    return this.request(\"PATCH\", url, data)\n  }\n\n  put(url, data) {\n    return this.request(\"PUT\", url, data)\n  }\n\n  delete(url, data) {\n    return this.request(\"DELETE\", url, data)\n  }\n\n  upload(url, data, progress) {\n    let self = this\n    return new Promise(function (resolve, reject) {\n      let xhr = {\n        url: url,\n        method: \"POST\",\n        headers: {\n          \"X-CSRFToken\": self.getCsrfToken(),\n        },\n\n        data: data,\n        contentType: false,\n        processData: false,\n\n        xhr: function () {\n          let xhr = new window.XMLHttpRequest()\n          xhr.upload.addEventListener(\n            \"progress\",\n            function (evt) {\n              if (evt.lengthComputable) {\n                progress(Math.round((evt.loaded / evt.total) * 100))\n              }\n            },\n            false\n          )\n          return xhr\n        },\n\n        success: function (response) {\n          resolve(response)\n        },\n\n        error: function (jqXHR) {\n          let rejection = jqXHR.responseJSON || {}\n\n          rejection.status = jqXHR.status\n\n          if (rejection.status === 0) {\n            rejection.detail = gettext(\"Lost connection with application.\")\n          }\n\n          if (rejection.status === 413 && !rejection.detail) {\n            rejection.detail = gettext(\n              \"Upload was rejected by server as too large.\"\n            )\n          }\n\n          if (rejection.status === 404) {\n            if (!rejection.detail || rejection.detail === \"NOT FOUND\") {\n              rejection.detail = gettext(\"Action link is invalid.\")\n            }\n          }\n\n          if (rejection.status === 500 && !rejection.detail) {\n            rejection.detail = gettext(\"Unknown error has occured.\")\n          }\n\n          rejection.statusText = jqXHR.statusText\n\n          reject(rejection)\n        },\n      }\n\n      $.ajax(xhr)\n    })\n  }\n}\n\nexport default new Ajax()\n","import { signIn, signOut } from \"misago/reducers/auth\"\n\nexport class Auth {\n  init(store, local, modal) {\n    this._store = store\n    this._local = local\n    this._modal = modal\n\n    // tell other tabs what auth state is because we are most current with it\n    this.syncSession()\n\n    // listen for other tabs to tell us that state changed\n    this.watchState()\n  }\n\n  syncSession() {\n    const state = this._store.getState().auth\n    if (state.isAuthenticated) {\n      this._local.set(\"auth\", {\n        isAuthenticated: true,\n        username: state.user.username,\n      })\n    } else {\n      this._local.set(\"auth\", {\n        isAuthenticated: false,\n      })\n    }\n  }\n\n  watchState() {\n    const state = this._store.getState().auth\n    this._local.watch(\"auth\", (newState) => {\n      if (newState.isAuthenticated) {\n        this._store.dispatch(\n          signIn({\n            username: newState.username,\n          })\n        )\n      } else if (state.isAuthenticated) {\n        // check if we are authenticated in this tab\n        // because some browser plugins prune local store\n        // aggressively, forcing erroneous message to display here\n        // tracking bug #955\n        this._store.dispatch(signOut())\n      }\n    })\n    this._modal.hide()\n  }\n\n  signIn(user) {\n    this._store.dispatch(signIn(user))\n    this._local.set(\"auth\", {\n      isAuthenticated: true,\n      username: user.username,\n    })\n    this._modal.hide()\n  }\n\n  signOut() {\n    this._store.dispatch(signOut())\n    this._local.set(\"auth\", {\n      isAuthenticated: false,\n    })\n    this._modal.hide()\n  }\n\n  softSignOut() {\n    this._store.dispatch(signOut(true))\n    this._local.set(\"auth\", {\n      isAuthenticated: false,\n    })\n    this._modal.hide()\n  }\n}\n\nexport default new Auth()\n","/* global grecaptcha */\nimport React from \"react\"\nimport FormGroup from \"misago/components/form-group\"\n\nexport class BaseCaptcha {\n  init(context, ajax, include, snackbar) {\n    this._context = context\n    this._ajax = ajax\n    this._include = include\n    this._snackbar = snackbar\n  }\n}\n\nexport class NoCaptcha extends BaseCaptcha {\n  load() {\n    return new Promise(function (resolve) {\n      // immediately resolve as we don't have anything to validate\n      resolve()\n    })\n  }\n\n  validator() {\n    return null\n  }\n\n  component() {\n    return null\n  }\n}\n\nexport class QACaptcha extends BaseCaptcha {\n  load() {\n    var self = this\n    return new Promise((resolve, reject) => {\n      self._ajax.get(self._context.get(\"CAPTCHA_API\")).then(\n        function (data) {\n          self.question = data.question\n          self.helpText = data.help_text\n          resolve()\n        },\n        function () {\n          self._snackbar.error(gettext(\"Failed to load CAPTCHA.\"))\n          reject()\n        }\n      )\n    })\n  }\n\n  validator() {\n    return []\n  }\n\n  component(kwargs) {\n    return (\n      <FormGroup\n        label={this.question}\n        for=\"id_captcha\"\n        labelClass={kwargs.labelClass || \"\"}\n        controlClass={kwargs.controlClass || \"\"}\n        validation={kwargs.form.state.errors.captcha}\n        helpText={this.helpText || null}\n      >\n        <input\n          aria-describedby=\"id_captcha_status\"\n          className=\"form-control\"\n          disabled={kwargs.form.state.isLoading}\n          id=\"id_captcha\"\n          onChange={kwargs.form.bindInput(\"captcha\")}\n          type=\"text\"\n          value={kwargs.form.state.captcha}\n        />\n      </FormGroup>\n    )\n  }\n}\n\nexport class ReCaptchaComponent extends React.Component {\n  componentDidMount() {\n    grecaptcha.render(\"recaptcha\", {\n      sitekey: this.props.siteKey,\n      callback: (response) => {\n        // fire fakey event to binding\n        this.props.binding({\n          target: {\n            value: response,\n          },\n        })\n      },\n    })\n  }\n\n  render() {\n    return <div id=\"recaptcha\" />\n  }\n}\n\nexport class ReCaptcha extends BaseCaptcha {\n  load() {\n    this._include.include(\"https://www.google.com/recaptcha/api.js\", true)\n\n    return new Promise(function (resolve) {\n      var wait = function () {\n        if (typeof grecaptcha === \"undefined\") {\n          window.setTimeout(function () {\n            wait()\n          }, 200)\n        } else {\n          resolve()\n        }\n      }\n      wait()\n    })\n  }\n\n  validator() {\n    return []\n  }\n\n  component(kwargs) {\n    return (\n      <FormGroup\n        label={gettext(\"Please solve the quick test\")}\n        for=\"id_captcha\"\n        labelClass={kwargs.labelClass || \"\"}\n        controlClass={kwargs.controlClass || \"\"}\n        validation={kwargs.form.state.errors.captcha}\n        helpText={gettext(\n          \"This test helps us prevent automated spam registrations on our site.\"\n        )}\n      >\n        <ReCaptchaComponent\n          binding={kwargs.form.bindInput(\"captcha\")}\n          siteKey={this._context.get(\"SETTINGS\").recaptcha_site_key}\n        />\n      </FormGroup>\n    )\n  }\n}\n\nexport class Captcha {\n  init(context, ajax, include, snackbar) {\n    switch (context.get(\"SETTINGS\").captcha_type) {\n      case \"no\":\n        this._captcha = new NoCaptcha()\n        break\n\n      case \"qa\":\n        this._captcha = new QACaptcha()\n        break\n\n      case \"re\":\n        this._captcha = new ReCaptcha()\n        break\n    }\n\n    this._captcha.init(context, ajax, include, snackbar)\n  }\n\n  // accessors for underlying strategy\n\n  load() {\n    return this._captcha.load()\n  }\n\n  validator() {\n    return this._captcha.validator()\n  }\n\n  component(kwargs) {\n    return this._captcha.component(kwargs)\n  }\n}\n\nexport default new Captcha()\n","export class Include {\n  init(staticUrl) {\n    this._staticUrl = staticUrl\n    this._included = []\n  }\n\n  include(script, remote = false) {\n    if (this._included.indexOf(script) === -1) {\n      this._included.push(script)\n      this._include(script, remote)\n    }\n  }\n\n  _include(script, remote) {\n    $.ajax({\n      url: (!remote ? this._staticUrl : \"\") + script,\n      cache: true,\n      dataType: \"script\",\n    })\n  }\n}\n\nexport default new Include()\n","let storage = window.localStorage\n\nexport class LocalStorage {\n  init(prefix) {\n    this._prefix = prefix\n    this._watchers = []\n\n    window.addEventListener(\"storage\", (e) => {\n      let newValueJson = JSON.parse(e.newValue)\n      this._watchers.forEach(function (watcher) {\n        if (watcher.key === e.key && e.oldValue !== e.newValue) {\n          watcher.callback(newValueJson)\n        }\n      })\n    })\n  }\n\n  set(key, value) {\n    storage.setItem(this._prefix + key, JSON.stringify(value))\n  }\n\n  get(key) {\n    let itemString = storage.getItem(this._prefix + key)\n    if (itemString) {\n      return JSON.parse(itemString)\n    } else {\n      return null\n    }\n  }\n\n  watch(key, callback) {\n    this._watchers.push({\n      key: this._prefix + key,\n      callback: callback,\n    })\n  }\n}\n\nexport default new LocalStorage()\n","import mount from \"misago/utils/mount-component\"\n\nexport class MobileNavbarDropdown {\n  init(element) {\n    this._element = element\n    this._component = null\n  }\n\n  show(component) {\n    if (this._component === component) {\n      this.hide()\n    } else {\n      this._component = component\n      mount(component, this._element.id)\n      $(this._element).addClass(\"open\")\n    }\n  }\n\n  showConnected(name, component) {\n    if (this._component === name) {\n      this.hide()\n    } else {\n      this._component = name\n      mount(component, this._element.id, true)\n      $(this._element).addClass(\"open\")\n    }\n  }\n\n  hide() {\n    $(this._element).removeClass(\"open\")\n    this._component = null\n  }\n}\n\nexport default new MobileNavbarDropdown()\n","import ReactDOM from \"react-dom\"\nimport mount from \"misago/utils/mount-component\"\n\nexport class Modal {\n  init(element) {\n    this._element = element\n\n    this._modal = $(element).modal({ show: false })\n\n    this._modal.on(\"hidden.bs.modal\", () => {\n      ReactDOM.unmountComponentAtNode(this._element)\n    })\n  }\n\n  show(component) {\n    mount(component, this._element.id)\n    this._modal.modal(\"show\")\n  }\n\n  hide() {\n    this._modal.modal(\"hide\")\n  }\n}\n\nexport default new Modal()\n","export class PageTitle {\n  init(indexTitle, forumName) {\n    this._indexTitle = indexTitle\n    this._forumName = forumName\n  }\n\n  set(title) {\n    if (!title) {\n      document.title = this._indexTitle || this._forumName\n      return\n    }\n\n    if (typeof title === \"string\") {\n      title = { title: title }\n    }\n\n    let finalTitle = title.title\n\n    if (title.page > 1) {\n      const pageLabel = interpolate(\n        gettext(\"page: %(page)s\"),\n        {\n          page: title.page,\n        },\n        true\n      )\n\n      finalTitle += \" (\" + pageLabel + \")\"\n    }\n\n    if (title.parent) {\n      finalTitle += \" | \" + title.parent\n    }\n\n    document.title = finalTitle + \" | \" + this._forumName\n  }\n}\n\nexport default new PageTitle()\n","export class Polls {\n  init(ajax, snackbar) {\n    this._ajax = ajax\n    this._snackbar = snackbar\n\n    this._polls = {}\n  }\n\n  start(kwargs) {\n    this.stop(kwargs.poll)\n\n    const poolServer = () => {\n      this._polls[kwargs.poll] = kwargs\n\n      this._ajax.get(kwargs.url, kwargs.data || null).then(\n        (data) => {\n          if (!this._polls[kwargs.poll]._stopped) {\n            kwargs.update(data)\n\n            this._polls[kwargs.poll].timeout = window.setTimeout(\n              poolServer,\n              kwargs.frequency\n            )\n          }\n        },\n        (rejection) => {\n          if (!this._polls[kwargs.poll]._stopped) {\n            if (kwargs.error) {\n              kwargs.error(rejection)\n            } else {\n              this._snackbar.apiError(rejection)\n            }\n          }\n        }\n      )\n    }\n\n    if (kwargs.delayed) {\n      this._polls[kwargs.poll] = {\n        timeout: window.setTimeout(poolServer, kwargs.frequency),\n      }\n    } else {\n      poolServer()\n    }\n  }\n\n  stop(pollId) {\n    if (this._polls[pollId]) {\n      window.clearTimeout(this._polls[pollId].timeout)\n      this._polls[pollId]._stopped = true\n    }\n  }\n}\n\nexport default new Polls()\n","import React from \"react\"\n\nexport default class extends React.Component {\n  onClick = () => {\n    this.props.replaceSelection(this.props.execAction)\n  }\n\n  render() {\n    return (\n      <button\n        className={\"btn btn-icon \" + this.props.className}\n        disabled={this.props.disabled}\n        onClick={this.onClick}\n        title={this.props.title}\n        type=\"button\"\n      >\n        {this.props.children}\n      </button>\n    )\n  }\n}\n","import React from \"react\"\nimport Action from \"./action\"\n\nexport default function (props) {\n  return (\n    <Action execAction={insertCode} title={gettext(\"Insert code\")} {...props}>\n      <span className=\"material-icon\">functions</span>\n    </Action>\n  )\n}\n\nexport function insertCode(selection, replace) {\n  const syntax = $.trim(\n    prompt(gettext(\"Enter name of syntax of your code (optional)\") + \":\")\n  )\n  replace(\"\\n\\n```\" + syntax + \"\\n\" + selection + \"\\n```\\n\\n\")\n}\n","import React from \"react\"\nimport Action from \"./action\"\n\nexport default function (props) {\n  return (\n    <Action\n      execAction={makeEmphasis}\n      title={gettext(\"Emphase selection\")}\n      {...props}\n    >\n      <span className=\"material-icon\">format_italic</span>\n    </Action>\n  )\n}\n\nexport function makeEmphasis(selection, replace) {\n  if (selection.length) {\n    replace(\"*\" + selection + \"*\")\n  }\n}\n","import React from \"react\"\nimport Action from \"./action\"\n\nexport default function (props) {\n  return (\n    <Action\n      execAction={insertHr}\n      title={gettext(\"Insert horizontal ruler\")}\n      {...props}\n    >\n      <span className=\"material-icon\">remove</span>\n    </Action>\n  )\n}\n\nexport function insertHr(selection, replace) {\n  replace(\"\\n\\n- - - - -\\n\\n\")\n}\n","const URL_PATTERN = new RegExp(\n  \"^(https?:\\\\/\\\\/)?((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*(\\\\?[;&a-z\\\\d%_.~+=-]*)?(\\\\#[-a-z\\\\d_]*)?$\",\n  \"i\"\n)\n\nexport default function (str) {\n  return URL_PATTERN.test($.trim(str))\n}\n","import React from \"react\"\nimport Action from \"./action\"\nimport isUrl from \"misago/utils/is-url\"\n\nexport default function (props) {\n  return (\n    <Action execAction={insertImage} title={gettext(\"Insert image\")} {...props}>\n      <span className=\"material-icon\">insert_photo</span>\n    </Action>\n  )\n}\n\nexport function insertImage(selection, replace) {\n  let url = \"\"\n  let label = \"\"\n\n  if (selection.length) {\n    if (isUrl(selection)) {\n      url = selection\n    } else {\n      label = selection\n    }\n  }\n\n  url = $.trim(prompt(gettext(\"Enter link to image\") + \":\", url))\n\n  if (url.length) {\n    label = $.trim(prompt(gettext(\"Enter image label (optional)\") + \":\", label))\n    if (label.length > 0) {\n      replace(\"![\" + label + \"](\" + url + \")\")\n    } else {\n      replace(\"!(\" + url + \")\")\n    }\n  }\n}\n","import React from \"react\"\nimport Action from \"./action\"\nimport isUrl from \"misago/utils/is-url\"\n\nexport default function (props) {\n  return (\n    <Action execAction={insertLink} title={gettext(\"Insert link\")} {...props}>\n      <span className=\"material-icon\">insert_link</span>\n    </Action>\n  )\n}\n\nexport function insertLink(selection, replace) {\n  let url = \"\"\n  let label = \"\"\n\n  if (selection.length) {\n    if (isUrl(selection)) {\n      url = selection\n    } else {\n      label = selection\n    }\n  }\n\n  url = $.trim(prompt(gettext(\"Enter link address\") + \":\", url) || \"\")\n  if (url.length === 0) return false\n  label = $.trim(prompt(gettext(\"Enter link label (optional)\") + \":\", label))\n\n  if (url.length) {\n    if (label.length > 0) {\n      replace(\"[\" + label + \"](\" + url + \")\")\n    } else {\n      replace(url)\n    }\n  }\n}\n","import React from \"react\"\nimport Action from \"./action\"\nimport isUrl from \"misago/utils/is-url\"\n\nexport default function (props) {\n  return (\n    <Action\n      execAction={insertSpoiler}\n      title={gettext(\"Insert spoiler\")}\n      {...props}\n    >\n      <span className=\"material-icon\">not_interested</span>\n    </Action>\n  )\n}\n\nexport function insertSpoiler(selection, replace) {\n  replace(\"\\n\\n[spoiler]\\n\" + selection + \"\\n[/spoiler]\\n\\n\")\n}\n","import React from \"react\"\nimport Action from \"./action\"\n\nexport default function (props) {\n  return (\n    <Action\n      execAction={makeStrikethrough}\n      title={gettext(\"Strikethrough selection\")}\n      {...props}\n    >\n      <span className=\"material-icon\">format_strikethrough</span>\n    </Action>\n  )\n}\n\nexport function makeStrikethrough(selection, replace) {\n  if (selection.length) {\n    replace(\"~~\" + selection + \"~~\")\n  }\n}\n","import React from \"react\"\nimport Action from \"./action\"\n\nexport default function (props) {\n  return (\n    <Action\n      execAction={makeStrong}\n      title={gettext(\"Bolder selection\")}\n      {...props}\n    >\n      <span className=\"material-icon\">format_bold</span>\n    </Action>\n  )\n}\n\nexport function makeStrong(selection, replace) {\n  if (selection.length) {\n    replace(\"**\" + selection + \"**\")\n  }\n}\n","import React from \"react\"\nimport Action from \"./action\"\nimport isUrl from \"misago/utils/is-url\"\n\nexport default function (props) {\n  return (\n    <Action execAction={insertQuote} title={gettext(\"Insert quote\")} {...props}>\n      <span className=\"material-icon\">format_quote</span>\n    </Action>\n  )\n}\n\nexport function insertQuote(selection, replace) {\n  let title = $.trim(\n    prompt(gettext(\"Enter quote autor, prefix usernames with @\") + \":\", title)\n  )\n\n  if (title) {\n    replace('\\n\\n[quote=\"' + title + '\"]\\n' + selection + \"\\n[/quote]\\n\\n\")\n  } else {\n    replace(\"\\n\\n[quote]\\n\" + selection + \"\\n[/quote]\\n\\n\")\n  }\n}\n","import React from \"react\"\nimport misago from \"misago\"\nimport escapeHtml from \"misago/utils/escape-html\"\nimport formatFilesize from \"misago/utils/file-size\"\n\nconst DATE_ABBR = '<abbr title=\"%(absolute)s\">%(relative)s</abbr>'\nconst USER_SPAN = '<span class=\"item-title\">%(user)s</span>'\nconst USER_URL = '<a href=\"%(url)s\" class=\"item-title\">%(user)s</a>'\n\nexport default class extends React.Component {\n  onInsert = () => {\n    this.props.replaceSelection(this.insertAttachment)\n  }\n\n  insertAttachment = (selection, replace) => {\n    const item = this.props.item\n\n    if (item.is_image) {\n      if (item.url.thumb) {\n        replace(\n          \"[![\" +\n            item.filename +\n            \"](\" +\n            item.url.thumb +\n            \")](\" +\n            item.url.index +\n            \")\"\n        )\n      } else {\n        replace(\n          \"[![\" +\n            item.filename +\n            \"](\" +\n            item.url.index +\n            \")](\" +\n            item.url.index +\n            \")\"\n        )\n      }\n    } else {\n      replace(\"[\" + item.filename + \"](\" + item.url.index + \")\")\n    }\n  }\n\n  onRemove = () => {\n    this.updateItem({\n      isRemoved: true,\n    })\n  }\n\n  onUndo = () => {\n    this.updateItem({\n      isRemoved: false,\n    })\n  }\n\n  updateItem = (newState) => {\n    const updatedAttachments = this.props.attachments.map((item) => {\n      if (item.id === this.props.item.id) {\n        return Object.assign({}, item, newState)\n      } else {\n        return item\n      }\n    })\n    this.props.onAttachmentsChange(updatedAttachments)\n  }\n\n  render() {\n    return (\n      <li className=\"editor-attachment-complete\">\n        <div className=\"row\">\n          <div className=\"col-xs-12 col-sm-8 col-md-9\">\n            <Preview {...this.props} />\n            <div className=\"editor-attachment-details\">\n              <Filename {...this.props} />\n              <Details {...this.props} />\n            </div>\n          </div>\n          <div className=\"col-xs-12 col-sm-4 col-md-3 xs-margin-top-half\">\n            <Actions\n              onInsert={this.onInsert}\n              onRemove={this.onRemove}\n              onUndo={this.onUndo}\n              {...this.props}\n            />\n          </div>\n        </div>\n      </li>\n    )\n  }\n}\n\nexport function Preview(props) {\n  if (props.item.is_image) {\n    return <Image {...props} />\n  } else {\n    return <Icon {...props} />\n  }\n}\n\nexport function Image(props) {\n  const thumbnailUrl = props.item.url.thumb || props.item.url.index\n\n  return (\n    <div className=\"editor-attachment-image\">\n      <a\n        href={props.item.url.index + \"?shva=1\"}\n        style={{ backgroundImage: \"url('\" + thumbnailUrl + \"?shva=1')\" }}\n        target=\"_blank\"\n      />\n    </div>\n  )\n}\n\nexport function Icon(props) {\n  return (\n    <div className=\"editor-attachment-icon\">\n      <span className=\"material-icon\">insert_drive_file</span>\n    </div>\n  )\n}\n\nexport function Filename(props) {\n  return (\n    <h4>\n      <a\n        className=\"item-title\"\n        href={props.item.url.index + \"?shva=1\"}\n        target=\"_blank\"\n      >\n        {props.item.filename}\n      </a>\n    </h4>\n  )\n}\n\nexport function Details(props) {\n  let user = null\n  if (props.item.url.uploader) {\n    user = interpolate(\n      USER_URL,\n      {\n        url: escapeHtml(props.item.url.uploader),\n        user: escapeHtml(props.item.uploader_name),\n      },\n      true\n    )\n  } else {\n    user = interpolate(\n      USER_SPAN,\n      {\n        user: escapeHtml(props.item.uploader_name),\n      },\n      true\n    )\n  }\n\n  const date = interpolate(\n    DATE_ABBR,\n    {\n      absolute: escapeHtml(props.item.uploaded_on.format(\"LLL\")),\n      relative: escapeHtml(props.item.uploaded_on.fromNow()),\n    },\n    true\n  )\n\n  const message = interpolate(\n    escapeHtml(\n      gettext(\n        \"%(filetype)s, %(size)s, uploaded by %(uploader)s %(uploaded_on)s.\"\n      )\n    ),\n    {\n      filetype: props.item.filetype,\n      size: formatFilesize(props.item.size),\n      uploader: user,\n      uploaded_on: date,\n    },\n    true\n  )\n\n  return <p dangerouslySetInnerHTML={{ __html: message }} />\n}\n\nexport function Actions(props) {\n  return (\n    <div className=\"editor-attachment-actions\">\n      <div className=\"row\">\n        <Insert {...props} />\n        <Remove {...props} />\n        <Undo {...props} />\n      </div>\n    </div>\n  )\n}\n\nexport function Insert(props) {\n  if (!!props.item.isRemoved) {\n    return null\n  }\n\n  return (\n    <div className=\"col-xs-6\">\n      <button\n        className=\"btn btn-default btn-sm btn-block\"\n        onClick={props.onInsert}\n        type=\"button\"\n      >\n        {gettext(\"Insert\")}\n      </button>\n    </div>\n  )\n}\n\nexport function Remove(props) {\n  if (!!props.item.isRemoved && props.item.acl.can_delete) {\n    return null\n  }\n\n  return (\n    <div className=\"col-xs-6\">\n      <button\n        className=\"btn btn-default btn-sm btn-block\"\n        onClick={props.onRemove}\n        type=\"button\"\n      >\n        {gettext(\"Remove\")}\n      </button>\n    </div>\n  )\n}\n\nexport function Undo(props) {\n  if (!props.item.isRemoved) {\n    return null\n  }\n\n  return (\n    <div className=\"col-xs-12\">\n      <button\n        className=\"btn btn-default btn-sm btn-block\"\n        onClick={props.onUndo}\n        type=\"button\"\n      >\n        {gettext(\"Undo removal\")}\n      </button>\n    </div>\n  )\n}\n","import React from \"react\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nconst STRONG = \"<strong>%(name)s</strong>\"\n\nexport default class extends React.Component {\n  onClick = () => {\n    const filteredAttachments = this.props.attachments.filter((item) => {\n      return item.key !== this.props.item.key\n    })\n    this.props.onAttachmentsChange(filteredAttachments)\n  }\n\n  render() {\n    const filename = interpolate(\n      STRONG,\n      {\n        name: escapeHtml(this.props.item.filename),\n      },\n      true\n    )\n\n    const title = interpolate(\n      gettext(\"Error uploading %(filename)s\"),\n      {\n        filename,\n        progress: this.props.item.progress + \"%\",\n      },\n      true\n    )\n\n    return (\n      <li className=\"editor-attachment-error\">\n        <div className=\"editor-attachment-error-icon\">\n          <span className=\"material-icon\">warning</span>\n        </div>\n        <div className=\"editor-attachment-error-message\">\n          <h4 dangerouslySetInnerHTML={{ __html: title + \":\" }} />\n          <p>{this.props.item.error}</p>\n          <button\n            className=\"btn btn-default btn-sm\"\n            onClick={this.onClick}\n            type=\"button\"\n          >\n            {gettext(\"Dismiss\")}\n          </button>\n        </div>\n      </li>\n    )\n  }\n}\n","import React from \"react\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nconst STRONG = \"<strong>%(name)s</strong>\"\n\nexport default function (props) {\n  const filename = interpolate(\n    STRONG,\n    {\n      name: escapeHtml(props.item.filename),\n    },\n    true\n  )\n\n  const message = interpolate(\n    gettext(\"Uploading %(filename)s... %(progress)s\"),\n    {\n      filename,\n      progress: props.item.progress + \"%\",\n    },\n    true\n  )\n\n  return (\n    <li className=\"editor-attachment-upload\">\n      <div className=\"editor-attachment-progress-bar\">\n        <div\n          className=\"editor-attachment-progress\"\n          style={{ width: props.item.progress + \"%\" }}\n        />\n      </div>\n      <p\n        className=\"editor-attachment-upload-message\"\n        dangerouslySetInnerHTML={{ __html: message }}\n      />\n    </li>\n  )\n}\n","import React from \"react\"\nimport AttachmentComplete from \"./complete\"\nimport AttachmentError from \"./error\"\nimport AttachmentUpload from \"./upload\"\nimport misago from \"misago\"\nimport escapeHtml from \"misago/utils/escape-html\"\n\nexport default function (props) {\n  if (props.item.id) {\n    return <AttachmentComplete {...props} />\n  }\n\n  if (props.item.error) {\n    return <AttachmentError {...props} />\n  }\n\n  return <AttachmentUpload {...props} />\n}\n","import React from \"react\"\nimport Attachment from \"./attachment\"\n\nexport default function (props) {\n  return (\n    <ul className=\"list-unstyled editor-attachments-list\">\n      {props.attachments.map((item) => {\n        return <Attachment item={item} key={item.id || item.key} {...props} />\n      })}\n    </ul>\n  )\n}\n","import React from \"react\"\nimport moment from \"moment\"\nimport misago from \"misago\"\nimport ajax from \"misago/services/ajax\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends React.Component {\n  onChange = (event) => {\n    const file = event.target.files[0]\n    if (!file) {\n      return\n    }\n\n    let upload = {\n      id: null,\n      key: getRandomKey(),\n      progress: 0,\n      error: null,\n      filename: file.name,\n    }\n\n    this.props.onAttachmentsChange([upload].concat(this.props.attachments))\n\n    const data = new FormData()\n    data.append(\"upload\", file)\n\n    ajax\n      .upload(misago.get(\"ATTACHMENTS_API\"), data, (progress) => {\n        upload.progress = progress\n        this.props.onAttachmentsChange(this.props.attachments.concat())\n      })\n      .then(\n        (data) => {\n          data.uploaded_on = moment(data.uploaded_on)\n          Object.assign(upload, data)\n          this.props.onAttachmentsChange(this.props.attachments.concat())\n        },\n        (rejection) => {\n          if (rejection.status === 400 || rejection.status === 413) {\n            upload.error = rejection.detail\n            this.props.onAttachmentsChange(this.props.attachments.concat())\n          } else {\n            snackbar.apiError(rejection)\n          }\n        }\n      )\n  }\n\n  render() {\n    return (\n      <input id=\"editor-upload-field\" onChange={this.onChange} type=\"file\" />\n    )\n  }\n}\n\nexport function getRandomKey() {\n  return \"upld-\" + Math.round(new Date().getTime())\n}\n","import React from \"react\"\nimport List from \"./list\"\nimport Uploader from \"./uploader\"\nimport misago from \"misago\"\n\nexport default function (props) {\n  if (!misago.get(\"user\").acl.max_attachment_size) {\n    return null\n  }\n\n  return (\n    <div className=\"editor-attachments\">\n      <List {...props} />\n      <Uploader {...props} />\n    </div>\n  )\n}\n","import React from \"react\"\nimport misago from \"misago\"\n\nexport default class extends React.Component {\n  onClick = () => {\n    document.getElementById(\"editor-upload-field\").click()\n  }\n\n  render() {\n    if (!misago.get(\"user\").acl.max_attachment_size) {\n      return null\n    }\n\n    return (\n      <button\n        className={\"btn btn-icon \" + this.props.className}\n        disabled={this.props.disabled}\n        onClick={this.onClick}\n        title={gettext(\"Upload file\")}\n        type=\"button\"\n      >\n        <span className=\"material-icon\">file_upload</span>\n      </button>\n    )\n  }\n}\n","import React from \"react\"\nimport MisagoMarkup from \"misago/components/misago-markup\"\n\nexport default function (props) {\n  return (\n    <div className=\"modal-dialog\" role=\"document\">\n      <div className=\"modal-content\">\n        <div className=\"modal-header\">\n          <button\n            aria-label={gettext(\"Close\")}\n            className=\"close\"\n            data-dismiss=\"modal\"\n            type=\"button\"\n          >\n            <span aria-hidden=\"true\">&times;</span>\n          </button>\n          <h4 className=\"modal-title\">{gettext(\"Preview message\")}</h4>\n        </div>\n        <div className=\"modal-body markup-preview\">\n          <MisagoMarkup markup={props.markup} />\n        </div>\n      </div>\n    </div>\n  )\n}\n","export const textareaId = \"editor-textarea\"\n\nexport function getTextarea() {\n  return document.getElementById(textareaId)\n}\n\nexport function getValue() {\n  return document.getElementById(textareaId).value\n}\n\nexport function getSelectionRange(start, end) {\n  return {\n    start,\n    end,\n  }\n}\n\nexport function getSelection() {\n  const ctrl = getTextarea()\n  if (document.selection) {\n    ctrl.focus()\n    const range = document.selection.createRange()\n    const length = range.text.length\n    range.moveStart(\"character\", -ctrl.value.length)\n    return getSelectionRange(range.text.length - length, range.text.length)\n  } else if (ctrl.selectionStart || ctrl.selectionStart == \"0\") {\n    return getSelectionRange(ctrl.selectionStart, ctrl.selectionEnd)\n  }\n}\n\nexport function getSelectionText() {\n  const range = getSelection()\n  return $.trim(getValue().substring(range.start, range.end))\n}\n\nexport function setSelection(selectionRange) {\n  const ctrl = getTextarea()\n  if (ctrl.setSelectionRange) {\n    ctrl.focus()\n    ctrl.setSelectionRange(selectionRange.start, selectionRange.end)\n  } else if (ctrl.createTextRange) {\n    const range = ctrl.createTextRange()\n    range.collapse(true)\n    range.moveStart(\"character\", selectionRange.start)\n    range.moveEnd(\"character\", selectionRange.end)\n    range.select()\n  }\n}\n\nexport function _replace(myRange, replacement) {\n  const ctrl = getTextarea()\n  const text = ctrl.value\n  const startText = text.substring(0, myRange.start)\n  ctrl.value =\n    text.substring(0, myRange.start) + replacement + text.substring(myRange.end)\n  setSelection(\n    getSelectionRange(\n      startText.length + replacement.length,\n      startText.length + replacement.length\n    )\n  )\n  return ctrl.value\n}\n\nexport function replace(replacement) {\n  return _replace(getSelection(), replacement)\n}\n","import React from \"react\"\nimport Code from \"./actions/code\"\nimport Emphasis from \"./actions/emphasis\"\nimport Hr from \"./actions/hr\"\nimport Image from \"./actions/image\"\nimport Link from \"./actions/link\"\nimport Spoiler from \"./actions/spoiler\"\nimport Strikethrough from \"./actions/strikethrough\"\nimport Strong from \"./actions/strong\"\nimport Quote from \"./actions/quote\"\nimport AttachmentsEditor from \"./attachments\"\nimport Upload from \"./attachments/upload-button\"\nimport MarkupPreview from \"./markup-preview\"\nimport * as textUtils from \"./textutils\"\nimport Button from \"misago/components/button\"\nimport misago from \"misago\"\nimport ajax from \"misago/services/ajax\"\nimport modal from \"misago/services/modal\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends React.Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isPreviewLoading: false,\n    }\n  }\n\n  componentDidMount() {\n    $(\"#editor-textarea\").atwho({\n      at: \"@\",\n      displayTpl: '<li><img src=\"${avatar}\" alt=\"\">${username}</li>',\n      insertTpl: \"@${username}\",\n      searchKey: \"username\",\n      callbacks: {\n        remoteFilter: function (query, callback) {\n          $.getJSON(misago.get(\"MENTION_API\"), { q: query }, callback)\n        },\n      },\n    })\n\n    $(\"#editor-textarea\").on(\"inserted.atwho\", (event, flag, query) => {\n      this.props.onChange(event)\n    })\n  }\n\n  onPreviewClick = () => {\n    if (this.state.isPreviewLoading) {\n      return\n    }\n\n    this.setState({\n      isPreviewLoading: true,\n    })\n\n    ajax.post(misago.get(\"PARSE_MARKUP_API\"), { post: this.props.value }).then(\n      (data) => {\n        modal.show(<MarkupPreview markup={data.parsed} />)\n\n        this.setState({\n          isPreviewLoading: false,\n        })\n      },\n      (rejection) => {\n        if (rejection.status === 400) {\n          snackbar.error(rejection.detail)\n        } else {\n          snackbar.apiError(rejection)\n        }\n\n        this.setState({\n          isPreviewLoading: false,\n        })\n      }\n    )\n  }\n\n  replaceSelection = (operation) => {\n    operation(textUtils.getSelectionText(), this._replaceSelection)\n  }\n\n  _replaceSelection = (newValue) => {\n    this.props.onChange({\n      target: {\n        value: textUtils.replace(newValue),\n      },\n    })\n  }\n\n  render() {\n    return (\n      <div className=\"editor-border\">\n        <textarea\n          className=\"form-control\"\n          value={this.props.value}\n          disabled={this.props.loading}\n          id=\"editor-textarea\"\n          onChange={this.props.onChange}\n          rows=\"9\"\n        />\n        <div className=\"editor-footer\">\n          <div className=\"buttons-list pull-left\">\n            <Strong\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n              replaceSelection={this.replaceSelection}\n            />\n            <Emphasis\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n              replaceSelection={this.replaceSelection}\n            />\n            <Strikethrough\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n              replaceSelection={this.replaceSelection}\n            />\n            <Hr\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n              replaceSelection={this.replaceSelection}\n            />\n            <Link\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n              replaceSelection={this.replaceSelection}\n            />\n            <Image\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n              replaceSelection={this.replaceSelection}\n            />\n            <Quote\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n              replaceSelection={this.replaceSelection}\n            />\n            <Spoiler\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n              replaceSelection={this.replaceSelection}\n            />\n            <Code\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n              replaceSelection={this.replaceSelection}\n            />\n            <Upload\n              className=\"btn-default btn-sm pull-left\"\n              disabled={this.props.loading || this.state.isPreviewLoading}\n            />\n          </div>\n          <Button\n            className=\"btn-default btn-sm pull-left\"\n            disabled={this.props.loading || this.state.isPreviewLoading}\n            onClick={this.onPreviewClick}\n            type=\"button\"\n          >\n            {gettext(\"Preview\")}\n          </Button>\n          <Button\n            className=\"btn-primary btn-sm pull-right\"\n            loading={this.props.loading}\n          >\n            {this.props.submitLabel || gettext(\"Post\")}\n          </Button>\n          <button\n            className=\"btn btn-default btn-sm pull-right\"\n            disabled={this.props.loading}\n            onClick={this.props.onCancel}\n            type=\"button\"\n          >\n            {gettext(\"Cancel\")}\n          </button>\n          <div className=\"clearfix visible-xs-block\" />\n          <Protect\n            canProtect={this.props.canProtect}\n            disabled={this.props.loading}\n            onProtect={this.props.onProtect}\n            onUnprotect={this.props.onUnprotect}\n            protect={this.props.protect}\n          />\n        </div>\n        <AttachmentsEditor\n          attachments={this.props.attachments}\n          onAttachmentsChange={this.props.onAttachmentsChange}\n          placeholder={this.props.placeholder}\n          replaceSelection={this.replaceSelection}\n        />\n      </div>\n    )\n  }\n}\n\nexport function Protect(props) {\n  if (!props.canProtect) return null\n\n  const label = props.protect ? gettext(\"Protected\") : gettext(\"Protect\")\n\n  return (\n    <button\n      className=\"btn btn-icon btn-default btn-protect btn-sm pull-right\"\n      disabled={props.disabled}\n      onClick={props.protect ? props.onUnprotect : props.onProtect}\n      title={label}\n      type=\"button\"\n    >\n      <span className=\"material-icon\">\n        {props.protect ? \"lock\" : \"lock_outline\"}\n      </span>\n      <span className=\"btn-text hidden-md hidden-lg\">{label}</span>\n    </button>\n  )\n}\n","import React from \"react\"\n\nexport default function (props) {\n  return (\n    <div className={props.className}>\n      <div className=\"container\">{props.children}</div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport Container from \"./container\"\nimport Loader from \"misago/components/loader\"\n\nexport default function (props) {\n  return (\n    <Container className=\"posting-loader\">\n      <Loader />\n    </Container>\n  )\n}\n","import React from \"react\"\nimport Container from \"./container\"\nimport posting from \"misago/services/posting\"\n\nexport default function (props) {\n  return (\n    <Container className=\"posting-message\">\n      <div className=\"message-body\">\n        <p>\n          <span className=\"material-icon\">error_outline</span>\n          {props.message}\n        </p>\n        <button\n          type=\"button\"\n          className=\"btn btn-default\"\n          onClick={posting.close}\n        >\n          {gettext(\"Dismiss\")}\n        </button>\n      </div>\n    </Container>\n  )\n}\n","import React from \"react\"\n\nexport default function (props) {\n  if (!props.showOptions) return null\n\n  const { columns } = props\n\n  let className = \"col-xs-12 xs-margin-top\"\n\n  if (columns === 1) {\n    className += \" col-sm-2\"\n  } else {\n    className += \" sm-margin-top\"\n  }\n\n  if (columns === 3) {\n    className += \" col-md-3\"\n  } else {\n    className += \" col-md-2\"\n  }\n  className += \" posting-options\"\n\n  const columnClassName = \"col-xs-\" + 12 / columns\n\n  let textClassName = \"btn-text\"\n  if (columns === 3) {\n    textClassName += \" visible-sm-inline-block\"\n  } else if (columns === 2) {\n    textClassName += \" hidden-md hidden-lg\"\n  } else {\n    textClassName += \" hidden-sm\"\n  }\n\n  return (\n    <div className={className}>\n      <div className=\"row\">\n        <PinOptions\n          className={columnClassName}\n          disabled={props.disabled}\n          onPinGlobally={props.onPinGlobally}\n          onPinLocally={props.onPinLocally}\n          onUnpin={props.onUnpin}\n          pin={props.pin}\n          show={props.options.pin}\n          textClassName={textClassName}\n        />\n        <HideOptions\n          className={columnClassName}\n          disabled={props.disabled}\n          hide={props.hide}\n          onHide={props.onHide}\n          onUnhide={props.onUnhide}\n          show={props.options.hide}\n          textClassName={textClassName}\n        />\n        <CloseOptions\n          className={columnClassName}\n          close={props.close}\n          disabled={props.disabled}\n          onClose={props.onClose}\n          onOpen={props.onOpen}\n          show={props.options.close}\n          textClassName={textClassName}\n        />\n      </div>\n    </div>\n  )\n}\n\nexport function CloseOptions(props) {\n  if (!props.show) return null\n\n  const label = props.close ? gettext(\"Closed\") : gettext(\"Open\")\n\n  return (\n    <div className={props.className}>\n      <button\n        className=\"btn btn-default btn-block\"\n        disabled={props.disabled}\n        onClick={props.close ? props.onOpen : props.onClose}\n        title={label}\n        type=\"button\"\n      >\n        <span className=\"material-icon\">\n          {props.close ? \"lock\" : \"lock_outline\"}\n        </span>\n        <span className={props.textClassName}>{label}</span>\n      </button>\n    </div>\n  )\n}\n\nexport function HideOptions(props) {\n  if (!props.show) return null\n\n  const label = props.hide ? gettext(\"Hidden\") : gettext(\"Not hidden\")\n\n  return (\n    <div className={props.className}>\n      <button\n        className=\"btn btn-default btn-block\"\n        disabled={props.disabled}\n        onClick={props.hide ? props.onUnhide : props.onHide}\n        title={label}\n        type=\"button\"\n      >\n        <span className=\"material-icon\">\n          {props.hide ? \"visibility_off\" : \"visibility\"}\n        </span>\n        <span className={props.textClassName}>{label}</span>\n      </button>\n    </div>\n  )\n}\n\nexport function PinOptions(props) {\n  if (!props.show) return null\n\n  let icon = null\n  let onClick = null\n  let label = null\n\n  switch (props.pin) {\n    case 0:\n      icon = \"radio_button_unchecked\"\n      onClick = props.onPinLocally\n      label = gettext(\"Unpinned\")\n      break\n\n    case 1:\n      icon = \"bookmark_outline\"\n      onClick = props.onPinGlobally\n      label = gettext(\"Pinned locally\")\n\n      if (props.show == 2) {\n        onClick = props.onPinGlobally\n      } else {\n        onClick = props.onUnpin\n      }\n\n      break\n\n    case 2:\n      icon = \"bookmark\"\n      onClick = props.onUnpin\n      label = gettext(\"Pinned globally\")\n      break\n  }\n\n  return (\n    <div className={props.className}>\n      <button\n        className=\"btn btn-default btn-block\"\n        disabled={props.disabled}\n        onClick={onClick}\n        title={label}\n        type=\"button\"\n      >\n        <span className=\"material-icon\">{icon}</span>\n        <span className={props.textClassName}>{label}</span>\n      </button>\n    </div>\n  )\n}\n","import moment from \"moment\"\n\nexport function clean(attachments) {\n  const completedAttachments = attachments.filter((attachment) => {\n    return attachment.id && !attachment.isRemoved\n  })\n\n  return completedAttachments.map((a) => {\n    return a.id\n  })\n}\n\nexport function hydrate(attachments) {\n  return attachments.map((attachment) => {\n    return Object.assign({}, attachment, {\n      uploaded_on: moment(attachment.uploaded_on),\n    })\n  })\n}\n","import React from \"react\"\nimport CategorySelect from \"misago/components/category-select\"\nimport Editor from \"misago/components/editor\"\nimport Form from \"misago/components/form\"\nimport Container from \"./utils/container\"\nimport Loader from \"./utils/loader\"\nimport Message from \"./utils/message\"\nimport Options from \"./utils/options\"\nimport * as attachments from \"./utils/attachments\"\nimport { getPostValidators, getTitleValidators } from \"./utils/validators\"\nimport ajax from \"misago/services/ajax\"\nimport posting from \"misago/services/posting\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isReady: false,\n      isLoading: false,\n      isErrored: false,\n\n      showOptions: false,\n      categoryOptions: null,\n\n      title: \"\",\n      category: props.category || null,\n      categories: [],\n      post: \"\",\n      attachments: [],\n      close: false,\n      hide: false,\n      pin: 0,\n\n      validators: {\n        title: getTitleValidators(),\n        post: getPostValidators(),\n      },\n      errors: {},\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(this.props.config).then(this.loadSuccess, this.loadError)\n  }\n\n  loadSuccess = (data) => {\n    let category = null\n    let showOptions = false\n    let categoryOptions = null\n\n    // hydrate categories, extract posting options\n    const categories = data.map((item) => {\n      // pick first category that allows posting and if it may, override it with initial one\n      if (\n        item.post !== false &&\n        (!category || item.id == this.state.category)\n      ) {\n        category = item.id\n        categoryOptions = item.post\n      }\n\n      if (item.post && (item.post.close || item.post.hide || item.post.pin)) {\n        showOptions = true\n      }\n\n      return Object.assign(item, {\n        disabled: item.post === false,\n        label: item.name,\n        value: item.id,\n      })\n    })\n\n    this.setState({\n      isReady: true,\n      showOptions,\n\n      categories,\n      category,\n      categoryOptions,\n    })\n  }\n\n  loadError = (rejection) => {\n    this.setState({\n      isErrored: rejection.detail,\n    })\n  }\n\n  onCancel = () => {\n    const cancel = window.confirm(\n      gettext(\"Are you sure you want to discard thread?\")\n    )\n    if (cancel) {\n      posting.close()\n    }\n  }\n\n  onTitleChange = (event) => {\n    this.changeValue(\"title\", event.target.value)\n  }\n\n  onCategoryChange = (event) => {\n    const category = this.state.categories.find((item) => {\n      return event.target.value == item.value\n    })\n\n    // if selected pin is greater than allowed, reduce it\n    let pin = this.state.pin\n    if (category.post.pin && category.post.pin < pin) {\n      pin = category.post.pin\n    }\n\n    this.setState({\n      category: category.id,\n      categoryOptions: category.post,\n\n      pin,\n    })\n  }\n\n  onPostChange = (event) => {\n    this.changeValue(\"post\", event.target.value)\n  }\n\n  onAttachmentsChange = (attachments) => {\n    this.setState({\n      attachments,\n    })\n  }\n\n  onClose = () => {\n    this.changeValue(\"close\", true)\n  }\n\n  onOpen = () => {\n    this.changeValue(\"close\", false)\n  }\n\n  onPinGlobally = () => {\n    this.changeValue(\"pin\", 2)\n  }\n\n  onPinLocally = () => {\n    this.changeValue(\"pin\", 1)\n  }\n\n  onUnpin = () => {\n    this.changeValue(\"pin\", 0)\n  }\n\n  onHide = () => {\n    this.changeValue(\"hide\", true)\n  }\n\n  onUnhide = () => {\n    this.changeValue(\"hide\", false)\n  }\n\n  clean() {\n    if (!this.state.title.trim().length) {\n      snackbar.error(gettext(\"You have to enter thread title.\"))\n      return false\n    }\n\n    if (!this.state.post.trim().length) {\n      snackbar.error(gettext(\"You have to enter a message.\"))\n      return false\n    }\n\n    const errors = this.validate()\n\n    if (errors.title) {\n      snackbar.error(errors.title[0])\n      return false\n    }\n\n    if (errors.post) {\n      snackbar.error(errors.post[0])\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.post(this.props.submit, {\n      title: this.state.title,\n      category: this.state.category,\n      post: this.state.post,\n      attachments: attachments.clean(this.state.attachments),\n      close: this.state.close,\n      hide: this.state.hide,\n      pin: this.state.pin,\n    })\n  }\n\n  handleSuccess(success) {\n    snackbar.success(gettext(\"Your thread has been posted.\"))\n    window.location = success.url\n\n    // keep form loading\n    this.setState({\n      isLoading: true,\n    })\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      const errors = [].concat(\n        rejection.non_field_errors || [],\n        rejection.category || [],\n        rejection.title || [],\n        rejection.post || [],\n        rejection.attachments || []\n      )\n\n      snackbar.error(errors[0])\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    if (this.state.isErrored) {\n      return <Message message={this.state.isErrored} />\n    }\n\n    if (!this.state.isReady) {\n      return <Loader />\n    }\n\n    let columns = 0\n    if (this.state.categoryOptions.close) columns += 1\n    if (this.state.categoryOptions.hide) columns += 1\n    if (this.state.categoryOptions.pin) columns += 1\n\n    let titleStyle = null\n\n    if (columns === 1) {\n      titleStyle = \"col-sm-6\"\n    } else {\n      titleStyle = \"col-sm-8\"\n    }\n\n    if (columns === 3) {\n      titleStyle += \" col-md-6\"\n    } else if (columns) {\n      titleStyle += \" col-md-7\"\n    } else {\n      titleStyle += \" col-md-9\"\n    }\n\n    return (\n      <Container className=\"posting-form\" withFirstRow={true}>\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"row first-row\">\n            <div className={titleStyle}>\n              <input\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                onChange={this.onTitleChange}\n                placeholder={gettext(\"Thread title\")}\n                type=\"text\"\n                value={this.state.title}\n              />\n            </div>\n            <div className=\"col-xs-12 col-sm-4 col-md-3 xs-margin-top\">\n              <CategorySelect\n                choices={this.state.categories}\n                disabled={this.state.isLoading}\n                onChange={this.onCategoryChange}\n                value={this.state.category}\n              />\n            </div>\n            <Options\n              close={this.state.close}\n              columns={columns}\n              disabled={this.state.isLoading}\n              hide={this.state.hide}\n              onClose={this.onClose}\n              onHide={this.onHide}\n              onOpen={this.onOpen}\n              onPinGlobally={this.onPinGlobally}\n              onPinLocally={this.onPinLocally}\n              onUnhide={this.onUnhide}\n              onUnpin={this.onUnpin}\n              options={this.state.categoryOptions}\n              pin={this.state.pin}\n              showOptions={this.state.showOptions}\n            />\n          </div>\n          <div className=\"row\">\n            <div className=\"col-md-12\">\n              <Editor\n                attachments={this.state.attachments}\n                loading={this.state.isLoading}\n                onAttachmentsChange={this.onAttachmentsChange}\n                onCancel={this.onCancel}\n                onChange={this.onPostChange}\n                submitLabel={gettext(\"Post thread\")}\n                value={this.state.post}\n              />\n            </div>\n          </div>\n        </form>\n      </Container>\n    )\n  }\n}\n","export default function (usernames) {\n  const normalisedNames = usernames\n    .split(\",\")\n    .map((i) => i.trim().toLowerCase())\n  const removedBlanks = normalisedNames.filter((i) => i.length > 0)\n  const removedDuplicates = removedBlanks.filter((name, pos) => {\n    return removedBlanks.indexOf(name) == pos\n  })\n\n  return removedDuplicates\n}\n","import React from \"react\"\nimport Editor from \"misago/components/editor\"\nimport Form from \"misago/components/form\"\nimport Container from \"./utils/container\"\nimport Message from \"./utils/message\"\nimport * as attachments from \"./utils/attachments\"\nimport cleanUsernames from \"./utils/usernames\"\nimport { getPostValidators, getTitleValidators } from \"./utils/validators\"\nimport ajax from \"misago/services/ajax\"\nimport posting from \"misago/services/posting\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    const to = (props.to || []).map((user) => user.username).join(\", \")\n\n    this.state = {\n      isLoading: false,\n\n      to: to,\n      title: \"\",\n      post: \"\",\n      attachments: [],\n\n      validators: {\n        title: getTitleValidators(),\n        post: getPostValidators(),\n      },\n      errors: {},\n    }\n  }\n\n  onCancel = () => {\n    const cancel = window.confirm(\n      gettext(\"Are you sure you want to discard private thread?\")\n    )\n    if (cancel) {\n      posting.close()\n    }\n  }\n\n  onToChange = (event) => {\n    this.changeValue(\"to\", event.target.value)\n  }\n\n  onTitleChange = (event) => {\n    this.changeValue(\"title\", event.target.value)\n  }\n\n  onPostChange = (event) => {\n    this.changeValue(\"post\", event.target.value)\n  }\n\n  onAttachmentsChange = (attachments) => {\n    this.setState({\n      attachments,\n    })\n  }\n\n  clean() {\n    if (!cleanUsernames(this.state.to).length) {\n      snackbar.error(gettext(\"You have to enter at least one recipient.\"))\n      return false\n    }\n\n    if (!this.state.title.trim().length) {\n      snackbar.error(gettext(\"You have to enter thread title.\"))\n      return false\n    }\n\n    if (!this.state.post.trim().length) {\n      snackbar.error(gettext(\"You have to enter a message.\"))\n      return false\n    }\n\n    const errors = this.validate()\n\n    if (errors.title) {\n      snackbar.error(errors.title[0])\n      return false\n    }\n\n    if (errors.post) {\n      snackbar.error(errors.post[0])\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.post(this.props.submit, {\n      to: cleanUsernames(this.state.to),\n      title: this.state.title,\n      post: this.state.post,\n      attachments: attachments.clean(this.state.attachments),\n    })\n  }\n\n  handleSuccess(success) {\n    snackbar.success(gettext(\"Your thread has been posted.\"))\n    window.location = success.url\n\n    // keep form loading\n    this.setState({\n      isLoading: true,\n    })\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      const errors = [].concat(\n        rejection.non_field_errors || [],\n        rejection.to || [],\n        rejection.title || [],\n        rejection.post || [],\n        rejection.attachments || []\n      )\n\n      snackbar.error(errors[0])\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    return (\n      <Container className=\"posting-form\" withFirstRow={true}>\n        <form onSubmit={this.handleSubmit}>\n          <div className=\"row first-row\">\n            <div className=\"col-xs-12\">\n              <input\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                onChange={this.onToChange}\n                placeholder={gettext(\n                  \"Comma separated list of user names, eg.: Danny, Lisa\"\n                )}\n                type=\"text\"\n                value={this.state.to}\n              />\n            </div>\n          </div>\n          <div className=\"row first-row\">\n            <div className=\"col-xs-12\">\n              <input\n                className=\"form-control\"\n                disabled={this.state.isLoading}\n                onChange={this.onTitleChange}\n                placeholder={gettext(\"Thread title\")}\n                type=\"text\"\n                value={this.state.title}\n              />\n            </div>\n          </div>\n          <div className=\"row\">\n            <div className=\"col-xs-12\">\n              <Editor\n                attachments={this.state.attachments}\n                loading={this.state.isLoading}\n                onAttachmentsChange={this.onAttachmentsChange}\n                onCancel={this.onCancel}\n                onChange={this.onPostChange}\n                submitLabel={gettext(\"Post thread\")}\n                value={this.state.post}\n              />\n            </div>\n          </div>\n        </form>\n      </Container>\n    )\n  }\n}\n","import React from \"react\"\nimport Editor from \"misago/components/editor\"\nimport Form from \"misago/components/form\"\nimport Container from \"./utils/container\"\nimport Loader from \"./utils/loader\"\nimport Message from \"./utils/message\"\nimport * as attachments from \"./utils/attachments\"\nimport { getPostValidators } from \"./utils/validators\"\nimport ajax from \"misago/services/ajax\"\nimport posting from \"misago/services/posting\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isReady: false,\n      isLoading: false,\n      isErrored: false,\n\n      post: \"\",\n      attachments: [],\n\n      validators: {\n        post: getPostValidators(),\n      },\n      errors: {},\n    }\n  }\n\n  componentDidMount() {\n    ajax\n      .get(this.props.config, this.props.context || null)\n      .then(this.loadSuccess, this.loadError)\n  }\n\n  componentWillReceiveProps(nextProps) {\n    const context = this.props.context\n    const newContext = nextProps.context\n\n    if (context && newContext && context.reply === newContext.reply) return\n\n    ajax\n      .get(nextProps.config, nextProps.context || null)\n      .then(this.appendData, snackbar.apiError)\n  }\n\n  loadSuccess = (data) => {\n    this.setState({\n      isReady: true,\n\n      post: data.post\n        ? '[quote=\"@' + data.poster + '\"]\\n' + data.post + \"\\n[/quote]\"\n        : \"\",\n    })\n  }\n\n  loadError = (rejection) => {\n    this.setState({\n      isErrored: rejection.detail,\n    })\n  }\n\n  appendData = (data) => {\n    const newPost = data.post\n      ? '[quote=\"@' + data.poster + '\"]\\n' + data.post + \"\\n[/quote]\\n\\n\"\n      : \"\"\n\n    this.setState((prevState, props) => {\n      if (prevState.post.length > 0) {\n        return {\n          post: prevState.post + \"\\n\\n\" + newPost,\n        }\n      }\n\n      return {\n        post: newPost,\n      }\n    })\n  }\n\n  onCancel = () => {\n    const cancel = window.confirm(\n      gettext(\"Are you sure you want to discard your reply?\")\n    )\n    if (cancel) {\n      posting.close()\n    }\n  }\n\n  onPostChange = (event) => {\n    this.changeValue(\"post\", event.target.value)\n  }\n\n  onAttachmentsChange = (attachments) => {\n    this.setState({\n      attachments,\n    })\n  }\n\n  clean() {\n    if (!this.state.post.trim().length) {\n      snackbar.error(gettext(\"You have to enter a message.\"))\n      return false\n    }\n\n    const errors = this.validate()\n\n    if (errors.post) {\n      snackbar.error(errors.post[0])\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.post(this.props.submit, {\n      post: this.state.post,\n      attachments: attachments.clean(this.state.attachments),\n    })\n  }\n\n  handleSuccess(success) {\n    snackbar.success(gettext(\"Your reply has been posted.\"))\n    window.location = success.url.index\n\n    // keep form loading\n    this.setState({\n      isLoading: true,\n    })\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      const errors = [].concat(\n        rejection.non_field_errors || [],\n        rejection.post || [],\n        rejection.attachments || []\n      )\n\n      snackbar.error(errors[0])\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    if (this.state.isReady) {\n      return (\n        <Container className=\"posting-form\">\n          <form onSubmit={this.handleSubmit} method=\"POST\">\n            <div className=\"row\">\n              <div className=\"col-md-12\">\n                <Editor\n                  attachments={this.state.attachments}\n                  loading={this.state.isLoading}\n                  onAttachmentsChange={this.onAttachmentsChange}\n                  onCancel={this.onCancel}\n                  onChange={this.onPostChange}\n                  submitLabel={gettext(\"Post reply\")}\n                  value={this.state.post}\n                />\n              </div>\n            </div>\n          </form>\n        </Container>\n      )\n    } else if (this.state.isErrored) {\n      return <Message message={this.state.isErrored} />\n    } else {\n      return <Loader />\n    }\n  }\n}\n","import React from \"react\"\nimport Editor from \"misago/components/editor\"\nimport Form from \"misago/components/form\"\nimport Container from \"./utils/container\"\nimport Loader from \"./utils/loader\"\nimport Message from \"./utils/message\"\nimport * as attachments from \"./utils/attachments\"\nimport { getPostValidators } from \"./utils/validators\"\nimport ajax from \"misago/services/ajax\"\nimport posting from \"misago/services/posting\"\nimport snackbar from \"misago/services/snackbar\"\n\nexport default class extends Form {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      isReady: false,\n      isLoading: false,\n      isErrored: false,\n\n      post: \"\",\n      attachments: [],\n      protect: false,\n\n      canProtect: false,\n\n      validators: {\n        post: getPostValidators(),\n      },\n      errors: {},\n    }\n  }\n\n  componentDidMount() {\n    ajax.get(this.props.config).then(this.loadSuccess, this.loadError)\n  }\n\n  loadSuccess = (data) => {\n    this.setState({\n      isReady: true,\n\n      post: data.post,\n      attachments: attachments.hydrate(data.attachments),\n      protect: data.is_protected,\n\n      canProtect: data.can_protect,\n    })\n  }\n\n  loadError = (rejection) => {\n    this.setState({\n      isErrored: rejection.detail,\n    })\n  }\n\n  onCancel = () => {\n    const cancel = window.confirm(\n      gettext(\"Are you sure you want to discard changes?\")\n    )\n    if (cancel) {\n      posting.close()\n    }\n  }\n\n  onProtect = () => {\n    this.setState({\n      protect: true,\n    })\n  }\n\n  onUnprotect = () => {\n    this.setState({\n      protect: false,\n    })\n  }\n\n  onPostChange = (event) => {\n    this.changeValue(\"post\", event.target.value)\n  }\n\n  onAttachmentsChange = (attachments) => {\n    this.setState({\n      attachments,\n    })\n  }\n\n  clean() {\n    if (!this.state.post.trim().length) {\n      snackbar.error(gettext(\"You have to enter a message.\"))\n      return false\n    }\n\n    const errors = this.validate()\n\n    if (errors.post) {\n      snackbar.error(errors.post[0])\n      return false\n    }\n\n    return true\n  }\n\n  send() {\n    return ajax.put(this.props.submit, {\n      post: this.state.post,\n      attachments: attachments.clean(this.state.attachments),\n      protect: this.state.protect,\n    })\n  }\n\n  handleSuccess(success) {\n    snackbar.success(gettext(\"Reply has been edited.\"))\n    window.location = success.url.index\n\n    // keep form loading\n    this.setState({\n      isLoading: true,\n    })\n  }\n\n  handleError(rejection) {\n    if (rejection.status === 400) {\n      const errors = [].concat(\n        rejection.non_field_errors || [],\n        rejection.category || [],\n        rejection.title || [],\n        rejection.post || [],\n        rejection.attachments || []\n      )\n\n      snackbar.error(errors[0])\n    } else {\n      snackbar.apiError(rejection)\n    }\n  }\n\n  render() {\n    if (this.state.isReady) {\n      return (\n        <Container className=\"posting-form\">\n          <form onSubmit={this.handleSubmit} method=\"POST\">\n            <div className=\"row\">\n              <div className=\"col-md-12\">\n                <Editor\n                  attachments={this.state.attachments}\n                  canProtect={this.state.canProtect}\n                  loading={this.state.isLoading}\n                  onAttachmentsChange={this.onAttachmentsChange}\n                  onCancel={this.onCancel}\n                  onChange={this.onPostChange}\n                  onProtect={this.onProtect}\n                  onUnprotect={this.onUnprotect}\n                  protect={this.state.protect}\n                  submitLabel={gettext(\"Edit reply\")}\n                  value={this.state.post}\n                />\n              </div>\n            </div>\n          </form>\n        </Container>\n      )\n    } else if (this.state.isErrored) {\n      return <Message message={this.state.isErrored} />\n    } else {\n      return <Loader />\n    }\n  }\n}\n","import React from \"react\"\nimport Start from \"./start\"\nimport StartPrivate from \"./start-private\"\nimport Reply from \"./reply\"\nimport Edit from \"./edit\"\n\nexport default function (props) {\n  if (props.mode === \"START\") {\n    return <Start {...props} />\n  } else if (props.mode === \"START_PRIVATE\") {\n    return <StartPrivate {...props} />\n  } else if (props.mode === \"REPLY\") {\n    return <Reply {...props} />\n  } else if (props.mode === \"EDIT\") {\n    return <Edit {...props} />\n  } else {\n    return null\n  }\n}\n","import React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { PollForm } from \"misago/components/poll\"\nimport PostingComponent from \"misago/components/posting\"\nimport mount from \"misago/utils/mount-component\"\n\nexport class Posting {\n  init(ajax, snackbar, placeholder) {\n    this._ajax = ajax\n    this._snackbar = snackbar\n    this._placeholder = $(placeholder)\n\n    this._mode = null\n\n    this._isOpen = false\n    this._isClosing = false\n  }\n\n  open(props) {\n    if (this._isOpen === false) {\n      this._mode = props.mode\n      this._isOpen = props.submit\n      this._realOpen(props)\n    } else if (this._isOpen !== props.submit) {\n      let message = gettext(\n        \"You are already working on other message. Do you want to discard it?\"\n      )\n      if (this._mode == \"POLL\") {\n        message = gettext(\n          \"You are already working on a poll. Do you want to discard it?\"\n        )\n      }\n\n      const changeForm = window.confirm(message)\n      if (changeForm) {\n        this._mode = props.mode\n        this._isOpen = props.submit\n        this._realOpen(props)\n      }\n    } else if (this._mode == \"REPLY\" && props.mode == \"REPLY\") {\n      this._realOpen(props)\n    }\n  }\n\n  _realOpen(props) {\n    if (props.mode == \"POLL\") {\n      mount(<PollForm {...props} />, \"posting-mount\")\n    } else {\n      mount(<PostingComponent {...props} />, \"posting-mount\")\n    }\n\n    this._placeholder.addClass(\"slide-in\")\n\n    $(\"html, body\").animate(\n      {\n        scrollTop: this._placeholder.offset().top,\n      },\n      1000\n    )\n  }\n\n  close = () => {\n    if (this._isOpen && !this._isClosing) {\n      this._isClosing = true\n      this._placeholder.removeClass(\"slide-in\")\n\n      window.setTimeout(() => {\n        ReactDOM.unmountComponentAtNode(\n          document.getElementById(\"posting-mount\")\n        )\n        this._isClosing = false\n        this._isOpen = false\n      }, 300)\n    }\n  }\n}\n\nexport default new Posting()\n","import { showSnackbar, hideSnackbar } from \"misago/reducers/snackbar\"\n\nconst HIDE_ANIMATION_LENGTH = 300\nconst MESSAGE_SHOW_LENGTH = 5000\n\nexport class Snackbar {\n  init(store) {\n    this._store = store\n    this._timeout = null\n  }\n\n  alert(message, type) {\n    if (this._timeout) {\n      window.clearTimeout(this._timeout)\n      this._store.dispatch(hideSnackbar())\n\n      this._timeout = window.setTimeout(() => {\n        this._timeout = null\n        this.alert(message, type)\n      }, HIDE_ANIMATION_LENGTH)\n    } else {\n      this._store.dispatch(showSnackbar(message, type))\n      this._timeout = window.setTimeout(() => {\n        this._store.dispatch(hideSnackbar())\n        this._timeout = null\n      }, MESSAGE_SHOW_LENGTH)\n    }\n  }\n\n  // shorthands for message types\n\n  info(message) {\n    this.alert(message, \"info\")\n  }\n\n  success(message) {\n    this.alert(message, \"success\")\n  }\n\n  warning(message) {\n    this.alert(message, \"warning\")\n  }\n\n  error(message) {\n    this.alert(message, \"error\")\n  }\n\n  // shorthand for api errors\n\n  apiError(rejection) {\n    let message = rejection.detail\n\n    if (!message) {\n      if (rejection.status === 404) {\n        message = gettext(\"Action link is invalid.\")\n      } else {\n        message = gettext(\"Unknown error has occured.\")\n      }\n    }\n\n    if (rejection.status === 403 && message === \"Permission denied\") {\n      message = gettext(\"You don't have permission to perform this action.\")\n    }\n\n    this.error(message)\n  }\n}\n\nexport default new Snackbar()\n","import { combineReducers, createStore } from \"redux\"\n\nexport class StoreWrapper {\n  constructor() {\n    this._store = null\n    this._reducers = {}\n    this._initialState = {}\n  }\n\n  addReducer(name, reducer, initialState) {\n    this._reducers[name] = reducer\n    this._initialState[name] = initialState\n  }\n\n  init() {\n    this._store = createStore(\n      combineReducers(this._reducers),\n      this._initialState\n    )\n  }\n\n  getStore() {\n    return this._store\n  }\n\n  // Store API\n\n  getState() {\n    return this._store.getState()\n  }\n\n  dispatch(action) {\n    return this._store.dispatch(action)\n  }\n}\n\nexport default new StoreWrapper()\n","/* global zxcvbn */\nexport class Zxcvbn {\n  init(include) {\n    this._include = include\n    this._isLoaded = false\n  }\n\n  scorePassword(password, inputs) {\n    // 0-4 score, the more the stronger password\n    if (this._isLoaded) {\n      return zxcvbn(password, inputs).score\n    }\n\n    return 0\n  }\n\n  load() {\n    if (!this._isLoaded) {\n      this._include.include(\"misago/js/zxcvbn.js\")\n      return this._loadingPromise()\n    } else {\n      return this._loadedPromise()\n    }\n  }\n\n  _loadingPromise() {\n    const self = this\n\n    return new Promise(function (resolve, reject) {\n      var wait = function (tries = 0) {\n        tries += 1\n        if (tries > 200) {\n          reject()\n        } else if (typeof zxcvbn === \"undefined\") {\n          window.setTimeout(function () {\n            wait(tries)\n          }, 200)\n        } else {\n          self._isLoaded = true\n          resolve()\n        }\n      }\n      wait()\n    })\n  }\n\n  _loadedPromise() {\n    // we have already loaded zxcvbn.js, resolve away!\n    return new Promise(function (resolve) {\n      resolve()\n    })\n  }\n}\n\nexport default new Zxcvbn()\n","import moment from \"moment\"\nimport React from \"react\"\n\nexport default class extends React.Component {\n  getReasonMessage() {\n    if (this.props.message.html) {\n      return (\n        <div\n          className=\"lead\"\n          dangerouslySetInnerHTML={{\n            __html: this.props.message.html,\n          }}\n        />\n      )\n    } else {\n      return <p className=\"lead\">{this.props.message.plain}</p>\n    }\n  }\n\n  getExpirationMessage() {\n    if (this.props.expires) {\n      if (this.props.expires.isAfter(moment())) {\n        let title = interpolate(\n          gettext(\"This ban expires on %(expires_on)s.\"),\n          {\n            expires_on: this.props.expires.format(\"LL, LT\"),\n          },\n          true\n        )\n\n        let message = interpolate(\n          gettext(\"This ban expires %(expires_on)s.\"),\n          {\n            expires_on: this.props.expires.fromNow(),\n          },\n          true\n        )\n\n        return <abbr title={title}>{message}</abbr>\n      } else {\n        return gettext(\"This ban has expired.\")\n      }\n    } else {\n      return gettext(\"This ban is permanent.\")\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"page page-error page-error-banned\">\n        <div className=\"container\">\n          <div className=\"message-panel\">\n            <div className=\"message-icon\">\n              <span className=\"material-icon\">highlight_off</span>\n            </div>\n            <div className=\"message-body\">\n              {this.getReasonMessage()}\n              <p className=\"message-footnote\">{this.getExpirationMessage()}</p>\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n","import moment from \"moment\"\nimport React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { Provider, connect } from \"react-redux\"\nimport BannedPage from \"misago/components/banned-page\"\nimport misago from \"misago/index\"\nimport store from \"misago/services/store\"\n\nlet select = function (state) {\n  return state.tick\n}\n\nlet RedrawedBannedPage = connect(select)(BannedPage)\n\nexport default function (ban, changeState) {\n  ReactDOM.render(\n    <Provider store={store.getStore()}>\n      <RedrawedBannedPage\n        message={ban.message}\n        expires={ban.expires_on ? moment(ban.expires_on) : null}\n      />\n    </Provider>,\n\n    document.getElementById(\"page-mount\")\n  )\n\n  if (typeof changeState === \"undefined\" || changeState) {\n    let forumName = misago.get(\"SETTINGS\").forum_name\n    document.title = gettext(\"You are banned\") + \" | \" + forumName\n    window.history.pushState({}, \"\", misago.get(\"BANNED_URL\"))\n  }\n}\n","export default function (list, rowWidth, padding = false) {\n  let rows = []\n  let row = []\n\n  list.forEach(function (element) {\n    row.push(element)\n    if (row.length === rowWidth) {\n      rows.push(row)\n      row = []\n    }\n  })\n\n  // pad row to required length?\n  if (padding !== false && row.length > 0 && row.length < rowWidth) {\n    for (let i = row.length; i < rowWidth; i++) {\n      row.push(padding)\n    }\n  }\n\n  if (row.length) {\n    rows.push(row)\n  }\n\n  return rows\n}\n","export default function (a, b) {\n  let ids = []\n  return a.concat(b).filter(function (item) {\n    if (ids.indexOf(item.id) === -1) {\n      ids.push(item.id)\n      return true\n    } else {\n      return false\n    }\n  })\n}\n","const map = {\n  \"&\": \"&amp;\",\n  \"<\": \"&lt;\",\n  \">\": \"&gt;\",\n  '\"': \"&quot;\",\n  \"'\": \"&#039;\",\n}\n\nexport default function (text) {\n  return text.replace(/[&<>\"']/g, function (m) {\n    return map[m]\n  })\n}\n","export default function (bytes) {\n  if (bytes > 1024 * 1024 * 1024) {\n    return roundSize(bytes / (1024 * 1024 * 1024)) + \" GB\"\n  } else if (bytes > 1024 * 1024) {\n    return roundSize(bytes / (1024 * 1024)) + \" MB\"\n  } else if (bytes > 1024) {\n    return roundSize(bytes / 1024) + \" KB\"\n  } else {\n    return roundSize(bytes) + \" B\"\n  }\n}\n\nexport function roundSize(value) {\n  return value.toFixed(1)\n}\n","import React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { Provider } from \"react-redux\"\nimport store from \"misago/services/store\"\n\nexport default function (Component, rootElementId, connected = true) {\n  let rootElement = document.getElementById(rootElementId)\n\n  let finalComponent = Component.props ? Component : <Component />\n\n  if (rootElement) {\n    if (connected) {\n      ReactDOM.render(\n        <Provider store={store.getStore()}>{finalComponent}</Provider>,\n\n        rootElement\n      )\n    } else {\n      ReactDOM.render(finalComponent, rootElement)\n    }\n  }\n}\n","export function int(min, max) {\n  return Math.floor(Math.random() * (max - min + 1)) + min\n}\n\nexport function range(min, max) {\n  let array = new Array(int(min, max))\n  for (let i = 0; i < array.length; i++) {\n    array[i] = i\n  }\n\n  return array\n}\n","import React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { Provider } from \"react-redux\"\nimport { Router, browserHistory } from \"react-router\"\nimport store from \"misago/services/store\"\n\nconst rootElement = document.getElementById(\"page-mount\")\n\nexport default function (options) {\n  let routes = {\n    component: options.component || null,\n    childRoutes: [],\n  }\n\n  if (options.root) {\n    routes.childRoutes = [\n      {\n        path: options.root,\n        onEnter: function (nextState, replaceState) {\n          replaceState(null, options.paths[0].path)\n        },\n      },\n    ].concat(options.paths)\n  } else {\n    routes.childRoutes = options.paths\n  }\n\n  ReactDOM.render(\n    <Provider store={store.getStore()}>\n      <Router routes={routes} history={browserHistory} />\n    </Provider>,\n    rootElement\n  )\n}\n","export function push(array, value) {\n  if (array.indexOf(value) === -1) {\n    let copy = array.slice()\n    copy.push(value)\n    return copy\n  } else {\n    return array\n  }\n}\n\nexport function remove(array, value) {\n  if (array.indexOf(value) >= 0) {\n    return array.filter(function (i) {\n      return i !== value\n    })\n  } else {\n    return array\n  }\n}\n\nexport function toggle(array, value) {\n  if (array.indexOf(value) === -1) {\n    let copy = array.slice()\n    copy.push(value)\n    return copy\n  } else {\n    return array.filter(function (i) {\n      return i !== value\n    })\n  }\n}\n","const EMAIL =\n  /^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i\nconst USERNAME = new RegExp(\"^[0-9a-z]+$\", \"i\")\n\nexport function required(message) {\n  return function (value) {\n    if (value === false || value === null || $.trim(value).length === 0) {\n      return message || gettext(\"This field is required.\")\n    }\n  }\n}\n\nexport function requiredTermsOfService(message) {\n  const error = gettext(\"You have to accept the terms of service.\")\n  return required(message || error)\n}\n\nexport function requiredPrivacyPolicy(message) {\n  const error = gettext(\"You have to accept the privacy policy.\")\n  return required(message || error)\n}\n\nexport function email(message) {\n  return function (value) {\n    if (!EMAIL.test(value)) {\n      return message || gettext(\"Enter a valid email address.\")\n    }\n  }\n}\n\nexport function minLength(limitValue, message) {\n  return function (value) {\n    var returnMessage = \"\"\n    var length = $.trim(value).length\n\n    if (length < limitValue) {\n      if (message) {\n        returnMessage = message(limitValue, length)\n      } else {\n        returnMessage = ngettext(\n          \"Ensure this value has at least %(limit_value)s character (it has %(show_value)s).\",\n          \"Ensure this value has at least %(limit_value)s characters (it has %(show_value)s).\",\n          limitValue\n        )\n      }\n      return interpolate(\n        returnMessage,\n        {\n          limit_value: limitValue,\n          show_value: length,\n        },\n        true\n      )\n    }\n  }\n}\n\nexport function maxLength(limitValue, message) {\n  return function (value) {\n    var returnMessage = \"\"\n    var length = $.trim(value).length\n\n    if (length > limitValue) {\n      if (message) {\n        returnMessage = message(limitValue, length)\n      } else {\n        returnMessage = ngettext(\n          \"Ensure this value has at most %(limit_value)s character (it has %(show_value)s).\",\n          \"Ensure this value has at most %(limit_value)s characters (it has %(show_value)s).\",\n          limitValue\n        )\n      }\n      return interpolate(\n        returnMessage,\n        {\n          limit_value: limitValue,\n          show_value: length,\n        },\n        true\n      )\n    }\n  }\n}\n\nexport function usernameMinLength(lengthMin) {\n  var message = function (lengthMin) {\n    return ngettext(\n      \"Username must be at least %(limit_value)s character long.\",\n      \"Username must be at least %(limit_value)s characters long.\",\n      lengthMin\n    )\n  }\n  return minLength(lengthMin, message)\n}\n\nexport function usernameMaxLength(lengthMax) {\n  var message = function (lengthMax) {\n    return ngettext(\n      \"Username cannot be longer than %(limit_value)s character.\",\n      \"Username cannot be longer than %(limit_value)s characters.\",\n      lengthMax\n    )\n  }\n  return maxLength(lengthMax, message)\n}\n\nexport function usernameContent() {\n  return function (value) {\n    if (!USERNAME.test($.trim(value))) {\n      return gettext(\n        \"Username can only contain latin alphabet letters and digits.\"\n      )\n    }\n  }\n}\n\nexport function passwordMinLength(limitValue) {\n  return function (value) {\n    const length = value.length\n\n    if (length < limitValue) {\n      const returnMessage = ngettext(\n        \"Valid password must be at least %(limit_value)s character long.\",\n        \"Valid password must be at least %(limit_value)s characters long.\",\n        limitValue\n      )\n\n      return interpolate(\n        returnMessage,\n        {\n          limit_value: limitValue,\n          show_value: length,\n        },\n        true\n      )\n    }\n  }\n}\n","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.hmd = function(module) {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: function() {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t174: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmisago\"] = self[\"webpackChunkmisago\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(32233); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(58339); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(64109); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(46226); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(93240); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(75147); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(4894); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(29223); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(3026); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(94795); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(95563); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(32488); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(11768); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(61323); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(15049); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(61814); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(95920); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(59203); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(72168); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(47806); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(77031); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(97751); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(76093); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(19764); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(47549); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(22331); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(21513); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(98749); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(98251); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(6720); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(10846); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(18255); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(14113); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(24444); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(1764); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(68351); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(81521); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(19984); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(41229); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(43589); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(24108); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(33934); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(85577); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(83526); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(43060); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(92292); })\n__webpack_require__.O(undefined, [736], function() { return __webpack_require__(33409); })\nvar __webpack_exports__ = __webpack_require__.O(undefined, [736], function() { return __webpack_require__(31341); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","n","window","self","hljs","e","replace","I","t","nodeName","toLowerCase","r","exec","index","i","k","test","o","u","a","firstChild","nextSibling","nodeType","nodeValue","length","push","event","offset","node","match","c","l","w","map","call","attributes","value","join","s","f","g","substring","reverse","forEach","splice","pop","substr","source","RegExp","cI","compiled","bK","split","Number","E","lR","b","bR","eW","eR","tE","iR","v","starts","concat","filter","Boolean","endsParent","parent","N","hasOwnProperty","h","y","classPrefix","C","sL","x","B","L","M","top","language","d","lastIndex","p","cN","Object","create","m","skip","eB","rB","rE","eE","Error","R","j","O","T","message","indexOf","languages","second_best","tabReplace","useBR","className","parentNode","document","createElementNS","innerHTML","textContent","trim","result","re","called","querySelectorAll","keys","highlight","highlightAuto","fixMarkup","highlightBlock","configure","initHighlighting","initHighlightingOnLoad","addEventListener","registerLanguage","aliases","listLanguages","getLanguage","inherit","IR","UIR","NR","CNR","BNR","RSR","BE","ASM","QSM","PWM","CLCM","CBCM","HCM","NM","CNM","BNM","CSSNM","RM","TM","UTM","METHOD_GUARD","name","keyword","built_in","literal","_","children","classnames","shrink","auto","styleName","dangerouslySetInnerHTML","__html","header","LegalAgreement","props","agreement","checked","errors","url","onChange","agreementHtml","interpolate","escapeHtml","label","gettext","type","error","privacyPolicy","termsOfService","onPrivacyPolicyChange","onTermsOfServiceChange","termsOfServiceId","misago","termsOfServiceUrl","privacyPolicyId","privacyPolicyUrl","FormHeader","text","buttonClassName","buttonLabel","formLabel","labelClassName","socialAuth","id","button_text","button_color","style","color","finalButtonLabel","site","href","thread","weight","title","best_answer","has_poll","is_unapproved","has_unapproved_posts","is_closed","is_hidden","ngettext","replies","Math","round","size","size2x","alt","src","getSrc","user","srcSet","width","height","avatars","avatar","av","resolveAvatarForSize","Button","this","disabled","loading","onClick","React","defaultProps","choices","item","repeat","level","display","helpText","ev","field","fieldname","target","input","rows","fields","for","help_text","validation","setState","state","isLoading","groups","group","initial","data","assign","ajax","api","onSuccess","rejection","status","snackbar","onSubmit","handleSubmit","CancelButton","onCancel","Form","then","cancel","FormDisplay","isValidated","getClassName","labelClass","htmlFor","controlClass","getFeedbackDescription","getFeedback","getHelpText","extra","validateRequired","required","changeValue","newState","formErrors","validateField","preventDefault","clean","promise","send","success","handleSuccess","handleError","validators","optional","validatedFields","fieldErrors","validate","requiredError","validationError","isControlled","isActive","path","location","pathname","activeClassName","modal","onError","bestAnswer","poll","polls","confirm","role","BestAnswerSelect","bestAnswers","onBestAnswerChange","PollSelect","onPollChange","choice","ytRegExp","domnode","highlightCode","embedYoutubePlayers","_youtube","codeblocks","code","anchors","onlyChild","childNodes","parseYoutubeUrl","youtubeMovie","swapYoutubePlayer","element","youtube","video","start","player","$","replaceWith","wrap","cleanedUrl","cleanUrl","getVideoIdFromUrl","timebit","bits","parseInt","onebox","documentNode","find","click","revealSpoiler","prevProps","prevState","nextProps","nextState","markup","ref","btn","addClass","icon","PanelMessage","PollChoice","hash","proc","votes","ceil","getVotesLabel","ChoiceVotes","UserChoice","selected","hydratedData","voters","voter","voted_on","moment","detail","ModalBody","ChoicesList","ChoiceDetails","key","VotesCount","VotesList","Voter","username","VoteDate","format","fromNow","isPollOver","showVoting","acl","is_public","can_delete","can_edit","can_see_votes","can_vote","hasSelectedChoices","allow_revotes","isVisible","controls","canVote","canChangeVote","ChangeVote","SeeVotes","Edit","Delete","control","isBusy","posting","submit","mode","store","newThreadAcl","DATE_ABBR","PollVotes","PollLength","PollIsPublic","PollCreation","poster","getPoster","posted_on","getPostedOn","poster_name","absolute","relative","ends_on","getEndsOn","endsOn","question","PollChoicesLeft","choicesLeft","PollAllowRevote","ChoiceSelect","toggleChoice","getChoicesLeft","selection","allowed_choices","getChoiceFromHash","deselectChoice","selectChoice","slice","showResults","isAfter","getIsPollOver","generateRandomHash","setChoices","canDelete","onDelete","onAdd","maxLength","placeholder","randomHash","random","toString","isEdit","non_field_errors","bindInput","PollPublicSwitch","iconOn","iconOff","labelOn","labelOff","post","content","Default","Invalid","category","tooltip","rank","userTitle","css_class","is_tab","isReady","posts","getTitleValidators","minLength","thread_title_length_min","limitValue","limit_value","show_value","thread_title_length_max","getPostValidators","post_length_max","validatePostLengthMin","post_length_min","getChoice","Icon","getIcon","getLabel","change","showActivation","password","isValid","form","append","val","showBannedPage","ban","getActivationButton","is_banned","is_online_hidden","is_offline_hidden","is_online","is_offline","getClass","StatusIcon","StatusLabel","banned_until","ban_expires","last_click","getHelp","emptyMessage","getEmptyMessage","changed_by","changed_by_username","renderUserAvatar","renderUsername","old_username","new_username","changed_on","changes","hiddenOnMobile","isLoaded","showStatus","Status","JoinDate","Posts","Threads","Followers","joined_on","getStatClassName","threads","followers","stat","colClassName","cols","list","Array","apply","users","dropdown","toggle","items","isOrdered","_items","order","after","before","undefined","get","values","values_only","_order","unordered","ordered","ordering","insertItem","insertAt","iterations","_initializers","_context","initializer","context","OrderedList","orderedValues","fallback","has","setInterval","patch","AUTH_SYNC_RATE","auth","storage","captcha","include","AcceptAgreement","submiting","accept","reload","handleDecline","handleAccept","getElementById","mount","signedIn","signedOut","getMessage","refresh","select","connect","AuthMessage","description","html","getTitle","is_read","LastThread","Empty","Private","Protected","can_browse","can_see_all_threads","last_thread_title","LastPosterAvatar","last_thread_new","LastPosterName","last_post","last_post_on","last_poster","last_poster_name","Message","isFirst","subcategories","categories","hydrate","startPolling","frequency","update","tick","Categories","SideNav","options","option","to","baseUrl","component","CompactNav","hideNav","delete","onPasswordChange","edit_details","DownloadData","data_downloads","downloads","isSubmiting","request_data_download","handleLoadDownloads","rowStyle","requested_on","DownloadButton","exportFile","file","colSpan","handleRequestDataDownload","verticalAlign","is_hiding_presence","limits_private_thread_invites_to","subscribe_to_started_threads","subscribe_to_replied_threads","privateThreadInvitesChoices","subscribeToChoices","next_on","next_change","length_min","length_max","phrases","changes_left","name_changes_expire","complete","slug","addNameChange","updateUsername","Promise","all","results","onComplete","getChangeForm","new_email","change_email","response","new_password","repeat_password","change_password","has_usable_password","page","PageHeader","FlexRow","PageContainer","WithDropdown","paths","ChangeForumOptions","EditDetails","delegateAuth","DELEGATE_AUTH","ChangeUsername","ChangeSignInCredentials","DeleteAccount","root","Options","expires_on","initWithPreloadedData","initWithoutPreloadedData","profile","user_message","staff_message","getUserMessage","getStaffMessage","getExpirationMessage","getPanelBody","isAuthenticated","SafeValue","rel","onEdit","showEditButton","Toolbar","dispatch","details","load","editing","newDetails","loadDetails","profileDetails","edit","loadItems","next","Feed","loadMore","LoadMoreButton","loadUsers","search","count","more","pages","setSpecialProps","PRELOADED_DATA_KEY","TITLE","API_FILTER","apiUrl","getMoreButton","getListBody","loadChanges","is_followed","follow","action","canMessage","can_start_private_threads","isProfileOwner","is_avatar_locked","avatar_lock_user_message","avatar_lock_staff_message","moderate_avatar","apiResponse","updateAvatar","avatar_hash","getFormBody","getModalBody","moderate_username","setTimeout","countdown","isDeleted","with_content","getButtonLabel","getDeletedBody","getForm","AvatarControls","moderation","showAvatarDialog","rename","showRenameDialog","showDeleteDialog","is_active","email","ProfileModerationButton","available","getModeration","can_follow","is_anonymouse","can_rename","can_moderate_avatar","COMPONENTS","follows","Follows","Details","UsernameHistory","BanDetails","Profile","RequestLinkForm","callback","LinkSent","reset","RequestActivationLink","RequestResetForm","showInactivePage","AccountInactivePage","activation","getActivateButton","ReactDOM","RequestPasswordReset","ResetPasswordForm","PasswordChangedPage","SignInModal","showSignIn","remove","query","updateSearch","urlQuery","history","pushState","encodeURIComponent","q","providers","provider","updateUsers","updatePosts","onQueryChange","Badge","SearchTime","time","copy","LoadMore","appendPosts","updateProvider","Blankslate","components","route","TYPES_CLASSES","info","warning","Snackbar","snackbarClass","getSnackbarClass","backendName","pageTitleTpl","pageTitle","backend","Register","handleToggleAgreement","validator","formValidators","emailProtected","terms_of_service","privacy_policy","onRegistrationComplete","step","stateUpdate","backend_name","emailHelpText","emailHelpTextTpl","RegisterLegalFootnote","handlePrivacyPolicyChange","handleTermsOfServiceChange","SocialAuth","handleRegistrationComplete","op","updateAcl","participants","ModalHeader","onUsernameChange","can_add_participants","participant","confirmed","isUser","is_owner","can_change_owner","isModerator","can_moderate_private_threads","userIsOwner","UserStatus","isOwner","getUserIsOwner","utils","ICON","changed_title","pinned_globally","pinned_locally","unpinned","moved","merged","approved","opened","closed","unhid","hid","changed_owner","tookover","added_participant","owner_left","participant_left","removed_participant","event_type","can_hide","Hide","Unhide","hidden_on","hidden_by_name","hidden_by","USER_SPAN","USER_URL","Hidden","Poster","date","event_by","event_on","MESSAGE","ITEM_LINK","ITEM_SPAN","ChangedTitle","Moved","Merged","ChangedOwner","AddedParticipant","RemovedParticipant","msgstring","oldTitle","event_context","old_title","fromCategory","from_category","mergedThread","merged_thread","newOwner","waypoint","handler","direction","boundingClientRect","getBoundingClientRect","offsetBottom","clientHeight","documentElement","read","thread_is_read","AttachmentPreview","attachment","filename","AttachmentDetails","is_image","AttachmentThumbnail","AttachmentIcon","thumb","backgroundImage","uploader","uploader_name","uploaded_on","filetype","formatFilesize","can_see_hidden","attachments","batch","row","Row","FlagBestAnswer","best_answer_marked_by","marked_on","best_answer_marked_on","marked_by","best_answer_marked_by_name","FlagHidden","FlagUnapproved","FlagProtected","is_protected","approve","protect","unprotect","hide","unhide","like","lastLikes","last_likes","concatedLikes","finalLikes","is_liked","likes","unlike","previousState","ops","markAsBestAnswer","best_answer_is_protected","best_answer_marked_by_slug","patchThread","unmarkBestAnswer","hydrateLike","ModalDialog","LikesList","liked_on","likesCount","LikeDetails","liker_id","LikeDate","likedOn","can_reply","can_see_likes","can_like","MarkAsBestAnswer","MarkAsBestAnswerCompact","Like","Likes","LikesCompact","Reply","actions","can_mark_best_answer","can_mark_as_best_answer","can_change_best_answer","hasLikes","getLikesMessage","usernames","hiddenLikes","otherUsers","lastUser","usernamesList","last_user","config","editor","reply","move","new_thread","onUrlChange","diff","DiffItem","revertEdit","canRevert","goToEdit","previous","GoBackBtn","goBack","GoForwardBtn","goForward","GoLastBtn","goLast","Label","RevertBtn","editor_name","edited_on","edited_by","hydrateEdit","json","edits","hydratedPost","PostingConfig","ModerationForm","isError","Loader","categoryId","can_pin_threads","can_hide_threads","can_close_threads","isHiddenChoices","isClosedChoices","pin","close","getWeightChoices","Modal","onCategoryChange","renderWeightField","renderHiddenField","renderClosedField","Permalink","UnmarkMarkBestAnswer","PostEdits","Approve","Move","Split","Protect","Unprotect","permaUrl","protocol","host","prompt","can_unmark_best_answer","isHidden","isUnedited","can_approve","can_move","can_protect","can_unhide","isSelected","can_merge_posts","UnreadLabel","UnreadCompact","PostedOn","PostedOnCompact","PostEditsCompacts","ProtectedLabel","postAuthor","hasAcl","hasVisibleTitle","ListItem","is_event","starter","starter_name","timestamp","started_on","handleSuccessUnmounted","best_answers","merge","other_thread","post_set","ModalMessage","ModalLoading","successMessage","callApi","changeTitle","pinGlobally","pinLocally","unpin","open","oldState","subscription","finalState","stickToBottom","unsubscribe","alert","short_name","special_role","breadcrumbs","ThreadReplies","hasFlags","ThreadFlags","is_authenticated","enabled","first","last","PostErrors","heading","ids","rollback","isArray","Merge","can_merge","dropup","onReply","compact","is_new","new_post","unapproved_post","onPoll","can_start_poll","setPageTitle","shouldFetchData","fetchData","startPollingApi","stopPollingApi","params","delayed","threadModeration","getThreadModeration","postsModeration","getPostsModeration","openPollForm","openReplyForm","can_close","can_pin_globally","can_pin","can_unprotect","basePath","pk","Route","compareLastPostAge","compareGlobalWeight","compareWeight","allItems","parentUrl","lists","longName","ThreadErrors","freezeThread","deleteThread","addThreads","filterThreads","categoriesMap","getFormdata","categoryChoices","can_start_threads","renderForm","renderCantMergeMessage","storeState","leftThreads","acls","renderCantMoveMessage","updateThread","threadsMap","failedThreads","noSelection","topCategory","topCategories","subCategory","subCategories","startThread","allow","getTopCategory","cat","busyThreads","getModerationActions","SUBSCRIPTION","notify","getSubscriptionIcon","activeCategory","showOptions","showSubscription","isNew","updatedThreads","applyUpdate","loadThreads","getCategory","current","fromDb","currentMap","isThreadChanged","getSorting","currentState","sets","isMounted","pollResponse","index_header","forum_name","index_title","specialRole","pageLead","threadsCount","applyDiff","PRIVATE_THREADS_LIST","getListOptions","routes","can_see_unapproved_content_lists","getLists","section","HEADER","RESULT","FOOTER","autoComplete","encodeURI","footer","flattenProvider","flatlist","arrayLength","flatResults","flattenProviders","flattenResults","isOpen","container","querySelector","focus","closeResults","loadResults","intervalId","onDocumentMouseDown","onEscape","removeEventListener","delay","clearTimeout","cleanResults","onToggle","STYLES","LABELS","_score","_password","_inputs","loaded","zxcvbn","inputs","cacheStale","score","getScore","RegisterForm","criteria","passwordMinLength","min_length","max_length","__all__","StartSocialAuth","RegisterComplete","getLead","getSubscript","completeRegistration","account_activation","showRegisterForm","GuestMenu","LOGIN_URL","showSignInModal","GuestNav","CompactGuestNav","showGuestMenu","avatarType","showError","gravatar","setGravatar","crop_src","showCrop","upload","showUpload","galleries","showGallery","userPeview","getAvatarPreview","getGravatarButton","setGenerated","getCropButton","getUploadButton","getGalleryButton","cropit","deviceRatio","cropitOffset","crop","zoom","crop_tmp","dataUrl","cropperWidth","getAvatarSize","initialWidth","exportZoom","imageState","getImagePath","onImageLoaded","zoomLevel","imageSize","offsetX","offsetY","cropAvatar","showIndex","image","files","validateFile","preview","URL","createObjectURL","progress","FormData","uploaded","limit","filesize","fileSize","invalidTypeMsg","allowed_mime_types","extensionFound","loweredFilename","allowed_extensions","extension","extensions","pickFile","getUploadRequirements","getUploadProgressLabel","uploadFile","getUploadProgress","renderCrop","renderUpload","GalleryItem","Gallery","images","save","ChangeAvatarError","reason","getErrorReason","AvatarIndex","AvatarUpload","AvatarCrop","AvatarGallery","completeFlow","getBody","UserMenu","ChangeAvatarModal","following","changeAvatar","can_use_private_threads","PrivateThreadsBadge","unread_private_threads","UserNav","UserPrivateThreadsLink","selectUserMenu","CompactUserNav","showUserMenu","CompactUserMenu","getPageUrl","days","trackedPeriod","rankUrl","getUserStatus","getRankName","getUserTitle","counter","meta","posters","getLeadMessage","tracked_period","string","subString","pos","stringCount","RankUsersListLoader","getRankDescription","getComponent","Rank","ActivePosters","Users","attr","forum_index_title","reducer","isAnonymous","initialState","doTick","PATCH_USER","SIGN_IN","SIGN_OUT","signIn","signOut","soft","UPDATE_AVATAR","userId","UPDATE_USERNAME","REPLACE_PARTICIPANTS","BUSY_POLL","RELEASE_POLL","REMOVE_POLL","REPLACE_POLL","UPDATE_POLL","add","busy","release","hydrated","PATCH_POST","updated_on","hydrateAttachment","hydrateUser","APPEND_POSTS","SELECT_POST","DESELECT_POST","DESELECT_POSTS","LOAD_POSTS","UNLOAD_POSTS","UPDATE_POSTS","deselect","deselectAll","hydratePost","unload","selectedPosts","deseletedPosts","deseletedAllPosts","resultsIds","reducedPosts","postReducer","LOAD_DETAILS","HYDRATE_PROFILE","PATCH_PROFILE","hydrateStatus","REPLACE_SEARCH","UPDATE_SEARCH","UPDATE_SEARCH_PROVIDER","SELECT_ALL","SELECT_NONE","SELECT_ITEM","itemsIds","none","itemId","SHOW_SNACKBAR","HIDE_SNACKBAR","showSnackbar","messageType","hideSnackbar","BUSY_THREAD","RELEASE_THREAD","REPLACE_THREAD","UPDATE_THREAD","UPDATE_THREAD_ACL","APPEND_THREADS","DELETE_THREAD","FILTER_THREADS","HYDRATE_THREADS","PATCH_THREAD","SORT_THREADS","MODERATION_PERMISSIONS","sorting","hydrateThread","thread_acl","perm","mergedState","concatUnique","sort","itemCategory","lft","rght","patchedState","TICK","ADD_NAME_CHANGE","APPEND_HISTORY","HYDRATE_HISTORY","changedBy","hydrateNamechange","namechange","unshift","floor","Date","now","APPEND_USERS","HYDRATE_USERS","Ajax","_cookieName","_csrfToken","_locks","cookieName","cookie","cookieRegex","method","resolve","reject","xhr","headers","getCsrfToken","JSON","stringify","contentType","dataType","jqXHR","responseJSON","statusText","lock","param","waiter","wait","request","processData","XMLHttpRequest","evt","lengthComputable","total","Auth","local","_store","_local","_modal","syncSession","watchState","getState","set","watch","BaseCaptcha","_ajax","_include","_snackbar","NoCaptcha","QACaptcha","kwargs","ReCaptchaComponent","grecaptcha","render","sitekey","siteKey","binding","ReCaptcha","recaptcha_site_key","Captcha","captcha_type","_captcha","init","Include","staticUrl","_staticUrl","_included","script","remote","cache","localStorage","LocalStorage","prefix","_prefix","_watchers","newValueJson","parse","newValue","watcher","oldValue","setItem","itemString","getItem","MobileNavbarDropdown","_element","_component","removeClass","show","on","PageTitle","indexTitle","forumName","_indexTitle","_forumName","finalTitle","Polls","_polls","stop","poolServer","_stopped","timeout","apiError","pollId","replaceSelection","execAction","insertCode","makeEmphasis","insertHr","URL_PATTERN","str","insertImage","isUrl","insertLink","insertSpoiler","makeStrikethrough","makeStrong","insertQuote","insertAttachment","updateItem","isRemoved","updatedAttachments","onAttachmentsChange","Preview","Filename","Actions","onInsert","onRemove","onUndo","Image","thumbnailUrl","Insert","Remove","Undo","filteredAttachments","getRandomKey","getTime","max_attachment_size","textareaId","getTextarea","getSelectionRange","end","getSelection","ctrl","range","createRange","moveStart","selectionStart","selectionEnd","_replace","myRange","replacement","startText","selectionRange","setSelectionRange","createTextRange","collapse","moveEnd","setSelection","isPreviewLoading","parsed","operation","_replaceSelection","atwho","at","displayTpl","insertTpl","searchKey","callbacks","remoteFilter","getJSON","flag","onPreviewClick","submitLabel","canProtect","onProtect","onUnprotect","columns","columnClassName","textClassName","PinOptions","onPinGlobally","onPinLocally","onUnpin","HideOptions","onHide","onUnhide","CloseOptions","onClose","onOpen","completedAttachments","categoryOptions","isErrored","loadSuccess","loadError","titleStyle","withFirstRow","onTitleChange","onPostChange","removedBlanks","cleanUsernames","onToChange","newPost","newContext","appendData","Posting","_isOpen","_isClosing","_placeholder","_mode","_realOpen","animate","scrollTop","_timeout","StoreWrapper","_reducers","_initialState","createStore","combineReducers","Zxcvbn","_isLoaded","_loadedPromise","_loadingPromise","tries","plain","expires","getReasonMessage","RedrawedBannedPage","BannedPage","changeState","rowWidth","padding","bytes","roundSize","toFixed","Component","rootElementId","connected","rootElement","finalComponent","int","min","max","childRoutes","onEnter","replaceState","browserHistory","array","EMAIL","USERNAME","requiredTermsOfService","requiredPrivacyPolicy","returnMessage","usernameMinLength","lengthMin","usernameMaxLength","lengthMax","usernameContent","webpackContext","req","webpackContextResolve","__webpack_require__","module","exports","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","getter","__esModule","definition","defineProperty","enumerable","globalThis","Function","hmd","obj","prop","prototype","Symbol","toStringTag","nmd","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file
diff --git a/misago/templates/misago/profile/feed.html b/misago/templates/misago/profile/feed.html
index 4f8aee31ff..58751b308d 100644
--- a/misago/templates/misago/profile/feed.html
+++ b/misago/templates/misago/profile/feed.html
@@ -4,64 +4,66 @@
     <li id="post-{{ post.pk }}" class="post {% if profile.rank.css_class %}post-{{ profile.rank.css_class }}{% endif %}">
       <div class="panel panel-default panel-post">
         <div class="panel-body">
-          <div class="post-side post-side-registered">
-            <a class="btn btn-default btn-icon pull-right" href="{{ post.get_absolute_url }}">
-              <span class="btn-text-left hidden-xs">
-                {% trans "See post" %}
-              </span>
-              <span class="material-icon">
-                chevron_right
-              </span>
-            </a>
-            <div class="media">
-              <div class="media-left">
-                <a href="{{ profile.get_absolute_url }}">
-                  <img src="{{ profile|avatar:50 }}" class="poster-avatar" alt="" height="50" width="50"/>
-                </a>
-              </div>
-              <div class="media-body">
-                <div class="media-heading">
-                  <a class="item-title" href="{{ profile.get_absolute_url }}">
-                    {{ profile }}
+          <div class="panel-content">
+            <div class="post-side post-side-registered">
+              <a class="btn btn-default btn-icon pull-right" href="{{ post.get_absolute_url }}">
+                <span class="btn-text-left hidden-xs">
+                  {% trans "See post" %}
+                </span>
+                <span class="material-icon">
+                  chevron_right
+                </span>
+              </a>
+              <div class="media">
+                <div class="media-left">
+                  <a href="{{ profile.get_absolute_url }}">
+                    <img src="{{ profile|avatar:50 }}" class="poster-avatar" alt="" height="50" width="50"/>
                   </a>
                 </div>
-                {% if profile.rank.is_tab %}
-                  <a href="{{ profile.rank.get_absolute_url }}" class="user-title {% if profile.rank.css_class %}user-title-{{ profile.rank.css_class }}{% endif %}">
-                {% else %}
-                  <span class="user-title {% if profile.rank.css_class %}user-title-{{ profile.rank.css_class }}{% endif %}">
-                {% endif %}
-                {{ profile.get_any_title }}
-                {% if profile.rank.is_tab %}
-                  </a>
-                {% else %}
-                  </span>
-                {% endif %}
+                <div class="media-body">
+                  <div class="media-heading">
+                    <a class="item-title" href="{{ profile.get_absolute_url }}">
+                      {{ profile }}
+                    </a>
+                  </div>
+                  {% if profile.rank.is_tab %}
+                    <a href="{{ profile.rank.get_absolute_url }}" class="user-title {% if profile.rank.css_class %}user-title-{{ profile.rank.css_class }}{% endif %}">
+                  {% else %}
+                    <span class="user-title {% if profile.rank.css_class %}user-title-{{ profile.rank.css_class }}{% endif %}">
+                  {% endif %}
+                  {{ profile.get_any_title }}
+                  {% if profile.rank.is_tab %}
+                    </a>
+                  {% else %}
+                    </span>
+                  {% endif %}
+                </div>
               </div>
             </div>
-          </div>
-          <div class="post-heading">
-            <a class="btn btn-link item-title" href="{{ post.thread.get_absolute_url }}">
-              {{ post.thread }}
-            </a>
-            <a class="btn btn-link post-category" href="{{ post.category.get_absolute_url }}">
-              {{ post.category }}
-            </a>
-            <a class="btn btn-link posted-on" href="{{ post.get_absolute_url }}">
-              {{ post.posted_on|date:'DATETIME_FORMAT' }}
-            </a>
-          </div>
-          {% if post.is_valid %}
-            <div class="post-body">
-              <article class="misago-markup">
-                {{ post.content|safe }}
-              </article>
+            <div class="post-heading">
+              <a class="btn btn-link item-title" href="{{ post.thread.get_absolute_url }}">
+                {{ post.thread }}
+              </a>
+              <a class="btn btn-link post-category" href="{{ post.category.get_absolute_url }}">
+                {{ post.category }}
+              </a>
+              <a class="btn btn-link posted-on" href="{{ post.get_absolute_url }}">
+                {{ post.posted_on|date:'DATETIME_FORMAT' }}
+              </a>
             </div>
-          {% else %}
-            <div class="post-body post-body-invalid">
-              <p class="lead">{% trans "This post's contents cannot be displayed." %}</p>
-              <p class="text-muted">{% trans "This error is caused by invalid post content manipulation." %}</p>
-            </div>
-          {% endif %}
+            {% if post.is_valid %}
+              <div class="post-body">
+                <article class="misago-markup">
+                  {{ post.content|safe }}
+                </article>
+              </div>
+            {% else %}
+              <div class="post-body post-body-invalid">
+                <p class="lead">{% trans "This post's contents cannot be displayed." %}</p>
+                <p class="text-muted">{% trans "This error is caused by invalid post content manipulation." %}</p>
+              </div>
+            {% endif %}
+          </div>
         </div>
       </div>
     </li>