diff --git a/.dockerignore b/.dockerignore index 8f4c8f147..318700ad6 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,14 @@ media collected_static .git +.gitignore whoosh +bower +*.log +~* +*.pyc +.cache +.project +.travis.yml +.env +.idea diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index c549f2bd4..0e9bf512b 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -26,7 +26,7 @@ ## Imagens do Ocorrido - + ## Seu Ambiente diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index d30dcf3e1..b126ea571 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,7 +1,7 @@ ## Descrição - + ## _Issue_ Relacionada @@ -18,7 +18,7 @@ ## Capturas de Tela (se apropriado): - + ## Tipos de Mudanças @@ -30,7 +30,7 @@ - [ ] Eu li o documento de Contribuição (**CONTRIBUTING**). -- [ ] Meu código segue o estilo de código desse projeto. +- [ ] Meu código segue o estilo de código deste projeto. - [ ] Minha alteração requer uma alteração na documentação. - [ ] Eu atualizei a documentação de acordo. - [ ] Eu adicionei testes para cobrir minhas mudanças. diff --git a/Dockerfile b/Dockerfile index 9c33fcd0f..2f2fe688b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,9 @@ -FROM alpine:3.8 +FROM alpine:3.10 ENV BUILD_PACKAGES postgresql-dev graphviz-dev graphviz build-base git pkgconfig \ python3-dev libxml2-dev jpeg-dev libressl-dev libffi-dev libxslt-dev \ nodejs py3-lxml py3-magic postgresql-client poppler-utils antiword \ - curl jq openssh-client vim bash + curl jq openssh-client vim bash postgresql-client cairo-dev RUN apk update --update-cache && apk upgrade @@ -13,6 +13,7 @@ RUN apk add --no-cache python3 nginx tzdata && \ python3 -m ensurepip && \ rm -r /usr/lib/python*/ensurepip && \ pip3 install --upgrade pip setuptools && \ + pip3 install wheel && \ rm -r /root/.cache && \ rm -f /etc/nginx/conf.d/* diff --git a/docker-compose.yml b/docker-compose.yml index 6c668d80f..18a943b3a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,9 +9,10 @@ sapldb: volumes: - sapldb_data:/var/lib/postgresql/data/ ports: - - "5432:5432" + - "5433:5432" sapl: - image: interlegis/sapl:3.1.159 + image: interlegis/sapl:3.1.160-RC12 + #build: . restart: always environment: ADMIN_PASSWORD: interlegis @@ -30,4 +31,4 @@ sapl: links: - sapldb ports: - - "80:80" \ No newline at end of file + - "80:80" diff --git a/health_check.py b/health_check.py new file mode 100644 index 000000000..0a050f5fb --- /dev/null +++ b/health_check.py @@ -0,0 +1,49 @@ +from flask import Flask +import requests +import psycopg2 +import json +from sapl.settings import DATABASES, USE_SOLR, SOLR_URL + + +app = Flask(__name__) + + +@app.route('/health') +def health(): + try: + db = DATABASES['default'] + conn = psycopg2.connect(host=db['HOST'], + user=db['USER'], + password=db['PASSWORD'], + database=db['NAME'], + port=db['PORT']) + cursor = conn.cursor() + cursor.execute("SELECT 1;") + resp = {'DATABASE': 'OK'} + except Exception as e: + resp = {'DATABASE': 'ERROR'} + finally: + if cursor: + cursor.close() + conn.close() + + if USE_SOLR: + r = requests.get(SOLR_URL) + if r.ok: + resp.update({'SEARCH_ENGINE': 'OK'}) + else: + resp.update({'SEARCH_ENGINE': 'ERROR'}) + + else: + resp.update({'SEARCH_ENGINE': 'NOT_ENABLED'}) + + return json.dumps(resp) + + +@app.route('/ping') +def ping(): + return "pong" + + +if __name__ == '__main__': + app.run() \ No newline at end of file diff --git a/release.sh b/release.sh index 5bfd27fef..b99dbf05c 100755 --- a/release.sh +++ b/release.sh @@ -13,13 +13,14 @@ SED_AWKWARD_PATTERN="[0-9]+\.[0-9]+\.[0-9]+(-RC[0-9]+){0,1}" LATEST_VERSION=$(git tag | egrep $VERSION_PATTERN | sort --version-sort | tail -1) MAJOR_VERSION=$(echo $LATEST_VERSION | cut -d"-" -f1) -IS_RC=$(echo $LATEST_VERSION | egrep '(-RC)') MAJOR_TAG_CREATED=$(git tag | egrep $MAJOR_VERSION"$") if [ -n "$MAJOR_TAG_CREATED" ]; then LATEST_VERSION=$MAJOR_VERSION fi +IS_RC=$(echo $LATEST_VERSION | egrep '(-RC)') + LAST_DIGIT=`echo $MAJOR_VERSION | cut -f 3 -d '.'` MAIN_REV=`echo $MAJOR_VERSION | cut -f 1,2 -d '.'` NEXT_NUMBER=$(($LAST_DIGIT + 1)) @@ -33,17 +34,13 @@ function change_files { echo "Atualizando de "$OLD_VERSION" para "$FINAL_VERSION - sed -E s/$OLD_VERSION/$FINAL_VERSION/g docker-compose.yml > tmp1 - mv tmp1 docker-compose.yml + sed -E -i "s|$OLD_VERSION|$FINAL_VERSION|g" docker-compose.yml - sed -E s/$OLD_VERSION/$FINAL_VERSION/g setup.py > tmp2 - mv tmp2 setup.py + sed -E -i "s|$OLD_VERSION|$FINAL_VERSION|g" setup.py - sed -E s/$OLD_VERSION/$FINAL_VERSION/g sapl/templates/base.html > tmp3 - mv tmp3 sapl/templates/base.html + sed -E -i "s|$OLD_VERSION|$FINAL_VERSION|g" sapl/templates/base.html - sed -E s/$OLD_VERSION/$FINAL_VERSION/g sapl/settings.py > tmp4 - mv tmp4 sapl/settings.py + sed -E -i "s|$OLD_VERSION|$FINAL_VERSION|g" sapl/settings.py } function set_major_version { @@ -72,9 +69,12 @@ function commit_and_push { git commit -m "Release: $FINAL_VERSION" git tag $FINAL_VERSION + echo "================================================================================" + echo " Versão criada e gerada localmente." echo "Para enviar pro github execute..." echo "git push origin 3.1.x" echo "git push origin "$FINAL_VERSION + echo "================================================================================" echo "done." } diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 6000f1575..5176e7aac 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,4 +1,4 @@ -django>=1.11.19,<2.0 +django>=1.11.27,<2.0 django-haystack==2.8.1 django-filter==2.0.0 djangorestframework==3.9.1 @@ -20,12 +20,12 @@ easy-thumbnails==2.5 python-decouple==3.1 psycopg2-binary==2.7.6.1 pyyaml==4.2b1 -pytz==2018.9 +pytz==2019.3 rtyaml==0.0.5 python-magic==0.4.15 unipath==1.1 -WeasyPrint==44 -Pillow==5.1.0 +WeasyPrint==50 +Pillow==6.2.0 gunicorn==19.9.0 pysolr==3.6.0 diff --git a/sapl/api/serializers.py b/sapl/api/serializers.py index a9ce737c1..b3ff9213e 100644 --- a/sapl/api/serializers.py +++ b/sapl/api/serializers.py @@ -1,8 +1,13 @@ +import logging from django.conf import settings +from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist +from django.db.models import F, Q from rest_framework import serializers from rest_framework.relations import StringRelatedField - +from sapl.parlamentares.models import Parlamentar, Mandato, Filiacao, Legislatura from sapl.base.models import Autor, CasaLegislativa +from sapl.utils import filiacao_data +from image_cropping.utils import get_backend class IntRelatedField(StringRelatedField): @@ -56,3 +61,105 @@ class CasaLegislativaSerializer(serializers.ModelSerializer): class Meta: model = CasaLegislativa fields = '__all__' + +class ParlamentarResumeSerializer(serializers.ModelSerializer): + titular = serializers.SerializerMethodField('check_titular') + partido = serializers.SerializerMethodField('check_partido') + fotografia_cropped = serializers.SerializerMethodField('crop_fotografia') + logger = logging.getLogger(__name__) + + def crop_fotografia(self,obj): + thumbnail_url = "" + try: + import os + #import pdb;pdb.set_trace() + if not obj.fotografia or not os.path.exists(obj.fotografia.path): + return thumbnail_url + thumbnail_url = get_backend().get_thumbnail_url( + obj.fotografia, + { + 'size': (128, 128), + 'box': obj.cropping, + 'crop': True, + 'detail': True, + } + ) + except Exception as e: + self.logger.error(e) + self.logger.error('erro processando arquivo: %s' % obj.fotografia.path) + + return thumbnail_url + + def check_titular(self,obj): + is_titular = None + if not Legislatura.objects.exists(): + self.logger.error("Não há legislaturas cadastradas.") + return "" + + try: + legislatura = Legislatura.objects.get(id=self.context.get('legislatura')) + except ObjectDoesNotExist: + legislatura = Legislatura.objects.first() + mandato = Mandato.objects.filter( + parlamentar=obj, + data_inicio_mandato__gte=legislatura.data_inicio, + data_fim_mandato__lte=legislatura.data_fim + ).order_by('-data_inicio_mandato').first() + if mandato: + is_titular = 'Sim' if mandato.titular else 'Não' + else: + is_titular = '-' + return is_titular + + def check_partido(self,obj): + # Coloca a filiação atual ao invés da última + # As condições para mostrar a filiação são: + # A data de filiacao deve ser menor que a data de fim + # da legislatura e data de desfiliação deve nula, ou maior, + # ou igual a data de fim da legislatura + + username = self.context['request'].user.username + if not Legislatura.objects.exists(): + self.logger.error("Não há legislaturas cadastradas.") + return "" + try: + legislatura = Legislatura.objects.get(id=self.context.get('legislatura')) + except ObjectDoesNotExist: + legislatura = Legislatura.objects.first() + + try: + self.logger.debug("user=" + username + ". Tentando obter filiação do parlamentar com (data<={} e data_desfiliacao>={}) " + "ou (data<={} e data_desfiliacao=Null))." + .format(legislatura.data_fim, legislatura.data_fim, legislatura.data_fim)) + filiacao = obj.filiacao_set.get(Q( + data__lte=legislatura.data_fim, + data_desfiliacao__gte=legislatura.data_fim) | Q( + data__lte=legislatura.data_fim, + data_desfiliacao__isnull=True)) + + # Caso não exista filiação com essas condições + except ObjectDoesNotExist: + self.logger.error("user=" + username + ". Parlamentar com (data<={} e data_desfiliacao>={}) " + "ou (data<={} e data_desfiliacao=Null)) não possui filiação." + .format(legislatura.data_fim, legislatura.data_fim, legislatura.data_fim)) + filiacao = 'Não possui filiação' + + # Caso exista mais de uma filiação nesse intervalo + # Entretanto, NÃO DEVE OCORRER + except MultipleObjectsReturned: + self.logger.error("user=" + username + ". O Parlamentar com (data<={} e data_desfiliacao>={}) " + "ou (data<={} e data_desfiliacao=Null)) possui duas filiações conflitantes" + .format(legislatura.data_fim, legislatura.data_fim, legislatura.data_fim)) + filiacao = 'O Parlamentar possui duas filiações conflitantes' + + # Caso encontre UMA filiação nessas condições + else: + self.logger.debug("user=" + username + + ". Filiação encontrada com sucesso.") + filiacao = filiacao.partido.sigla + + return filiacao + + class Meta: + model = Parlamentar + fields = ['id', 'nome_parlamentar', 'fotografia_cropped','fotografia', 'ativo', 'partido', 'titular'] diff --git a/sapl/api/urls.py b/sapl/api/urls.py index 27196146d..4fc853e08 100644 --- a/sapl/api/urls.py +++ b/sapl/api/urls.py @@ -1,7 +1,5 @@ from django.conf import settings from django.conf.urls import include, url -from drf_yasg import openapi -from drf_yasg.views import get_schema_view from rest_framework import permissions from rest_framework.routers import DefaultRouter @@ -29,26 +27,29 @@ for app, built_sets in SaplApiViewSetConstrutor._built_sets.items(): urlpatterns_router = router.urls - -schema_view = get_schema_view( - openapi.Info( - title="Sapl API - docs", - default_version='v1', - description="Sapl API - Docs - Configuração Básica", - ), - url=settings.SITE_URL, - public=True, - permission_classes=(permissions.AllowAny,), -) - -urlpatterns_api_doc = [ - url(r'^docs/swagger(?P\.json|\.yaml)$', - schema_view.without_ui(cache_timeout=0), name='schema-json'), - url(r'^docs/swagger/$', - schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'), - url(r'^docs/redoc/$', - schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'), -] +urlpatterns_api_doc = [] +if 'drf_yasg' in settings.INSTALLED_APPS: + from drf_yasg import openapi + from drf_yasg.views import get_schema_view + schema_view = get_schema_view( + openapi.Info( + title="Sapl API - docs", + default_version='v1', + description="Sapl API - Docs - Configuração Básica", + ), + url=settings.SITE_URL, + public=True, + permission_classes=(permissions.AllowAny,), + ) + + urlpatterns_api_doc = [ + url(r'^docs/swagger(?P\.json|\.yaml)$', + schema_view.without_ui(cache_timeout=0), name='schema-json'), + url(r'^docs/swagger/$', + schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'), + url(r'^docs/redoc/$', + schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'), + ] # TODO: refatorar para customização da api automática deprecated_urlpatterns_api = [ diff --git a/sapl/api/views.py b/sapl/api/views.py index 48f06a3c5..f07710215 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -13,22 +13,27 @@ from django_filters.filters import CharFilter from django_filters.rest_framework.backends import DjangoFilterBackend from django_filters.rest_framework.filterset import FilterSet from django_filters.utils import resolve_field +from django.utils import timezone +from django.core.exceptions import ObjectDoesNotExist from rest_framework import serializers as rest_serializers from rest_framework.decorators import action +from rest_framework.fields import SerializerMethodField from rest_framework.response import Response from rest_framework.viewsets import ModelViewSet from sapl.api.forms import SaplFilterSetMixin from sapl.api.permissions import SaplModelPermissions -from sapl.api.serializers import ChoiceSerializer +from sapl.api.serializers import ChoiceSerializer, ParlamentarResumeSerializer from sapl.base.models import Autor, AppConfig, DOC_ADM_OSTENSIVO from sapl.materia.models import Proposicao, TipoMateriaLegislativa,\ MateriaLegislativa, Tramitacao +from sapl.norma.models import NormaJuridica from sapl.parlamentares.models import Parlamentar from sapl.protocoloadm.models import DocumentoAdministrativo,\ DocumentoAcessorioAdministrativo, TramitacaoAdministrativo, Anexado from sapl.sessao.models import SessaoPlenaria, ExpedienteSessao from sapl.utils import models_with_gr_for_model, choice_anos_com_sessaoplenaria +from sapl.parlamentares.models import Mandato, Parlamentar, Legislatura class BusinessRulesNotImplementedMixin: @@ -93,10 +98,15 @@ class SaplApiViewSetConstrutor(): # Define uma classe padrão para serializer caso não tenha sido # criada a classe sapl.api.serializers.{model}Serializer class SaplSerializer(rest_serializers.ModelSerializer): + __str__ = SerializerMethodField() + class Meta: model = _model fields = '__all__' + def get___str__(self, obj): + return str(obj) + # Define uma classe padrão para filtro caso não tenha sido # criada a classe sapl.api.forms.{model}FilterSet class SaplFilterSet(SaplFilterSetMixin): @@ -201,6 +211,8 @@ SaplApiViewSetConstrutor.build_class() # rest_framework.viewsets.ModelViewSet conforme exemplo para a classe autor # decorator para recuperar e transformar o default + + class customize(object): def __init__(self, model): self.model = model @@ -294,6 +306,16 @@ class _AutorViewSet: @customize(Parlamentar) class _ParlamentarViewSet: + class ParlamentarPermission(SaplModelPermissions): + def has_permission(self, request, view): + if request.method == 'GET': + return True + else: + perm = super().has_permission(request, view) + return perm + + permission_classes = (ParlamentarPermission, ) + @action(detail=True) def proposicoes(self, request, *args, **kwargs): """ @@ -324,6 +346,40 @@ class _ParlamentarViewSet: serializer = self.get_serializer(page, many=True) return Response(serializer.data) + + @action(detail=True) + def parlamentares_by_legislatura(self,request,*args,**kwargs): + """ + Pega lista de parlamentares pelo id da legislatura. + """ + try: + legislatura = Legislatura.objects.get(pk=kwargs['pk']) + except ObjectDoesNotExist: + return Response("") + data_atual = timezone.now().date() + + filter_params = { + 'legislatura':legislatura, + 'data_inicio_mandato__gte':legislatura.data_inicio, + 'data_fim_mandato__gte':legislatura.data_fim, + } + + if legislatura.data_inicio < data_atual < legislatura.data_fim: + filter_params['data_fim_mandato__gte'] = data_atual + + mandatos = Mandato.objects.filter(**filter_params).order_by('-data_inicio_mandato') + parlamentares = Parlamentar.objects.filter(mandato__in=mandatos).distinct() + serializer_class = ParlamentarResumeSerializer(parlamentares, + many=True, + context={'request':request,'legislatura':kwargs['pk']}) + return Response(serializer_class.data) + + @action(detail=False,methods=['GET']) + def search_parlamentares(self,request,*args,**kwargs): + nome = request.query_params.get('nome_parlamentar','') + parlamentares = Parlamentar.objects.filter(nome_parlamentar__icontains=nome) + serializer_class= ParlamentarResumeSerializer(parlamentares,many=True,context={'request':request}) + return Response(serializer_class.data) @customize(Proposicao) @@ -522,3 +578,12 @@ class _SessaoPlenariaViewSet: serializer = self.get_serializer(page, many=True) return Response(serializer.data) + + +@customize(NormaJuridica) +class _NormaJuridicaViewset: + + @action(detail=False, methods=['GET']) + def destaques(self, request, *args, **kwargs): + self.queryset = self.get_queryset().filter(norma_de_destaque=True) + return self.list(request, *args, **kwargs) diff --git a/sapl/audiencia/forms.py b/sapl/audiencia/forms.py index d62900df6..09e161917 100755 --- a/sapl/audiencia/forms.py +++ b/sapl/audiencia/forms.py @@ -1,17 +1,16 @@ import logging from django import forms -from sapl.settings import MAX_DOC_UPLOAD_SIZE from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.db import transaction from django.utils.translation import ugettext_lazy as _ -from sapl.audiencia.models import AudienciaPublica, TipoAudienciaPublica, AnexoAudienciaPublica -from crispy_forms.layout import HTML, Button, Column, Fieldset, Layout -from sapl.crispy_layout_mixin import SaplFormHelper -from sapl.crispy_layout_mixin import SaplFormLayout, form_actions, to_row +from crispy_forms.layout import Button, Column, Fieldset, HTML, Layout + +from sapl.audiencia.models import AudienciaPublica, TipoAudienciaPublica, AnexoAudienciaPublica +from sapl.crispy_layout_mixin import form_actions, SaplFormHelper, SaplFormLayout, to_row from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa -from sapl.utils import timezone, FileFieldCheckMixin +from sapl.utils import timezone, FileFieldCheckMixin, validar_arquivo class AudienciaForm(FileFieldCheckMixin, forms.ModelForm): logger = logging.getLogger(__name__) @@ -119,17 +118,14 @@ class AudienciaForm(FileFieldCheckMixin, forms.ModelForm): upload_ata = self.cleaned_data.get('upload_ata', False) upload_anexo = self.cleaned_data.get('upload_anexo', False) - if upload_pauta and upload_pauta.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Pauta da Audiência Pública deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_pauta.size/1024)/1024)) + if upload_pauta: + validar_arquivo(upload_pauta, "Pauta da Audiência Pública") - if upload_ata and upload_ata.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Ata da Audiência Pública deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_ata.size/1024)/1024)) + if upload_ata: + validar_arquivo(upload_ata, "Ata da Audiência Pública") - if upload_anexo and upload_anexo.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Anexo da Audiência Pública deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_anexo.size/1024)/1024)) + if upload_anexo: + validar_arquivo(upload_anexo, "Anexo da Audiência Pública") return cleaned_data @@ -164,8 +160,7 @@ class AnexoAudienciaPublicaForm(forms.ModelForm): arquivo = self.cleaned_data.get('arquivo', False) - if arquivo and arquivo.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (arquivo.size/1024)/1024)) + if arquivo: + validar_arquivo(arquivo, "Arquivo") return self.cleaned_data diff --git a/sapl/audiencia/migrations/0011_auto_20190712_1053.py b/sapl/audiencia/migrations/0011_auto_20190712_1053.py new file mode 100644 index 000000000..715c1d615 --- /dev/null +++ b/sapl/audiencia/migrations/0011_auto_20190712_1053.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-07-12 13:53 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.audiencia.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('audiencia', '0010_auto_20190219_1511'), + ] + + operations = [ + migrations.AlterField( + model_name='anexoaudienciapublica', + name='arquivo', + field=models.FileField(storage=sapl.utils.OverwriteStorage(), upload_to=sapl.utils.texto_upload_path, verbose_name='Arquivo'), + ), + migrations.AlterField( + model_name='audienciapublica', + name='upload_anexo', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.audiencia.models.anexo_upload_path, verbose_name='Anexo da Audiência Pública'), + ), + migrations.AlterField( + model_name='audienciapublica', + name='upload_ata', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.audiencia.models.ata_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Ata da Audiência Pública'), + ), + migrations.AlterField( + model_name='audienciapublica', + name='upload_pauta', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.audiencia.models.pauta_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Pauta da Audiência Pública'), + ), + ] diff --git a/sapl/audiencia/migrations/0012_auto_20191001_1115.py b/sapl/audiencia/migrations/0012_auto_20191001_1115.py new file mode 100644 index 000000000..b953ca0bb --- /dev/null +++ b/sapl/audiencia/migrations/0012_auto_20191001_1115.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-01 14:15 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.audiencia.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('audiencia', '0011_auto_20190712_1053'), + ] + + operations = [ + migrations.AlterField( + model_name='anexoaudienciapublica', + name='arquivo', + field=models.FileField(max_length=200, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.utils.texto_upload_path, verbose_name='Arquivo'), + ), + migrations.AlterField( + model_name='audienciapublica', + name='upload_anexo', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.audiencia.models.anexo_upload_path, verbose_name='Anexo da Audiência Pública'), + ), + migrations.AlterField( + model_name='audienciapublica', + name='upload_ata', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.audiencia.models.ata_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Ata da Audiência Pública'), + ), + migrations.AlterField( + model_name='audienciapublica', + name='upload_pauta', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.audiencia.models.pauta_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Pauta da Audiência Pública'), + ), + ] diff --git a/sapl/audiencia/migrations/0013_auto_20191023_1522.py b/sapl/audiencia/migrations/0013_auto_20191023_1522.py new file mode 100644 index 000000000..63886a25f --- /dev/null +++ b/sapl/audiencia/migrations/0013_auto_20191023_1522.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-23 18:22 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.audiencia.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('audiencia', '0012_auto_20191001_1115'), + ] + + operations = [ + migrations.AlterField( + model_name='audienciapublica', + name='upload_anexo', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.audiencia.models.anexo_upload_path, verbose_name='Anexo da Audiência Pública'), + ), + migrations.AlterField( + model_name='audienciapublica', + name='upload_ata', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.audiencia.models.ata_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Ata da Audiência Pública'), + ), + migrations.AlterField( + model_name='audienciapublica', + name='upload_pauta', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.audiencia.models.pauta_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Pauta da Audiência Pública'), + ), + ] diff --git a/sapl/audiencia/migrations/0014_auto_20191023_1538.py b/sapl/audiencia/migrations/0014_auto_20191023_1538.py new file mode 100644 index 000000000..4b9cdfbb3 --- /dev/null +++ b/sapl/audiencia/migrations/0014_auto_20191023_1538.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-23 18:38 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('audiencia', '0013_auto_20191023_1522'), + ] + + operations = [ + migrations.AlterField( + model_name='anexoaudienciapublica', + name='arquivo', + field=models.FileField(max_length=300, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.utils.texto_upload_path, verbose_name='Arquivo'), + ), + ] diff --git a/sapl/audiencia/models.py b/sapl/audiencia/models.py index 76c36c6c0..d4c1b11cb 100755 --- a/sapl/audiencia/models.py +++ b/sapl/audiencia/models.py @@ -7,7 +7,8 @@ from sapl.materia.models import MateriaLegislativa from sapl.parlamentares.models import (CargoMesa, Parlamentar) from sapl.utils import (YES_NO_CHOICES, SaplGenericRelation, - restringe_tipos_de_arquivo_txt, texto_upload_path) + restringe_tipos_de_arquivo_txt, texto_upload_path, + OverwriteStorage) def get_audiencia_media_path(instance, subpath, filename): @@ -86,21 +87,27 @@ class AudienciaPublica(models.Model): max_length=150, blank=True, verbose_name=_('URL Arquivo Vídeo (Formatos MP4 / FLV / WebM)')) upload_pauta = models.FileField( + max_length=300, blank=True, null=True, upload_to=pauta_upload_path, + storage=OverwriteStorage(), verbose_name=_('Pauta da Audiência Pública'), validators=[restringe_tipos_de_arquivo_txt]) upload_ata = models.FileField( + max_length=300, blank=True, null=True, upload_to=ata_upload_path, verbose_name=_('Ata da Audiência Pública'), + storage=OverwriteStorage(), validators=[restringe_tipos_de_arquivo_txt]) upload_anexo = models.FileField( + max_length=300, blank=True, null=True, upload_to=anexo_upload_path, + storage=OverwriteStorage(), verbose_name=_('Anexo da Audiência Pública')) class Meta: @@ -112,17 +119,22 @@ class AudienciaPublica(models.Model): return self.nome def delete(self, using=None, keep_parents=False): - if self.upload_pauta: - self.upload_pauta.delete() + upload_pauta = self.upload_pauta + upload_ata = self.upload_ata + upload_anexo = self.upload_anexo - if self.upload_ata: - self.upload_ata.delete() + result = super().delete(using=using, keep_parents=keep_parents) - if self.upload_anexo: - self.upload_anexo.delete() + if upload_pauta: + upload_pauta.delete(save=False) - return models.Model.delete( - self, using=using, keep_parents=keep_parents) + if upload_ata: + upload_ata.delete(save=False) + + if upload_anexo: + upload_anexo.delete(save=False) + + return result def save(self, force_insert=False, force_update=False, using=None, update_fields=None): @@ -155,7 +167,9 @@ class AnexoAudienciaPublica(models.Model): audiencia = models.ForeignKey(AudienciaPublica, on_delete=models.PROTECT) arquivo = models.FileField( + max_length=300, upload_to=texto_upload_path, + storage=OverwriteStorage(), verbose_name=_('Arquivo')) data = models.DateField( auto_now=timezone.now) @@ -170,10 +184,13 @@ class AnexoAudienciaPublica(models.Model): return self.assunto def delete(self, using=None, keep_parents=False): - if self.arquivo: - self.arquivo.delete() + arquivo = self.arquivo + result = super().delete(using=using, keep_parents=keep_parents) + + if arquivo: + arquivo.delete(save=False) - return models.Model.delete(self, using=using, keep_parents=keep_parents) + return result def save(self, force_insert=False, force_update=False, using=None, update_fields=None): if not self.pk and self.arquivo: diff --git a/sapl/audiencia/views.py b/sapl/audiencia/views.py index 82e921469..67b9ea656 100755 --- a/sapl/audiencia/views.py +++ b/sapl/audiencia/views.py @@ -21,7 +21,7 @@ class AudienciaCrud(Crud): class BaseMixin(Crud.BaseMixin): list_field_names = ['numero', 'nome', 'tipo', 'materia', 'data'] - ordering = 'nome', 'numero', 'tipo', 'data' + ordering = '-data', 'nome', 'numero', 'tipo' class ListView(Crud.ListView): paginate_by = 10 diff --git a/sapl/base/admin.py b/sapl/base/admin.py index 88633b0fb..46ab77bf3 100644 --- a/sapl/base/admin.py +++ b/sapl/base/admin.py @@ -1,8 +1,9 @@ from django.contrib import admin -from django.core.urlresolvers import reverse from django.shortcuts import redirect from django.utils.translation import ugettext_lazy as _ from reversion.models import Revision + +from sapl.base.models import AuditLog from sapl.utils import register_all_models_in_admin register_all_models_in_admin(__name__) @@ -20,5 +21,31 @@ class RevisionAdmin(admin.ModelAdmin): self.message_user(request, _('You cannot change history.')) return redirect('admin:reversion_revision_changelist') - admin.site.register(Revision, RevisionAdmin) + + +class AuditLogAdmin(admin.ModelAdmin): + pass + + def has_add_permission(self, request): + return False + + # def has_change_permission(self, request, obj=None): + # return False + # + def has_delete_permission(self, request, obj=None): + return False + + def save_model(self, request, obj, form, change): + pass + + def delete_model(self, request, obj): + pass + + def save_related(self, request, form, formsets, change): + pass + + +# Na linha acima register_all_models_in_admin registrou AuditLog +admin.site.unregister(AuditLog) +admin.site.register(AuditLog, AuditLogAdmin) diff --git a/sapl/base/forms.py b/sapl/base/forms.py index d9594511b..a14c0d3ca 100644 --- a/sapl/base/forms.py +++ b/sapl/base/forms.py @@ -1,8 +1,9 @@ import logging import os -from crispy_forms.bootstrap import FieldWithButtons, InlineRadios, StrictButton -from crispy_forms.layout import HTML, Button, Div, Field, Fieldset, Layout, Row + +from crispy_forms.bootstrap import FieldWithButtons, InlineRadios, StrictButton, FormActions +from crispy_forms.layout import HTML, Button, Div, Field, Fieldset, Layout, Row, Submit from django import forms from django.conf import settings from django.contrib.auth import get_user_model @@ -18,27 +19,25 @@ from django.utils.translation import string_concat from django.utils.translation import ugettext_lazy as _ import django_filters -from sapl.audiencia.models import AudienciaPublica, TipoAudienciaPublica -from sapl.audiencia.models import AudienciaPublica, TipoAudienciaPublica +from sapl.audiencia.models import AudienciaPublica from sapl.base.models import Autor, TipoAutor -from sapl.comissoes.models import Reuniao, Comissao -from sapl.comissoes.models import Reuniao, Comissao -from sapl.crispy_layout_mixin import (SaplFormLayout, form_actions, to_column, - to_row) -from sapl.crispy_layout_mixin import SaplFormHelper -from sapl.materia.models import ( - MateriaLegislativa, UnidadeTramitacao, StatusTramitacao) -from sapl.norma.models import (NormaJuridica, NormaEstatisticas) -from sapl.parlamentares.models import SessaoLegislativa, Partido +from sapl.comissoes.models import Reuniao +from sapl.crispy_layout_mixin import (form_actions, to_column, to_row, + SaplFormHelper, SaplFormLayout) +from sapl.materia.models import (DocumentoAcessorio, MateriaEmTramitacao, + MateriaLegislativa, UnidadeTramitacao, + StatusTramitacao) +from sapl.norma.models import NormaJuridica +from sapl.parlamentares.models import Partido, SessaoLegislativa from sapl.protocoloadm.models import DocumentoAdministrativo from sapl.sessao.models import SessaoPlenaria from sapl.settings import MAX_IMAGE_UPLOAD_SIZE -from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, - ChoiceWithoutValidationField, ImageThumbnailFileInput, - RangeWidgetOverride, autor_label, autor_modal, - models_with_gr_for_model, qs_override_django_filter, +from sapl.utils import (autor_label, autor_modal, ChoiceWithoutValidationField, choice_anos_com_normas, choice_anos_com_materias, - FilterOverridesMetaMixin, FileFieldCheckMixin) + FilterOverridesMetaMixin, FileFieldCheckMixin, + AnoNumeroOrderingFilter, ImageThumbnailFileInput, + models_with_gr_for_model, qs_override_django_filter, + RangeWidgetOverride, RANGE_ANOS, YES_NO_CHOICES) from .models import AppConfig, CasaLegislativa @@ -604,7 +603,7 @@ class AutorForm(ModelForm): self.logger.error( 'Já existe um Autor para este usuário ({}).'.format(cd['username'])) raise ValidationError( - _('Já existe um Autor para este usuário.')) + _('Já existe um usuário vinculado a esse autor')) """ 'if' não é necessário por ser campo obrigatório e o framework já @@ -618,6 +617,10 @@ class AutorForm(ModelForm): tipo = cd['tipo'] + if 'nome' in cd and \ + Autor.objects.filter(nome=cd['nome']).exists(): + raise ValidationError("Autor '%s' já existente!" % cd['nome']) + if not tipo.content_type: if 'nome' not in cd or not cd['nome']: self.logger.error('Nome do Autor não informado.') @@ -731,6 +734,58 @@ class AutorFormForAdmin(AutorForm): 'status_user'] +class RelatorioDocumentosAcessoriosFilterSet(django_filters.FilterSet): + + @property + def qs(self): + parent = super(RelatorioDocumentosAcessoriosFilterSet, self).qs + return parent.distinct().order_by('-data') + + class Meta(FilterOverridesMetaMixin): + model = DocumentoAcessorio + fields = ['tipo', 'materia__tipo', 'data'] + + def __init__(self, *args, **kwargs): + + super( + RelatorioDocumentosAcessoriosFilterSet, self + ).__init__(*args, **kwargs) + + self.filters['tipo'].label = 'Tipo de Documento' + self.filters['materia__tipo'].label = 'Tipo de Matéria do Documento' + self.filters['data'].label = 'Período (Data Inicial - Data Final)' + + self.form.fields['tipo'].required = True + + row0 = to_row([('tipo', 6), + ('materia__tipo', 6)]) + + row1 = to_row([('data', 12)]) + + buttons = FormActions( + *[ + HTML(''' +
+ + +
+ ''') + ], + Submit('pesquisar', _('Pesquisar'), css_class='float-right', + onclick='return true;'), + css_class='form-group row justify-content-between' + , + ) + + self.form.helper = SaplFormHelper() + self.form.helper.form_method = 'GET' + self.form.helper.layout = Layout( + Fieldset(_('Pesquisa'), + row0, row1, + buttons) + ) + + class RelatorioAtasFilterSet(django_filters.FilterSet): class Meta(FilterOverridesMetaMixin): @@ -747,19 +802,33 @@ class RelatorioAtasFilterSet(django_filters.FilterSet): super(RelatorioAtasFilterSet, self).__init__( *args, **kwargs) - self.filters['data_inicio'].label = 'Período (Inicial - Final)' - self.form.fields['data_inicio'].required = True + self.filters['data_inicio'].label = 'Período de Abertura (Inicial - Final)' + self.form.fields['data_inicio'].required = False row1 = to_row([('data_inicio', 12)]) + buttons = FormActions( + *[ + HTML(''' +
+ + +
+ ''') + ], + Submit('pesquisar', _('Pesquisar'), css_class='float-right', + onclick='return true;'), + css_class='form-group row justify-content-between' + , + ) + self.form.helper = SaplFormHelper() self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( Fieldset(_('Atas das Sessões Plenárias'), - row1, form_actions(label='Pesquisar')) + row1, buttons, ) ) - def ultimo_ano_com_norma(): anos_normas = choice_anos_com_normas() @@ -788,11 +857,26 @@ class RelatorioNormasMesFilterSet(django_filters.FilterSet): row1 = to_row([('ano', 12)]) + buttons = FormActions( + *[ + HTML(''' +
+ + +
+ ''') + ], + Submit('pesquisar', _('Pesquisar'), css_class='float-right', + onclick='return true;'), + css_class='form-group row justify-content-between' + , + ) + self.form.helper = SaplFormHelper() self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( Fieldset(_('Normas por mês do ano.'), - row1, form_actions(label='Pesquisar')) + row1, buttons, ) ) @property @@ -817,11 +901,26 @@ class EstatisticasAcessoNormasForm(Form): row1 = to_row([('ano', 12)]) + buttons = FormActions( + *[ + HTML(''' +
+ + +
+ ''') + ], + Submit('pesquisar', _('Pesquisar'), css_class='float-right', + onclick='return true;'), + css_class='form-group row justify-content-between' + , + ) + self.helper = SaplFormHelper() self.helper.form_method = 'GET' self.helper.layout = Layout( Fieldset(_('Normas por acessos nos meses do ano.'), - row1, form_actions(label='Pesquisar')) + row1, buttons) ) def clean(self): @@ -855,12 +954,27 @@ class RelatorioNormasVigenciaFilterSet(django_filters.FilterSet): row1 = to_row([('ano', 12)]) row2 = to_row([('vigencia', 12)]) + buttons = FormActions( + *[ + HTML(''' +
+ + +
+ ''') + ], + Submit('pesquisar', _('Pesquisar'), css_class='float-right', + onclick='return true;'), + css_class='form-group row justify-content-between' + , + ) + self.form.helper = SaplFormHelper() self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( Fieldset(_('Normas por vigência.'), row1, row2, - form_actions(label='Pesquisar')) + buttons, ) ) @property @@ -886,22 +1000,39 @@ class RelatorioPresencaSessaoFilterSet(django_filters.FilterSet): self.form.initial['exibir_ordem_dia'] = True self.filters['data_inicio'].label = 'Período (Inicial - Final)' + + self.form.fields['legislatura'].required = True tipo_sessao_ordinaria = self.filters['tipo'].queryset.filter(nome='Ordinária') if tipo_sessao_ordinaria: self.form.initial['tipo'] = tipo_sessao_ordinaria.first() - row1 = to_row([('data_inicio', 12)]) - row2 = to_row([('legislatura', 4), + row1 = to_row([('legislatura', 4), ('sessao_legislativa', 4), ('tipo', 4)]) - row3 = to_row([('exibir_ordem_dia', 12)]) + row2 = to_row([('exibir_ordem_dia', 12)]) + row3 = to_row([('data_inicio', 12)]) + + buttons = FormActions( + *[ + HTML(''' +
+ + +
+ ''') + ], + Submit('pesquisar', _('Pesquisar'), css_class='float-right', + onclick='return true;'), + css_class='form-group row justify-content-between' + , + ) self.form.helper = SaplFormHelper() self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( Fieldset(_('Presença dos parlamentares nas sessões plenárias'), - row1, row2, row3, form_actions(label='Pesquisar')) + row1, row2, row3, buttons, ) ) @property @@ -911,6 +1042,8 @@ class RelatorioPresencaSessaoFilterSet(django_filters.FilterSet): class RelatorioHistoricoTramitacaoFilterSet(django_filters.FilterSet): + autoria__autor = django_filters.CharFilter(widget=forms.HiddenInput()) + @property def qs(self): parent = super(RelatorioHistoricoTramitacaoFilterSet, self).qs @@ -939,12 +1072,39 @@ class RelatorioHistoricoTramitacaoFilterSet(django_filters.FilterSet): [('tipo', 6), ('tramitacao__status', 6)]) + row4 = to_row([ + ('autoria__autor', 0), + (Button('pesquisar', + 'Pesquisar Autor', + css_class='btn btn-primary btn-sm'), 2), + (Button('limpar', + 'limpar Autor', + css_class='btn btn-primary btn-sm'), 2) + ]) + + buttons = FormActions( + *[ + HTML(''' +
+ + +
+ ''') + ], + Submit('pesquisar', _('Pesquisar'), css_class='float-right', + onclick='return true;'), + css_class='form-group row justify-content-between' + , + ) + self.form.helper = SaplFormHelper() self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( - Fieldset(_(''), - row1, row2, row3, - form_actions(label='Pesquisar')) + Fieldset(_('Pesquisar'), + row1, row2, row3, row4, + HTML(autor_label), + HTML(autor_modal), + buttons, ) ) @@ -978,12 +1138,27 @@ class RelatorioDataFimPrazoTramitacaoFilterSet(django_filters.FilterSet): [('tipo', 6), ('tramitacao__status', 6)]) + buttons = FormActions( + *[ + HTML(''' +
+ + +
+ ''') + ], + Submit('pesquisar', _('Pesquisar'), css_class='float-right', + onclick='return true;'), + css_class='form-group row justify-content-between' + , + ) + self.form.helper = SaplFormHelper() self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( Fieldset(_('Tramitações'), row1, row2, row3, - form_actions(label='Pesquisar')) + buttons, ) ) @@ -1009,12 +1184,27 @@ class RelatorioReuniaoFilterSet(django_filters.FilterSet): ('nome', 4), ('tema', 4)]) + buttons = FormActions( + *[ + HTML(''' +
+ + +
+ ''') + ], + Submit('pesquisar', _('Pesquisar'), css_class='float-right', + onclick='return true;'), + css_class='form-group row justify-content-between' + , + ) + self.form.helper = SaplFormHelper() self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( Fieldset(_('Reunião de Comissão'), row1, row2, - form_actions(label='Pesquisar')) + buttons, ) ) @@ -1039,18 +1229,33 @@ class RelatorioAudienciaFilterSet(django_filters.FilterSet): [('tipo', 4), ('nome', 4)]) + buttons = FormActions( + *[ + HTML(''' +
+ + +
+ ''') + ], + Submit('pesquisar', _('Pesquisar'), css_class='float-right', + onclick='return true;'), + css_class='form-group row justify-content-between' + , + ) + self.form.helper = SaplFormHelper() self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( Fieldset(_('Audiência Pública'), row1, row2, - form_actions(label='Pesquisar')) + buttons, ) ) -class RelatorioMateriasTramitacaoilterSet(django_filters.FilterSet): +class RelatorioMateriasTramitacaoFilterSet(django_filters.FilterSet): - ano = django_filters.ChoiceFilter(required=True, + materia__ano = django_filters.ChoiceFilter(required=True, label='Ano da Matéria', choices=choice_anos_com_materias) @@ -1064,31 +1269,49 @@ class RelatorioMateriasTramitacaoilterSet(django_filters.FilterSet): @property def qs(self): - parent = super(RelatorioMateriasTramitacaoilterSet, self).qs - return parent.distinct().order_by('-ano', 'tipo', '-numero') + parent = super(RelatorioMateriasTramitacaoFilterSet, self).qs + return parent.distinct().order_by( + '-materia__ano', 'materia__tipo', '-materia__numero' + ) class Meta: - model = MateriaLegislativa - fields = ['ano', 'tipo', 'tramitacao__unidade_tramitacao_destino', + model = MateriaEmTramitacao + fields = ['materia__ano', 'materia__tipo', + 'tramitacao__unidade_tramitacao_destino', 'tramitacao__status'] def __init__(self, *args, **kwargs): - super(RelatorioMateriasTramitacaoilterSet, self).__init__( + super(RelatorioMateriasTramitacaoFilterSet, self).__init__( *args, **kwargs) - self.filters['tipo'].label = 'Tipo de Matéria' + self.filters['materia__tipo'].label = 'Tipo de Matéria' - row1 = to_row([('ano', 12)]) - row2 = to_row([('tipo', 12)]) + row1 = to_row([('materia__ano', 12)]) + row2 = to_row([('materia__tipo', 12)]) row3 = to_row([('tramitacao__unidade_tramitacao_destino', 12)]) row4 = to_row([('tramitacao__status', 12)]) + buttons = FormActions( + *[ + HTML(''' +
+ + +
+ ''') + ], + Submit('pesquisar', _('Pesquisar'), css_class='float-right', + onclick='return true;'), + css_class='form-group row justify-content-between' + , + ) + self.form.helper = SaplFormHelper() self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( Fieldset(_('Pesquisa de Matéria em Tramitação'), row1, row2, row3, row4, - form_actions(label='Pesquisar')) + buttons,) ) @@ -1109,22 +1332,38 @@ class RelatorioMateriasPorAnoAutorTipoFilterSet(django_filters.FilterSet): row1 = to_row( [('ano', 12)]) + buttons = FormActions( + *[ + HTML(''' +
+ + +
+ ''') + ], + Submit('pesquisar', _('Pesquisar'), css_class='float-right', + onclick='return true;'), + css_class='form-group row justify-content-between' + , + ) + self.form.helper = SaplFormHelper() self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( - Fieldset(_('Pesquisar'), + Fieldset(_('Pesquisa de Matéria por Ano Autor Tipo'), row1, - form_actions(label='Pesquisar')) + buttons, ) ) + class RelatorioMateriasPorAutorFilterSet(django_filters.FilterSet): autoria__autor = django_filters.CharFilter(widget=forms.HiddenInput()) @property def qs(self): - parent = super(RelatorioMateriasPorAutorFilterSet, self).qs + parent = super().qs return parent.distinct().filter(autoria__primeiro_autor=True)\ .order_by('autoria__autor', '-autoria__primeiro_autor', 'tipo', '-ano', '-numero') @@ -1133,8 +1372,7 @@ class RelatorioMateriasPorAutorFilterSet(django_filters.FilterSet): fields = ['tipo', 'data_apresentacao'] def __init__(self, *args, **kwargs): - super(RelatorioMateriasPorAutorFilterSet, self).__init__( - *args, **kwargs) + super().__init__(*args, **kwargs) self.filters['tipo'].label = 'Tipo de Matéria' @@ -1151,15 +1389,30 @@ class RelatorioMateriasPorAutorFilterSet(django_filters.FilterSet): 'limpar Autor', css_class='btn btn-primary btn-sm'), 10)]) + buttons = FormActions( + *[ + HTML(''' +
+ + +
+ ''') + ], + Submit('pesquisar', _('Pesquisar'), css_class='float-right', + onclick='return true;'), + css_class='form-group row justify-content-between' + , + ) + self.form.helper = SaplFormHelper() self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( - Fieldset(_('Pesquisar'), + Fieldset(_('Pesquisa de Matéria por Autor'), row1, row2, HTML(autor_label), HTML(autor_modal), row3, - form_actions(label='Pesquisar')) + buttons, ) ) @@ -1257,9 +1510,13 @@ class ConfiguracoesAppForm(ModelForm): self.fields['cronometro_ordem'].widget.attrs['class'] = 'cronometro' self.fields['cronometro_consideracoes'].widget.attrs['class'] = 'cronometro' - def clean_mostrar_brasao_painel(self): - mostrar_brasao_painel = self.cleaned_data.get( - 'mostrar_brasao_painel', False) + def clean(self): + cleaned_data = super().clean() + + if not self.is_valid(): + return cleaned_data + + mostrar_brasao_painel = self.cleaned_data.get('mostrar_brasao_painel', False) casa = CasaLegislativa.objects.first() if not casa: @@ -1272,7 +1529,7 @@ class ConfiguracoesAppForm(ModelForm): raise ValidationError("Não há logitipo configurado para esta " "Casa legislativa.") - return mostrar_brasao_painel + return cleaned_data class RecuperarSenhaForm(PasswordResetForm): @@ -1486,10 +1743,83 @@ class RelatorioHistoricoTramitacaoAdmFilterSet(django_filters.FilterSet): [('tipo', 6), ('tramitacaoadministrativo__status', 6)]) + buttons = FormActions( + *[ + HTML(''' +
+ + +
+ ''') + ], + Submit('pesquisar', _('Pesquisar'), css_class='float-right', + onclick='return true;'), + css_class='form-group row justify-content-between' + , + ) + self.form.helper = SaplFormHelper() self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( Fieldset(_(''), row1, row2, row3, + buttons, ) + ) + + +class RelatorioNormasPorAutorFilterSet(django_filters.FilterSet): + + autorianorma__autor = django_filters.CharFilter(widget=forms.HiddenInput()) + + @property + def qs(self): + parent = super().qs + return parent.distinct().filter(autorianorma__primeiro_autor=True)\ + .order_by('autorianorma__autor', '-autorianorma__primeiro_autor', 'tipo', '-ano', '-numero') + + class Meta(FilterOverridesMetaMixin): + model = NormaJuridica + fields = ['tipo', 'data'] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.filters['tipo'].label = 'Tipo de Norma' + + row1 = to_row( + [('tipo', 12)]) + row2 = to_row( + [('data', 12)]) + row3 = to_row( + [('autorianorma__autor', 0), + (Button('pesquisar', + 'Pesquisar Autor', + css_class='btn btn-primary btn-sm'), 2), + (Button('limpar', + 'Limpar Autor', + css_class='btn btn-primary btn-sm'), 10)]) + buttons = FormActions( + *[ + HTML(''' +
+ + +
+ ''') + ], + Submit('pesquisar', _('Pesquisar'), css_class='float-right', + onclick='return true;'), + css_class='form-group row justify-content-between' + , + ) + + self.form.helper = SaplFormHelper() + self.form.helper.form_method = 'GET' + self.form.helper.layout = Layout( + Fieldset(_('Pesquisar'), + row1, row2, + HTML(autor_label), + HTML(autor_modal), + row3, form_actions(label='Pesquisar')) ) diff --git a/sapl/base/migrations/0038_auditlog.py b/sapl/base/migrations/0038_auditlog.py new file mode 100644 index 000000000..ba89599e7 --- /dev/null +++ b/sapl/base/migrations/0038_auditlog.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-15 13:33 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0037_auto_20190527_0901'), + ] + + operations = [ + migrations.CreateModel( + name='AuditLog', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('username', models.CharField(blank=True, db_index=True, max_length=100, verbose_name='username')), + ('operation', models.CharField(db_index=True, max_length=1, verbose_name='operation')), + ('timestamp', models.DateTimeField(db_index=True, verbose_name='timestamp')), + ('object', models.CharField(blank=True, max_length=4096, verbose_name='object')), + ('object_id', models.PositiveIntegerField(db_index=True, verbose_name='object_id')), + ('model_name', models.CharField(db_index=True, max_length=100, verbose_name='model')), + ('app_name', models.CharField(db_index=True, max_length=100, verbose_name='app')), + ], + options={ + 'verbose_name': 'AuditLog', + 'verbose_name_plural': 'AuditLogs', + 'ordering': ('-id',), + }, + ), + ] diff --git a/sapl/base/migrations/0039_auto_20191202_1114.py b/sapl/base/migrations/0039_auto_20191202_1114.py new file mode 100644 index 000000000..351513b03 --- /dev/null +++ b/sapl/base/migrations/0039_auto_20191202_1114.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-12-02 14:14 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0038_auditlog'), + ] + + operations = [ + migrations.AlterField( + model_name='appconfig', + name='assinatura_ata', + field=models.CharField(choices=[('M', 'Mesa Diretora da Sessão'), ('P', 'Apenas o Presidente da Sessão'), ('T', 'Todos os Parlamentares Presentes na Sessão')], default='T', max_length=1, verbose_name='Quem deve assinar a ata'), + ), + ] diff --git a/sapl/base/models.py b/sapl/base/models.py index c4ce3d1a2..07f028984 100644 --- a/sapl/base/models.py +++ b/sapl/base/models.py @@ -137,7 +137,7 @@ class AppConfig(models.Model): max_length=1, choices=POLITICA_PROTOCOLO_CHOICES, default='O') assinatura_ata = models.CharField( - verbose_name=_('Quem deve assina a ata'), + verbose_name=_('Quem deve assinar a ata'), max_length=1, choices=ASSINATURA_ATA_CHOICES, default='T') cronometro_discurso = models.DurationField( @@ -271,38 +271,42 @@ class Autor(models.Model): return '?' -def cria_models_tipo_autor(app_config=None, verbosity=2, interactive=True, - using=DEFAULT_DB_ALIAS, **kwargs): +class AuditLog(models.Model): - models = models_with_gr_for_model(Autor) + operation = ('C', 'D', 'U') - print("\n\033[93m\033[1m{}\033[0m".format( - _('Atualizando registros TipoAutor do SAPL:'))) - for model in models: - content_type = ContentType.objects.get_for_model(model) - tipo_autor = TipoAutor.objects.filter( - content_type=content_type.id).exists() + MAX_DATA_LENGTH = 4096 # 4KB de texto + + username = models.CharField(max_length=100, + verbose_name=_('username'), + blank=True, + db_index=True) + operation = models.CharField(max_length=1, + verbose_name=_('operation'), + db_index=True) + timestamp = models.DateTimeField(verbose_name=_('timestamp'), + db_index=True) + object = models.CharField(max_length=MAX_DATA_LENGTH, + blank=True, + verbose_name=_('object')) + object_id = models.PositiveIntegerField(verbose_name=_('object_id'), + db_index=True) + model_name = models.CharField(max_length=100, verbose_name=_('model'), + db_index=True) + app_name = models.CharField(max_length=100, + verbose_name=_('app'), + db_index=True) + + class Meta: + verbose_name = _('AuditLog') + verbose_name_plural = _('AuditLogs') + ordering = ('-id',) + + def __str__(self): + return "[%s] %s %s.%s %s" % (self.timestamp, + self.operation, + self.app_name, + self.model_name, + self.username, + ) - if tipo_autor: - msg1 = "Carga de {} não efetuada.".format( - TipoAutor._meta.verbose_name) - msg2 = " Já Existe um {} {} relacionado...".format( - TipoAutor._meta.verbose_name, - model._meta.verbose_name) - msg = " {}{}".format(msg1, msg2) - else: - novo_autor = TipoAutor() - novo_autor.content_type_id = content_type.id - novo_autor.descricao = model._meta.verbose_name - novo_autor.save() - msg1 = "Carga de {} efetuada.".format( - TipoAutor._meta.verbose_name) - msg2 = " {} {} criado...".format( - TipoAutor._meta.verbose_name, content_type.model) - msg = " {}{}".format(msg1, msg2) - print(msg) - # Disconecta função para evitar a chamada repetidas vezes. - post_migrate.disconnect(receiver=cria_models_tipo_autor) - - -post_migrate.connect(receiver=cria_models_tipo_autor) diff --git a/sapl/base/receivers.py b/sapl/base/receivers.py index b2176be14..5685c5c15 100644 --- a/sapl/base/receivers.py +++ b/sapl/base/receivers.py @@ -1,13 +1,17 @@ -from django.db.models.signals import post_delete, post_save +import logging + +from django.core import serializers +from django.db.models.signals import post_delete from django.dispatch import receiver +from django.utils import timezone +from sapl.base.email_utils import do_envia_email_tramitacao +from sapl.base.models import AuditLog +from sapl.base.signals import tramitacao_signal, post_delete_signal, post_save_signal from sapl.materia.models import Tramitacao from sapl.protocoloadm.models import TramitacaoAdministrativo -from sapl.base.signals import tramitacao_signal from sapl.utils import get_base_url -from sapl.base.email_utils import do_envia_email_tramitacao - @receiver(tramitacao_signal) def handle_tramitacao_signal(sender, **kwargs): @@ -30,13 +34,47 @@ def handle_tramitacao_signal(sender, **kwargs): @receiver(post_delete) def status_tramitacao_materia(sender, instance, **kwargs): - if isinstance(sender, TramitacaoAdministrativo): + if sender == Tramitacao: if instance.status.indicador == 'F': materia = instance.materia materia.em_tramitacao = True materia.save() - elif isinstance(sender, TramitacaoAdministrativo): + elif sender == TramitacaoAdministrativo: if instance.status.indicador == 'F': documento = instance.documento documento.tramitacao = True documento.save() + + +@receiver(post_delete_signal) +@receiver(post_save_signal) +def audit_log(sender, **kwargs): + logger = logging.getLogger(__name__) + + instance = kwargs.get('instance') + operation = kwargs.get('operation') + user = kwargs.get('request').user + model_name = instance.__class__.__name__ + app_name = instance._meta.app_label + object_id = instance.id + data = serializers.serialize('json', [instance]) + + if len(data) > AuditLog.MAX_DATA_LENGTH: + data = data[:AuditLog.MAX_DATA_LENGTH] + + if user: + username = user.username + else: + username = '' + + try: + AuditLog.objects.create(username=username, + operation=operation, + model_name=model_name, + app_name=app_name, + timestamp=timezone.now(), + object_id=object_id, + object=data) + except Exception as e: + logger.error('Error saving auditing log object') + logger.error(e) diff --git a/sapl/base/signals.py b/sapl/base/signals.py index 3381ff3a6..a2caf67df 100644 --- a/sapl/base/signals.py +++ b/sapl/base/signals.py @@ -1,3 +1,51 @@ +from django.contrib.contenttypes.models import ContentType +from django.db.models.signals import post_migrate +from django.db.utils import DEFAULT_DB_ALIAS import django.dispatch +from django.utils.translation import ugettext_lazy as _ +from sapl.base.models import Autor, TipoAutor +from sapl.utils import models_with_gr_for_model + + tramitacao_signal = django.dispatch.Signal(providing_args=['post', 'request']) + + +def cria_models_tipo_autor(app_config=None, verbosity=2, interactive=True, + using=DEFAULT_DB_ALIAS, **kwargs): + + models = models_with_gr_for_model(Autor) + + print("\n\033[93m\033[1m{}\033[0m".format( + _('Atualizando registros TipoAutor do SAPL:'))) + for model in models: + content_type = ContentType.objects.get_for_model(model) + tipo_autor = TipoAutor.objects.filter( + content_type=content_type.id).exists() + + if tipo_autor: + msg1 = "Carga de {} não efetuada.".format( + TipoAutor._meta.verbose_name) + msg2 = " Já Existe um {} {} relacionado...".format( + TipoAutor._meta.verbose_name, + model._meta.verbose_name) + msg = " {}{}".format(msg1, msg2) + else: + novo_autor = TipoAutor() + novo_autor.content_type_id = content_type.id + novo_autor.descricao = model._meta.verbose_name + novo_autor.save() + msg1 = "Carga de {} efetuada.".format( + TipoAutor._meta.verbose_name) + msg2 = " {} {} criado...".format( + TipoAutor._meta.verbose_name, content_type.model) + msg = " {}{}".format(msg1, msg2) + print(msg) + # Disconecta função para evitar a chamada repetidas vezes. + post_migrate.disconnect(receiver=cria_models_tipo_autor) + + +post_migrate.connect(receiver=cria_models_tipo_autor) +post_delete_signal = django.dispatch.Signal(providing_args=['instance', 'request']) + +post_save_signal = django.dispatch.Signal(providing_args=['instance', 'operation', 'request']) diff --git a/sapl/base/templatetags/common_tags.py b/sapl/base/templatetags/common_tags.py index 12192ab6f..048778d8d 100644 --- a/sapl/base/templatetags/common_tags.py +++ b/sapl/base/templatetags/common_tags.py @@ -249,8 +249,10 @@ def facebook_url(value): def youtube_id(value): from urllib.parse import urlparse, parse_qs u_pars = urlparse(value) - quer_v = parse_qs(u_pars.query).get('v')[0] - return quer_v + quer_v = parse_qs(u_pars.query).get('v') + if quer_v: + return quer_v[0] + return '' @register.filter diff --git a/sapl/base/tests/test_view_base.py b/sapl/base/tests/test_view_base.py index 6655317b3..75748edd0 100644 --- a/sapl/base/tests/test_view_base.py +++ b/sapl/base/tests/test_view_base.py @@ -24,32 +24,6 @@ from sapl.base.views import (protocolos_duplicados, protocolos_com_materias, bancada_comissao_autor_externo, anexados_ciclicos) -@pytest.mark.django_db(transaction=False) -def test_lista_protocolos_duplicados(): - mommy.make( - Protocolo, - numero=15, - ano=2031 - ) - mommy.make( - Protocolo, - numero=15, - ano=2031 - ) - mommy.make( - Protocolo, - numero=33, - ano=2033 - ) - - lista_protocolos_duplicados = protocolos_duplicados() - - assert len(lista_protocolos_duplicados) == 1 - assert lista_protocolos_duplicados[0][1] == 2 - assert lista_protocolos_duplicados[0][0].numero == 15 - assert lista_protocolos_duplicados[0][0].ano == 2031 - - @pytest.mark.django_db(transaction=False) def test_lista_protocolos_com_materias(): mommy.make( @@ -194,13 +168,13 @@ def test_lista_parlamentares_duplicados(): sexo='M' ) - lista_dict_values_parlamentares_duplicados = parlamentares_duplicados() + lista_dict_parlamentares_duplicados = parlamentares_duplicados() parlamentar_duplicado = list( - lista_dict_values_parlamentares_duplicados[0] + lista_dict_parlamentares_duplicados[0].values() ) parlamentar_duplicado.sort(key=str) - assert len(lista_dict_values_parlamentares_duplicados) == 1 + assert len(lista_dict_parlamentares_duplicados) == 1 assert parlamentar_duplicado == [2, "Nome_Parlamentar_Teste"] diff --git a/sapl/base/urls.py b/sapl/base/urls.py index d9a1c5a94..19a72c901 100644 --- a/sapl/base/urls.py +++ b/sapl/base/urls.py @@ -36,7 +36,8 @@ from .views import (AlterarSenha, AppConfigCrud, CasaLegislativaCrud, ListarAutoresDuplicadosView, ListarBancadaComissaoAutorExternoView, ListarLegislaturaInfindavelView, ListarAnexadasCiclicasView, ListarAnexadosCiclicosView, pesquisa_textual, - RelatorioHistoricoTramitacaoAdmView) + RelatorioHistoricoTramitacaoAdmView, RelatorioDocumentosAcessoriosView, + RelatorioNormasPorAutorView) app_name = AppConfig.name @@ -135,6 +136,11 @@ urlpatterns = [ url(r'^sistema/relatorios/historico-tramitacoesadm$', RelatorioHistoricoTramitacaoAdmView.as_view(), name='historico_tramitacoes_adm'), + url(r'^sistema/relatorios/documentos_acessorios$', + RelatorioDocumentosAcessoriosView.as_view(), + name='relatorio_documentos_acessorios'), + url(r'^sistema/relatorios/normas-por-autor$', + RelatorioNormasPorAutorView.as_view(), name='normas_por_autor'), url(r'^email/validate/(?P[0-9A-Za-z_\-]+)/' '(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})$', diff --git a/sapl/base/views.py b/sapl/base/views.py index f3b1c553d..0d11c5692 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -13,7 +13,8 @@ from django.core.exceptions import ObjectDoesNotExist, PermissionDenied, Validat from django.core.mail import send_mail from django.core.urlresolvers import reverse, reverse_lazy from django.db import connection -from django.db.models import Count, Q, ProtectedError +from django.db.models import Count, Q, ProtectedError, Max +from django.shortcuts import render from django.http import Http404, HttpResponseRedirect, JsonResponse from django.template import TemplateDoesNotExist from django.template.loader import get_template @@ -29,24 +30,36 @@ from django_filters.views import FilterView from haystack.views import SearchView from haystack.query import SearchQuerySet +from sapl.relatorios.views import (relatorio_materia_em_tramitacao, relatorio_materia_por_autor, + relatorio_materia_por_ano_autor, relatorio_presenca_sessao, + relatorio_historico_tramitacao, relatorio_fim_prazo_tramitacao, + relatorio_atas, relatorio_audiencia, relatorio_normas_mes, + relatorio_normas_vigencia, relatorio_historico_tramitacao_adm, + relatorio_reuniao, relatorio_estatisticas_acesso_normas, + relatorio_normas_por_autor, relatorio_documento_acessorio) + from sapl import settings from sapl.audiencia.models import AudienciaPublica, TipoAudienciaPublica -from sapl.base.forms import AutorForm, AutorFormForAdmin, TipoAutorForm from sapl.base.models import Autor, TipoAutor -from sapl.comissoes.models import Reuniao, Comissao +from sapl.base.forms import AutorForm, AutorFormForAdmin, TipoAutorForm +from sapl.comissoes.models import Comissao, Reuniao from sapl.crud.base import CrudAux, make_pagination -from sapl.materia.models import (Autoria, MateriaLegislativa, Proposicao, Anexada, - TipoMateriaLegislativa, StatusTramitacao, UnidadeTramitacao) -from sapl.norma.models import (NormaJuridica, NormaEstatisticas) -from sapl.parlamentares.models import Parlamentar, Legislatura, Mandato, Filiacao, SessaoLegislativa -from sapl.protocoloadm.models import (Protocolo, TipoDocumentoAdministrativo, - StatusTramitacaoAdministrativo, - DocumentoAdministrativo, Anexado) -from sapl.sessao.models import (PresencaOrdemDia, SessaoPlenaria, - SessaoPlenariaPresenca, Bancada, TipoSessaoPlenaria) -from sapl.utils import (parlamentares_ativos, gerar_hash_arquivo, SEPARADOR_HASH_PROPOSICAO, - show_results_filter_set, mail_service_configured, - intervalos_tem_intersecao, remover_acentos) +from sapl.materia.models import (Anexada, Autoria, DocumentoAcessorio, + MateriaEmTramitacao, MateriaLegislativa, Proposicao, + StatusTramitacao, TipoDocumento, + TipoMateriaLegislativa, UnidadeTramitacao, Tramitacao) +from sapl.norma.models import NormaJuridica, TipoNormaJuridica +from sapl.parlamentares.models import (Filiacao, Legislatura, Mandato, Parlamentar, + SessaoLegislativa) +from sapl.protocoloadm.models import (Anexado, DocumentoAdministrativo, Protocolo, + StatusTramitacaoAdministrativo, + TipoDocumentoAdministrativo) +from sapl.sessao.models import (Bancada, PresencaOrdemDia, SessaoPlenaria, + SessaoPlenariaPresenca, TipoSessaoPlenaria) +from sapl.utils import (gerar_hash_arquivo, intervalos_tem_intersecao, + mail_service_configured, parlamentares_ativos, + SEPARADOR_HASH_PROPOSICAO, show_results_filter_set) + from .forms import (AlterarSenhaForm, CasaLegislativaForm, ConfiguracoesAppForm, RelatorioAtasFilterSet, RelatorioAudienciaFilterSet, @@ -54,29 +67,18 @@ from .forms import (AlterarSenhaForm, CasaLegislativaForm, RelatorioHistoricoTramitacaoFilterSet, RelatorioMateriasPorAnoAutorTipoFilterSet, RelatorioMateriasPorAutorFilterSet, - RelatorioMateriasTramitacaoilterSet, + RelatorioMateriasTramitacaoFilterSet, RelatorioPresencaSessaoFilterSet, RelatorioReuniaoFilterSet, UsuarioCreateForm, UsuarioEditForm, RelatorioNormasMesFilterSet, RelatorioNormasVigenciaFilterSet, EstatisticasAcessoNormasForm, UsuarioFilterSet, - RelatorioHistoricoTramitacaoAdmFilterSet) + RelatorioHistoricoTramitacaoAdmFilterSet, + RelatorioDocumentosAcessoriosFilterSet, + RelatorioNormasPorAutorFilterSet) from .models import AppConfig, CasaLegislativa -def filtra_url_materias_em_tramitacao(qr, qs, campo_url, local_ou_status): - id_materias = [] - filtro_url = qr[campo_url] - if local_ou_status == 'local': - id_materias = [item.id for item in qs if item.tramitacao_set.order_by( - '-id').first().unidade_tramitacao_destino_id == int(filtro_url)] - elif local_ou_status == 'status': - id_materias = [item.id for item in qs if item.tramitacao_set.order_by( - '-id').first().status_id == int(filtro_url)] - - return qs.filter(em_tramitacao=True, id__in=id_materias) - - def get_casalegislativa(): return CasaLegislativa.objects.first() @@ -302,14 +304,71 @@ class RelatoriosListView(TemplateView): return context -class RelatorioAtasView(FilterView): +class RelatorioMixin: + def get(self, request, *args, **kwargs): + super(RelatorioMixin, self).get(request) + + is_relatorio = request.GET.get('relatorio') + context = self.get_context_data(filter=self.filterset) + + if is_relatorio: + return self.relatorio(request, context) + else: + return self.render_to_response(context) + + +class RelatorioDocumentosAcessoriosView(RelatorioMixin, FilterView): + model = DocumentoAcessorio + filterset_class = RelatorioDocumentosAcessoriosFilterSet + template_name = 'base/RelatorioDocumentosAcessorios_filter.html' + relatorio = relatorio_documento_acessorio + + def get_context_data(self, **kwargs): + context = super( + RelatorioDocumentosAcessoriosView, self + ).get_context_data(**kwargs) + + context['title'] = _('Documentos Acessórios das Matérias Legislativas') + + if not self.filterset.form.is_valid(): + return context + + query_dict = self.request.GET.copy() + context['show_results'] = show_results_filter_set(query_dict) + + context['tipo_documento'] = str( + TipoDocumento.objects.get(pk=self.request.GET['tipo']) + ) + + tipo_materia = self.request.GET['materia__tipo'] + if tipo_materia: + context['tipo_materia'] = str( + TipoMateriaLegislativa.objects.get(pk=tipo_materia) + ) + else: + context['tipo_materia'] = "Não selecionado" + + data_inicial = self.request.GET['data_0'] + data_final = self.request.GET['data_1'] + if not data_inicial: + data_inicial = "Data Inicial não definida" + if not data_final: + data_final = "Data Final não definida" + context['periodo'] = ( + data_inicial + ' - ' + data_final + ) + + return context + + +class RelatorioAtasView(RelatorioMixin, FilterView): model = SessaoPlenaria filterset_class = RelatorioAtasFilterSet template_name = 'base/RelatorioAtas_filter.html' + relatorio = relatorio_atas def get_context_data(self, **kwargs): - context = super(RelatorioAtasView, - self).get_context_data(**kwargs) + context = super().get_context_data(**kwargs) context['title'] = _('Atas das Sessões Plenárias') # Verifica se os campos foram preenchidos @@ -327,11 +386,12 @@ class RelatorioAtasView(FilterView): return context -class RelatorioPresencaSessaoView(FilterView): +class RelatorioPresencaSessaoView(RelatorioMixin, FilterView): logger = logging.getLogger(__name__) model = SessaoPlenaria filterset_class = RelatorioPresencaSessaoFilterSet template_name = 'base/RelatorioPresencaSessao_filter.html' + relatorio = relatorio_presenca_sessao def get_context_data(self, **kwargs): @@ -493,10 +553,11 @@ class RelatorioPresencaSessaoView(FilterView): return context -class RelatorioHistoricoTramitacaoView(FilterView): +class RelatorioHistoricoTramitacaoView(RelatorioMixin, FilterView): model = MateriaLegislativa filterset_class = RelatorioHistoricoTramitacaoFilterSet template_name = 'base/RelatorioHistoricoTramitacao_filter.html' + relatorio = relatorio_historico_tramitacao def get_context_data(self, **kwargs): context = super(RelatorioHistoricoTramitacaoView, @@ -538,13 +599,21 @@ class RelatorioHistoricoTramitacaoView(FilterView): else: context['tramitacao__unidade_tramitacao_destino'] = '' + if self.request.GET['autoria__autor']: + context['autoria__autor'] = \ + (str(Autor.objects.get( + id=self.request.GET['autoria__autor']))) + else: + context['autoria__autor'] = '' + return context -class RelatorioDataFimPrazoTramitacaoView(FilterView): +class RelatorioDataFimPrazoTramitacaoView(RelatorioMixin, FilterView): model = MateriaLegislativa filterset_class = RelatorioDataFimPrazoTramitacaoFilterSet template_name = 'base/RelatorioDataFimPrazoTramitacao_filter.html' + relatorio = relatorio_fim_prazo_tramitacao def get_context_data(self, **kwargs): context = super(RelatorioDataFimPrazoTramitacaoView, @@ -590,10 +659,11 @@ class RelatorioDataFimPrazoTramitacaoView(FilterView): return context -class RelatorioReuniaoView(FilterView): +class RelatorioReuniaoView(RelatorioMixin, FilterView): model = Reuniao filterset_class = RelatorioReuniaoFilterSet template_name = 'base/RelatorioReuniao_filter.html' + relatorio = relatorio_reuniao def get_filterset_kwargs(self, filterset_class): super(RelatorioReuniaoView, @@ -623,10 +693,11 @@ class RelatorioReuniaoView(FilterView): return context -class RelatorioAudienciaView(FilterView): +class RelatorioAudienciaView(RelatorioMixin, FilterView): model = AudienciaPublica filterset_class = RelatorioAudienciaFilterSet template_name = 'base/RelatorioAudiencia_filter.html' + relatorio = relatorio_audiencia def get_filterset_kwargs(self, filterset_class): super(RelatorioAudienciaView, @@ -656,69 +727,118 @@ class RelatorioAudienciaView(FilterView): return context -class RelatorioMateriasTramitacaoView(FilterView): - model = MateriaLegislativa - filterset_class = RelatorioMateriasTramitacaoilterSet +class RelatorioMateriasTramitacaoView(RelatorioMixin, FilterView): + model = MateriaEmTramitacao + filterset_class = RelatorioMateriasTramitacaoFilterSet template_name = 'base/RelatorioMateriasPorTramitacao_filter.html' + relatorio = relatorio_materia_em_tramitacao + + paginate_by = 100 + + total_resultados_tipos = {} + + def get_filterset_kwargs(self, filterset_class): + data = super().get_filterset_kwargs(filterset_class) + + if data['data']: + qs = data['queryset'] + + ano_materia = data['data']['materia__ano'] + tipo_materia = data['data']['materia__tipo'] + unidade_tramitacao_destino = data['data']['tramitacao__unidade_tramitacao_destino'] + status_tramitacao = data['data']['tramitacao__status'] + + kwargs = {} + if ano_materia: + kwargs['materia__ano'] = ano_materia + if tipo_materia: + kwargs['materia__tipo'] = tipo_materia + if unidade_tramitacao_destino: + kwargs['tramitacao__unidade_tramitacao_destino'] = unidade_tramitacao_destino + if status_tramitacao: + kwargs['tramitacao__status'] = status_tramitacao + qs = qs.filter(**kwargs) + + data['queryset'] = qs + + qtdes = { tipo:0 for tipo in TipoMateriaLegislativa.objects.all() } + for i in qs: + qtdes[i.materia.tipo] += 1 + + # remove as entradas de valor igual a zero + qtdes = {k:v for k,v in qtdes.items() if v > 0} + self.total_resultados_tipos = qtdes + + return data + + def get_queryset(self): + qs = super().get_queryset() + qs = qs.select_related('materia__tipo').filter( + materia__em_tramitacao=True + ).exclude( + tramitacao__status__indicador='F' + ).order_by('-materia__ano', '-materia__numero') + return qs def get_context_data(self, **kwargs): - context = super(RelatorioMateriasTramitacaoView, - self).get_context_data(**kwargs) + context = super( + RelatorioMateriasTramitacaoView, self + ).get_context_data(**kwargs) context['title'] = _('Matérias em Tramitação') + if not self.filterset.form.is_valid(): return context qr = self.request.GET.copy() - qs = context['object_list'] - qs = qs.filter(em_tramitacao=True) - - if qr.get('tramitacao__unidade_tramitacao_destino'): - qs = filtra_url_materias_em_tramitacao( - qr, qs, 'tramitacao__unidade_tramitacao_destino', 'local') - if qr.get('tramitacao__status'): - qs = filtra_url_materias_em_tramitacao( - qr, qs, 'tramitacao__status', 'status') - li = [li1 for li1 in qs if li1.tramitacao_set.last() and li1.tramitacao_set.last().status.indicador != 'F'] - context['object_list'] = li + context['qtdes'] = self.total_resultados_tipos + context['ano'] = (self.request.GET['materia__ano']) - qtdes = {} - for tipo in TipoMateriaLegislativa.objects.all(): - li = context['object_list'] - qtde = sum(1 for i in li if i.tipo_id==tipo.id) - if qtde > 0: - qtdes[tipo] = qtde - context['qtdes'] = qtdes - context['ano'] = (self.request.GET['ano']) - if self.request.GET['tipo']: - tipo = self.request.GET['tipo'] + if self.request.GET['materia__tipo']: + tipo = self.request.GET['materia__tipo'] context['tipo'] = ( - str(TipoMateriaLegislativa.objects.get(id=tipo))) + str(TipoMateriaLegislativa.objects.get(id=tipo)) + ) else: context['tipo'] = '' + if self.request.GET['tramitacao__status']: tramitacao_status = self.request.GET['tramitacao__status'] context['tramitacao__status'] = ( - str(StatusTramitacao.objects.get(id=tramitacao_status))) + str(StatusTramitacao.objects.get(id=tramitacao_status)) + ) else: context['tramitacao__status'] = '' + if self.request.GET['tramitacao__unidade_tramitacao_destino']: - context['tramitacao__unidade_tramitacao_destino'] = (str(UnidadeTramitacao.objects.get( - id=self.request.GET['tramitacao__unidade_tramitacao_destino']))) + context['tramitacao__unidade_tramitacao_destino'] = ( + str(UnidadeTramitacao.objects.get( + id=self.request.GET['tramitacao__unidade_tramitacao_destino'] + )) + ) else: context['tramitacao__unidade_tramitacao_destino'] = '' + context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' - context['show_results'] = show_results_filter_set(qr) + paginator = context['paginator'] + page_obj = context['page_obj'] + + context['page_range'] = make_pagination( + page_obj.number, paginator.num_pages + ) + context['NO_ENTRIES_MSG'] = 'Nenhum encontrado.' + return context -class RelatorioMateriasPorAnoAutorTipoView(FilterView): +class RelatorioMateriasPorAnoAutorTipoView(RelatorioMixin, FilterView): model = MateriaLegislativa filterset_class = RelatorioMateriasPorAnoAutorTipoFilterSet template_name = 'base/RelatorioMateriasPorAnoAutorTipo_filter.html' + relatorio = relatorio_materia_por_ano_autor def get_materias_autor_ano(self, ano, primeiro_autor): @@ -776,7 +896,7 @@ class RelatorioMateriasPorAnoAutorTipoView(FilterView): return context qtdes = {} for tipo in TipoMateriaLegislativa.objects.all(): - qs = kwargs['object_list'] + qs = context['object_list'] qtde = len(qs.filter(tipo_id=tipo.id)) if qtde > 0: qtdes[tipo] = qtde @@ -798,21 +918,19 @@ class RelatorioMateriasPorAnoAutorTipoView(FilterView): return context -class RelatorioMateriasPorAutorView(FilterView): +class RelatorioMateriasPorAutorView(RelatorioMixin, FilterView): model = MateriaLegislativa filterset_class = RelatorioMateriasPorAutorFilterSet template_name = 'base/RelatorioMateriasPorAutor_filter.html' + relatorio = relatorio_materia_por_autor def get_filterset_kwargs(self, filterset_class): - super(RelatorioMateriasPorAutorView, - self).get_filterset_kwargs(filterset_class) - + super().get_filterset_kwargs(filterset_class) kwargs = {'data': self.request.GET or None} return kwargs def get_context_data(self, **kwargs): - context = super(RelatorioMateriasPorAutorView, - self).get_context_data(**kwargs) + context = super().get_context_data(**kwargs) context['title'] = _('Matérias por Autor') if not self.filterset.form.is_valid(): @@ -820,7 +938,7 @@ class RelatorioMateriasPorAutorView(FilterView): qtdes = {} for tipo in TipoMateriaLegislativa.objects.all(): - qs = kwargs['object_list'] + qs = context['object_list'] qtde = len(qs.filter(tipo_id=tipo.id)) if qtde > 0: qtdes[tipo] = qtde @@ -848,10 +966,11 @@ class RelatorioMateriasPorAutorView(FilterView): return context -class RelatorioNormasPublicadasMesView(FilterView): +class RelatorioNormasPublicadasMesView(RelatorioMixin, FilterView): model = NormaJuridica filterset_class = RelatorioNormasMesFilterSet template_name = 'base/RelatorioNormaMes_filter.html' + relatorio = relatorio_normas_mes def get_context_data(self, **kwargs): context = super(RelatorioNormasPublicadasMesView, @@ -887,10 +1006,11 @@ class RelatorioNormasPublicadasMesView(FilterView): return context -class RelatorioNormasVigenciaView(FilterView): +class RelatorioNormasVigenciaView(RelatorioMixin, FilterView): model = NormaJuridica filterset_class = RelatorioNormasVigenciaFilterSet template_name = 'base/RelatorioNormasVigencia_filter.html' + relatorio = relatorio_normas_vigencia def get_filterset_kwargs(self, filterset_class): super(RelatorioNormasVigenciaView, @@ -990,7 +1110,15 @@ class EstatisticasAcessoNormas(TemplateView): context['normas_mes'] = normas_mes - return self.render_to_response(context) + is_relatorio = request.GET.get('relatorio') + + context['show_results'] = show_results_filter_set( + self.request.GET.copy()) + + if is_relatorio: + return relatorio_estatisticas_acesso_normas(self, request, context) + else: + return self.render_to_response(context) class ListarInconsistenciasView(PermissionRequiredMixin, ListView): @@ -1070,7 +1198,7 @@ class ListarInconsistenciasView(PermissionRequiredMixin, ListView): tabela.append( ('anexadas_ciclicas', 'Matérias Anexadas cíclicas', - len(anexados_ciclicos(True)) + len(materias_anexadas_ciclicas()) ) ) tabela.append( @@ -1081,10 +1209,43 @@ class ListarInconsistenciasView(PermissionRequiredMixin, ListView): ) return tabela +def materias_anexadas_ciclicas(): + ciclos = [] + + for a in Anexada.objects.select_related('materia_principal', + 'materia_anexada', + 'materia_principal__tipo', + 'materia_anexada__tipo'): + visitados = [a.materia_principal] + anexadas = [a.materia_anexada] + while len(anexadas) > 0: + ma = anexadas.pop() + if ma not in visitados: + visitados.append(ma) + anexadas.extend([a.materia_anexada for a in Anexada.objects.filter(materia_principal=ma)]) + else: + ciclo_list = visitados + [ma] + ciclos.append(ciclo_list) + + """ + Remove ciclos repetidos (ou semanticamente equivalentes). + Exemplo: A -> B -> A e B -> A -> B + """ + ciclos_set = [] + ciclos_unique = [e for e in ciclos if is_ciclo_unique(e, ciclos_set)] + + return ciclos_unique + +def is_ciclo_unique(ciclo, ciclos_set): + if set(ciclo) not in ciclos_set: + ciclos_set.append(set(ciclo)) + return True + else: + return False def anexados_ciclicos(ofMateriaLegislativa): ciclicos = [] - + if ofMateriaLegislativa: principais = Anexada.objects.values( 'materia_principal' @@ -1171,7 +1332,7 @@ class ListarAnexadasCiclicasView(PermissionRequiredMixin, ListView): paginate_by = 10 def get_queryset(self): - return anexados_ciclicos(True) + return materias_anexadas_ciclicas() def get_context_data(self, **kwargs): context = super( @@ -1387,7 +1548,7 @@ class ListarParlMandatosIntersecaoView(PermissionRequiredMixin, ListView): def parlamentares_duplicados(): - return [parlamentar.values() for parlamentar in Parlamentar.objects.values( + return [parlamentar for parlamentar in Parlamentar.objects.values( 'nome_parlamentar').order_by('nome_parlamentar').annotate(count=Count( 'nome_parlamentar')).filter(count__gt=1)] @@ -1572,14 +1733,10 @@ class ListarProtocolosComMateriasView(PermissionRequiredMixin, ListView): def protocolos_duplicados(): - protocolos = {} - for p in Protocolo.objects.order_by('-ano', 'numero'): - key = "{}/{}".format(p.numero, p.ano) - val = protocolos.get(key, list()) - val.append(p) - protocolos[key] = val - - return [(v[0], len(v)) for (k, v) in protocolos.items() if len(v) > 1] + return [ + protocolo for protocolo in Protocolo.objects.values( + 'numero', 'ano').order_by('-ano', 'numero').annotate(total=Count('numero')).filter(total__gt=1) + ] class ListarProtocolosDuplicadosView(PermissionRequiredMixin, ListView): @@ -1866,8 +2023,6 @@ class AppConfigCrud(CrudAux): reverse('sapl.base:appconfig_update', kwargs={'pk': app_config.pk})) - def post(self, request, *args, **kwargs): - return self.get(request, *args, **kwargs) class ListView(CrudAux.ListView): @@ -1991,10 +2146,11 @@ def pesquisa_textual(request): return JsonResponse(json_dict) -class RelatorioHistoricoTramitacaoAdmView(FilterView): +class RelatorioHistoricoTramitacaoAdmView(RelatorioMixin, FilterView): model = DocumentoAdministrativo filterset_class = RelatorioHistoricoTramitacaoAdmFilterSet template_name = 'base/RelatorioHistoricoTramitacaoAdm_filter.html' + relatorio = relatorio_historico_tramitacao_adm def get_context_data(self, **kwargs): context = super(RelatorioHistoricoTramitacaoAdmView, @@ -2036,4 +2192,52 @@ class RelatorioHistoricoTramitacaoAdmView(FilterView): else: context['tramitacaoadministrativo__unidade_tramitacao_destino'] = '' - return context \ No newline at end of file + return context + +class RelatorioNormasPorAutorView(RelatorioMixin, FilterView): + model = NormaJuridica + filterset_class = RelatorioNormasPorAutorFilterSet + template_name = 'base/RelatorioNormasPorAutor_filter.html' + relatorio = relatorio_normas_por_autor + + def get_filterset_kwargs(self, filterset_class): + super().get_filterset_kwargs(filterset_class) + kwargs = {'data': self.request.GET or None} + return kwargs + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + context['title'] = _('Normas por Autor') + if not self.filterset.form.is_valid(): + return context + + qtdes = {} + for tipo in TipoNormaJuridica.objects.all(): + qs = context['object_list'] + qtde = len(qs.filter(tipo_id=tipo.id)) + if qtde > 0: + qtdes[tipo] = qtde + context['qtdes'] = qtdes + + qr = self.request.GET.copy() + context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' + + context['show_results'] = show_results_filter_set(qr) + if self.request.GET['tipo']: + tipo = int(self.request.GET['tipo']) + context['tipo'] = ( + str(TipoNormaJuridica.objects.get(id=tipo))) + else: + context['tipo'] = '' + + if self.request.GET['autorianorma__autor']: + autor = int(self.request.GET['autorianorma__autor']) + context['autor'] = (str(Autor.objects.get(id=autor))) + else: + context['autor'] = '' + context['periodo'] = ( + self.request.GET['data_0'] + + ' - ' + self.request.GET['data_1']) + + return context diff --git a/sapl/comissoes/forms.py b/sapl/comissoes/forms.py index 9f7c449f8..92d6695de 100644 --- a/sapl/comissoes/forms.py +++ b/sapl/comissoes/forms.py @@ -1,7 +1,9 @@ +import django_filters import logging +from crispy_forms.layout import Fieldset, Layout + from django import forms -from sapl.settings import MAX_DOC_UPLOAD_SIZE from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ValidationError from django.db import transaction @@ -10,11 +12,16 @@ from django.forms import ModelForm from django.utils.translation import ugettext_lazy as _ from sapl.base.models import Autor, TipoAutor -from sapl.comissoes.models import (Comissao, Composicao, DocumentoAcessorio, - Participacao, Reuniao, Periodo) -from sapl.materia.models import PautaReuniao -from sapl.parlamentares.models import Legislatura, Mandato, Parlamentar -from sapl.utils import FileFieldCheckMixin +from sapl.comissoes.models import (Comissao, Composicao, + DocumentoAcessorio, Participacao, + Periodo, Reuniao) +from sapl.crispy_layout_mixin import (form_actions, SaplFormHelper, + to_row) +from sapl.materia.models import MateriaEmTramitacao, PautaReuniao +from sapl.parlamentares.models import (Legislatura, Mandato, + Parlamentar) +from sapl.utils import (FileFieldCheckMixin, + FilterOverridesMetaMixin, validar_arquivo) class ComposicaoForm(forms.ModelForm): @@ -40,17 +47,31 @@ class ComposicaoForm(forms.ModelForm): periodo = cleaned_data['periodo'] comissao_pk = self.initial['comissao'].id cleaned_data['comissao'] = self.initial['comissao'] - intersecao_periodo = Composicao.objects.filter( - Q(periodo__data_inicio__lte=periodo.data_fim, - periodo__data_fim__gte=periodo.data_fim) | - Q(periodo__data_inicio__gte=periodo.data_inicio, - periodo__data_fim__lte=periodo.data_inicio), - comissao_id=comissao_pk) + + if periodo.data_fim: + intersecao_periodo = Composicao.objects.filter( + Q(periodo__data_inicio__lte=periodo.data_fim, + periodo__data_fim__gte=periodo.data_fim) | + Q(periodo__data_inicio__gte=periodo.data_inicio, + periodo__data_fim__lte=periodo.data_inicio), + comissao_id=comissao_pk) + else: + intersecao_periodo = Composicao.objects.filter( + Q(periodo__data_inicio__gte=periodo.data_inicio, + periodo__data_fim__lte=periodo.data_inicio), + comissao_id=comissao_pk) if intersecao_periodo: - self.logger.error('O período informado ({} a {})' - 'choca com períodos já ' - 'cadastrados para esta comissão'.format(periodo.data_inicio, periodo.data_fim)) + if periodo.data_fim: + self.logger.error('O período informado ({} a {})' + 'choca com períodos já ' + 'cadastrados para esta comissão' + .format(periodo.data_inicio, periodo.data_fim)) + else: + self.logger.error('O período informado ({} - )' + 'choca com períodos já ' + 'cadastrados para esta comissão' + .format(periodo.data_inicio)) raise ValidationError('O período informado ' 'choca com períodos já ' 'cadastrados para esta comissão') @@ -387,21 +408,45 @@ class ReuniaoForm(ModelForm): upload_ata = self.cleaned_data.get('upload_ata', False) upload_anexo = self.cleaned_data.get('upload_anexo', False) - if upload_pauta and upload_pauta.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Pauta da Reunião deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_pauta.size/1024)/1024)) + if upload_pauta: + validar_arquivo(upload_pauta, "Pauta da Reunião") - if upload_ata and upload_ata.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Ata da Reunião deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_ata.size/1024)/1024)) + if upload_ata: + validar_arquivo(upload_ata, "Ata da Reunião") - if upload_anexo and upload_anexo.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Anexo da Reunião deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_anexo.size/1024)/1024)) + if upload_anexo: + validar_arquivo(upload_anexo, "Anexo da Reunião") return self.cleaned_data +class PautaReuniaoFilterSet(django_filters.FilterSet): + + class Meta(FilterOverridesMetaMixin): + model = MateriaEmTramitacao + fields = ['materia__tipo', 'materia__ano', 'materia__numero', 'materia__data_apresentacao'] + + def __init__(self, *args, **kwargs): + super(PautaReuniaoFilterSet, self).__init__(*args, **kwargs) + + self.filters['materia__tipo'].label = "Tipo da Matéria" + self.filters['materia__ano'].label = "Ano da Matéria" + self.filters['materia__numero'].label = "Número da Matéria" + self.filters['materia__data_apresentacao'].label = "Data (Inicial - Final)" + + row1 = to_row([('materia__tipo', 4), ('materia__ano', 4), ('materia__numero', 4)]) + row2 = to_row([('materia__data_apresentacao', 12)]) + + self.form.helper = SaplFormHelper() + self.form.helper.form_method = "GET" + self.form.helper.layout = Layout( + Fieldset( + _("Pesquisa de Matérias"), row1, row2, + form_actions(label="Pesquisar") + ) + ) + + class PautaReuniaoForm(forms.ModelForm): class Meta: @@ -438,9 +483,8 @@ class DocumentoAcessorioCreateForm(FileFieldCheckMixin, forms.ModelForm): arquivo = self.cleaned_data.get('arquivo', False) - if arquivo and arquivo.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Texto Integral deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (arquivo.size/1024)/1024)) + if arquivo: + validar_arquivo(arquivo, "Texto Integral") return self.cleaned_data @@ -465,8 +509,7 @@ class DocumentoAcessorioEditForm(FileFieldCheckMixin, forms.ModelForm): arquivo = self.cleaned_data.get('arquivo', False) - if arquivo and arquivo.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Texto Integral deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (arquivo.size/1024)/1024)) + if arquivo: + validar_arquivo(arquivo, "Texto Integral") return self.cleaned_data diff --git a/sapl/comissoes/migrations/0020_auto_20190712_1053.py b/sapl/comissoes/migrations/0020_auto_20190712_1053.py new file mode 100644 index 000000000..2644cfe34 --- /dev/null +++ b/sapl/comissoes/migrations/0020_auto_20190712_1053.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-07-12 13:53 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.comissoes.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('comissoes', '0019_auto_20181214_1023'), + ] + + operations = [ + migrations.AlterField( + model_name='documentoacessorio', + name='arquivo', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.comissoes.models.anexo_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Integral'), + ), + migrations.AlterField( + model_name='reuniao', + name='upload_anexo', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.comissoes.models.anexo_upload_path, verbose_name='Anexo da Reunião'), + ), + migrations.AlterField( + model_name='reuniao', + name='upload_ata', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.comissoes.models.ata_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Ata da Reunião'), + ), + migrations.AlterField( + model_name='reuniao', + name='upload_pauta', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.comissoes.models.pauta_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Pauta da Reunião'), + ), + ] diff --git a/sapl/comissoes/migrations/0021_auto_20191001_1115.py b/sapl/comissoes/migrations/0021_auto_20191001_1115.py new file mode 100644 index 000000000..24e7f655b --- /dev/null +++ b/sapl/comissoes/migrations/0021_auto_20191001_1115.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-01 14:15 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.comissoes.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('comissoes', '0020_auto_20190712_1053'), + ] + + operations = [ + migrations.AlterField( + model_name='documentoacessorio', + name='arquivo', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.comissoes.models.anexo_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Integral'), + ), + migrations.AlterField( + model_name='reuniao', + name='upload_anexo', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.comissoes.models.anexo_upload_path, verbose_name='Anexo da Reunião'), + ), + migrations.AlterField( + model_name='reuniao', + name='upload_ata', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.comissoes.models.ata_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Ata da Reunião'), + ), + migrations.AlterField( + model_name='reuniao', + name='upload_pauta', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.comissoes.models.pauta_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Pauta da Reunião'), + ), + ] diff --git a/sapl/comissoes/migrations/0022_auto_20191120_1440.py b/sapl/comissoes/migrations/0022_auto_20191120_1440.py new file mode 100644 index 000000000..a0a527fc3 --- /dev/null +++ b/sapl/comissoes/migrations/0022_auto_20191120_1440.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-11-20 17:40 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.comissoes.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('comissoes', '0021_auto_20191001_1115'), + ] + + operations = [ + migrations.AlterField( + model_name='documentoacessorio', + name='arquivo', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.comissoes.models.anexo_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Integral'), + ), + migrations.AlterField( + model_name='documentoacessorio', + name='autor', + field=models.CharField(max_length=200, verbose_name='Autor'), + ), + migrations.AlterField( + model_name='reuniao', + name='upload_anexo', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.comissoes.models.anexo_upload_path, verbose_name='Anexo da Reunião'), + ), + migrations.AlterField( + model_name='reuniao', + name='upload_ata', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.comissoes.models.ata_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Ata da Reunião'), + ), + migrations.AlterField( + model_name='reuniao', + name='upload_pauta', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.comissoes.models.pauta_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Pauta da Reunião'), + ), + ] diff --git a/sapl/comissoes/migrations/0023_auto_20191211_1752.py b/sapl/comissoes/migrations/0023_auto_20191211_1752.py new file mode 100644 index 000000000..c96bd9a12 --- /dev/null +++ b/sapl/comissoes/migrations/0023_auto_20191211_1752.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-12-11 20:52 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('comissoes', '0022_auto_20191120_1440'), + ] + + operations = [ + migrations.AlterModelOptions( + name='cargocomissao', + options={'ordering': ['id_ordenacao'], 'verbose_name': 'Cargo de Comissão', 'verbose_name_plural': 'Cargos de Comissão'}, + ), + migrations.AlterModelOptions( + name='participacao', + options={'ordering': ['-titular', 'cargo__id_ordenacao'], 'verbose_name': 'Participação em Comissão', 'verbose_name_plural': 'Participações em Comissão'}, + ), + migrations.AddField( + model_name='cargocomissao', + name='id_ordenacao', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='Posição na Ordenação'), + ), + migrations.AlterField( + model_name='cargocomissao', + name='nome', + field=models.CharField(max_length=50, verbose_name='Nome do Cargo'), + ), + ] diff --git a/sapl/comissoes/models.py b/sapl/comissoes/models.py index 2792c80d6..8efac2ee6 100644 --- a/sapl/comissoes/models.py +++ b/sapl/comissoes/models.py @@ -6,7 +6,8 @@ from model_utils import Choices from sapl.base.models import Autor from sapl.parlamentares.models import Parlamentar from sapl.utils import (YES_NO_CHOICES, SaplGenericRelation, - restringe_tipos_de_arquivo_txt, texto_upload_path) + restringe_tipos_de_arquivo_txt, texto_upload_path, + OverwriteStorage) @reversion.register() @@ -120,13 +121,18 @@ class Periodo(models.Model): # PeriodoCompComissao @reversion.register() class CargoComissao(models.Model): - nome = models.CharField(max_length=50, verbose_name=_('Cargo')) + id_ordenacao = models.PositiveIntegerField( + blank=True, null=True, verbose_name=_('Posição na Ordenação'), + ) + nome = models.CharField(max_length=50, verbose_name=_('Nome do Cargo')) unico = models.BooleanField( - choices=YES_NO_CHOICES, verbose_name=_('Único'), default=True) + choices=YES_NO_CHOICES, verbose_name=_('Único'), default=True + ) class Meta: verbose_name = _('Cargo de Comissão') verbose_name_plural = _('Cargos de Comissão') + ordering = ['id_ordenacao'] def __str__(self): return self.nome @@ -179,6 +185,7 @@ class Participacao(models.Model): # ComposicaoComissao class Meta: verbose_name = _('Participação em Comissão') verbose_name_plural = _('Participações em Comissão') + ordering = ['-titular', 'cargo__id_ordenacao'] def __str__(self): return '%s : %s' % (self.cargo, self.parlamentar) @@ -235,18 +242,24 @@ class Reuniao(models.Model): max_length=150, blank=True, verbose_name=_('URL do Arquivo de Vídeo (Formatos MP4 / FLV / WebM)')) upload_pauta = models.FileField( + max_length=300, blank=True, null=True, upload_to=pauta_upload_path, verbose_name=_('Pauta da Reunião'), + storage=OverwriteStorage(), validators=[restringe_tipos_de_arquivo_txt]) upload_ata = models.FileField( + max_length=300, blank=True, null=True, upload_to=ata_upload_path, verbose_name=_('Ata da Reunião'), + storage=OverwriteStorage(), validators=[restringe_tipos_de_arquivo_txt]) upload_anexo = models.FileField( + max_length=300, blank=True, null=True, upload_to=anexo_upload_path, + storage=OverwriteStorage(), verbose_name=_('Anexo da Reunião')) class Meta: @@ -257,17 +270,22 @@ class Reuniao(models.Model): return self.nome def delete(self, using=None, keep_parents=False): - if self.upload_pauta: - self.upload_pauta.delete() + upload_pauta = self.upload_pauta + upload_ata = self.upload_ata + upload_anexo = self.upload_anexo - if self.upload_ata: - self.upload_ata.delete() + result = super().delete(using=using, keep_parents=keep_parents) - if self.upload_anexo: - self.upload_anexo.delete() + if upload_pauta: + upload_pauta.delete(save=False) - return models.Model.delete( - self, using=using, keep_parents=keep_parents) + if upload_ata: + upload_ata.delete(save=False) + + if upload_anexo: + upload_anexo.delete(save=False) + + return result def save(self, force_insert=False, force_update=False, using=None, update_fields=None): @@ -305,14 +323,16 @@ class DocumentoAcessorio(models.Model): data = models.DateField(blank=True, null=True, default=None, verbose_name=_('Data')) autor = models.CharField( - max_length=100, verbose_name=_('Autor')) + max_length=200, verbose_name=_('Autor')) ementa = models.TextField(blank=True, verbose_name=_('Ementa')) indexacao = models.TextField(blank=True) arquivo = models.FileField( + max_length=300, blank=True, null=True, upload_to=anexo_upload_path, verbose_name=_('Texto Integral'), + storage=OverwriteStorage(), validators=[restringe_tipos_de_arquivo_txt]) data_ultima_atualizacao = models.DateTimeField( @@ -330,11 +350,13 @@ class DocumentoAcessorio(models.Model): 'autor': self.autor} def delete(self, using=None, keep_parents=False): - if self.arquivo: - self.arquivo.delete() + arquivo = self.arquivo + result = super().delete(using=using, keep_parents=keep_parents) + + if arquivo: + arquivo.delete(save=False) - return models.Model.delete( - self, using=using, keep_parents=keep_parents) + return result def save(self, force_insert=False, force_update=False, using=None, update_fields=None): diff --git a/sapl/comissoes/urls.py b/sapl/comissoes/urls.py index 5e48ee891..932feaf22 100644 --- a/sapl/comissoes/urls.py +++ b/sapl/comissoes/urls.py @@ -1,8 +1,9 @@ from django.conf.urls import include, url -from sapl.comissoes.views import (CargoCrud, ComissaoCrud, ComposicaoCrud, - DocumentoAcessorioCrud, MateriasTramitacaoListView, ParticipacaoCrud, - PeriodoComposicaoCrud, ReuniaoCrud, TipoComissaoCrud, get_participacoes_comissao, - AdicionaPautaView, RemovePautaView) +from sapl.comissoes.views import (AdicionaPautaView, CargoComissaoCrud, ComissaoCrud, + ComposicaoCrud, DocumentoAcessorioCrud, + MateriasTramitacaoListView, ParticipacaoCrud, + get_participacoes_comissao, PeriodoComposicaoCrud, + RemovePautaView, ReuniaoCrud, TipoComissaoCrud) from .apps import AppConfig @@ -21,7 +22,7 @@ urlpatterns = [ url(r'^comissao/(?P\d+)/pauta/add', AdicionaPautaView.as_view(), name='pauta_add'), url(r'^comissao/(?P\d+)/pauta/remove', RemovePautaView.as_view(), name='pauta_remove'), - url(r'^sistema/comissao/cargo/', include(CargoCrud.get_urls())), + url(r'^sistema/comissao/cargo/', include(CargoComissaoCrud.get_urls())), url(r'^sistema/comissao/periodo-composicao/', include(PeriodoComposicaoCrud.get_urls())), url(r'^sistema/comissao/tipo/', include(TipoComissaoCrud.get_urls())), diff --git a/sapl/comissoes/views.py b/sapl/comissoes/views.py index 5fa132eab..458a9a25f 100644 --- a/sapl/comissoes/views.py +++ b/sapl/comissoes/views.py @@ -1,28 +1,34 @@ import logging -from django.core.urlresolvers import reverse from django.contrib import messages from django.contrib.auth.mixins import PermissionRequiredMixin +from django.core.urlresolvers import reverse from django.db.models import F from django.http.response import HttpResponseRedirect, JsonResponse from django.views.decorators.clickjacking import xframe_options_exempt -from django.views.generic import ListView, CreateView, DeleteView +from django.views.generic import CreateView, DeleteView, FormView, ListView from django.views.generic.base import RedirectView from django.views.generic.detail import DetailView from django.views.generic.edit import FormMixin, UpdateView from django.utils.translation import ugettext_lazy as _ +from django_filters.views import FilterView + from sapl.base.models import AppConfig as AppsAppConfig from sapl.comissoes.apps import AppConfig from sapl.comissoes.forms import (ComissaoForm, ComposicaoForm, DocumentoAcessorioCreateForm, DocumentoAcessorioEditForm, - ParticipacaoCreateForm, ParticipacaoEditForm, - PeriodoForm, ReuniaoForm, PautaReuniaoForm) -from sapl.crud.base import (RP_DETAIL, RP_LIST, Crud, CrudAux, - MasterDetailCrud, - PermissionRequiredForAppCrudMixin) -from sapl.materia.models import MateriaLegislativa, Tramitacao, PautaReuniao + ParticipacaoCreateForm, + ParticipacaoEditForm, + PautaReuniaoFilterSet, PautaReuniaoForm, + PeriodoForm, ReuniaoForm) +from sapl.crud.base import (Crud, CrudAux, MasterDetailCrud, + PermissionRequiredForAppCrudMixin, RP_DETAIL, + RP_LIST) +from sapl.materia.models import (MateriaEmTramitacao, MateriaLegislativa, + PautaReuniao, Tramitacao) +from sapl.utils import show_results_filter_set from .models import (CargoComissao, Comissao, Composicao, DocumentoAcessorio, Participacao, Periodo, Reuniao, TipoComissao) @@ -41,7 +47,10 @@ def pegar_url_reuniao(pk): url = reverse('sapl.comissoes:reuniao_detail', kwargs={'pk': r_pk}) return url -CargoCrud = CrudAux.build(CargoComissao, 'cargo_comissao') +CargoComissaoCrud = CrudAux.build( + CargoComissao, 'cargo_comissao', + list_field_names=['nome', 'id_ordenacao', 'unico'] +) TipoComissaoCrud = CrudAux.build( TipoComissao, 'tipo_comissao', list_field_names=[ @@ -138,7 +147,7 @@ class ComposicaoCrud(MasterDetailCrud): context['participacao_set'] = Participacao.objects.filter( composicao__pk=context['composicao_pk'] - ).order_by('id') + ).order_by('-titular', 'cargo__id_ordenacao', 'id') return context @@ -165,17 +174,12 @@ class ComissaoCrud(Crud): return super(Crud.UpdateView, self).form_valid(form) +# Essa função retorna objetos MateriaEmTramitacao def lista_materias_comissao(comissao_pk): - ts = Tramitacao.objects.order_by( - 'materia', '-data_tramitacao', '-id').annotate( - comissao=F('unidade_tramitacao_destino__comissao')).distinct( - 'materia').values_list('materia', 'comissao') - - ts = [m for (m,c) in ts if c == int(comissao_pk)] - - materias = MateriaLegislativa.objects.filter( - pk__in=ts).order_by('tipo', '-ano', '-numero') - + materias = MateriaEmTramitacao.objects.filter( + tramitacao__unidade_tramitacao_destino__comissao=comissao_pk + ).order_by('materia__tipo', '-materia__ano', '-materia__numero') + return materias @@ -184,13 +188,13 @@ class MateriasTramitacaoListView(ListView): paginate_by = 10 def get_queryset(self): - return lista_materias_comissao(self.kwargs['pk']) + return list(lista_materias_comissao(self.kwargs['pk'])) def get_context_data(self, **kwargs): context = super( MateriasTramitacaoListView, self).get_context_data(**kwargs) context['object'] = Comissao.objects.get(id=self.kwargs['pk']) - context['qtde'] = self.object_list.count() + context['qtde'] = len(self.object_list) return context @@ -222,7 +226,7 @@ class ReuniaoCrud(MasterDetailCrud): context['mats'] = MateriaLegislativa.objects.filter( pk__in=materias_pk - ).order_by('tipo', '-ano', '-numero') + ).order_by('tipo', '-ano', 'numero') context['num_mats'] = len(context['mats']) context['reuniao_pk'] = self.kwargs['pk'] @@ -300,8 +304,8 @@ class RemovePautaView(PermissionRequiredMixin, CreateView): context['materias'] = MateriaLegislativa.objects.filter( pk__in=materias_pk - ).order_by('tipo', '-ano', '-numero') - context['num_materias'] = len(context['materias']) + ).order_by('tipo', '-ano', 'numero') + context['numero_materias'] = len(context['materias']) return context @@ -323,9 +327,8 @@ class RemovePautaView(PermissionRequiredMixin, CreateView): return HttpResponseRedirect(success_url) -class AdicionaPautaView(PermissionRequiredMixin, CreateView): - model = PautaReuniao - form_class = PautaReuniaoForm +class AdicionaPautaView(PermissionRequiredMixin, FilterView): + filterset_class = PautaReuniaoFilterSet template_name = 'comissoes/pauta.html' permission_required = ('comissoes.add_reuniao', ) @@ -340,12 +343,19 @@ class AdicionaPautaView(PermissionRequiredMixin, CreateView): context['object'] = Reuniao.objects.get(pk=self.kwargs['pk']) context['root_pk'] = context['object'].comissao.pk - materias_comissao = lista_materias_comissao(context['object'].comissao.pk) - materias_pauta = PautaReuniao.objects.filter(reuniao=context['object']) + qr = self.request.GET.copy() + materias_pauta = PautaReuniao.objects.filter(reuniao=context['object']) nao_listar = [mp.materia.pk for mp in materias_pauta] - context['materias'] = materias_comissao.exclude(pk__in=nao_listar) - context['num_materias'] = len(context['materias']) + + context['object_list'] = context['object_list'].filter( + tramitacao__unidade_tramitacao_destino__comissao=context['root_pk'] + ).exclude(materia__pk__in=nao_listar).order_by( + "materia__tipo", "-materia__ano", "materia__numero" + ) + + context['numero_resultados'] = len(context['object_list']) + context['show_results'] = show_results_filter_set(qr) return context diff --git a/sapl/compilacao/forms.py b/sapl/compilacao/forms.py index e82d58f63..0a7542a46 100644 --- a/sapl/compilacao/forms.py +++ b/sapl/compilacao/forms.py @@ -13,6 +13,7 @@ from django.forms.forms import Form from django.forms.models import ModelForm from django.template import defaultfilters from django.utils.translation import ugettext_lazy as _ +from model_utils.choices import Choices from sapl import utils from sapl.compilacao.models import (NOTAS_PUBLICIDADE_CHOICES, @@ -115,7 +116,7 @@ class TaForm(ModelForm): queryset=TipoTextoArticulado.objects.all(), required=True, empty_label=None) - numero = forms.IntegerField( + numero = forms.CharField( label=TextoArticulado._meta.get_field( 'numero').verbose_name, required=True) @@ -744,6 +745,12 @@ class DispositivoEdicaoBasicaForm(ModelForm): class DispositivoSearchModalForm(Form): + TIPO_RESULTADO_CHOICES = Choices( + ('C', 'coincidentes', _('Apenas Coincidentes')), + ('I', 'internos', _('Incluir Internos')), + ('S', 'coin_sequentes', _('Coincidentes e seus sequentes')), + ) + tipo_ta = forms.ModelChoiceField( label=_('Tipo do Texto Articulado'), queryset=TipoTextoArticulado.objects.all(), @@ -758,9 +765,9 @@ class DispositivoSearchModalForm(Form): ano_ta = forms.IntegerField( label=_('Ano do Documento'), required=False) - dispositivos_internos = forms.ChoiceField( - label=_('Dispositivos Internos?'), - choices=utils.YES_NO_CHOICES, + tipo_resultado = forms.ChoiceField( + label=_('Tipo do Resultado?'), + choices=TIPO_RESULTADO_CHOICES, widget=forms.RadioSelect(), required=False) @@ -769,7 +776,7 @@ class DispositivoSearchModalForm(Form): choices=[(10, _('Dez Dispositivos')), (30, _('Trinta Dispositivos')), (50, _('Cinquenta Dispositivos')), - (0, _('Tudo que atender aos Critérios da Busca'))], + (100, _('Cem Dispositivos'))], widget=forms.Select(), required=False) @@ -789,22 +796,33 @@ class DispositivoSearchModalForm(Form): to_column(('num_ta', 4)), to_column(('ano_ta', 4)), to_column(('max_results', 4))), + Row( - to_column(('tipo_ta', 6)), - to_column(('tipo_model', 6))), - Row(to_column((InlineRadios('dispositivos_internos'), 3)), - to_column(('rotulo_dispositivo', 2)), - to_column((FieldWithButtons( - Field( - 'texto_dispositivo', - placeholder=_('Digite palavras, letras, ' - 'números ou algo' - ' que estejam no texto.')), - StrictButton( - _('Buscar'), - css_class='btn-busca btn-primary')), 7)) + to_column(('tipo_resultado', 3)), + to_column( + ( + Div( + Row( + to_column(('tipo_ta', 6)), + to_column(('tipo_model', 6))), + Row( + to_column(('rotulo_dispositivo', 4)), + to_column( + ( + FieldWithButtons( + Field( + 'texto_dispositivo', + placeholder=_('Digite palavras, letras, ' + 'números ou algo' + ' que estejam no texto.')), + StrictButton( + _('Buscar'), + css_class='btn-busca btn-primary')), 8)) + ) + ), 9 + ) ) - ) + )) self.helper = SaplFormHelper() self.helper.layout = Layout( @@ -821,7 +839,7 @@ class DispositivoSearchModalForm(Form): choice = ch(kwargs['instance'].ta.tipo_ta_id) self.base_fields['tipo_model'].choices = choice - kwargs['initial'].update({'dispositivos_internos': False}) + kwargs['initial'].update({'tipo_resultado': 'C'}) super(DispositivoSearchModalForm, self).__init__(*args, **kwargs) diff --git a/sapl/compilacao/migrations/0013_auto_20190924_0830.py b/sapl/compilacao/migrations/0013_auto_20190924_0830.py new file mode 100644 index 000000000..c984718ef --- /dev/null +++ b/sapl/compilacao/migrations/0013_auto_20190924_0830.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.24 on 2019-09-24 11:30 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0012_bug_auto_inserido'), + ] + + operations = [ + migrations.AlterField( + model_name='textoarticulado', + name='editable_only_by_owners', + field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=True, + verbose_name='Editável apenas pelos donos do Texto Articulado?'), + ), + migrations.AlterField( + model_name='textoarticulado', + name='editing_locked', + field=models.BooleanField(choices=[( + True, 'Sim'), (False, 'Não')], default=True, verbose_name='Texto Articulado em Edição?'), + ), + ] diff --git a/sapl/compilacao/models.py b/sapl/compilacao/models.py index f64285aee..7161df37a 100644 --- a/sapl/compilacao/models.py +++ b/sapl/compilacao/models.py @@ -221,12 +221,12 @@ class TextoArticulado(TimestampedMixin): editable_only_by_owners = models.BooleanField( choices=YES_NO_CHOICES, default=True, - verbose_name=_('Editável apenas pelos donos do Texto Articulado')) + verbose_name=_('Editável apenas pelos donos do Texto Articulado?')) editing_locked = models.BooleanField( choices=YES_NO_CHOICES, default=True, - verbose_name=_('Texto Articulado em Edição')) + verbose_name=_('Texto Articulado em Edição?')) privacidade = models.IntegerField( _('Privacidade'), @@ -251,10 +251,14 @@ class TextoArticulado(TimestampedMixin): 'property "epigrafe"') return str(self.content_object.epigrafe) else: - return _('%(tipo)s nº %(numero)s de %(data)s') % { + numero = self.numero + if numero.isnumeric(): + numero = '{0:,}'.format(int(self.numero)).replace(',', '.') + + return _('%(tipo)s nº %(numero)s, de %(data)s') % { 'tipo': self.tipo_ta, - 'numero': self.numero, - 'data': defaultfilters.date(self.data, "d \d\e F \d\e Y")} + 'numero': numero, + 'data': defaultfilters.date(self.data, "d \d\e F \d\e Y").lower()} def hash(self): from django.core import serializers @@ -416,8 +420,8 @@ class TextoArticulado(TimestampedMixin): def clone_for(self, obj): # O clone gera um texto válido original dada a base self, - # mesmo sendo esta base um texto compilado. - # Os dispositivos a clonar será com base no texto compilado + # mesmo sendo esta base um Texto Articulado. + # Os dispositivos a clonar será com base no Texto Articulado assert self.tipo_ta and self.tipo_ta.content_type, _( 'Não é permitido chamar o método clone_for ' @@ -1072,6 +1076,10 @@ class Dispositivo(BaseModel, TimestampedMixin): 'Permissão alteração global do dispositivo de vigência')), ) + def ws_sync(self): + return self.ta and self.ta.privacidade in ( + STATUS_TA_IMMUTABLE_PUBLIC, STATUS_TA_PUBLIC) + def clean(self): """ Check for instances with null values in unique_together fields. @@ -1113,14 +1121,15 @@ class Dispositivo(BaseModel, TimestampedMixin): self.contagem_continua = self.tipo_dispositivo.contagem_continua - try: + """try: if self.texto: + self.texto = self.texto.replace('\xa0', '') self.texto = str(BeautifulSoup(self.texto, "html.parser")) if self.texto_atualizador: self.texto_atualizador = str(BeautifulSoup( self.texto_atualizador, "html.parser")) except: - pass + pass""" return super().save( force_insert=force_insert, force_update=force_update, using=using, @@ -1624,7 +1633,7 @@ class Dispositivo(BaseModel, TimestampedMixin): yield ultimo @staticmethod - def new_instance_based_on(dispositivo_base, tipo_base): + def new_instance_based_on(dispositivo_base, tipo_base, base_alteracao=None): dp = Dispositivo() dp.tipo_dispositivo = tipo_base @@ -1639,6 +1648,16 @@ class Dispositivo(BaseModel, TimestampedMixin): dp.dispositivo_pai = dispositivo_base.dispositivo_pai dp.publicacao = dispositivo_base.publicacao + b = base_alteracao if base_alteracao else dispositivo_base + + # teste de criação inversa de itens alterados por mesmo bloco + dp.ta_publicado = b.ta_publicado + dp.dispositivo_atualizador = b.dispositivo_atualizador + + if dp.ta_publicado: + dp.ordem_bloco_atualizador = b.ordem_bloco_atualizador + \ + Dispositivo.INTERVALO_ORDEM + dp.dispositivo_vigencia = dispositivo_base.dispositivo_vigencia if dp.dispositivo_vigencia: dp.inicio_eficacia = dp.dispositivo_vigencia.inicio_eficacia diff --git a/sapl/compilacao/templatetags/compilacao_filters.py b/sapl/compilacao/templatetags/compilacao_filters.py index a7fb2eada..201e0d62c 100644 --- a/sapl/compilacao/templatetags/compilacao_filters.py +++ b/sapl/compilacao/templatetags/compilacao_filters.py @@ -65,6 +65,8 @@ def get_bloco_atualizador(pk_atualizador): @register.simple_tag def dispositivo_desativado(dispositivo, inicio_vigencia, fim_vigencia): + if dispositivo.dispositivo_de_revogacao: + return 'revogado' if inicio_vigencia and fim_vigencia: if dispositivo.fim_vigencia is None: return '' @@ -292,7 +294,6 @@ def nomenclatura_heranca(d, ignore_ultimo=0, ignore_primeiro=0): return result - @register.filter def list(obj): return [obj, ] diff --git a/sapl/compilacao/views.py b/sapl/compilacao/views.py index 671e5bcf1..9f0ed2b46 100644 --- a/sapl/compilacao/views.py +++ b/sapl/compilacao/views.py @@ -10,7 +10,7 @@ from django.conf import settings from django.contrib import messages from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib.contenttypes.models import ContentType -from django.core.exceptions import ValidationError +from django.core.exceptions import ValidationError, PermissionDenied from django.core.signing import Signer from django.core.urlresolvers import reverse, reverse_lazy from django.db import transaction @@ -195,8 +195,13 @@ class IntegracaoTaView(TemplateView): return redirect(to=reverse_lazy('sapl.compilacao:ta_text_edit', kwargs={'ta_id': ta.pk})) else: - return redirect(to=reverse_lazy('sapl.compilacao:ta_text', - kwargs={'ta_id': ta.pk})) + return redirect( + to='%s?%s' % ( + reverse_lazy('sapl.compilacao:ta_text', + kwargs={'ta_id': ta.pk}), + request.META['QUERY_STRING'] + ) + ) class Meta: abstract = True @@ -489,6 +494,18 @@ class TaListView(CompMixin, ListView): ~Q(owners=self.request.user.id), privacidade=STATUS_TA_PRIVATE) + if 'check' in self.request.GET: + qs = qs.filter( + temp_check_migrations=False, + privacidade=0, + ).exclude(dispositivos_set__tipo_dispositivo_id=3) + + if 'check_dvt' in self.request.GET: + qs = qs.filter( + ).filter( + dispositivos_set__isnull=False, + dispositivos_set__dispositivo_vigencia__isnull=True).distinct() + return qs @@ -560,13 +577,29 @@ class TaDeleteView(CompMixin, DeleteView): template_name = "crud/confirm_delete.html" permission_required = 'compilacao.delete_textoarticulado' + def post(self, request, *args, **kwargs): + if not request.user.is_superuser: + raise PermissionDenied + return DeleteView.post(self, request, *args, **kwargs) + @property def detail_url(self): return reverse_lazy('sapl.compilacao:ta_detail', kwargs={'pk': self.kwargs['pk']}) def get_success_url(self): - return reverse_lazy('sapl.compilacao:ta_list') + messages.info(self.request, 'Texto Articulado excluido com sucesso!') + + reverse_url = '%s:%s_detail' % ( + self.object.content_object._meta.app_config.name, + self.object.content_object._meta.model_name) + + return reverse_lazy(reverse_url, + kwargs={'pk': self.object.content_object.pk}) + + @property + def title(self): + return 'Texto Articulado: %s' % self.object class DispositivoSuccessUrlMixin(CompMixin): @@ -844,6 +877,10 @@ class TextView(CompMixin, ListView): fim_vigencia = None ta_vigencia = None + @property + def title(self): + return 'Texto Articulado: %s' % self.object + def has_permission(self): self.object = self.ta return self.object.has_view_permission(self.request) @@ -1073,7 +1110,7 @@ class TextEditView(CompMixin, TemplateView): self.object.content_object.save() else: - if 'lock' in request.GET: + if 'lock' in request.GET or 'check' in request.GET: # TODO - implementar logging de ação de usuário notificacoes = self.get_notificacoes( @@ -1092,11 +1129,17 @@ class TextEditView(CompMixin, TemplateView): 'sapl.compilacao:ta_text_notificacoes', kwargs={ 'ta_id': self.object.id})) - self.object.editing_locked = True - self.object.privacidade = STATUS_TA_PUBLIC - self.object.save() - messages.success(request, _( - 'Texto Articulado bloqueado com sucesso.')) + if 'lock' in request.GET: + self.object.editing_locked = True + self.object.privacidade = STATUS_TA_PUBLIC + self.object.save() + messages.success(request, _( + 'Texto Articulado publicado com sucesso.')) + else: + self.object.temp_check_migrations = True + self.object.save() + messages.success(request, _( + 'Texto Articulado Checado...')) if self.object.content_object: self.object.content_object.save() @@ -2078,6 +2121,10 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin): if len(result) > 2: result.pop() + result[0]['itens'] = result[1]['itens'] + result[0]['itens'] + result[0]['tipo_insert'] = 'Inserção' + result[1]['itens'] = [] + return result except Exception as e: @@ -2092,7 +2139,6 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin): dvt = Dispositivo.objects.get(pk=self.kwargs['dispositivo_id']) if dvt.auto_inserido: dvt = dvt.dispositivo_pai - try: Dispositivo.objects.filter( ta=dvt.ta, ta_publicado__isnull=True @@ -2104,7 +2150,7 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin): Dispositivo.objects.filter(ta_publicado=dvt.ta ).update( dispositivo_vigencia=dvt, - inicio_vigencia=dvt.inicio_eficacia, + inicio_vigencia=dvt.inicio_vigencia, inicio_eficacia=dvt.inicio_eficacia) dps = Dispositivo.objects.filter(dispositivo_vigencia=dvt) @@ -2157,6 +2203,10 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin): dp_auto_insert = None base = Dispositivo.objects.get(pk=self.kwargs['dispositivo_id']) + + if base.dispositivo_atualizador: + registro_inclusao = True + tipo = TipoDispositivo.objects.get(pk=context['tipo_pk']) pub_last = Publicacao.objects.order_by( 'data', 'hora').filter(ta=base.ta).last() @@ -2192,11 +2242,13 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin): dp_pai = dp if dp_irmao is not None: - dp = Dispositivo.new_instance_based_on(dp_irmao, tipo) + dp = Dispositivo.new_instance_based_on( + dp_irmao, tipo, base_alteracao=base) dp.transform_in_next(variacao) else: # Inserção sem precedente - dp = Dispositivo.new_instance_based_on(dp_pai, tipo) + dp = Dispositivo.new_instance_based_on( + dp_pai, tipo, base_alteracao=base) dp.dispositivo_pai = dp_pai dp.nivel += 1 @@ -2219,6 +2271,9 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin): else: dp.set_numero_completo([1, 0, 0, 0, 0, 0, ]) + if dp.dispositivo_atualizador: + registro_inclusao = True + # verificar se existe restrição de quantidade de itens if dp.dispositivo_pai: for perfil in perfil_parents: @@ -2257,7 +2312,8 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin): dp.incrementar_irmaos(variacao, [local_add, ], force=False) dp.publicacao = pub_last - dp.save() + + dp.save(clean=not registro_inclusao) count_auto_insert = 0 if create_auto_inserts: @@ -2309,6 +2365,10 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin): ordem += Dispositivo.INTERVALO_ORDEM dp = Dispositivo.objects.get(pk=dp_pk) + dp.ta_publicado = None + dp.dispositivo_atualizador = None + dp.ordem_bloco_atualizador = 0 + dp.save(clean=False) ''' Reenquadrar todos os dispositivos que possuem pai antes da inserção atual e que são inferiores a dp, @@ -2619,8 +2679,12 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin, ds = d while ds.dispositivo_subsequente: ds = ds.dispositivo_subsequente + dsps_ids.add(ds.pk) + if revogacao and ds.dispositivo_de_revogacao: + dsps_ids.remove(ds.pk) + if em_bloco: proximo_bloco = Dispositivo.objects.filter( ordem__gt=ds.ordem, @@ -2631,9 +2695,18 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin, 'ta_id': ds.ta_id, 'nivel__gte': ds.nivel, 'ordem__gte': ds.ordem, - 'dispositivo_subsequente__isnull': True + 'dispositivo_subsequente__isnull': True, } + if revogacao: + params.update( + { + 'dispositivo_de_revogacao': False, + 'tipo_dispositivo__dispositivo_de_articulacao': False + } + + ) + if proximo_bloco: params['ordem__lt'] = proximo_bloco.ordem @@ -2650,9 +2723,9 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin, dsps_ids = Dispositivo.objects.filter( id__in=dsps_ids - ).values_list('id', flat="True") - for dsp in dsps_ids: - with transaction.atomic(): + ).values_list('id', flat="True").order_by('ordem') + with transaction.atomic(): + for dsp in dsps_ids: data.update( self.registra_alteracao( bloco_alteracao, @@ -2708,10 +2781,10 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin, if ndp.dispositivo_vigencia: ndp.inicio_eficacia = ndp.dispositivo_vigencia.inicio_eficacia - ndp.inicio_vigencia = ndp.dispositivo_vigencia.inicio_eficacia + ndp.inicio_vigencia = ndp.dispositivo_vigencia.inicio_vigencia else: ndp.inicio_eficacia = bloco_alteracao.inicio_eficacia - ndp.inicio_vigencia = bloco_alteracao.inicio_eficacia + ndp.inicio_vigencia = bloco_alteracao.inicio_vigencia try: ordem = dsp_a_alterar.criar_espaco( @@ -2743,6 +2816,7 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin, ).ordem_bloco_atualizador + Dispositivo.INTERVALO_ORDEM else: ndp.ordem_bloco_atualizador = Dispositivo.INTERVALO_ORDEM + ndp.save() p.dispositivo_subsequente = ndp @@ -2760,10 +2834,10 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin, filhos_diretos = dsp_a_alterar.dispositivos_filhos_set for d in filhos_diretos.all(): d.dispositivo_pai = ndp - d.save() + d.save(clean=False) - ndp.ta.reordenar_dispositivos() - bloco_alteracao.ordenar_bloco_alteracao() + # ndp.ta.reordenar_dispositivos() + # bloco_alteracao.ordenar_bloco_alteracao() if not revogacao: if 'message' not in data: @@ -2975,201 +3049,174 @@ class DispositivoSearchFragmentFormView(ListView): itens.append(item) return JsonResponse(itens, safe=False) - response = ListView.get(self, request, *args, **kwargs) - - if not self.object_list or \ - not isinstance(self.object_list, list) and \ - not self.object_list.exists(): - messages.info( - request, _('Não foram encontrados resultados ' - 'com seus critérios de busca!')) - username = self.request.user.username - self.logger.error("user=" + username + ". Não foram encontrados " - "resultados com esses critérios de busca. " - "id_tipo_ta=".format(request.GET['tipo_ta'])) - - try: - r = response.render() - return response - except Exception as e: - messages.error(request, "Erro - %s" % str(e)) - context = {} - self.template_name = 'compilacao/messages.html' - username = self.request.user.username - self.logger.error("user=" + username + ". " + str(e)) - return self.render_to_response(context) + return ListView.get(self, request, *args, **kwargs) def get_queryset(self): - try: - n = 10 - if 'max_results' in self.request.GET: - n = int(self.request.GET['max_results']) - - q = Q() - if 'initial_ref' in self.request.GET: - initial_ref = self.request.GET['initial_ref'] - if initial_ref: - q = q & Q(pk=initial_ref) - - result = Dispositivo.objects.filter(q).select_related( - 'ta').exclude( - tipo_dispositivo__dispositivo_de_alteracao=True) - - return result[:n] - - str_texto = '' - texto = '' - rotulo = '' - num_ta = '' - ano_ta = '' - - if 'texto' in self.request.GET: - str_texto = self.request.GET['texto'] + result = [] + try: + tipo_model = self.request.GET.get('tipo_model', '') + limit = int(self.request.GET.get('max_results', 100)) + tipo_ta = self.request.GET.get('tipo_ta', '') + num_ta = self.request.GET.get('num_ta', '') + ano_ta = self.request.GET.get('ano_ta', '') + rotulo = self.request.GET.get('rotulo', '') + str_texto = self.request.GET.get('texto', '') texto = str_texto.split(' ') - if 'rotulo' in self.request.GET: - rotulo = self.request.GET['rotulo'] - if rotulo: - q = q & Q(rotulo__icontains=rotulo) - - for item in texto: - if not item: - continue - if q: - q = q & (Q(texto__icontains=item) | - Q(texto_atualizador__icontains=item)) - else: - q = (Q(texto__icontains=item) | - Q(texto_atualizador__icontains=item)) - - if 'tipo_ta' in self.request.GET: - tipo_ta = self.request.GET['tipo_ta'] - if tipo_ta: - q = q & Q(ta__tipo_ta_id=tipo_ta) - - if 'num_ta' in self.request.GET: - num_ta = self.request.GET['num_ta'] - if num_ta: - q = q & Q(ta__numero=num_ta) - - if 'ano_ta' in self.request.GET: - ano_ta = self.request.GET['ano_ta'] - if ano_ta: - q = q & Q(ta__ano=ano_ta) - - if not q.children and not n: - n = 10 - q = q & Q(nivel__gt=0) - - result = Dispositivo.objects.order_by( - '-ta__data', - '-ta__ano', - '-ta__numero', - 'ta', - 'ordem').filter(q).select_related('ta') - - if 'data_type_selection' in self.request.GET and\ - self.request.GET['data_type_selection'] == 'checkbox': - result = result.exclude( - tipo_dispositivo__dispositivo_de_alteracao=True) - else: - if 'data_function' in self.request.GET and\ - self.request.GET['data_function'] == 'alterador': - result = result.exclude( - tipo_dispositivo__dispositivo_de_alteracao=False, - ) - result = result.exclude( - tipo_dispositivo__dispositivo_de_articulacao=False, - ) - print(str(result.query)) - - def resultados(r): - if n: - return r[:n] - else: - return r - - """if num_ta and ano_ta and not rotulo and not str_texto and\ - 'data_type_selection' in self.request.GET and\ - self.request.GET['data_type_selection'] == 'checkbox': - return r - else: - return r[:n]""" - - if 'tipo_model' not in self.request.GET: - return resultados(result) + tipo_resultado = self.request.GET.get('tipo_resultado', '') + tipo_resultado = '' if tipo_resultado == 'False' else tipo_resultado - tipo_model = self.request.GET['tipo_model'] - if not tipo_model: - return resultados(result) - - integrations_view_names = get_integrations_view_names() + model_class = None - tipo_ta = TipoTextoArticulado.objects.get(pk=tipo_ta) + if tipo_ta: + tipo_ta = TipoTextoArticulado.objects.get(pk=tipo_ta) + + if tipo_ta and tipo_model: + integrations_view_names = get_integrations_view_names() + for item in integrations_view_names: + if hasattr(item, 'model_type_foreignkey') and\ + hasattr(item, 'model'): + if (tipo_ta.content_type.model == + item.model.__name__.lower() and + tipo_ta.content_type.app_label == + item.model._meta.app_label): + + model_class = item.model + model_type_class = item.model_type_foreignkey + tipo_model = item.model_type_foreignkey.objects.get( + pk=tipo_model) + break - model_class = None - for item in integrations_view_names: - if hasattr(item, 'model_type_foreignkey') and\ - hasattr(item, 'model'): - if (tipo_ta.content_type.model == - item.model.__name__.lower() and - tipo_ta.content_type.app_label == - item.model._meta.app_label): - - model_class = item.model - model_type_class = item.model_type_foreignkey - tipo_model = item.model_type_foreignkey.objects.get( - pk=tipo_model) + column_field = '' + if model_class: + for field in model_class._meta.fields: + if field.related_model == model_type_class: + column_field = field.column break - if not model_class: - return resultados(result) + dts = self.request.GET.get('data_type_selection', '') + df = self.request.GET.get('data_function', '') - column_field = '' - for field in model_class._meta.fields: - if field.related_model == model_type_class: - column_field = field.column - break + AND_CONTROLS = '' + if dts == 'checkbox': + AND_CONTROLS = 'AND td.dispositivo_de_alteracao = false' + else: + if df == 'alterador': + AND_CONTROLS = '''AND td.dispositivo_de_alteracao = true + AND td.dispositivo_de_articulacao = true''' + + texto = list(map("d.texto ~* '{}'".format, texto)) + AND_TEXTO_ROTULO = '' + if str_texto and rotulo: + AND_TEXTO_ROTULO = '''AND ( ({BUSCA_TEXTO} AND d.rotulo ~* '{BUSCA_ROTULO}') OR + ({BUSCA_TEXTO} AND d.rotulo = '' AND dp.rotulo ~* '{BUSCA_ROTULO}') + )'''.format( + BUSCA_TEXTO=' AND '.join(texto), + BUSCA_ROTULO=rotulo + ) + elif str_texto: + AND_TEXTO_ROTULO = ' AND %s' % ' AND '.join(texto) + elif rotulo: + AND_TEXTO_ROTULO = "AND d.rotulo ~* '{BUSCA_ROTULO}'".format( + BUSCA_ROTULO=rotulo) + else: + AND_TEXTO_ROTULO = '' + + jtms = '' # JOIN_TYPE_MODEL_SELECTED + atms = '' # AND_TYPE_MODEL_SELECTED + if tipo_model: + jtms = 'JOIN {gfk_table} gfkt on (gfkt.id = ta.object_id)'.format( + gfk_table=model_class._meta.db_table) + atms = 'AND gfkt.{gfk_field_type} = {gfk_field_type_id}'.format( + gfk_field_type=column_field, + gfk_field_type_id=tipo_model.id, + ) + + sql = ''' + SELECT d.* FROM compilacao_dispositivo d + JOIN compilacao_dispositivo dp on (d.dispositivo_pai_id = dp.id) + JOIN compilacao_tipodispositivo td on (d.tipo_dispositivo_id = td.id) + JOIN compilacao_textoarticulado ta on (d.ta_id = ta.id) + + {JOIN_TYPE_MODEL_SELECTED} + + where d.nivel > 0 + + {AND_TYPE_MODEL_SELECTED} + + {AND_TEXTO_ROTULO} + {AND1_NUMERO} + {AND2_ANO} + {AND3_TIPO_TA} + {AND_CONTROLS} + + order by ta.data desc, + ta.numero desc, + ta.id desc, + d.ordem + {limit}; + '''.format( + + limit='limit {}'.format(limit) if limit else '', + + JOIN_TYPE_MODEL_SELECTED=jtms, + AND_TYPE_MODEL_SELECTED=atms, + + AND3_TIPO_TA="AND ta.tipo_ta_id = {}".format( + tipo_ta.id) if tipo_ta else '', + + AND2_ANO="AND ta.ano = {}".format( + ano_ta) if ano_ta else '', + + AND1_NUMERO="AND ta.numero ~* '{}'".format( + num_ta) if num_ta else '', + + AND_TEXTO_ROTULO=AND_TEXTO_ROTULO if AND_TEXTO_ROTULO else '', + AND_CONTROLS=AND_CONTROLS if AND_CONTROLS else '' + ) - if not column_field: - return resultados(result) + result = Dispositivo.objects.raw(sql) r = [] + ids = set() - """ - ao integrar um model ao app de compilação, se este model possuir + def proc_dispositivos(ds): - texto_articulado = GenericRelation( - TextoArticulado, related_query_name='texto_articulado') + for d in ds: - será uma integração mais eficiente para as buscas de Dispositivos - """ - if hasattr(model_class, 'texto_articulado'): - q = q & Q(**{ - 'ta__texto_articulado__' + column_field: tipo_model.pk - }) - if n: - result = result.filter(q)[:n] - else: - result = result.filter(q) + if d.id not in ids: + r.append(d) + ids.add(d.id) - for d in result: - if not d.ta.content_object or\ - not hasattr(d.ta.content_object, column_field): - continue + if tipo_resultado == 'I': + if ds != result: + d.I = True + proc_dispositivos(d.dispositivos_filhos_set.filter( + tipo_dispositivo__dispositivo_de_alteracao=False + )) + elif tipo_resultado == 'S' and ds == result: - if tipo_model.pk == getattr(d.ta.content_object, column_field): - r.append(d) + seq = Dispositivo.objects.filter( + ta=d.ta, + ordem__gt=d.ordem, + nivel__gt=0, + tipo_dispositivo__dispositivo_de_alteracao=False + ) + proc_dispositivos(seq[:limit]) + + elif tipo_resultado == 'S': + d.S = True + + proc_dispositivos(result) - if (len(r) == n and (not num_ta or - not ano_ta or rotulo or str_texto)): - break return r except Exception as e: username = self.request.user.username self.logger.error("user=" + username + ". " + str(e)) + return [] + pass class DispositivoSearchModalView(FormView): diff --git a/sapl/crispy_layout_mixin.py b/sapl/crispy_layout_mixin.py index b6af79427..2574a4a46 100644 --- a/sapl/crispy_layout_mixin.py +++ b/sapl/crispy_layout_mixin.py @@ -55,28 +55,28 @@ def form_actions(more=[Div(css_class='clearfix')], class SaplFormHelper(FormHelper): render_hidden_fields = True # default = False """ - até a release 1.6.1 do django-crispy-forms, os fields em Meta.Fields eram + até a release 1.6.1 do django-crispy-forms, os fields em Meta.Fields eram renderizados mesmo se não mencionados no helper. Com esta mudança (https://github.com/django-crispy-forms/django-crispy-forms/commit/6b93e8a362422db8fe54aa731319c7cbc39990ba) render_hidden_fields foi adicionado uma condição em que a cada instância do Helper, fosse decidido se os fields não mencionados serião ou - não renderizados... + não renderizados... O Sapl até este commit: https://github.com/interlegis/sapl/commit/22b87f36ebc8659a6ecaf8831ab0f425206b0993 utilizou o django-crispy-forms na versão 1.6.1, ou seja, - sem a condição render_hidden_fields o que fazia o FormHelper, na 1.6.1 + sem a condição render_hidden_fields o que fazia o FormHelper, na 1.6.1 set comportar como se, agora, na 1.7.2 o default fosse True. - Como todos os Forms do Sapl foram construídos assumindo que fields + Como todos os Forms do Sapl foram construídos assumindo que fields não incluídos explicitamente no Helper, o helper o incluiria implicitamente, e assim o era, de acordo com commit acima do django-crispy-forms, então cria-se essa classe: - + class SaplFormHelper(FormHelper): - render_hidden_fields = True - + render_hidden_fields = True + onde torna o default, antes False, agora = True, o esperado pelos forms do sapl, e substituí-se todos os FormHelper por SaplFormHelper dentro do projeto Sapl - - + + esta explicação ficará aqui dentro do código, via commit, e na issue #2456. """ @@ -258,7 +258,12 @@ class CrispyLayoutFormMixin: if func: verbose_name, text = getattr(self, func)(obj, fieldname) else: - verbose_name, text = get_field_display(obj, fieldname) + hook_fieldname = 'hook_%s' % fieldname + if hasattr(self, hook_fieldname): + verbose_name, text = getattr( + self, hook_fieldname)(obj) + else: + verbose_name, text = get_field_display(obj, fieldname) return { 'id': fieldname, diff --git a/sapl/crud/base.py b/sapl/crud/base.py index 98af2a3bb..f4f86a36f 100644 --- a/sapl/crud/base.py +++ b/sapl/crud/base.py @@ -4,18 +4,18 @@ from braces.views import FormMessagesMixin from crispy_forms.bootstrap import FieldWithButtons, StrictButton from crispy_forms.layout import Field, Layout from django import forms +from django.conf import settings from django.conf.urls import url from django.contrib import messages from django.contrib.auth.mixins import PermissionRequiredMixin from django.core.exceptions import ObjectDoesNotExist from django.core.urlresolvers import reverse from django.db import models -from django.db.models.fields.related import ForeignKey +from django.db.models.fields.related import ForeignKey, ManyToManyField from django.http.response import Http404 from django.shortcuts import redirect from django.utils.decorators import classonlymethod from django.utils.encoding import force_text -from django.utils.functional import cached_property from django.utils.translation import string_concat from django.utils.translation import ugettext_lazy as _ from django.views.generic import (CreateView, DeleteView, DetailView, ListView, @@ -23,13 +23,14 @@ from django.views.generic import (CreateView, DeleteView, DetailView, ListView, from django.views.generic.base import ContextMixin from django.views.generic.list import MultipleObjectMixin +from sapl.base.signals import post_delete_signal, post_save_signal from sapl.crispy_layout_mixin import CrispyLayoutFormMixin, get_field_display from sapl.crispy_layout_mixin import SaplFormHelper from sapl.rules.map_rules import (RP_ADD, RP_CHANGE, RP_DELETE, RP_DETAIL, RP_LIST) -from sapl.settings import BASE_DIR from sapl.utils import normalize +logger = logging.getLogger(settings.BASE_DIR.name) ACTION_LIST, ACTION_CREATE, ACTION_DETAIL, ACTION_UPDATE, ACTION_DELETE = \ 'list', 'create', 'detail', 'update', 'delete' @@ -79,7 +80,6 @@ def make_pagination(index, num_pages): head = from_to(1, PAGINATION_LENGTH - len(tail) - 1) return head + [None] + tail - """ variáveis do crud: help_topic @@ -122,7 +122,6 @@ class SearchMixin(models.Model): except Exception as e: username = self.request.user.username self.logger.error("user=" + username + ". " + str(e)) - pass else: _self = self for field in fields: @@ -206,6 +205,7 @@ class PermissionRequiredContainerCrudMixin(PermissionRequiredMixin): if not self.model.objects.filter(**params).exists(): raise Http404() + elif self.container_field: container = self.container_field.split('__') @@ -230,14 +230,14 @@ class PermissionRequiredContainerCrudMixin(PermissionRequiredMixin): return super(PermissionRequiredMixin, self).dispatch( request, *args, **kwargs) - @cached_property + @property def container_field(self): if hasattr(self, 'crud') and not hasattr(self.crud, 'container_field'): self.crud.container_field = '' if hasattr(self, 'crud'): return self.crud.container_field - @cached_property + @property def container_field_set(self): if hasattr(self, 'crud') and\ not hasattr(self.crud, 'container_field_set'): @@ -245,7 +245,7 @@ class PermissionRequiredContainerCrudMixin(PermissionRequiredMixin): if hasattr(self, 'crud'): return self.crud.container_field_set - @cached_property + @property def is_contained(self): return self.container_field_set or self.container_field @@ -383,12 +383,13 @@ class CrudBaseMixin(CrispyLayoutFormMixin): class CrudListView(PermissionRequiredContainerCrudMixin, ListView): - permission_required = (RP_LIST, ) + permission_required = (RP_LIST,) logger = logging.getLogger(__name__) @classmethod def get_url_regex(cls): return r'^$' + paginate_by = 10 no_entries_msg = _('Nenhum registro encontrado.') @@ -420,7 +421,13 @@ class CrudListView(PermissionRequiredContainerCrudMixin, ListView): if hasattr(f, 'related_model') and f.related_model: m = f.related_model if f: - s.append(force_text(f.verbose_name)) + hook = 'hook_header_{}'.format(''.join(fn)) + if hasattr(self, hook): + header = getattr(self, hook)() + s.append(header) + else: + s.append(force_text(f.verbose_name)) + s = ' / '.join(s) r.append(s) return r @@ -595,12 +602,12 @@ class CrudListView(PermissionRequiredContainerCrudMixin, ListView): model_ordering = (model_ordering,) for mo in model_ordering: if mo not in ordering: - ordering = ordering + (mo, ) + ordering = ordering + (mo,) queryset = queryset.order_by(*ordering) # print(ordering) except Exception as e: - print(string_concat(_( + logger.error(string_concat(_( 'ERRO: construção da tupla de ordenação.'), str(e))) # print(queryset.query) @@ -615,9 +622,38 @@ class CrudListView(PermissionRequiredContainerCrudMixin, ListView): return queryset +class AuditLogMixin(object): + + def delete(self, request, *args, **kwargs): + # Classe deve implementar um get_object(), i.e., deve ser uma View + deleted_object = self.get_object() + try: + return super(AuditLogMixin, self).delete(request, args, kwargs) + finally: + post_delete_signal.send(sender=None, + instance=deleted_object, + operation='D', + request=self.request) + + # SAVE/UPDATE method + def form_valid(self, form): + try: + if not form.instance.pk: + operation = 'C' + else: + operation = 'U' + return super(AuditLogMixin, self).form_valid(form) + finally: + post_save_signal.send(sender=None, + instance=form.instance, + operation=operation, + request=self.request + ) + + class CrudCreateView(PermissionRequiredContainerCrudMixin, - FormMessagesMixin, CreateView): - permission_required = (RP_ADD, ) + FormMessagesMixin, AuditLogMixin, CreateView): + permission_required = (RP_ADD,) logger = logging.getLogger(__name__) @classmethod @@ -689,7 +725,7 @@ class CrudCreateView(PermissionRequiredContainerCrudMixin, class CrudDetailView(PermissionRequiredContainerCrudMixin, DetailView, MultipleObjectMixin): - permission_required = (RP_DETAIL, ) + permission_required = (RP_DETAIL,) no_entries_msg = _('Nenhum registro Associado.') paginate_by = 10 logger = logging.getLogger(__name__) @@ -834,8 +870,8 @@ class CrudDetailView(PermissionRequiredContainerCrudMixin, class CrudUpdateView(PermissionRequiredContainerCrudMixin, - FormMessagesMixin, UpdateView): - permission_required = (RP_CHANGE, ) + FormMessagesMixin, AuditLogMixin, UpdateView): + permission_required = (RP_CHANGE,) logger = logging.getLogger(__name__) def form_valid(self, form): @@ -865,8 +901,8 @@ class CrudUpdateView(PermissionRequiredContainerCrudMixin, class CrudDeleteView(PermissionRequiredContainerCrudMixin, - FormMessagesMixin, DeleteView): - permission_required = (RP_DELETE, ) + FormMessagesMixin, AuditLogMixin, DeleteView): + permission_required = (RP_DELETE,) logger = logging.getLogger(__name__) @classmethod @@ -926,10 +962,12 @@ class Crud: def _add_base(view): if view: + class CrudViewWithBase(cls.BaseMixin, view): model = cls.model help_topic = cls.help_topic crud = cls + CrudViewWithBase.__name__ = view.__name__ return CrudViewWithBase @@ -963,11 +1001,13 @@ class Crud: def build(cls, _model, _help_topic, _model_set=None, list_field_names=[]): def create_class(_list_field_names): + class ModelCrud(cls): model = _model model_set = _model_set help_topic = _help_topic list_field_names = _list_field_names + return ModelCrud ModelCrud = create_class(list_field_names) @@ -1108,12 +1148,14 @@ class MasterDetailCrud(Crud): permission_required = RP_LIST, logger = logging.getLogger(__name__) + def get(self, request, *args, **kwargs): + return Crud.ListView.get(self, request, *args, **kwargs) + @classmethod def get_url_regex(cls): return r'^(?P\d+)/%s$' % cls.model._meta.model_name def get_context_data(self, **kwargs): - obj = self.crud if hasattr(self, 'crud') else self context = CrudListView.get_context_data(self, **kwargs) @@ -1133,7 +1175,12 @@ class MasterDetailCrud(Crud): else: parent_model = getattr( - self.model, obj.parent_field).field.related_model + self.model, obj.parent_field) + if isinstance(parent_model.field, ( + ForeignKey, ManyToManyField)): + parent_model = parent_model.field.related_model + else: + parent_model = parent_model.rel.related_model params = {'pk': kwargs['root_pk']} @@ -1165,6 +1212,9 @@ class MasterDetailCrud(Crud): return qs.filter(**kwargs) + def dispatch(self, request, *args, **kwargs): + return PermissionRequiredMixin.dispatch(self, request, *args, **kwargs) + class CreateView(Crud.CreateView): permission_required = RP_ADD, logger = logging.getLogger(__name__) @@ -1229,8 +1279,12 @@ class MasterDetailCrud(Crud): parent_object = getattr(parent_object, field) else: - parent_model = getattr( - parent_model, obj.parent_field).field.related_model + parent_model = getattr(self.model, obj.parent_field) + if isinstance(parent_model.field, ForeignKey): + parent_model = parent_model.field.related_model + else: + parent_model = parent_model.rel.related_model + parent_object = parent_model.objects.get(**params) context['root_pk'] = parent_object.pk diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 85e202139..e855dcc30 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -1,17 +1,18 @@ - +import django_filters import logging import os +import sapl from crispy_forms.bootstrap import Alert, InlineRadios -from crispy_forms.layout import (HTML, Button, Field, Fieldset, - Layout, Row) +from crispy_forms.layout import (Button, Field, Fieldset, HTML, Layout, Row) + from django import forms from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.core.files.base import File from django.core.urlresolvers import reverse from django.db import models, transaction -from django.db.models import Max, Q, F +from django.db.models import F, Max, Q from django.forms import ModelChoiceField, ModelForm, widgets from django.forms.forms import Form from django.forms.models import ModelMultipleChoiceField @@ -21,36 +22,37 @@ from django.utils.encoding import force_text from django.utils.html import format_html from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ -import django_filters -import sapl from sapl.base.models import AppConfig, Autor, TipoAutor -from sapl.comissoes.models import Comissao, Participacao, Composicao +from sapl.base.signals import post_save_signal +from sapl.comissoes.models import Comissao, Composicao, Participacao from sapl.compilacao.models import (STATUS_TA_IMMUTABLE_PUBLIC, STATUS_TA_PRIVATE) -from sapl.crispy_layout_mixin import (SaplFormLayout, form_actions, to_column, - to_row) -from sapl.crispy_layout_mixin import SaplFormHelper +from sapl.crispy_layout_mixin import (form_actions, SaplFormHelper, + SaplFormLayout, to_column, to_row) from sapl.materia.models import (AssuntoMateria, Autoria, MateriaAssunto, - MateriaLegislativa, Orgao, RegimeTramitacao, - TipoDocumento, TipoProposicao, StatusTramitacao, + MateriaLegislativa, Orgao, + RegimeTramitacao, StatusTramitacao, + TipoDocumento, TipoProposicao, UnidadeTramitacao) -from sapl.norma.models import (LegislacaoCitada, NormaJuridica, +from sapl.norma.models import (LegislacaoCitada, NormaJuridica, TipoNormaJuridica) from sapl.parlamentares.models import Legislatura, Partido, Parlamentar -from sapl.protocoloadm.models import Protocolo, DocumentoAdministrativo, Anexado -from sapl.settings import MAX_DOC_UPLOAD_SIZE -from sapl.utils import (YES_NO_CHOICES, SEPARADOR_HASH_PROPOSICAO, +from sapl.protocoloadm.models import (Anexado, DocumentoAdministrativo, + Protocolo) +from sapl.utils import (autor_label, autor_modal, ChoiceWithoutValidationField, - MateriaPesquisaOrderingFilter, RangeWidgetOverride, - autor_label, autor_modal, gerar_hash_arquivo, + choice_anos_com_materias, FileFieldCheckMixin, + FilterOverridesMetaMixin, gerar_hash_arquivo, + lista_anexados, MateriaPesquisaOrderingFilter, models_with_gr_for_model, qs_override_django_filter, - choice_anos_com_materias, FilterOverridesMetaMixin, FileFieldCheckMixin, - lista_anexados) + RangeWidgetOverride, SEPARADOR_HASH_PROPOSICAO, + validar_arquivo, YES_NO_CHOICES) -from .models import (AcompanhamentoMateria, Anexada, Autoria, DespachoInicial, - DocumentoAcessorio, Numeracao, Proposicao, Relatoria, - TipoMateriaLegislativa, Tramitacao, UnidadeTramitacao) +from .models import (AcompanhamentoMateria, Anexada, Autoria, + DespachoInicial, DocumentoAcessorio, Numeracao, + Proposicao, Relatoria, TipoMateriaLegislativa, + Tramitacao, UnidadeTramitacao) def CHOICE_TRAMITACAO(): @@ -177,7 +179,8 @@ class MateriaLegislativaForm(FileFieldCheckMixin, ModelForm): 'anexadas', 'data_ultima_atualizacao'] widgets = { 'user': forms.HiddenInput(), - 'ip': forms.HiddenInput() + 'ip': forms.HiddenInput(), + 'ultima_edicao': forms.HiddenInput() } def __init__(self, *args, **kwargs): @@ -251,9 +254,8 @@ class MateriaLegislativaForm(FileFieldCheckMixin, ModelForm): texto_original = self.cleaned_data.get('texto_original', False) - if texto_original and texto_original.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Texto Original deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (texto_original.size/1024)/1024)) + if texto_original: + validar_arquivo(texto_original, "Texto Original") return cleaned_data @@ -343,8 +345,9 @@ class DocumentoAcessorioForm(FileFieldCheckMixin, ModelForm): class Meta: model = DocumentoAcessorio - fields = ['tipo', 'nome', 'data', 'autor', 'ementa', 'arquivo'] - + fields = ['tipo', 'nome', 'data', 'autor', + 'ementa', 'indexacao', 'arquivo'] + def clean(self): super(DocumentoAcessorioForm, self).clean() @@ -353,9 +356,8 @@ class DocumentoAcessorioForm(FileFieldCheckMixin, ModelForm): arquivo = self.cleaned_data.get('arquivo', False) - if arquivo and arquivo.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Texto Integral deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (arquivo.size/1024)/1024)) + if arquivo: + validar_arquivo(arquivo, "Texto Integral") return self.cleaned_data @@ -462,9 +464,12 @@ class TramitacaoForm(ModelForm): 'data_fim_prazo', 'texto', 'user', - 'ip'] + 'ip', + 'ultima_edicao'] + widgets = {'user': forms.HiddenInput(), - 'ip': forms.HiddenInput()} + 'ip': forms.HiddenInput(), + 'ultima_edicao': forms.HiddenInput()} def __init__(self, *args, **kwargs): super(TramitacaoForm, self).__init__(*args, **kwargs) @@ -577,7 +582,8 @@ class TramitacaoForm(ModelForm): texto=tramitacao.texto, data_fim_prazo=tramitacao.data_fim_prazo, user=tramitacao.user, - ip=tramitacao.ip + ip=tramitacao.ip, + ultima_edicao=tramitacao.ultima_edicao )) Tramitacao.objects.bulk_create(lista_tramitacao) @@ -619,14 +625,16 @@ class TramitacaoUpdateForm(TramitacaoForm): 'data_fim_prazo', 'texto', 'user', - 'ip' + 'ip', + 'ultima_edicao' ] widgets = { 'data_encaminhamento': forms.DateInput(format='%d/%m/%Y'), 'data_fim_prazo': forms.DateInput(format='%d/%m/%Y'), 'user': forms.HiddenInput(), - 'ip': forms.HiddenInput() + 'ip': forms.HiddenInput(), + 'ultima_edicao': forms.HiddenInput() } def clean(self): @@ -657,6 +665,17 @@ class TramitacaoUpdateForm(TramitacaoForm): 'Você não pode mudar a Unidade de Destino desta ' 'tramitação, pois irá conflitar com a Unidade ' 'Local da tramitação seguinte') + + if not (cd['data_tramitacao'] != obj.data_tramitacao or \ + cd['unidade_tramitacao_destino'] != obj.unidade_tramitacao_destino or \ + cd['status'] != obj.status or cd['texto'] != obj.texto or \ + cd['data_encaminhamento'] != obj.data_encaminhamento or \ + cd['data_fim_prazo'] != obj.data_fim_prazo or cd['urgente'] != str(obj.urgente) or \ + cd['turno'] != obj.turno): + ### Se não ocorreram alterações, o usuário, ip, data e hora da última edição (real) são mantidos + cd['user'] = obj.user + cd['ip'] = obj.ip + cd['ultima_edicao'] = obj.ultima_edicao cd['data_tramitacao'] = obj.data_tramitacao cd['unidade_tramitacao_local'] = obj.unidade_tramitacao_local @@ -689,6 +708,7 @@ class TramitacaoUpdateForm(TramitacaoForm): tram_anexada.data_fim_prazo = nova_tram_principal.data_fim_prazo tram_anexada.user = nova_tram_principal.user tram_anexada.ip = nova_tram_principal.ip + tram_anexada.ultima_edicao = nova_tram_principal.ultima_edicao tram_anexada.save() ma.em_tramitacao = False if nova_tram_principal.status.indicador == "F" else True @@ -906,17 +926,20 @@ class AnexadaForm(ModelForm): anexadas_anexada = Anexada.objects.filter( materia_principal=materia_anexada) - while anexadas_anexada and not ciclico: + anexadas_visitadas = [materia_principal] + while anexadas_anexada: anexadas = [] - for anexa in anexadas_anexada: - if materia_principal == anexa.materia_anexada: + if anexa.materia_anexada in anexadas_visitadas: ciclico = True + break else: + anexadas_visitadas.append(anexa.materia_anexada) for a in Anexada.objects.filter(materia_principal=anexa.materia_anexada): anexadas.append(a) - + if ciclico: + break anexadas_anexada = anexadas if ciclico: @@ -995,11 +1018,15 @@ class MateriaLegislativaFilterSet(django_filters.FilterSet): 'autoria__primeiro_autor', 'autoria__autor__parlamentar_set__filiacao__partido', 'relatoria__parlamentar_id', - 'local_origem_externa', 'tramitacao__unidade_tramitacao_destino', 'tramitacao__status', 'materiaassunto__assunto', 'em_tramitacao', + 'tipo_origem_externa', + 'numero_origem_externa', + 'ano_origem_externa', + 'data_origem_externa', + 'local_origem_externa', ] def filter_ementa(self, queryset, name, value): @@ -1011,7 +1038,7 @@ class MateriaLegislativaFilterSet(django_filters.FilterSet): return queryset.filter(q) def __init__(self, *args, **kwargs): - super(MateriaLegislativaFilterSet, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # self.filters['tipo'].label = 'Tipo de Matéria' self.filters[ @@ -1054,11 +1081,10 @@ class MateriaLegislativaFilterSet(django_filters.FilterSet): ]) row6 = to_row( [('relatoria__parlamentar_id', 6), - ('local_origem_externa', 6)]) + ('em_tramitacao', 6)]) row7 = to_row( - [('tramitacao__unidade_tramitacao_destino', 5), - ('tramitacao__status', 5), - ('em_tramitacao', 2) + [('tramitacao__unidade_tramitacao_destino', 6), + ('tramitacao__status', 6), ]) row9 = to_row( [('materiaassunto__assunto', 6), ('indexacao', 6)]) @@ -1069,6 +1095,16 @@ class MateriaLegislativaFilterSet(django_filters.FilterSet): ('tipo_listagem', 4) ]) + row10 = to_row([ + ('tipo_origem_externa', 4), + ('numero_origem_externa', 4), + ('ano_origem_externa', 4), + ]) + row11 = to_row([ + ('data_origem_externa', 8), + ('local_origem_externa', 4) + ]) + self.form.helper = SaplFormHelper() self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( @@ -1078,6 +1114,9 @@ class MateriaLegislativaFilterSet(django_filters.FilterSet): Fieldset(_('Como listar os resultados da pesquisa'), row8 ), + Fieldset(_('Origem externa'), + row10, row11 + ), Fieldset(_('Pesquisa Avançada'), row3, HTML(autor_label), @@ -1597,9 +1636,12 @@ class TramitacaoEmLoteForm(ModelForm): 'data_fim_prazo', 'texto', 'user', - 'ip'] + 'ip', + 'ultima_edicao'] + widgets = {'user': forms.HiddenInput(), - 'ip': forms.HiddenInput()} + 'ip': forms.HiddenInput(), + 'ultima_edicao': forms.HiddenInput()} def __init__(self, *args, **kwargs): @@ -1614,7 +1656,7 @@ class TramitacaoEmLoteForm(ModelForm): [(ut.pk, ut) for ut in ust if ut.parlamentar]) self.fields['unidade_tramitacao_destino'].choices = unidade_tramitacao_destino self.fields['urgente'].label = "Urgente? *" - + row1 = to_row([ ('data_tramitacao', 4), ('data_encaminhamento', 4), @@ -1674,7 +1716,6 @@ class TramitacaoEmLoteForm(ModelForm): ) ) - def clean(self): cleaned_data = super(TramitacaoEmLoteForm, self).clean() @@ -1722,9 +1763,12 @@ class TramitacaoEmLoteForm(ModelForm): @transaction.atomic def save(self, commit=True): cd = self.cleaned_data + materias = self.initial['materias'] user = self.initial['user'] if 'user' in self.initial else None ip = self.initial['ip'] if 'ip' in self.initial else '' + ultima_edicao = self.initial['ultima_edicao'] if 'ultima_edicao' in self.initial else '' + tramitar_anexadas = AppConfig.attr('tramitacao_materia') for mat_id in materias: mat = MateriaLegislativa.objects.get(id=mat_id) @@ -1740,7 +1784,8 @@ class TramitacaoEmLoteForm(ModelForm): texto=cd['texto'], data_fim_prazo=cd['data_fim_prazo'], user=user, - ip=ip + ip=ip, + ultima_edicao=ultima_edicao ) mat.em_tramitacao = False if tramitacao.status.indicador == "F" else True mat.save() @@ -1750,8 +1795,8 @@ class TramitacaoEmLoteForm(ModelForm): anexadas = lista_anexados(mat) for ml in anexadas: if not ml.tramitacao_set.all() \ - or ml.tramitacao_set.last() \ - .unidade_tramitacao_destino == tramitacao.unidade_tramitacao_local: + or ml.tramitacao_set.last() \ + .unidade_tramitacao_destino == tramitacao.unidade_tramitacao_local: ml.em_tramitacao = False if tramitacao.status.indicador == "F" else True ml.save() lista_tramitacao.append(Tramitacao( @@ -1766,9 +1811,10 @@ class TramitacaoEmLoteForm(ModelForm): texto=tramitacao.texto, data_fim_prazo=tramitacao.data_fim_prazo, user=tramitacao.user, - ip=tramitacao.ip + ip=tramitacao.ip, + ultima_edicao=tramitacao.ultima_edicao )) - Tramitacao.objects.bulk_create(lista_tramitacao) + Tramitacao.objects.bulk_create(lista_tramitacao) return tramitacao @@ -1826,12 +1872,19 @@ class ProposicaoForm(FileFieldCheckMixin, forms.ModelForm): 'ano_materia', 'tipo_texto', 'hash_code', - 'numero_materia_futuro'] + 'numero_materia_futuro', + 'user', + 'ip', + 'ultima_edicao'] widgets = { 'descricao': widgets.Textarea(attrs={'rows': 4}), 'tipo': TipoProposicaoSelect(), - 'hash_code': forms.HiddenInput(), } + 'hash_code': forms.HiddenInput(), + 'user': forms.HiddenInput(), + 'ip': forms.HiddenInput(), + 'ultima_edicao': forms.HiddenInput() + } def __init__(self, *args, **kwargs): self.texto_articulado_proposicao = AppConfig.attr( @@ -1909,9 +1962,8 @@ class ProposicaoForm(FileFieldCheckMixin, forms.ModelForm): def clean_texto_original(self): texto_original = self.cleaned_data.get('texto_original', False) - if texto_original and texto_original.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Texto Original deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (texto_original.size/1024)/1024)) + if texto_original: + validar_arquivo(texto_original, "Texto Original") return texto_original @@ -2440,7 +2492,7 @@ class ConfirmarProposicaoForm(ProposicaoForm): # dados básicos doc = DocumentoAcessorio() doc.materia = proposicao.materia_de_vinculo - doc.autor = str(proposicao.autor) + doc.autor = str(proposicao.autor)[:200] doc.tipo = proposicao.tipo.tipo_conteudo_related doc.ementa = proposicao.descricao diff --git a/sapl/materia/migrations/0052_auto_20190712_1053.py b/sapl/materia/migrations/0052_auto_20190712_1053.py new file mode 100644 index 000000000..1fac8d7ae --- /dev/null +++ b/sapl/materia/migrations/0052_auto_20190712_1053.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-07-12 13:53 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.materia.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0051_auto_20190703_1414'), + ] + + operations = [ + migrations.AlterField( + model_name='documentoacessorio', + name='arquivo', + field=models.FileField(blank=True, max_length=255, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.materia.models.anexo_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Integral'), + ), + migrations.AlterField( + model_name='materialegislativa', + name='texto_original', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.materia.models.materia_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Original'), + ), + migrations.AlterField( + model_name='proposicao', + name='texto_original', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.materia.models.materia_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Original'), + ), + ] diff --git a/sapl/materia/migrations/0052_auto_20190731_1554.py b/sapl/materia/migrations/0052_auto_20190731_1554.py new file mode 100644 index 000000000..e78a0f58c --- /dev/null +++ b/sapl/materia/migrations/0052_auto_20190731_1554.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-07-31 18:54 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('materia', '0051_auto_20190703_1414'), + ] + + operations = [ + migrations.AddField( + model_name='proposicao', + name='ip', + field=models.CharField(blank=True, default='', max_length=30, verbose_name='IP'), + ), + migrations.AddField( + model_name='proposicao', + name='user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, verbose_name='Usuário'), + ), + ] diff --git a/sapl/materia/migrations/0053_proposicao_ultima_edicao.py b/sapl/materia/migrations/0053_proposicao_ultima_edicao.py new file mode 100644 index 000000000..0a89d6670 --- /dev/null +++ b/sapl/materia/migrations/0053_proposicao_ultima_edicao.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-07-31 22:26 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0052_auto_20190731_1554'), + ] + + operations = [ + migrations.AddField( + model_name='proposicao', + name='ultima_edicao', + field=models.DateTimeField(blank=True, null=True, verbose_name='Data e Hora da Edição'), + ), + ] diff --git a/sapl/materia/migrations/0054_merge_20190802_1112.py b/sapl/materia/migrations/0054_merge_20190802_1112.py new file mode 100644 index 000000000..2ee5d755e --- /dev/null +++ b/sapl/materia/migrations/0054_merge_20190802_1112.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-08-02 14:12 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0052_auto_20190712_1053'), + ('materia', '0053_proposicao_ultima_edicao'), + ] + + operations = [ + ] diff --git a/sapl/materia/migrations/0055_auto_20190816_0943.py b/sapl/materia/migrations/0055_auto_20190816_0943.py new file mode 100644 index 000000000..2f95add3c --- /dev/null +++ b/sapl/materia/migrations/0055_auto_20190816_0943.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-08-16 12:43 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0054_merge_20190802_1112'), + ] + + operations = [ + migrations.AlterModelOptions( + name='materialegislativa', + options={'ordering': ['-id'], 'permissions': (('can_access_impressos', 'Can access impressos'),), 'verbose_name': 'Matéria Legislativa', 'verbose_name_plural': 'Matérias Legislativas'}, + ), + ] diff --git a/sapl/materia/migrations/0056_auto_20190829_1206.py b/sapl/materia/migrations/0056_auto_20190829_1206.py new file mode 100644 index 000000000..965760412 --- /dev/null +++ b/sapl/materia/migrations/0056_auto_20190829_1206.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-08-29 15:06 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0055_auto_20190816_0943'), + ] + + operations = [ + migrations.AddField( + model_name='materialegislativa', + name='ultima_edicao', + field=models.DateTimeField(blank=True, null=True, verbose_name='Data e Hora da Edição'), + ), + migrations.AddField( + model_name='tramitacao', + name='ultima_edicao', + field=models.DateTimeField(blank=True, null=True, verbose_name='Data e Hora da Edição'), + ), + ] diff --git a/sapl/materia/migrations/0056_popula_materiaemtramitacao.py b/sapl/materia/migrations/0056_popula_materiaemtramitacao.py new file mode 100644 index 000000000..dfa4c0175 --- /dev/null +++ b/sapl/materia/migrations/0056_popula_materiaemtramitacao.py @@ -0,0 +1,23 @@ +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0055_auto_20190816_0943'), + ] + + operations = [ + migrations.RunSQL(""" + create or replace view materia_materiaemtramitacao as + select m.id as id, + m.id as materia_id, + t.id as tramitacao_id + from materia_materialegislativa m + inner join materia_tramitacao t on (m.id = t.materia_id) + where t.id = (select max(id) from materia_tramitacao where materia_id = m.id) + order by m.id DESC + """), + ] \ No newline at end of file diff --git a/sapl/materia/migrations/0057_materiaemtramitacao.py b/sapl/materia/migrations/0057_materiaemtramitacao.py new file mode 100644 index 000000000..95953f50b --- /dev/null +++ b/sapl/materia/migrations/0057_materiaemtramitacao.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-08-27 20:13 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0056_popula_materiaemtramitacao'), + ] + + operations = [ + migrations.CreateModel( + name='MateriaEmTramitacao', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ], + options={ + 'db_table': 'materia_materiaemtramitacao', + 'managed': False, + }, + ), + ] diff --git a/sapl/materia/migrations/0058_auto_20191001_1115.py b/sapl/materia/migrations/0058_auto_20191001_1115.py new file mode 100644 index 000000000..88b375b42 --- /dev/null +++ b/sapl/materia/migrations/0058_auto_20191001_1115.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-01 14:15 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.materia.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0057_materiaemtramitacao'), + ] + + operations = [ + migrations.AlterField( + model_name='materialegislativa', + name='texto_original', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.materia.models.materia_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Original'), + ), + migrations.AlterField( + model_name='proposicao', + name='texto_original', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.materia.models.materia_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Original'), + ), + ] diff --git a/sapl/materia/migrations/0058_auto_20191001_1450.py b/sapl/materia/migrations/0058_auto_20191001_1450.py new file mode 100644 index 000000000..0abbd9870 --- /dev/null +++ b/sapl/materia/migrations/0058_auto_20191001_1450.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-01 17:50 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0057_materiaemtramitacao'), + ] + + operations = [ + migrations.AlterField( + model_name='tramitacao', + name='turno', + field=models.CharField(blank=True, choices=[('P', 'Primeiro'), ('S', 'Segundo'), ('U', 'Único'), ('L', 'Suplementar'), ('F', 'Final'), ('A', 'Votação Única em Regime de Urgência'), ('B', '1ª Votação'), ('C', '2ª e 3ª Votações'), ('D', 'Deliberação'), ('G', '1ª e 2ª Votações'), ('E', '1ª e 2ª Votações em Regime de Urgência')], max_length=1, verbose_name='Turno'), + ), + ] diff --git a/sapl/materia/migrations/0058_merge_20190926_1250.py b/sapl/materia/migrations/0058_merge_20190926_1250.py new file mode 100644 index 000000000..aae54b049 --- /dev/null +++ b/sapl/materia/migrations/0058_merge_20190926_1250.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-09-26 15:50 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0057_materiaemtramitacao'), + ('materia', '0056_auto_20190829_1206'), + ] + + operations = [ + ] diff --git a/sapl/materia/migrations/0059_merge_20191003_0854.py b/sapl/materia/migrations/0059_merge_20191003_0854.py new file mode 100644 index 000000000..efe0351ac --- /dev/null +++ b/sapl/materia/migrations/0059_merge_20191003_0854.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-03 11:54 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0058_auto_20191001_1450'), + ('materia', '0058_auto_20191001_1115'), + ] + + operations = [ + ] diff --git a/sapl/materia/migrations/0060_auto_20190930_1136.py b/sapl/materia/migrations/0060_auto_20190930_1136.py new file mode 100644 index 000000000..0aeed586f --- /dev/null +++ b/sapl/materia/migrations/0060_auto_20190930_1136.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-09-30 14:36 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0059_merge_20191003_0854'), + ] + + operations = [ + migrations.AlterField( + model_name='tramitacao', + name='texto', + field=models.TextField(blank=True, verbose_name='Texto da Ação'), + ), + ] diff --git a/sapl/materia/migrations/0061_auto_20191120_1440.py b/sapl/materia/migrations/0061_auto_20191120_1440.py new file mode 100644 index 000000000..84b0f8735 --- /dev/null +++ b/sapl/materia/migrations/0061_auto_20191120_1440.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-11-20 17:40 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.materia.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0060_auto_20190930_1136'), + ] + + operations = [ + migrations.AlterField( + model_name='documentoacessorio', + name='arquivo', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.materia.models.anexo_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Integral'), + ), + migrations.AlterField( + model_name='documentoacessorio', + name='autor', + field=models.CharField(blank=True, max_length=200, verbose_name='Autor'), + ), + migrations.AlterField( + model_name='materialegislativa', + name='texto_original', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.materia.models.materia_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Original'), + ), + migrations.AlterField( + model_name='proposicao', + name='texto_original', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.materia.models.materia_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Original'), + ), + ] diff --git a/sapl/materia/migrations/0061_merge_20191009_1814.py b/sapl/materia/migrations/0061_merge_20191009_1814.py new file mode 100644 index 000000000..96ce48366 --- /dev/null +++ b/sapl/materia/migrations/0061_merge_20191009_1814.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-09 21:14 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0060_auto_20190930_1136'), + ('materia', '0058_merge_20190926_1250'), + ] + + operations = [ + ] diff --git a/sapl/materia/migrations/0062_merge_20191209_1531.py b/sapl/materia/migrations/0062_merge_20191209_1531.py new file mode 100644 index 000000000..857e34e29 --- /dev/null +++ b/sapl/materia/migrations/0062_merge_20191209_1531.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-12-09 18:31 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0061_auto_20191120_1440'), + ('materia', '0061_merge_20191009_1814'), + ] + + operations = [ + ] diff --git a/sapl/materia/migrations/0063_auto_20191220_1351.py b/sapl/materia/migrations/0063_auto_20191220_1351.py new file mode 100644 index 000000000..77194a87c --- /dev/null +++ b/sapl/materia/migrations/0063_auto_20191220_1351.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-12-20 16:51 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0062_merge_20191209_1531'), + ] + + operations = [ + migrations.AlterField( + model_name='pautareuniao', + name='materia', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='materia_set', to='materia.MateriaLegislativa', verbose_name='Matéria'), + ), + ] diff --git a/sapl/materia/migrations/0064_auto_20200114_1121.py b/sapl/materia/migrations/0064_auto_20200114_1121.py new file mode 100644 index 000000000..13e8b08d0 --- /dev/null +++ b/sapl/materia/migrations/0064_auto_20200114_1121.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2020-01-14 14:21 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0063_auto_20191220_1351'), + ] + + operations = [ + migrations.AlterField( + model_name='materialegislativa', + name='ano', + field=models.PositiveSmallIntegerField(choices=[(2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'), + ), + migrations.AlterField( + model_name='materialegislativa', + name='ano_origem_externa', + field=models.PositiveSmallIntegerField(blank=True, choices=[(2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], null=True, verbose_name='Ano'), + ), + migrations.AlterField( + model_name='numeracao', + name='ano_materia', + field=models.PositiveSmallIntegerField(choices=[(2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'), + ), + migrations.AlterField( + model_name='proposicao', + name='ano', + field=models.PositiveSmallIntegerField(blank=True, choices=[(2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], default=None, null=True, verbose_name='Ano'), + ), + ] diff --git a/sapl/materia/models.py b/sapl/materia/models.py index d9a5e344a..b3fff4851 100644 --- a/sapl/materia/models.py +++ b/sapl/materia/models.py @@ -18,7 +18,8 @@ from sapl.parlamentares.models import Parlamentar #from sapl.protocoloadm.models import Protocolo from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, SaplGenericForeignKey, SaplGenericRelation, restringe_tipos_de_arquivo_txt, - texto_upload_path, get_settings_auth_user_model) + texto_upload_path, get_settings_auth_user_model, + OverwriteStorage) EM_TRAMITACAO = [(1, 'Sim'), @@ -256,10 +257,12 @@ class MateriaLegislativa(models.Model): 'materia_principal', 'materia_anexada')) texto_original = models.FileField( + max_length=300, blank=True, null=True, upload_to=materia_upload_path, verbose_name=_('Texto Original'), + storage=OverwriteStorage(), validators=[restringe_tipos_de_arquivo_txt]) texto_articulado = GenericRelation( @@ -292,12 +295,16 @@ class MateriaLegislativa(models.Model): blank=True, default='' ) + ultima_edicao = models.DateTimeField( + verbose_name=_('Data e Hora da Edição'), + blank=True, null=True + ) class Meta: verbose_name = _('Matéria Legislativa') verbose_name_plural = _('Matérias Legislativas') unique_together = (("tipo", "numero", "ano"),) - + ordering = ['-id'] permissions = (("can_access_impressos", "Can access impressos"),) def __str__(self): @@ -335,16 +342,18 @@ class MateriaLegislativa(models.Model): return '' def delete(self, using=None, keep_parents=False): - if self.texto_original: - self.texto_original.delete() + texto_original = self.texto_original + result = super().delete(using=using, keep_parents=keep_parents) + + if texto_original: + texto_original.delete(save=False) for p in self.proposicao.all(): p.conteudo_gerado_related = None p.cancelado = True p.save() - return models.Model.delete( - self, using=using, keep_parents=keep_parents) + return result def save(self, force_insert=False, force_update=False, using=None, update_fields=None): @@ -424,6 +433,7 @@ class PautaReuniao(models.Model): ) materia = models.ForeignKey( MateriaLegislativa, related_name='materia_set', + on_delete=models.PROTECT, verbose_name=_('Matéria') ) @@ -436,7 +446,7 @@ class PautaReuniao(models.Model): ' - Matéria: %(materia)s') % { 'reuniao': self.reuniao, 'materia': self.materia - } + } @reversion.register() @@ -485,7 +495,8 @@ class AssuntoMateria(models.Model): @reversion.register() class DespachoInicial(models.Model): materia = models.ForeignKey(MateriaLegislativa, on_delete=models.CASCADE) - comissao = models.ForeignKey(Comissao, on_delete=models.CASCADE, verbose_name="Comissão") + comissao = models.ForeignKey( + Comissao, on_delete=models.CASCADE, verbose_name="Comissão") class Meta: verbose_name = _('Despacho Inicial') @@ -529,15 +540,16 @@ class DocumentoAcessorio(models.Model): data = models.DateField(blank=True, null=True, default=None, verbose_name=_('Data')) autor = models.CharField( - max_length=50, blank=True, verbose_name=_('Autor')) + max_length=200, blank=True, verbose_name=_('Autor')) ementa = models.TextField(blank=True, verbose_name=_('Ementa')) indexacao = models.TextField(blank=True) arquivo = models.FileField( blank=True, null=True, - max_length=255, + max_length=300, upload_to=anexo_upload_path, verbose_name=_('Texto Integral'), + storage=OverwriteStorage(), validators=[restringe_tipos_de_arquivo_txt]) proposicao = GenericRelation( @@ -556,19 +568,22 @@ class DocumentoAcessorio(models.Model): return _('%(tipo)s - %(nome)s de %(data)s por %(autor)s') % { 'tipo': self.tipo, 'nome': self.nome, - 'data': self.data, + 'data': formats.date_format( + self.data, "SHORT_DATE_FORMAT") if self.data else '', 'autor': self.autor} def delete(self, using=None, keep_parents=False): - if self.arquivo: - self.arquivo.delete() + arquivo = self.arquivo + result = super().delete(using=using, keep_parents=keep_parents) + + if arquivo: + arquivo.delete(save=False) for p in self.proposicao.all(): p.conteudo_gerado_related = None p.save() - return models.Model.delete( - self, using=using, keep_parents=keep_parents) + return result def save(self, force_insert=False, force_update=False, using=None, update_fields=None): @@ -709,11 +724,11 @@ class Relatoria(models.Model): return _('%(materia)s - %(tipo)s - %(data)s') % { 'materia': self.materia, 'tipo': self.tipo_fim_relatoria, - 'data': self.data_designacao_relator.strftime("%d/%m/%Y")} + 'data': self.data_designacao_relator.strftime("%d/%m/%Y")} else: return _('%(materia)s - %(data)s') % { - 'materia': self.materia, - 'data': self.data_designacao_relator.strftime("%d/%m/%Y")} + 'materia': self.materia, + 'data': self.data_designacao_relator.strftime("%d/%m/%Y")} @reversion.register() @@ -797,10 +812,12 @@ class Proposicao(models.Model): ('I', 'Incorporada')), verbose_name=_('Status Proposição')) texto_original = models.FileField( + max_length=300, upload_to=materia_upload_path, blank=True, null=True, verbose_name=_('Texto Original'), + storage=OverwriteStorage(), validators=[restringe_tipos_de_arquivo_txt]) texto_articulado = GenericRelation( @@ -833,6 +850,24 @@ class Proposicao(models.Model): documento_gerado = models.ForeignKey( DocumentoAcessorio, blank=True, null=True)""" + user = models.ForeignKey( + get_settings_auth_user_model(), + verbose_name=_('Usuário'), + on_delete=models.PROTECT, + null=True, + blank=True + ) + ip = models.CharField( + verbose_name=_('IP'), + max_length=30, + blank=True, + default='' + ) + ultima_edicao = models.DateTimeField( + verbose_name=_('Data e Hora da Edição'), + blank=True, null=True + ) + @property def perfis(self): return self.tipo.perfis.all() @@ -884,11 +919,13 @@ class Proposicao(models.Model): )} def delete(self, using=None, keep_parents=False): - if self.texto_original: - self.texto_original.delete() + texto_original = self.texto_original + result = super().delete(using=using, keep_parents=keep_parents) - return models.Model.delete( - self, using=using, keep_parents=keep_parents) + if texto_original: + texto_original.delete(save=False) + + return result def save(self, force_insert=False, force_update=False, using=None, update_fields=None): @@ -996,12 +1033,13 @@ class Tramitacao(models.Model): ('U', 'unico', _('Único')), ('L', 'suplementar', _('Suplementar')), ('F', 'final', _('Final')), - ('A', 'votacao_unica', _('Votação única em Regime de Urgência')), + ('A', 'votacao_unica', _('Votação Única em Regime de Urgência')), ('B', 'primeira_votacao', _('1ª Votação')), - ('C', 'segunda_terceira_votacao', _('2ª e 3ª Votação')), + ('C', 'segunda_terceira_votacao', _('2ª e 3ª Votações')), ('D', 'deliberacao', _('Deliberação')), + ('G', 'primeria_segunda_votacoes', _('1ª e 2ª Votações')), ('E', 'primeira_segunda_votacao_urgencia', _( - '1ª e 2ª votações em regime de urgência')) + '1ª e 2ª Votações em Regime de Urgência')), ) @@ -1038,7 +1076,7 @@ class Tramitacao(models.Model): turno = models.CharField( max_length=1, blank=True, verbose_name=_('Turno'), choices=TURNO_CHOICES) - texto = models.TextField(verbose_name=_('Texto da Ação')) + texto = models.TextField(verbose_name=_('Texto da Ação'), blank=True) data_fim_prazo = models.DateField( blank=True, null=True, verbose_name=_('Data Fim Prazo')) user = models.ForeignKey(get_settings_auth_user_model(), @@ -1050,6 +1088,10 @@ class Tramitacao(models.Model): max_length=30, blank=True, default='') + ultima_edicao = models.DateTimeField( + verbose_name=_('Data e Hora da Edição'), + blank=True, null=True + ) class Meta: verbose_name = _('Tramitação') @@ -1060,3 +1102,15 @@ class Tramitacao(models.Model): 'materia': self.materia, 'status': self.status, 'data': self.data_tramitacao.strftime("%d/%m/%Y")} + + +class MateriaEmTramitacao(models.Model): + materia = models.ForeignKey(MateriaLegislativa, on_delete=models.DO_NOTHING) + tramitacao = models.ForeignKey(Tramitacao, on_delete=models.DO_NOTHING) + + class Meta: + managed = False + db_table = "materia_materiaemtramitacao" + + def __str__(self): + return '{}/{}'.format(self.materia, self.tramitacao) diff --git a/sapl/materia/tests/test_materia.py b/sapl/materia/tests/test_materia.py index dabf29bed..c6a4f542d 100644 --- a/sapl/materia/tests/test_materia.py +++ b/sapl/materia/tests/test_materia.py @@ -521,9 +521,7 @@ def test_form_errors_tramitacao(admin_client): ['Este campo é obrigatório.']) assert (response.context_data['form'].errors[ 'unidade_tramitacao_destino'] == ['Este campo é obrigatório.']) - assert (response.context_data['form'].errors['texto'] == - ['Este campo é obrigatório.']) - + @pytest.mark.django_db(transaction=False) def test_form_errors_relatoria(admin_client): diff --git a/sapl/materia/tests/test_materia_form.py b/sapl/materia/tests/test_materia_form.py index 215f114a2..6392ca05b 100644 --- a/sapl/materia/tests/test_materia_form.py +++ b/sapl/materia/tests/test_materia_form.py @@ -206,13 +206,12 @@ def test_valida_campos_obrigatorios_tramitacao_form(): errors = form.errors assert errors['unidade_tramitacao_local'] == [_('Este campo é obrigatório.')] - assert errors['texto'] == [_('Este campo é obrigatório.')] assert errors['status'] == [_('Este campo é obrigatório.')] assert errors['data_tramitacao'] == [_('Este campo é obrigatório.')] assert errors['unidade_tramitacao_destino'] == [_('Este campo é obrigatório.')] assert errors['urgente'] == [_('Este campo é obrigatório.')] - assert len(errors) == 6 + assert len(errors) == 5 @pytest.mark.django_db(transaction=False) @@ -224,13 +223,12 @@ def test_valida_campos_obrigatorios_tramitacao_update_form(): errors = form.errors assert errors['unidade_tramitacao_local'] == [_('Este campo é obrigatório.')] - assert errors['texto'] == [_('Este campo é obrigatório.')] assert errors['status'] == [_('Este campo é obrigatório.')] assert errors['data_tramitacao'] == [_('Este campo é obrigatório.')] assert errors['unidade_tramitacao_destino'] == [_('Este campo é obrigatório.')] assert errors['urgente'] == [_('Este campo é obrigatório.')] - assert len(errors) == 6 + assert len(errors) == 5 @pytest.mark.django_db(transaction=False) diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 21c590349..7cb3372d0 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1,13 +1,17 @@ -from datetime import datetime + import itertools import logging import os -from random import choice +import sapl import shutil -from string import ascii_letters, digits import tempfile +import weasyprint from crispy_forms.layout import HTML +from datetime import datetime +from random import choice +from string import ascii_letters, digits + from django.conf import settings from django.contrib import messages from django.contrib.auth.decorators import permission_required @@ -18,65 +22,53 @@ from django.db.models import Max, Q from django.http import HttpResponse, JsonResponse from django.http.response import Http404, HttpResponseRedirect from django.shortcuts import get_object_or_404, redirect -from django.template import RequestContext, loader +from django.template import loader, RequestContext from django.utils import formats, timezone from django.utils.translation import ugettext_lazy as _ -from django.views.generic import ListView, TemplateView, CreateView, UpdateView +from django.views.generic import CreateView, ListView, TemplateView, UpdateView from django.views.generic.base import RedirectView from django.views.generic.edit import FormView + from django_filters.views import FilterView -import weasyprint -import weasyprint -import sapl from sapl.base.email_utils import do_envia_email_confirmacao from sapl.base.models import Autor, CasaLegislativa, AppConfig as BaseAppConfig -from sapl.base.signals import tramitacao_signal +from sapl.base.signals import tramitacao_signal, post_delete_signal, post_save_signal from sapl.comissoes.models import Comissao, Participacao, Composicao -from sapl.compilacao.models import (STATUS_TA_IMMUTABLE_RESTRICT, - STATUS_TA_PRIVATE) +from sapl.compilacao.models import STATUS_TA_IMMUTABLE_RESTRICT, STATUS_TA_PRIVATE from sapl.compilacao.views import IntegracaoTaView -from sapl.crispy_layout_mixin import SaplFormHelper -from sapl.crispy_layout_mixin import SaplFormLayout, form_actions -from sapl.crud.base import (RP_DETAIL, RP_LIST, Crud, CrudAux, - MasterDetailCrud, - PermissionRequiredForAppCrudMixin, make_pagination) -from sapl.materia.forms import (AnexadaForm, AutoriaForm, - AutoriaMultiCreateForm, - ConfirmarProposicaoForm, - DevolverProposicaoForm, LegislacaoCitadaForm, - OrgaoForm, ProposicaoForm, TipoProposicaoForm, - TramitacaoForm, TramitacaoUpdateForm, MateriaPesquisaSimplesForm, - DespachoInicialCreateForm) +from sapl.crispy_layout_mixin import form_actions, SaplFormHelper, SaplFormLayout +from sapl.crud.base import (Crud, CrudAux, make_pagination, MasterDetailCrud, + PermissionRequiredForAppCrudMixin, RP_DETAIL, RP_LIST,) +from sapl.materia.forms import (AnexadaForm, AutoriaForm, AutoriaMultiCreateForm, + ConfirmarProposicaoForm, DevolverProposicaoForm, + DespachoInicialCreateForm, LegislacaoCitadaForm, + MateriaPesquisaSimplesForm, OrgaoForm, ProposicaoForm, + TipoProposicaoForm, TramitacaoForm, TramitacaoUpdateForm) from sapl.norma.models import LegislacaoCitada from sapl.parlamentares.models import Legislatura from sapl.protocoloadm.models import Protocolo -from sapl.settings import MEDIA_ROOT, MAX_DOC_UPLOAD_SIZE -from sapl.utils import (YES_NO_CHOICES, autor_label, autor_modal, SEPARADOR_HASH_PROPOSICAO, - gerar_hash_arquivo, get_base_url, get_client_ip, - get_mime_type_from_file_extension, montar_row_autor, - show_results_filter_set, mail_service_configured, lista_anexados) +from sapl.settings import MAX_DOC_UPLOAD_SIZE, MEDIA_ROOT +from sapl.utils import (autor_label, autor_modal, gerar_hash_arquivo, get_base_url, + get_client_ip, get_mime_type_from_file_extension, lista_anexados, + mail_service_configured, montar_row_autor, SEPARADOR_HASH_PROPOSICAO, + show_results_filter_set, YES_NO_CHOICES) from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm, - AnexadaEmLoteFilterSet, - AdicionarVariasAutoriasFilterSet, DespachoInicialForm, - DocumentoAcessorioForm, EtiquetaPesquisaForm, - FichaPesquisaForm, FichaSelecionaForm, MateriaAssuntoForm, - MateriaLegislativaFilterSet, MateriaLegislativaForm, + AnexadaEmLoteFilterSet, AdicionarVariasAutoriasFilterSet, + compara_tramitacoes_mat, DespachoInicialForm, DocumentoAcessorioForm, + EtiquetaPesquisaForm, ExcluirTramitacaoEmLote, FichaPesquisaForm, + FichaSelecionaForm, filtra_tramitacao_destino, + filtra_tramitacao_destino_and_status, filtra_tramitacao_status, + MateriaAssuntoForm, MateriaLegislativaFilterSet, MateriaLegislativaForm, MateriaSimplificadaForm, PrimeiraTramitacaoEmLoteFilterSet, - ReceberProposicaoForm, RelatoriaForm, - TramitacaoEmLoteFilterSet, UnidadeTramitacaoForm, - filtra_tramitacao_destino, - filtra_tramitacao_destino_and_status, - filtra_tramitacao_status, - ExcluirTramitacaoEmLote, compara_tramitacoes_mat, - TramitacaoEmLoteForm) -from .models import (AcompanhamentoMateria, Anexada, AssuntoMateria, Autoria, - DespachoInicial, DocumentoAcessorio, MateriaAssunto, - MateriaLegislativa, Numeracao, Orgao, Origem, Proposicao, - RegimeTramitacao, Relatoria, StatusTramitacao, - TipoDocumento, TipoFimRelatoria, TipoMateriaLegislativa, - TipoProposicao, Tramitacao, UnidadeTramitacao) + ReceberProposicaoForm, RelatoriaForm, TramitacaoEmLoteFilterSet, + TramitacaoEmLoteForm, UnidadeTramitacaoForm) +from .models import (AcompanhamentoMateria, Anexada, AssuntoMateria, Autoria, DespachoInicial, + DocumentoAcessorio, MateriaAssunto, MateriaLegislativa, Numeracao, Orgao, + Origem, Proposicao, RegimeTramitacao, Relatoria, StatusTramitacao, + TipoDocumento, TipoFimRelatoria, TipoMateriaLegislativa, TipoProposicao, + Tramitacao, UnidadeTramitacao) AssuntoMateriaCrud = CrudAux.build(AssuntoMateria, 'assunto_materia') @@ -231,7 +223,16 @@ class CriarProtocoloMateriaView(CreateView): return context def form_valid(self, form): - materia = form.save() + materia = form.save() + + materia.user = self.request.user + materia.ip = get_client_ip(self.request) + + tz = timezone.get_current_timezone() + materia.ultima_edicao = tz.localize(datetime.now()) + + materia.save() + username = self.request.user.username try: @@ -772,12 +773,18 @@ class ProposicaoCrud(Crud): context['title'] = '%s (%s)' % ( self.object, self.object.autor) + + context['user'] = self.request.user + context['proposicao'] = Proposicao.objects.get( + pk=self.kwargs['pk'] + ) return context def get(self, request, *args, **kwargs): action = request.GET.get('action', '') - username = request.user.username + user = request.user + username = user.username if not action: return Crud.DetailView.get(self, request, *args, **kwargs) @@ -785,7 +792,7 @@ class ProposicaoCrud(Crud): p = Proposicao.objects.get(id=kwargs['pk']) msg_error = '' - if p: + if p and p.autor.user == user: if action == 'send': if p.data_envio and p.data_recebimento: msg_error = _('Proposição já foi enviada e recebida.') @@ -940,6 +947,40 @@ class ProposicaoCrud(Crud): class UpdateView(BaseLocalMixin, Crud.UpdateView): logger = logging.getLogger(__name__) + form_class = ProposicaoForm + + def form_valid(self, form): + tz = timezone.get_current_timezone() + + objeto_antigo = Proposicao.objects.get( + pk=self.kwargs['pk'] + ) + dict_objeto_antigo = objeto_antigo.__dict__ + + tipo_texto = self.request.POST.get('tipo_texto', '') + if tipo_texto=='D' and objeto_antigo.texto_articulado.exists() or tipo_texto=='T' and not objeto_antigo.texto_articulado.exists(): + self.object.user = self.request.user + self.object.ip = get_client_ip(self.request) + self.object.ultima_edicao = tz.localize(datetime.now()) + self.object.save() + + self.object = form.save() + dict_objeto_novo = self.object.__dict__ + + atributos = [ + 'tipo_id', 'descricao', 'observacao', 'texto_original', + 'materia_de_vinculo_id' + ] + + for atributo in atributos: + if dict_objeto_antigo[atributo] != dict_objeto_novo[atributo]: + self.object.user = self.request.user + self.object.ip = get_client_ip(self.request) + self.object.ultima_edicao = tz.localize(datetime.now()) + self.object.save() + break + + return super().form_valid(form) def _action_is_valid(self, request, *args, **kwargs): @@ -994,6 +1035,17 @@ class ProposicaoCrud(Crud): form_class = ProposicaoForm layout_key = None + def get_initial(self): + initial = super().get_initial() + + initial['user'] = self.request.user + initial['ip'] = get_client_ip(self.request) + + tz = timezone.get_current_timezone() + initial['ultima_edicao'] = tz.localize(datetime.now()) + + return initial + def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['subnav_template_name'] = '' @@ -1192,6 +1244,10 @@ class TramitacaoCrud(MasterDetailCrud): initial['data_tramitacao'] = timezone.now().date() initial['ip'] = get_client_ip(self.request) initial['user'] = self.request.user + + tz = timezone.get_current_timezone() + initial['ultima_edicao'] = tz.localize(datetime.now()) + return initial def get_context_data(self, **kwargs): @@ -1258,28 +1314,20 @@ class TramitacaoCrud(MasterDetailCrud): layout_key = 'TramitacaoUpdate' - def form_valid(self, form): - dict_objeto_antigo = Tramitacao.objects.get( - pk=self.kwargs['pk']).__dict__ - - self.object = form.save() - dict_objeto_novo = self.object.__dict__ + def get_initial(self): + initial = super(UpdateView, self).get_initial() + + initial['ip'] = get_client_ip(self.request) + initial['user'] = self.request.user - user = self.request.user + tz = timezone.get_current_timezone() + initial['ultima_edicao'] = tz.localize(datetime.now()) - atributos = [ - 'data_tramitacao', 'unidade_tramitacao_destino_id', 'status_id', 'texto', - 'data_encaminhamento', 'data_fim_prazo', 'urgente', 'turno' - ] + return initial - # Se não houve qualquer alteração em um dos dados, mantém o usuário - # e ip - for atributo in atributos: - if dict_objeto_antigo[atributo] != dict_objeto_novo[atributo]: - self.object.user = user - self.object.ip = get_client_ip(self.request) - self.object.save() - break + def form_valid(self, form): + self.object = form.save() + user = self.request.user try: self.logger.debug("user=" + user.username + ". Tentando enviar Tramitacao (sender={}, post={}, request={}" @@ -1331,7 +1379,7 @@ class TramitacaoCrud(MasterDetailCrud): messages.add_message(request, messages.ERROR, msg) return HttpResponseRedirect(url) else: - tramitacoes_deletar = [tramitacao.id] + tramitacoes_deletar = [tramitacao] if materia.tramitacao_set.count() == 0: materia.em_tramitacao = False materia.save() @@ -1342,11 +1390,18 @@ class TramitacaoCrud(MasterDetailCrud): for ma in mat_anexadas: tram_anexada = ma.tramitacao_set.last() if compara_tramitacoes_mat(tram_anexada, tramitacao): - tramitacoes_deletar.append(tram_anexada.id) + tramitacoes_deletar.append(tram_anexada) if ma.tramitacao_set.count() == 0: ma.em_tramitacao = False ma.save() - Tramitacao.objects.filter(id__in=tramitacoes_deletar).delete() + Tramitacao.objects.filter(id__in=[t.id for t in tramitacoes_deletar]).delete() + + # TODO: otimizar para passar a lista de matérias + for tramitacao in tramitacoes_deletar: + post_delete_signal.send(sender=None, + instance=tramitacao, + operation='C', + request=self.request) return HttpResponseRedirect(url) @@ -1668,6 +1723,9 @@ class MateriaLegislativaCrud(Crud): initial['user'] = self.request.user initial['ip'] = get_client_ip(self.request) + tz = timezone.get_current_timezone() + initial['ultima_edicao'] = tz.localize(datetime.now()) + return initial @property @@ -1699,6 +1757,10 @@ class MateriaLegislativaCrud(Crud): if dict_objeto_antigo[atributo] != dict_objeto_novo[atributo]: self.object.user = self.request.user self.object.ip = get_client_ip(self.request) + + tz = timezone.get_current_timezone() + self.object.ultima_edicao = tz.localize(datetime.now()) + self.object.save() break @@ -1859,8 +1921,7 @@ class MateriaLegislativaPesquisaView(FilterView): paginate_by = 50 def get_filterset_kwargs(self, filterset_class): - super(MateriaLegislativaPesquisaView, - self).get_filterset_kwargs(filterset_class) + super().get_filterset_kwargs(filterset_class) kwargs = {'data': self.request.GET or None} @@ -1916,8 +1977,7 @@ class MateriaLegislativaPesquisaView(FilterView): return kwargs def get_context_data(self, **kwargs): - context = super(MateriaLegislativaPesquisaView, - self).get_context_data(**kwargs) + context = super().get_context_data(**kwargs) context['title'] = _('Pesquisar Matéria Legislativa') @@ -2350,6 +2410,9 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): def post(self, request, *args, **kwargs): user = request.user ip = get_client_ip(request) + + tz = timezone.get_current_timezone() + ultima_edicao = tz.localize(datetime.now()) materias_ids = request.POST.getlist('materias') if not materias_ids: @@ -2359,7 +2422,8 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): form = TramitacaoEmLoteForm(request.POST, initial= {'materias': materias_ids, - 'user': user, 'ip':ip}) + 'user': user, 'ip':ip, + 'ultima_edicao': ultima_edicao}) if form.is_valid(): form.save() @@ -2603,9 +2667,9 @@ class MateriaPesquisaSimplesView(PermissionRequiredMixin, FormView): kwargs.update({'tipo': form.cleaned_data['tipo_materia']}) if form.cleaned_data.get('data_inicial'): - kwargs.update({'data__gte': form.cleaned_data['data_inicial'], - 'data__lte': form.cleaned_data['data_final']}) - + kwargs.update({'data_apresentacao__gte': form.cleaned_data['data_inicial'], + 'data_apresentacao__lte': form.cleaned_data['data_final']}) + materias = MateriaLegislativa.objects.filter( **kwargs).order_by('-numero', 'ano') diff --git a/sapl/norma/forms.py b/sapl/norma/forms.py index 803cd2751..2be8315a7 100644 --- a/sapl/norma/forms.py +++ b/sapl/norma/forms.py @@ -1,27 +1,28 @@ - +import django_filters import logging -from sapl.crispy_layout_mixin import SaplFormHelper from crispy_forms.layout import Fieldset, Layout + from django import forms from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.db import models from django.db.models import Q -from django.forms import ModelForm, widgets, ModelChoiceField +from django.forms import ModelChoiceField, ModelForm, widgets from django.utils import timezone from django.utils.translation import ugettext_lazy as _ -import django_filters from sapl.base.models import Autor, TipoAutor -from sapl.crispy_layout_mixin import form_actions, to_row +from sapl.crispy_layout_mixin import form_actions, SaplFormHelper, to_row from sapl.materia.forms import choice_anos_com_materias -from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa -from sapl.settings import MAX_DOC_UPLOAD_SIZE -from sapl.utils import NormaPesquisaOrderingFilter, RangeWidgetOverride, \ - choice_anos_com_normas, FilterOverridesMetaMixin, FileFieldCheckMixin, ANO_CHOICES +from sapl.materia.models import (MateriaLegislativa, + TipoMateriaLegislativa) +from sapl.utils import (ANO_CHOICES, choice_anos_com_normas, + FileFieldCheckMixin, FilterOverridesMetaMixin, + NormaPesquisaOrderingFilter, RangeWidgetOverride, + validar_arquivo) -from .models import (AnexoNormaJuridica, AssuntoNorma, NormaJuridica, NormaRelacionada, - TipoNormaJuridica, AutoriaNorma) +from .models import (AnexoNormaJuridica, AssuntoNorma, AutoriaNorma, + NormaJuridica, NormaRelacionada, TipoNormaJuridica) def get_esferas(): @@ -134,10 +135,13 @@ class NormaJuridicaForm(FileFieldCheckMixin, ModelForm): 'texto_integral', 'assuntos', 'user', - 'ip'] + 'ip', + 'ultima_edicao'] + widgets = {'assuntos': widgets.CheckboxSelectMultiple, 'user': forms.HiddenInput(), - 'ip': forms.HiddenInput()} + 'ip': forms.HiddenInput(), + 'ultima_edicao': forms.HiddenInput()} def clean(self): @@ -200,9 +204,8 @@ class NormaJuridicaForm(FileFieldCheckMixin, ModelForm): texto_integral = self.cleaned_data.get('texto_integral', False) - if texto_integral and texto_integral.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Texto Integral deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (texto_integral.size/1024)/1024)) + if texto_integral: + validar_arquivo(texto_integral, "Texto Integral") return texto_integral @@ -266,6 +269,14 @@ class AutoriaNormaForm(ModelForm): class AnexoNormaJuridicaForm(FileFieldCheckMixin, ModelForm): + + logger = logging.getLogger(__name__) + + anexo_arquivo = forms.FileField( + required=True, + label="Arquivo Anexo" + ) + class Meta: model = AnexoNormaJuridica fields = ['norma', 'anexo_arquivo', 'assunto_anexo'] @@ -273,8 +284,6 @@ class AnexoNormaJuridicaForm(FileFieldCheckMixin, ModelForm): 'norma': forms.HiddenInput(), } - logger = logging.getLogger(__name__) - def clean(self): cleaned_data = super(AnexoNormaJuridicaForm, self).clean() @@ -283,9 +292,8 @@ class AnexoNormaJuridicaForm(FileFieldCheckMixin, ModelForm): anexo_arquivo = self.cleaned_data.get('anexo_arquivo', False) - if anexo_arquivo and anexo_arquivo.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O Arquivo Anexo deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (anexo_arquivo.size/1024)/1024)) + if anexo_arquivo: + validar_arquivo(anexo_arquivo, "Arquivo Anexo") return cleaned_data diff --git a/sapl/norma/migrations/0026_auto_20190712_1053.py b/sapl/norma/migrations/0026_auto_20190712_1053.py new file mode 100644 index 000000000..592e8a177 --- /dev/null +++ b/sapl/norma/migrations/0026_auto_20190712_1053.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-07-12 13:53 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.norma.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('norma', '0025_auto_20190704_1403'), + ] + + operations = [ + migrations.AlterField( + model_name='anexonormajuridica', + name='anexo_arquivo', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.norma.models.norma_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Arquivo Anexo'), + ), + migrations.AlterField( + model_name='normajuridica', + name='texto_integral', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.norma.models.norma_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Integral'), + ), + ] diff --git a/sapl/norma/migrations/0027_auto_20191001_1115.py b/sapl/norma/migrations/0027_auto_20191001_1115.py new file mode 100644 index 000000000..c72cc97fc --- /dev/null +++ b/sapl/norma/migrations/0027_auto_20191001_1115.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-01 14:15 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.norma.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('norma', '0026_auto_20190712_1053'), + ] + + operations = [ + migrations.AlterField( + model_name='anexonormajuridica', + name='anexo_arquivo', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.norma.models.norma_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Arquivo Anexo'), + ), + migrations.AlterField( + model_name='normajuridica', + name='texto_integral', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.norma.models.norma_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Integral'), + ), + ] diff --git a/sapl/norma/migrations/0027_normajuridica_ultima_edicao.py b/sapl/norma/migrations/0027_normajuridica_ultima_edicao.py new file mode 100644 index 000000000..c01ff22a5 --- /dev/null +++ b/sapl/norma/migrations/0027_normajuridica_ultima_edicao.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-08-29 14:41 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('norma', '0026_auto_20190712_1053'), + ] + + operations = [ + migrations.AddField( + model_name='normajuridica', + name='ultima_edicao', + field=models.DateTimeField(blank=True, null=True, verbose_name='Data e Hora da Edição'), + ), + ] diff --git a/sapl/norma/migrations/0028_auto_20191024_1330.py b/sapl/norma/migrations/0028_auto_20191024_1330.py new file mode 100644 index 000000000..22bd9e895 --- /dev/null +++ b/sapl/norma/migrations/0028_auto_20191024_1330.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-24 16:30 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.norma.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('norma', '0027_auto_20191001_1115'), + ] + + operations = [ + migrations.AlterField( + model_name='normajuridica', + name='texto_integral', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.norma.models.norma_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Texto Integral'), + ), + ] diff --git a/sapl/norma/migrations/0028_merge_20191009_1814.py b/sapl/norma/migrations/0028_merge_20191009_1814.py new file mode 100644 index 000000000..503e70b76 --- /dev/null +++ b/sapl/norma/migrations/0028_merge_20191009_1814.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-09 21:14 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('norma', '0027_normajuridica_ultima_edicao'), + ('norma', '0027_auto_20191001_1115'), + ] + + operations = [ + ] diff --git a/sapl/norma/migrations/0029_auto_20191024_1344.py b/sapl/norma/migrations/0029_auto_20191024_1344.py new file mode 100644 index 000000000..2768e606e --- /dev/null +++ b/sapl/norma/migrations/0029_auto_20191024_1344.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-24 16:44 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.norma.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('norma', '0028_auto_20191024_1330'), + ] + + operations = [ + migrations.AlterField( + model_name='anexonormajuridica', + name='anexo_arquivo', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.norma.models.norma_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Arquivo Anexo'), + ), + ] diff --git a/sapl/norma/migrations/0030_merge_20191209_1531.py b/sapl/norma/migrations/0030_merge_20191209_1531.py new file mode 100644 index 000000000..9fd58f6e4 --- /dev/null +++ b/sapl/norma/migrations/0030_merge_20191209_1531.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-12-09 18:31 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('norma', '0029_auto_20191024_1344'), + ('norma', '0028_merge_20191009_1814'), + ] + + operations = [ + ] diff --git a/sapl/norma/migrations/0031_auto_20200114_1121.py b/sapl/norma/migrations/0031_auto_20200114_1121.py new file mode 100644 index 000000000..1be3737d1 --- /dev/null +++ b/sapl/norma/migrations/0031_auto_20200114_1121.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2020-01-14 14:21 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.norma.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('norma', '0030_merge_20191209_1531'), + ] + + operations = [ + migrations.AlterField( + model_name='anexonormajuridica', + name='ano', + field=models.PositiveSmallIntegerField(choices=[(2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'), + ), + migrations.AlterField( + model_name='normaestatisticas', + name='ano', + field=models.PositiveSmallIntegerField(choices=[(2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], default=sapl.norma.models.get_ano_atual, verbose_name='Ano'), + ), + migrations.AlterField( + model_name='normajuridica', + name='ano', + field=models.PositiveSmallIntegerField(choices=[(2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'), + ), + ] diff --git a/sapl/norma/models.py b/sapl/norma/models.py index cd90e4930..34174bcc6 100644 --- a/sapl/norma/models.py +++ b/sapl/norma/models.py @@ -12,7 +12,8 @@ from sapl.materia.models import MateriaLegislativa from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, restringe_tipos_de_arquivo_txt, texto_upload_path, - get_settings_auth_user_model) + get_settings_auth_user_model, + OverwriteStorage) @reversion.register() @@ -78,10 +79,12 @@ class NormaJuridica(models.Model): ) texto_integral = models.FileField( + max_length=300, blank=True, null=True, upload_to=norma_upload_path, verbose_name=_('Texto Integral'), + storage=OverwriteStorage(), validators=[restringe_tipos_de_arquivo_txt]) tipo = models.ForeignKey( TipoNormaJuridica, @@ -153,6 +156,10 @@ class NormaJuridica(models.Model): blank=True, default='' ) + ultima_edicao = models.DateTimeField( + verbose_name=_('Data e Hora da Edição'), + blank=True, null=True + ) class Meta: verbose_name = _('Norma Jurídica') @@ -174,24 +181,27 @@ class NormaJuridica(models.Model): return anexos def __str__(self): - return _('%(tipo)s nº %(numero)s de %(data)s') % { + numero_norma = self.numero + if numero_norma.isnumeric(): + numero_norma = '{0:,}'.format(int(self.numero)).replace(',', '.') + + return _('%(tipo)s nº %(numero)s, de %(data)s') % { 'tipo': self.tipo, - 'numero': self.numero, - 'data': defaultfilters.date(self.data, "d \d\e F \d\e Y")} + 'numero': numero_norma, + 'data': defaultfilters.date(self.data, "d \d\e F \d\e Y").lower()} @property def epigrafe(self): - return _('%(tipo)s nº %(numero)s de %(data)s') % { - 'tipo': self.tipo, - 'numero': self.numero, - 'data': defaultfilters.date(self.data, "d \d\e F \d\e Y")} + return self.__str__() def delete(self, using=None, keep_parents=False): - if self.texto_integral: - self.texto_integral.delete() + texto_integral = self.texto_integral + result = super().delete(using=using, keep_parents=keep_parents) - return models.Model.delete( - self, using=using, keep_parents=keep_parents) + if texto_integral: + texto_integral.delete(save=False) + + return result def save(self, force_insert=False, force_update=False, using=None, update_fields=None): @@ -334,8 +344,8 @@ class NormaRelacionada(models.Model): def __str__(self): return _('Principal: %(norma_principal)s' ' - Relacionada: %(norma_relacionada)s') % { - 'norma_principal': self.norma_principal, - 'norma_relacionada': self.norma_relacionada} + 'norma_principal': str(self.norma_principal), + 'norma_relacionada': str(self.norma_relacionada)} @reversion.register() @@ -352,10 +362,12 @@ class AnexoNormaJuridica(models.Model): max_length=250 ) anexo_arquivo = models.FileField( + max_length=300, blank=True, null=True, upload_to=norma_upload_path, verbose_name=_('Arquivo Anexo'), + storage=OverwriteStorage(), validators=[restringe_tipos_de_arquivo_txt]) ano = models.PositiveSmallIntegerField(verbose_name=_('Ano'), choices=RANGE_ANOS) @@ -383,4 +395,13 @@ class AnexoNormaJuridica(models.Model): return models.Model.save(self, force_insert=force_insert, force_update=force_update, using=using, - update_fields=update_fields) \ No newline at end of file + update_fields=update_fields) + + def delete(self, using=None, keep_parents=False): + anexo_arquivo = self.anexo_arquivo + result = super().delete(using=using, keep_parents=keep_parents) + + if anexo_arquivo: + anexo_arquivo.delete(save=False) + + return result diff --git a/sapl/norma/views.py b/sapl/norma/views.py index 8d9a62eaa..44c2cfeac 100644 --- a/sapl/norma/views.py +++ b/sapl/norma/views.py @@ -1,3 +1,4 @@ +from datetime import datetime import logging import re @@ -71,7 +72,7 @@ class NormaRelacionadaCrud(MasterDetailCrud): class NormaPesquisaView(FilterView): model = NormaJuridica filterset_class = NormaFilterSet - paginate_by = 10 + paginate_by = 50 def get_queryset(self): qs = super().get_queryset() @@ -222,6 +223,9 @@ class NormaCrud(Crud): initial['user'] = self.request.user initial['ip'] = get_client_ip(self.request) + tz = timezone.get_current_timezone() + initial['ultima_edicao'] = tz.localize(datetime.now()) + username = self.request.user.username try: self.logger.debug( @@ -267,7 +271,8 @@ class NormaCrud(Crud): pk=self.kwargs['pk'] ) - # Feito desta forma para que sejam materializados os assuntos antigos + # Feito desta forma para que sejam materializados os assuntos + # antigos assuntos_antigos = set(norma_antiga.assuntos.all()) dict_objeto_antigo = norma_antiga.__dict__ @@ -275,24 +280,33 @@ class NormaCrud(Crud): dict_objeto_novo = self.object.__dict__ atributos = ['tipo_id', 'numero', 'ano', 'data', 'esfera_federacao', - 'complemento', 'materia_id', 'numero', - 'data_publicacao', 'data_vigencia', - 'veiculo_publicacao', 'pagina_inicio_publicacao', - 'pagina_fim_publicacao', 'ementa', 'indexacao', - 'observacao', 'texto_integral'] + 'complemento', 'materia_id', 'numero', + 'data_publicacao', 'data_vigencia', + 'veiculo_publicacao', 'pagina_inicio_publicacao', + 'pagina_fim_publicacao', 'ementa', 'indexacao', + 'observacao', 'texto_integral'] for atributo in atributos: if dict_objeto_antigo[atributo] != dict_objeto_novo[atributo]: self.object.user = self.request.user self.object.ip = get_client_ip(self.request) + + tz = timezone.get_current_timezone() + self.object.ultima_edicao = tz.localize(datetime.now()) + self.object.save() break - - # Campo Assuntos não veio no __dict__, então é comparado separadamente + + # Campo Assuntos não veio no __dict__, então é comparado + # separadamente assuntos_novos = set(self.object.assuntos.all()) if assuntos_antigos != assuntos_novos: self.object.user = self.request.user self.object.ip = get_client_ip(self.request) + + tz = timezone.get_current_timezone() + self.object.ultima_edicao = tz.localize(datetime.now()) + self.object.save() return super().form_valid(form) @@ -384,7 +398,8 @@ class ImpressosView(PermissionRequiredMixin, TemplateView): def gerar_pdf_impressos(request, context, template_name): template = loader.get_template(template_name) html = template.render(context, request) - pdf = weasyprint.HTML(string=html, base_url=request.build_absolute_uri()).write_pdf() + pdf = weasyprint.HTML( + string=html, base_url=request.build_absolute_uri()).write_pdf() response = HttpResponse(pdf, content_type='application/pdf') response['Content-Disposition'] = 'inline; filename="relatorio_impressos.pdf"' @@ -411,7 +426,8 @@ class NormaPesquisaSimplesView(PermissionRequiredMixin, FormView): kwargs.update({'data__gte': form.cleaned_data['data_inicial'], 'data__lte': form.cleaned_data['data_final']}) - normas = NormaJuridica.objects.filter(**kwargs).order_by('-numero', 'ano') + normas = NormaJuridica.objects.filter( + **kwargs).order_by('-numero', 'ano') quantidade_normas = normas.count() normas = normas[:2000] if quantidade_normas > 2000 else normas diff --git a/sapl/painel/views.py b/sapl/painel/views.py index 5cadba9a1..1dcb7bb49 100644 --- a/sapl/painel/views.py +++ b/sapl/painel/views.py @@ -21,7 +21,7 @@ from sapl.parlamentares.models import Legislatura, Parlamentar, Votante from sapl.sessao.models import (ExpedienteMateria, OradorExpediente, OrdemDia, PresencaOrdemDia, RegistroVotacao, SessaoPlenaria, SessaoPlenariaPresenca, - VotoParlamentar) + VotoParlamentar, RegistroLeitura) from sapl.utils import filiacao_data, get_client_ip, sort_lista_chave from .models import Cronometro @@ -290,7 +290,10 @@ def votante_view(request): @user_passes_test(check_permission) def painel_view(request, pk): - context = {'head_title': str(_('Painel Plenário')), 'sessao_id': pk} + now = timezone.localtime(timezone.now()) + utc_offset = now.utcoffset().total_seconds() / 60 + + context = {'head_title': str(_('Painel Plenário')), 'sessao_id': pk, 'utc_offset': utc_offset } return render(request, 'painel/index.html', context) @@ -361,7 +364,7 @@ def get_presentes(pk, response, materia): else: presentes = SessaoPlenariaPresenca.objects.filter( sessao_plenaria_id=pk) - + sessao = SessaoPlenaria.objects.get(id=pk) num_presentes = len(presentes) data_sessao = sessao.data_inicio @@ -408,6 +411,8 @@ def get_presentes(pk, response, materia): tipo_votacao = 'Nominal' elif materia.tipo_votacao == 3: tipo_votacao = 'Secreta' + elif materia.tipo_votacao == 4: + tipo_votacao = 'Leitura' response.update({ 'tipo_resultado': materia.resultado, @@ -442,15 +447,27 @@ def response_nenhuma_materia(response): def get_votos(response, materia): logger = logging.getLogger(__name__) if type(materia) == OrdemDia: - registro = RegistroVotacao.objects.filter( - ordem=materia, materia=materia.materia).last() + if materia.tipo_votacao != 4: + registro = RegistroVotacao.objects.filter( + ordem=materia, materia=materia.materia).order_by('data_hora').last() + leitura = None + else: + leitura = RegistroLeitura.objects.filter( + ordem=materia, materia=materia.materia).order_by('data_hora').last() + registro = None tipo = 'ordem' elif type(materia) == ExpedienteMateria: - registro = RegistroVotacao.objects.filter( - expediente=materia, materia=materia.materia).last() + if materia.tipo_votacao != 4: + registro = RegistroVotacao.objects.filter( + expediente=materia, materia=materia.materia).order_by('data_hora').last() + leitura = None + else: + leitura = RegistroLeitura.objects.filter( + expediente=materia, materia=materia.materia).order_by('data_hora').last() + registro = None tipo = 'expediente' - if not registro: + if not registro and not leitura: response.update({ 'numero_votos_sim': 0, 'numero_votos_nao': 0, @@ -479,7 +496,15 @@ def get_votos(response, materia): logger.error("Votos do parlamentar (id={}) não encontrados. Retornado vazio." .format(p['parlamentar_id'])) response['presentes'][i]['voto'] = '' - + elif leitura: + response.update({ + 'numero_votos_sim': 0, + 'numero_votos_nao': 0, + 'numero_abstencoes': 0, + 'registro': True, + 'total_votos': 0, + 'tipo_resultado': 'Matéria lida.', + }) else: total = (registro.numero_votos_sim + registro.numero_votos_nao + @@ -556,33 +581,38 @@ def get_dados_painel(request, pk): # Caso não tenha nenhuma aberta, # a matéria a ser mostrada no Painel deve ser a última votada last_ordem_voto = RegistroVotacao.objects.filter( - ordem__sessao_plenaria=sessao).last() + ordem__sessao_plenaria=sessao).order_by('data_hora').last() last_expediente_voto = RegistroVotacao.objects.filter( - expediente__sessao_plenaria=sessao).last() - - if last_ordem_voto: - ultima_ordem_votada = last_ordem_voto.ordem - if last_expediente_voto: - ultimo_expediente_votado = last_expediente_voto.expediente + expediente__sessao_plenaria=sessao).order_by('data_hora').last() - if last_ordem_voto or last_expediente_voto: - # Se alguma ordem E algum expediente já tiver sido votado... - if last_ordem_voto and last_expediente_voto: - materia = ultima_ordem_votada\ - if last_ordem_voto.pk >= last_expediente_voto.pk\ - else ultimo_expediente_votado - - # Caso somente um deles tenha resultado, prioriza a Ordem do Dia - elif last_ordem_voto: - materia = ultima_ordem_votada - - # Caso a Ordem do dia não tenha resultado, mostra o último expediente - elif last_expediente_voto: - materia = ultimo_expediente_votado + last_ordem_leitura = RegistroLeitura.objects.filter( + ordem__sessao_plenaria=sessao).order_by('data_hora').last() + last_expediente_leitura = RegistroLeitura.objects.filter( + expediente__sessao_plenaria=sessao).order_by('data_hora').last() + # Obtém última matéria que foi votada, através do timestamp mais recente + ordem_expediente = None + ultimo_timestamp = None + if last_ordem_voto: + ordem_expediente = last_ordem_voto.ordem + ultimo_timestamp = last_ordem_voto.data_hora + if (last_expediente_voto and ultimo_timestamp and last_expediente_voto.data_hora > ultimo_timestamp) or \ + (not ultimo_timestamp and last_expediente_voto): + ordem_expediente = last_expediente_voto.expediente + ultimo_timestamp = last_expediente_voto.data_hora + if (last_ordem_leitura and ultimo_timestamp and last_ordem_leitura.data_hora > ultimo_timestamp) or \ + (not ultimo_timestamp and last_ordem_leitura): + ordem_expediente = last_ordem_leitura.ordem + ultimo_timestamp = last_ordem_leitura.data_hora + if (last_expediente_leitura and ultimo_timestamp and last_expediente_leitura.data_hora > ultimo_timestamp) or \ + (not ultimo_timestamp and last_expediente_leitura): + ordem_expediente = last_expediente_leitura.expediente + ultimo_timestamp = last_expediente_leitura.data_hora + + if ordem_expediente: return JsonResponse(get_votos( - get_presentes(pk, response, materia), - materia)) + get_presentes(pk, response, ordem_expediente), + ordem_expediente)) # Retorna que não há nenhuma matéria já votada ou aberta return response_nenhuma_materia(get_presentes(pk, response, None)) diff --git a/sapl/parlamentares/forms.py b/sapl/parlamentares/forms.py index 2003a4679..448535d40 100755 --- a/sapl/parlamentares/forms.py +++ b/sapl/parlamentares/forms.py @@ -78,6 +78,8 @@ def validar_datas_legislatura(eleicao, inicio, fim, pk=None): class MandatoForm(ModelForm): logger = logging.getLogger(__name__) + data_fim_mandato = forms.DateField(label=_('Fim do Mandato')) + class Meta: model = Mandato fields = ['legislatura', 'coligacao', 'votos_recebidos', @@ -138,8 +140,12 @@ class MandatoForm(ModelForm): existe_mandato = Mandato.objects.filter( parlamentar=data['parlamentar'], - legislatura=data['legislatura']).exists() - if existe_mandato and data['titular']: + legislatura=data['legislatura']) + + if self.instance.pk: + existe_mandato = existe_mandato.exclude(id=self.instance.pk) + + if existe_mandato.exists() and data['titular']: self.logger.error("Mandato nesta legislatura (parlamentar={}, legislatura={}) já existe." .format(data['parlamentar'], data['legislatura'])) raise ValidationError(_('Mandato nesta legislatura já existe.')) @@ -236,6 +242,8 @@ class ParlamentarFilterSet(django_filters.FilterSet): class ParlamentarCreateForm(ParlamentarForm): + logger = logging.getLogger(__name__) + class Meta(ParlamentarForm.Meta): widgets = { 'fotografia': forms.ClearableFileInput(), diff --git a/sapl/parlamentares/tests/test_parlamentares.py b/sapl/parlamentares/tests/test_parlamentares.py index e5f607a09..8ebd443be 100644 --- a/sapl/parlamentares/tests/test_parlamentares.py +++ b/sapl/parlamentares/tests/test_parlamentares.py @@ -115,14 +115,18 @@ def test_mandato_submit(admin_client): admin_client.post(reverse('sapl.parlamentares:mandato_create', kwargs={'pk': 14}), - {'parlamentar': 14, # hidden field - 'legislatura': 5, - 'data_inicio_mandato': \ - Legislatura.objects.get(id=5).data_inicio, - 'data_expedicao_diploma': '2016-03-22', - 'observacao': 'Observação do mandato', - 'salvar': 'salvar'}, - follow=True) + { + 'parlamentar': 14, # hidden field + 'legislatura': 5, + 'data_inicio_mandato': \ + Legislatura.objects.get(id=5).data_inicio, + 'data_fim_mandato': \ + Legislatura.objects.get(id=5).data_fim, + 'data_expedicao_diploma': '2016-03-22', + 'observacao': 'Observação do mandato', + 'salvar': 'salvar' + }, + follow=True) mandato = Mandato.objects.first() assert str(_('Observação do mandato')) == str(_(mandato.observacao)) @@ -160,13 +164,15 @@ def test_mandato_form_duplicado(): Mandato.objects.create(parlamentar=parlamentar, legislatura=legislatura, data_expedicao_diploma='2017-07-25', - data_inicio_mandato=legislatura.data_inicio,) + data_inicio_mandato=legislatura.data_inicio, + data_fim_mandato=legislatura.data_fim) form = MandatoForm(data={ 'parlamentar': str(parlamentar.pk), 'legislatura': str(legislatura.pk), 'data_expedicao_diploma': '01/07/2015', 'data_inicio_mandato': legislatura.data_inicio, + 'data_fim_mandato': legislatura.data_fim, 'titular':True, }) diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index c81ed46bb..b176f056f 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -427,6 +427,9 @@ class MandatoCrud(MasterDetailCrud): return {'parlamentar': Parlamentar.objects.get( pk=self.kwargs['pk'])} + class UpdateView(MasterDetailCrud.UpdateView): + form_class = MandatoForm + class ComposicaoColigacaoCrud(MasterDetailCrud): model = ComposicaoColigacao @@ -514,8 +517,7 @@ class ParlamentarCrud(Crud): list_field_names = [ 'nome_parlamentar', 'filiacao_atual', - 'ativo', - 'mandato_titular'] + 'ativo'] class DetailView(Crud.DetailView): @@ -591,8 +593,7 @@ class ParlamentarCrud(Crud): username = self.request.user.username if legislatura_id >= 0: return queryset.filter( - mandato__legislatura_id=legislatura_id).annotate( - mandato_titular=F('mandato__titular')).distinct() + mandato__legislatura_id=legislatura_id).distinct() else: try: self.logger.debug( @@ -608,75 +609,12 @@ class ParlamentarCrud(Crud): ". Objeto encontrado com sucesso.") if l is None: return Legislatura.objects.all() - return queryset.filter(mandato__legislatura_id=l).annotate( - mandato_titular=F('mandato__titular')) + return queryset.filter(mandato__legislatura_id=l) def get_headers(self): return [_('Parlamentar'), _('Partido'), _('Ativo?'), _('Titular?')] - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - username = self.request.user.username - - # Adiciona legislatura para filtrar parlamentares - legislaturas = Legislatura.objects.all().order_by('-numero') - context['legislaturas'] = legislaturas - context['legislatura_id'] = self.take_legislatura_id() - - for row in context['rows']: - - # Pega o Parlamentar por meio da pk - parlamentar = Parlamentar.objects.get( - id=(row[0][1].split('/')[-1])) - - for index, value in enumerate(row): - row[index] += (None if index else parlamentar,) - - # Pega a Legislatura - legislatura = Legislatura.objects.get( - id=context['legislatura_id']) - - # Coloca a filiação atual ao invés da última - # As condições para mostrar a filiação são: - # A data de filiacao deve ser menor que a data de fim - # da legislatura e data de desfiliação deve nula, ou maior, - # ou igual a data de fim da legislatura - try: - self.logger.debug("user=" + username + ". Tentando obter filiação do parlamentar com (data<={} e data_desfiliacao>={}) " - "ou (data<={} e data_desfiliacao=Null))." - .format(legislatura.data_fim, legislatura.data_fim, legislatura.data_fim)) - filiacao = parlamentar.filiacao_set.get(Q( - data__lte=legislatura.data_fim, - data_desfiliacao__gte=legislatura.data_fim) | Q( - data__lte=legislatura.data_fim, - data_desfiliacao__isnull=True)) - - # Caso não exista filiação com essas condições - except ObjectDoesNotExist: - self.logger.error("user=" + username + ". Parlamentar com (data<={} e data_desfiliacao>={}) " - "ou (data<={} e data_desfiliacao=Null)) não possui filiação." - .format(legislatura.data_fim, legislatura.data_fim, legislatura.data_fim)) - row[1] = ('Não possui filiação', None, None) - - # Caso exista mais de uma filiação nesse intervalo - # Entretanto, NÃO DEVE OCORRER - except MultipleObjectsReturned: - self.logger.error("user=" + username + ". O Parlamentar com (data<={} e data_desfiliacao>={}) " - "ou (data<={} e data_desfiliacao=Null)) possui duas filiações conflitantes" - .format(legislatura.data_fim, legislatura.data_fim, legislatura.data_fim)) - row[1] = ( - 'O Parlamentar possui duas filiações conflitantes', - None, None) - - # Caso encontre UMA filiação nessas condições - else: - self.logger.debug("user=" + username + - ". Filiação encontrada com sucesso.") - row[1] = (filiacao.partido.sigla, None, None) - - return context - class ParlamentarMateriasView(FormView): template_name = "parlamentares/materias.html" @@ -870,14 +808,13 @@ def altera_field_mesa(request): # atual deve ser a primeira daquela legislatura else: year = timezone.now().year - try: - logger.debug( - "user=" + username + ". Tentando obter id de sessoes com data_inicio.ano={}.".format(year)) - sessao_selecionada = sessoes.get(data_inicio__year=year).id - except ObjectDoesNotExist: + logger.debug( + "user={}. Tentando obter id de sessoes com data_inicio.ano={}.".format(username, year)) + sessao_selecionada = sessoes.filter(data_inicio__year=year).first() + if not sessao_selecionada: logger.error("user=" + username + ". Id de sessoes com data_inicio.ano={} não encontrado. " - "Selecionado o ID da primeira sessão.".format(year)) - sessao_selecionada = sessoes.first().id + "Selecionado o ID da primeira sessão.".format(year)) + sessao_selecionada = sessoes.first() # Atualiza os componentes da view após a mudança composicao_mesa = ComposicaoMesa.objects.filter( @@ -908,7 +845,7 @@ def altera_field_mesa(request): 'lista_composicao': lista_composicao, 'lista_parlamentares': lista_parlamentares, 'lista_cargos': lista_cargos, - 'sessao_selecionada': sessao_selecionada, + 'sessao_selecionada': sessao_selecionada.id, 'msg': ('', 1)}) diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py index 859de2850..82bba2372 100644 --- a/sapl/protocoloadm/forms.py +++ b/sapl/protocoloadm/forms.py @@ -1,11 +1,11 @@ - +import django_filters import logging from crispy_forms.bootstrap import InlineRadios, Alert, FormActions -from sapl.crispy_layout_mixin import SaplFormHelper -from crispy_forms.layout import HTML, Button, Column, Fieldset, Layout, Div, Submit +from crispy_forms.layout import (Button, Column, Div, Fieldset, HTML, + Layout, Submit) + from django import forms -from sapl.settings import MAX_DOC_UPLOAD_SIZE from django.core.exceptions import (MultipleObjectsReturned, ObjectDoesNotExist, ValidationError) from django.db import models, transaction @@ -13,24 +13,28 @@ from django.db.models import Max from django.forms import ModelForm from django.utils import timezone from django.utils.translation import ugettext_lazy as _ -import django_filters from sapl.base.models import Autor, TipoAutor, AppConfig -from sapl.crispy_layout_mixin import SaplFormLayout, form_actions, to_row -from sapl.materia.models import (MateriaLegislativa, TipoMateriaLegislativa, +from sapl.base.signals import post_save_signal +from sapl.crispy_layout_mixin import (form_actions, SaplFormHelper, + SaplFormLayout, to_row) +from sapl.materia.models import (MateriaLegislativa, + TipoMateriaLegislativa, UnidadeTramitacao) from sapl.protocoloadm.models import Protocolo -from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, AnoNumeroOrderingFilter, - RangeWidgetOverride, autor_label, autor_modal, - choice_anos_com_protocolo, choice_force_optional, +from sapl.utils import (AnoNumeroOrderingFilter, autor_label, autor_modal, choice_anos_com_documentoadministrativo, - FilterOverridesMetaMixin, choice_anos_com_materias, - FileFieldCheckMixin, lista_anexados) + choice_anos_com_materias, + choice_anos_com_protocolo, choice_force_optional, + FileFieldCheckMixin, FilterOverridesMetaMixin, + lista_anexados, RangeWidgetOverride, RANGE_ANOS, + validar_arquivo, YES_NO_CHOICES) -from .models import (AcompanhamentoDocumento, DocumentoAcessorioAdministrativo, - DocumentoAdministrativo, - Protocolo, TipoDocumentoAdministrativo, - TramitacaoAdministrativo, Anexado) +from .models import (Anexado, AcompanhamentoDocumento, + DocumentoAcessorioAdministrativo, + DocumentoAdministrativo, Protocolo, + TipoDocumentoAdministrativo, + TramitacaoAdministrativo) TIPOS_PROTOCOLO = [('0', 'Recebido'), ('1', 'Enviado'), @@ -302,9 +306,7 @@ class AnularProtocoloAdmForm(ModelForm): class Meta: model = Protocolo - fields = ['numero', - 'ano', - 'justificativa_anulacao', + fields = ['justificativa_anulacao', 'anulado', 'user_anulacao', 'ip_anulacao', @@ -666,9 +668,8 @@ class DocumentoAcessorioAdministrativoForm(FileFieldCheckMixin, ModelForm): arquivo = self.cleaned_data.get('arquivo', False) - if arquivo and arquivo.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (arquivo.size/1024)/1024)) + if arquivo: + validar_arquivo(arquivo, "Arquivo") return self.cleaned_data @@ -688,9 +689,12 @@ class TramitacaoAdmForm(ModelForm): 'data_fim_prazo', 'texto', 'user', - 'ip'] + 'ip', + 'ultima_edicao'] + widgets = {'user': forms.HiddenInput(), - 'ip': forms.HiddenInput()} + 'ip': forms.HiddenInput(), + 'ultima_edicao': forms.HiddenInput()} def __init__(self, *args, **kwargs): @@ -805,7 +809,8 @@ class TramitacaoAdmForm(ModelForm): texto=tramitacao.texto, data_fim_prazo=tramitacao.data_fim_prazo, user=tramitacao.user, - ip=tramitacao.ip + ip=tramitacao.ip, + ultima_edicao=tramitacao.ultima_edicao )) TramitacaoAdministrativo.objects.bulk_create(lista_tramitacao) @@ -819,7 +824,7 @@ def compara_tramitacoes_doc(tramitacao1, tramitacao2): if not tramitacao1 or not tramitacao2: return False - lst_items = ['id', 'documento_id', 'timestamp'] + lst_items = ['id', 'documento_id', 'timestamp', 'ultima_edicao'] values = [(k,v) for k,v in tramitacao1.__dict__.items() if ((k not in lst_items) and (k[0] != '_'))] other_values = [(k,v) for k,v in tramitacao2.__dict__.items() if (k not in lst_items and k[0] != '_')] return values == other_values @@ -846,9 +851,12 @@ class TramitacaoAdmEditForm(TramitacaoAdmForm): 'data_fim_prazo', 'texto', 'user', - 'ip'] + 'ip', + 'ultima_edicao'] + widgets = {'user': forms.HiddenInput(), - 'ip': forms.HiddenInput()} + 'ip': forms.HiddenInput(), + 'ultima_edicao': forms.HiddenInput()} def clean(self): super(TramitacaoAdmEditForm, self).clean() @@ -885,6 +893,7 @@ class TramitacaoAdmEditForm(TramitacaoAdmForm): cd['data_fim_prazo'] != obj.data_fim_prazo): cd['user'] = obj.user cd['ip'] = obj.ip + cd['ultima_edicao'] = obj.ultima_edicao cd['data_tramitacao'] = obj.data_tramitacao cd['unidade_tramitacao_local'] = obj.unidade_tramitacao_local @@ -916,6 +925,7 @@ class TramitacaoAdmEditForm(TramitacaoAdmForm): tram_anexada.data_fim_prazo = nova_tram_principal.data_fim_prazo tram_anexada.user = nova_tram_principal.user tram_anexada.ip = nova_tram_principal.ip + tram_anexada.ultima_edicao = nova_tram_principal.ultima_edicao tram_anexada.save() da.tramitacao = False if nova_tram_principal.status.indicador == "F" else True @@ -1083,10 +1093,17 @@ class DocumentoAdministrativoForm(FileFieldCheckMixin, ModelForm): 'observacao', 'texto_integral', 'protocolo', - 'restrito' + 'restrito', + 'user', + 'ip', + 'ultima_edicao' ] - widgets = {'protocolo': forms.HiddenInput()} + widgets = {'protocolo': forms.HiddenInput(), + 'user': forms.HiddenInput(), + 'ip': forms.HiddenInput(), + 'ultima_edicao': forms.HiddenInput() + } def clean(self): super(DocumentoAdministrativoForm, self).clean() @@ -1159,9 +1176,8 @@ class DocumentoAdministrativoForm(FileFieldCheckMixin, ModelForm): texto_integral = self.cleaned_data.get('texto_integral', False) - if texto_integral and texto_integral.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Texto Integral deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (texto_integral.size/1024)/1024)) + if texto_integral: + validar_arquivo(texto_integral, "Texto Integral") return self.cleaned_data @@ -1489,9 +1505,12 @@ class TramitacaoEmLoteAdmForm(ModelForm): 'data_fim_prazo', 'texto', 'user', - 'ip'] + 'ip', + 'ultima_edicao'] + widgets = {'user': forms.HiddenInput(), - 'ip': forms.HiddenInput()} + 'ip': forms.HiddenInput(), + 'ultima_edicao': forms.HiddenInput()} def __init__(self, *args, **kwargs): @@ -1565,7 +1584,6 @@ class TramitacaoEmLoteAdmForm(ModelForm): ) ) - def clean(self): cleaned_data = super(TramitacaoEmLoteAdmForm, self).clean() @@ -1613,9 +1631,12 @@ class TramitacaoEmLoteAdmForm(ModelForm): @transaction.atomic def save(self, commit=True): cd = self.cleaned_data + documentos = self.initial['documentos'] user = self.initial['user'] if 'user' in self.initial else None ip = self.initial['ip'] if 'ip' in self.initial else '' + ultima_edicao = self.initial['ultima_edicao'] if 'ultima_edicao' in self.initial else '' + tramitar_anexados = AppConfig.attr('tramitacao_documento') for doc_id in documentos: doc = DocumentoAdministrativo.objects.get(id=doc_id) @@ -1630,7 +1651,8 @@ class TramitacaoEmLoteAdmForm(ModelForm): texto=cd['texto'], data_fim_prazo=cd['data_fim_prazo'], user=user, - ip=ip + ip=ip, + ultima_edicao=ultima_edicao ) doc.tramitacao = False if tramitacao.status.indicador == "F" else True doc.save() @@ -1655,9 +1677,10 @@ class TramitacaoEmLoteAdmForm(ModelForm): texto=tramitacao.texto, data_fim_prazo=tramitacao.data_fim_prazo, user=tramitacao.user, - ip=tramitacao.ip + ip=tramitacao.ip, + ultima_edicao=tramitacao.ultima_edicao )) - TramitacaoAdministrativo.objects.bulk_create(lista_tramitacao) + TramitacaoAdministrativo.objects.bulk_create(lista_tramitacao) return tramitacao diff --git a/sapl/protocoloadm/migrations/0022_auto_20190712_1053.py b/sapl/protocoloadm/migrations/0022_auto_20190712_1053.py new file mode 100644 index 000000000..9235dc75a --- /dev/null +++ b/sapl/protocoloadm/migrations/0022_auto_20190712_1053.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-07-12 13:53 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0021_merge_20190429_1531'), + ] + + operations = [ + migrations.AlterField( + model_name='documentoacessorioadministrativo', + name='arquivo', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.utils.texto_upload_path, verbose_name='Arquivo'), + ), + migrations.AlterField( + model_name='documentoadministrativo', + name='texto_integral', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.utils.texto_upload_path, verbose_name='Texto Integral'), + ), + ] diff --git a/sapl/protocoloadm/migrations/0022_deduplica_protocolos.py b/sapl/protocoloadm/migrations/0022_deduplica_protocolos.py new file mode 100644 index 000000000..0ff516db7 --- /dev/null +++ b/sapl/protocoloadm/migrations/0022_deduplica_protocolos.py @@ -0,0 +1,32 @@ +from __future__ import unicode_literals + +from django.db import migrations + + +def deduplica_protocolos(apps, schema_editor): + from sapl.base.views import protocolos_duplicados + + Protocolo = apps.get_model('protocoloadm', 'Protocolo') + DocumentoAdministrativo = apps.get_model('protocoloadm', 'DocumentoAdministrativo') + + protocolos = protocolos_duplicados() + for p in protocolos: + principal = Protocolo.objects.filter(numero=p['numero'], ano=p['ano']).order_by('-id').first() + replicas = Protocolo.objects.filter(numero=p['numero'], ano=p['ano']).exclude(id=principal.id) + + for r in replicas: + documentos = DocumentoAdministrativo.objects.filter(protocolo_id=r.id) + for d in documentos: + d.protocolo = principal + d.save() + replicas.delete() + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0021_merge_20190429_1531'), + ] + + operations = [ + migrations.RunPython(deduplica_protocolos) + ] diff --git a/sapl/protocoloadm/migrations/0023_auto_20190711_1755.py b/sapl/protocoloadm/migrations/0023_auto_20190711_1755.py new file mode 100644 index 000000000..70620c8f7 --- /dev/null +++ b/sapl/protocoloadm/migrations/0023_auto_20190711_1755.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-07-11 20:55 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0022_deduplica_protocolos'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='protocolo', + unique_together=set([('numero', 'ano')]), + ), + ] diff --git a/sapl/protocoloadm/migrations/0023_merge_20190802_1112.py b/sapl/protocoloadm/migrations/0023_merge_20190802_1112.py new file mode 100644 index 000000000..421ce4907 --- /dev/null +++ b/sapl/protocoloadm/migrations/0023_merge_20190802_1112.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-08-02 14:12 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0022_auto_20190712_1053'), + ('protocoloadm', '0022_auto_20190715_1101'), + ] + + operations = [ + ] diff --git a/sapl/protocoloadm/migrations/0024_merge_20190821_1418.py b/sapl/protocoloadm/migrations/0024_merge_20190821_1418.py new file mode 100644 index 000000000..6bd5eea65 --- /dev/null +++ b/sapl/protocoloadm/migrations/0024_merge_20190821_1418.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-08-21 17:18 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0023_auto_20190711_1755'), + ('protocoloadm', '0023_merge_20190802_1112'), + ] + + operations = [ + ] diff --git a/sapl/protocoloadm/migrations/0024_tramitacaoadministrativo_ultima_edicao.py b/sapl/protocoloadm/migrations/0024_tramitacaoadministrativo_ultima_edicao.py new file mode 100644 index 000000000..f9df6704c --- /dev/null +++ b/sapl/protocoloadm/migrations/0024_tramitacaoadministrativo_ultima_edicao.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-08-08 21:14 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0023_merge_20190802_1112'), + ] + + operations = [ + migrations.AddField( + model_name='tramitacaoadministrativo', + name='ultima_edicao', + field=models.DateField(blank=True, null=True, verbose_name='Data e Hora da Edição'), + ), + ] diff --git a/sapl/protocoloadm/migrations/0025_auto_20190815_1539.py b/sapl/protocoloadm/migrations/0025_auto_20190815_1539.py new file mode 100644 index 000000000..d635e2c39 --- /dev/null +++ b/sapl/protocoloadm/migrations/0025_auto_20190815_1539.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.23 on 2019-08-15 18:39 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0024_tramitacaoadministrativo_ultima_edicao'), + ] + + operations = [ + migrations.AlterField( + model_name='tramitacaoadministrativo', + name='ultima_edicao', + field=models.DateTimeField(blank=True, null=True, verbose_name='Data e Hora da Edição'), + ), + ] diff --git a/sapl/protocoloadm/migrations/0025_auto_20191001_1115.py b/sapl/protocoloadm/migrations/0025_auto_20191001_1115.py new file mode 100644 index 000000000..ca35da825 --- /dev/null +++ b/sapl/protocoloadm/migrations/0025_auto_20191001_1115.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-01 14:15 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0024_merge_20190821_1418'), + ] + + operations = [ + migrations.AlterField( + model_name='documentoacessorioadministrativo', + name='arquivo', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.utils.texto_upload_path, verbose_name='Arquivo'), + ), + migrations.AlterField( + model_name='documentoadministrativo', + name='texto_integral', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.utils.texto_upload_path, verbose_name='Texto Integral'), + ), + ] diff --git a/sapl/protocoloadm/migrations/0026_auto_20190815_1737.py b/sapl/protocoloadm/migrations/0026_auto_20190815_1737.py new file mode 100644 index 000000000..ba6d53656 --- /dev/null +++ b/sapl/protocoloadm/migrations/0026_auto_20190815_1737.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.23 on 2019-08-15 20:37 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('protocoloadm', '0025_auto_20190815_1539'), + ] + + operations = [ + migrations.AddField( + model_name='documentoadministrativo', + name='ip', + field=models.CharField(blank=True, default='', max_length=30, verbose_name='IP'), + ), + migrations.AddField( + model_name='documentoadministrativo', + name='ultima_edicao', + field=models.DateTimeField(blank=True, null=True, verbose_name='Data e Hora da Edição'), + ), + migrations.AddField( + model_name='documentoadministrativo', + name='user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, verbose_name='Usuário'), + ), + ] diff --git a/sapl/protocoloadm/migrations/0026_auto_20191120_1440.py b/sapl/protocoloadm/migrations/0026_auto_20191120_1440.py new file mode 100644 index 000000000..09d1220e9 --- /dev/null +++ b/sapl/protocoloadm/migrations/0026_auto_20191120_1440.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-11-20 17:40 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0025_auto_20191001_1115'), + ] + + operations = [ + migrations.AlterField( + model_name='documentoacessorioadministrativo', + name='arquivo', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.utils.texto_upload_path, verbose_name='Arquivo'), + ), + migrations.AlterField( + model_name='documentoacessorioadministrativo', + name='autor', + field=models.CharField(blank=True, max_length=200, verbose_name='Autor'), + ), + migrations.AlterField( + model_name='documentoadministrativo', + name='texto_integral', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.utils.texto_upload_path, verbose_name='Texto Integral'), + ), + ] diff --git a/sapl/protocoloadm/migrations/0027_merge_20190926_1250.py b/sapl/protocoloadm/migrations/0027_merge_20190926_1250.py new file mode 100644 index 000000000..236f0ce51 --- /dev/null +++ b/sapl/protocoloadm/migrations/0027_merge_20190926_1250.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-09-26 15:50 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0026_auto_20190815_1737'), + ('protocoloadm', '0024_merge_20190821_1418'), + ] + + operations = [ + ] diff --git a/sapl/protocoloadm/migrations/0028_merge_20191009_1814.py b/sapl/protocoloadm/migrations/0028_merge_20191009_1814.py new file mode 100644 index 000000000..497fe180a --- /dev/null +++ b/sapl/protocoloadm/migrations/0028_merge_20191009_1814.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-09 21:14 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0027_merge_20190926_1250'), + ('protocoloadm', '0025_auto_20191001_1115'), + ] + + operations = [ + ] diff --git a/sapl/protocoloadm/migrations/0029_merge_20191209_1531.py b/sapl/protocoloadm/migrations/0029_merge_20191209_1531.py new file mode 100644 index 000000000..99eb021f1 --- /dev/null +++ b/sapl/protocoloadm/migrations/0029_merge_20191209_1531.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-12-09 18:31 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0028_merge_20191009_1814'), + ('protocoloadm', '0026_auto_20191120_1440'), + ] + + operations = [ + ] diff --git a/sapl/protocoloadm/migrations/0030_auto_20200114_1121.py b/sapl/protocoloadm/migrations/0030_auto_20200114_1121.py new file mode 100644 index 000000000..dbfc0ebe4 --- /dev/null +++ b/sapl/protocoloadm/migrations/0030_auto_20200114_1121.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2020-01-14 14:21 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0029_merge_20191209_1531'), + ] + + operations = [ + migrations.AlterField( + model_name='documentoadministrativo', + name='ano', + field=models.PositiveSmallIntegerField(choices=[(2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'), + ), + migrations.AlterField( + model_name='protocolo', + name='ano', + field=models.PositiveSmallIntegerField(choices=[(2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano do Protocolo'), + ), + ] diff --git a/sapl/protocoloadm/models.py b/sapl/protocoloadm/models.py index f0e40f9c7..b9582a204 100644 --- a/sapl/protocoloadm/models.py +++ b/sapl/protocoloadm/models.py @@ -7,7 +7,8 @@ import reversion from sapl.base.models import Autor from sapl.materia.models import TipoMateriaLegislativa, UnidadeTramitacao from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, texto_upload_path, - get_settings_auth_user_model) + get_settings_auth_user_model, + OverwriteStorage) @reversion.register() @@ -119,6 +120,7 @@ class Protocolo(models.Model): permissions = ( ('action_anular_protocolo', _('Permissão para Anular Protocolo')), ) + unique_together = ('numero', 'ano',) def __str__(self): return _('%(numero)s/%(ano)s') % { @@ -162,8 +164,10 @@ class DocumentoAdministrativo(models.Model): observacao = models.TextField( blank=True, verbose_name=_('Observação')) texto_integral = models.FileField( + max_length=300, blank=True, null=True, + storage=OverwriteStorage(), upload_to=texto_upload_path, verbose_name=_('Texto Integral')) restrito = models.BooleanField(default=False, @@ -182,6 +186,24 @@ class DocumentoAdministrativo(models.Model): ) ) + user = models.ForeignKey( + get_settings_auth_user_model(), + verbose_name=_('Usuário'), + on_delete=models.PROTECT, + null=True, + blank=True + ) + ip = models.CharField( + verbose_name=_('IP'), + max_length=30, + blank=True, + default='' + ) + ultima_edicao = models.DateTimeField( + verbose_name=_('Data e Hora da Edição'), + blank=True, null=True + ) + class Meta: verbose_name = _('Documento Administrativo') verbose_name_plural = _('Documentos Administrativos') @@ -192,11 +214,13 @@ class DocumentoAdministrativo(models.Model): } def delete(self, using=None, keep_parents=False): - if self.texto_integral: - self.texto_integral.delete() + texto_integral = self.texto_integral + result = super().delete(using=using, keep_parents=keep_parents) + + if texto_integral: + texto_integral.delete(save=False) - return models.Model.delete( - self, using=using, keep_parents=keep_parents) + return result def save(self, force_insert=False, force_update=False, using=None, update_fields=None): @@ -226,13 +250,15 @@ class DocumentoAcessorioAdministrativo(models.Model): verbose_name=_('Tipo')) nome = models.CharField(max_length=30, verbose_name=_('Nome')) arquivo = models.FileField( + max_length=300, blank=True, null=True, upload_to=texto_upload_path, + storage=OverwriteStorage(), verbose_name=_('Arquivo')) data = models.DateField(blank=True, null=True, verbose_name=_('Data')) autor = models.CharField( - max_length=50, blank=True, verbose_name=_('Autor')) + max_length=200, blank=True, verbose_name=_('Autor')) assunto = models.TextField( blank=True, verbose_name=_('Assunto')) indexacao = models.TextField(blank=True) @@ -245,11 +271,13 @@ class DocumentoAcessorioAdministrativo(models.Model): return self.nome def delete(self, using=None, keep_parents=False): - if self.arquivo: - self.arquivo.delete() + arquivo = self.arquivo + result = super().delete(using=using, keep_parents=keep_parents) - return models.Model.delete( - self, using=using, keep_parents=keep_parents) + if arquivo: + arquivo.delete(save=False) + + return result def save(self, force_insert=False, force_update=False, using=None, update_fields=None): @@ -330,6 +358,10 @@ class TramitacaoAdministrativo(models.Model): max_length=30, blank=True, default='') + ultima_edicao = models.DateTimeField( + verbose_name=_('Data e Hora da Edição'), + blank=True, null=True + ) class Meta: verbose_name = _('Tramitação de Documento Administrativo') diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index eabccca90..af3736824 100755 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -26,7 +26,7 @@ from django_filters.views import FilterView import sapl from sapl.base.email_utils import do_envia_email_confirmacao from sapl.base.models import Autor, CasaLegislativa, AppConfig -from sapl.base.signals import tramitacao_signal +from sapl.base.signals import tramitacao_signal, post_delete_signal from sapl.comissoes.models import Comissao from sapl.crud.base import (Crud, CrudAux, MasterDetailCrud, make_pagination, RP_LIST, RP_DETAIL) @@ -34,10 +34,10 @@ from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa, Unid from sapl.materia.views import gerar_pdf_impressos from sapl.parlamentares.models import Legislatura, Parlamentar from sapl.protocoloadm.models import Protocolo +from sapl.relatorios.views import relatorio_doc_administrativos from sapl.utils import (create_barcode, get_base_url, get_client_ip, get_mime_type_from_file_extension, lista_anexados, - show_results_filter_set, mail_service_configured) -from sapl.relatorios.views import relatorio_doc_administrativos + show_results_filter_set, mail_service_configured, from_date_to_datetime_utc) from .forms import (AcompanhamentoDocumentoForm, AnularProtocoloAdmForm, DocumentoAcessorioAdministrativoForm, @@ -290,7 +290,7 @@ class AcompanhamentoDocumentoView(CreateView): de mensagens e clique no link que nós enviamos para \ confirmar o acompanhamento deste documento.') messages.add_message(request, messages.SUCCESS, msg) - + # Caso esse Acompanhamento já exista # avisa ao usuário que esse documento já está sendo acompanhado else: @@ -302,7 +302,7 @@ class AcompanhamentoDocumentoView(CreateView): return self.render_to_response( {'form': form, 'documento': documento, - }) + }) return HttpResponseRedirect(self.get_success_url()) else: return self.render_to_response( @@ -350,6 +350,17 @@ class DocumentoAdministrativoCrud(Crud): form_class = DocumentoAdministrativoForm layout_key = None + def get_initial(self): + initial = super().get_initial() + + initial['user'] = self.request.user + initial['ip'] = get_client_ip(self.request) + + tz = timezone.get_current_timezone() + initial['ultima_edicao'] = tz.localize(datetime.now()) + + return initial + @property def cancel_url(self): return self.search_url @@ -358,6 +369,33 @@ class DocumentoAdministrativoCrud(Crud): form_class = DocumentoAdministrativoForm layout_key = None + def form_valid(self, form): + dict_objeto_antigo = DocumentoAdministrativo.objects.get( + pk=self.kwargs['pk'] + ).__dict__ + + self.object = form.save() + dict_objeto_novo = self.object.__dict__ + + atributos = [ + 'tipo_id', 'ano', 'numero', 'data', 'protocolo_id', 'assunto', + 'interessado', 'tramitacao', 'restrito', 'texto_integral','numero_externo', + 'dias_prazo', 'data_fim_prazo', 'observacao' + ] + + for atributo in atributos: + if dict_objeto_antigo[atributo] != dict_objeto_novo[atributo]: + self.object.user = self.request.user + self.object.ip = get_client_ip(self.request) + + tz = timezone.get_current_timezone() + self.object.ultima_edicao = tz.localize(datetime.now()) + + self.object.save() + break + + return super().form_valid(form) + def get_initial(self): if self.object.protocolo: p = self.object.protocolo @@ -372,14 +410,24 @@ class DocumentoAdministrativoCrud(Crud): if documento.restrito and self.request.user.is_anonymous(): return redirect('/') return super(Crud.DetailView, self).get(args, kwargs) - + def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) - self.layout_display[0]['rows'][-1][0]['text'] = ( - '' % reverse( - 'sapl.protocoloadm:doc_texto_integral', - kwargs={'pk': self.object.pk})) + + context['user'] = self.request.user + context['documentoadministrativo'] = DocumentoAdministrativo.objects.get( + pk=self.kwargs['pk'] + ) + return context + + def urlize(self, obj, fieldname): + a = '%s' % ( + reverse( + 'sapl.protocoloadm:doc_texto_integral', + kwargs={'pk': obj.pk}), + obj.texto_integral.name.split('/')[-1]) + return obj.texto_integral.field.verbose_name, a class DeleteView(Crud.DeleteView): @@ -551,7 +599,7 @@ class ProtocoloDocumentoView(PermissionRequiredMixin, ).sequencia_numeracao_protocolo if not numeracao: self.logger.error("user=" + username + ". É preciso definir a sequencia de " - "numeração na tabelas auxiliares! " + str(e)) + "numeração na tabelas auxiliares! ") msg = _('É preciso definir a sequencia de ' + 'numeração na tabelas auxiliares!') messages.add_message(self.request, messages.ERROR, msg) @@ -564,12 +612,24 @@ class ProtocoloDocumentoView(PermissionRequiredMixin, legislatura = Legislatura.objects.filter( data_inicio__year__lte=timezone.now().year, data_fim__year__gte=timezone.now().year).first() + data_inicio = legislatura.data_inicio data_fim = legislatura.data_fim + + data_inicio_utc = from_date_to_datetime_utc(data_inicio) + data_fim_utc = from_date_to_datetime_utc(data_fim) + numero = Protocolo.objects.filter( - data__gte=data_inicio, - data__lte=data_fim).aggregate( - Max('numero')) + Q(data__isnull=False, + data__gte=data_inicio, + data__lte=data_fim) | + Q(timestamp__isnull=False, + timestamp__gte=data_inicio_utc, + timestamp__lte=data_fim_utc) | + Q(timestamp_data_hora_manual__isnull=False, + timestamp_data_hora_manual__gte=data_inicio_utc, + timestamp_data_hora_manual__lte=data_fim_utc,)).\ + aggregate(Max('numero')) elif numeracao == 'U': numero = Protocolo.objects.all().aggregate(Max('numero')) @@ -633,6 +693,12 @@ class CriarDocumentoProtocolo(PermissionRequiredMixin, CreateView): doc['assunto'] = protocolo.assunto_ementa doc['interessado'] = protocolo.interessado doc['numero'] = numero_max + 1 if numero_max else 1 + doc['user'] = self.request.user + doc['ip'] = get_client_ip(self.request) + + tz = timezone.get_current_timezone() + doc['ultima_edicao'] = tz.localize(datetime.now()) + return doc @@ -700,6 +766,13 @@ class ComprovanteProtocoloView(PermissionRequiredMixin, TemplateView): autenticacao = str(protocolo.tipo_processo) + \ data + str(protocolo.numero).zfill(6) + if protocolo.tipo_materia: + materia = MateriaLegislativa.objects.filter( + numero_protocolo=protocolo.numero, + ano=protocolo.ano).first() + if materia: + context['materia'] = materia.numero + context.update({"protocolo": protocolo, "barcode": barcode, "autenticacao": autenticacao}) @@ -753,10 +826,22 @@ class ProtocoloMateriaView(PermissionRequiredMixin, CreateView): data_fim__year__gte=timezone.now().year).first() data_inicio = legislatura.data_inicio data_fim = legislatura.data_fim + + data_inicio_utc = from_date_to_datetime_utc(data_inicio) + data_fim_utc = from_date_to_datetime_utc(data_fim) + numero = Protocolo.objects.filter( - data__gte=data_inicio, - data__lte=data_fim).aggregate( - Max('numero')) + Q(data__isnull=False, + data__gte=data_inicio, + data__lte=data_fim) | + Q(timestamp__isnull=False, + timestamp__gte=data_inicio_utc, + timestamp__lte=data_fim_utc) | + Q(timestamp_data_hora_manual__isnull=False, + timestamp_data_hora_manual__gte=data_inicio_utc, + timestamp_data_hora_manual__lte=data_fim_utc,)).\ + aggregate(Max('numero')) + elif numeracao == 'U': numero = Protocolo.objects.all().aggregate(Max('numero')) @@ -798,12 +883,22 @@ class ProtocoloMateriaView(PermissionRequiredMixin, CreateView): protocolo.user_data_hora_manual = '' protocolo.ip_data_hora_manual = '' protocolo.save() + data = form.cleaned_data if data['vincular_materia'] == 'True': - materia = MateriaLegislativa.objects.get(ano=data['ano_materia'], - numero=data['numero_materia'], - tipo=data['tipo_materia']) + materia = MateriaLegislativa.objects.get( + ano=data['ano_materia'], + numero=data['numero_materia'], + tipo=data['tipo_materia'] + ) + materia.numero_protocolo = protocolo.numero + materia.user = self.request.user + materia.ip = get_client_ip(self.request) + + tz = timezone.get_current_timezone() + materia.ultima_edicao = tz.localize(datetime.now()) + materia.save() return redirect(self.get_success_url(protocolo)) @@ -910,7 +1005,7 @@ class PesquisarDocumentoAdministrativoView(DocumentoAdministrativoMixin, page_obj = context['page_obj'] context['page_range'] = make_pagination( page_obj.number, paginator.num_pages) - + return context def get(self, request, *args, **kwargs): @@ -935,21 +1030,22 @@ class PesquisarDocumentoAdministrativoView(DocumentoAdministrativoMixin, length = self.object_list.filter(restrito=False).count() else: length = self.object_list.count() - - is_relatorio = url!='' and request.GET.get('relatorio',None) - self.paginate_by = None if is_relatorio else self.paginate_by + + is_relatorio = url != '' and request.GET.get('relatorio', None) + self.paginate_by = None if is_relatorio else self.paginate_by context = self.get_context_data(filter=self.filterset, filter_url=url, numero_res=length ) context['show_results'] = show_results_filter_set( self.request.GET.copy()) - + if is_relatorio: - return relatorio_doc_administrativos(request,context) - else: + return relatorio_doc_administrativos(request, context) + else: return self.render_to_response(context) - + + class AnexadoCrud(MasterDetailCrud): model = Anexado parent_field = 'documento_principal' @@ -987,7 +1083,7 @@ class DocumentoAnexadoEmLoteView(PermissionRequiredMixin, FilterView): def get_context_data(self, **kwargs): context = super( DocumentoAnexadoEmLoteView, self - ).get_context_data(**kwargs) + ).get_context_data(**kwargs) context['root_pk'] = self.kwargs['pk'] @@ -997,17 +1093,17 @@ class DocumentoAnexadoEmLoteView(PermissionRequiredMixin, FilterView): # Verifica se os campos foram preenchidos if not self.request.GET.get('tipo', " "): - msg =_('Por favor, selecione um tipo de documento.') + msg = _('Por favor, selecione um tipo de documento.') messages.add_message(self.request, messages.ERROR, msg) - + if not self.request.GET.get('data_0', " ") or not self.request.GET.get('data_1', " "): - msg =_('Por favor, preencha as datas.') + msg = _('Por favor, preencha as datas.') messages.add_message(self.request, messages.ERROR, msg) return context if not self.request.GET.get('data_0', " ") or not self.request.GET.get('data_1', " "): - msg =_('Por favor, preencha as datas.') + msg = _('Por favor, preencha as datas.') messages.add_message(self.request, messages.ERROR, msg) return context @@ -1019,17 +1115,19 @@ class DocumentoAnexadoEmLoteView(PermissionRequiredMixin, FilterView): context['object_list'] = [] for obj in context['temp_object_list']: if not obj.pk == int(context['root_pk']): - documento_principal = DocumentoAdministrativo.objects.get(id=context['root_pk']) + documento_principal = DocumentoAdministrativo.objects.get( + id=context['root_pk']) documento_anexado = obj is_anexado = Anexado.objects.filter(documento_principal=documento_principal, documento_anexado=documento_anexado).exists() if not is_anexado: ciclico = False - anexados_anexado = Anexado.objects.filter(documento_principal=documento_anexado) + anexados_anexado = Anexado.objects.filter( + documento_principal=documento_anexado) while anexados_anexado and not ciclico: anexados = [] - + for anexo in anexados_anexado: if documento_principal == anexo.documento_anexado: @@ -1042,18 +1140,18 @@ class DocumentoAnexadoEmLoteView(PermissionRequiredMixin, FilterView): if not ciclico: context['object_list'].append(obj) - + context['numero_res'] = len(context['object_list']) context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' - + context['show_results'] = show_results_filter_set(qr) return context def post(self, request, *args, **kwargs): marcados = request.POST.getlist('documento_id') - + data_anexacao = datetime.strptime( request.POST['data_anexacao'], "%d/%m/%Y" ).date() @@ -1068,22 +1166,22 @@ class DocumentoAnexadoEmLoteView(PermissionRequiredMixin, FilterView): v_data_desanexacao = data_desanexacao if len(marcados) == 0: - msg =_('Nenhum documento foi selecionado') + msg = _('Nenhum documento foi selecionado') messages.add_message(request, messages.ERROR, msg) - + if data_anexacao > v_data_desanexacao: - msg=_('Data de anexação posterior à data de desanexação.') + msg = _('Data de anexação posterior à data de desanexação.') messages.add_message(request, messages.ERROR, msg) - + return self.get(request, self.kwargs) if data_anexacao > v_data_desanexacao: - msg =_('Data de anexação posterior à data de desanexação.') + msg = _('Data de anexação posterior à data de desanexação.') messages.add_message(request, messages.ERROR, msg) return self.get(request, messages.ERROR, msg) - principal = DocumentoAdministrativo.objects.get(pk = kwargs['pk']) - for documento in DocumentoAdministrativo.objects.filter(id__in = marcados): + principal = DocumentoAdministrativo.objects.get(pk=kwargs['pk']) + for documento in DocumentoAdministrativo.objects.filter(id__in=marcados): anexado = Anexado() anexado.documento_principal = principal anexado.documento_anexado = documento @@ -1094,7 +1192,8 @@ class DocumentoAnexadoEmLoteView(PermissionRequiredMixin, FilterView): msg = _('Documento(s) anexado(s).') messages.add_message(request, messages.SUCCESS, msg) - success_url = reverse('sapl.protocoloadm:anexado_list', kwargs={'pk': kwargs['pk']}) + success_url = reverse('sapl.protocoloadm:anexado_list', kwargs={ + 'pk': kwargs['pk']}) return HttpResponseRedirect(success_url) @@ -1130,6 +1229,10 @@ class TramitacaoAdmCrud(MasterDetailCrud): initial['data_tramitacao'] = timezone.now().date() initial['ip'] = get_client_ip(self.request) initial['user'] = self.request.user + + tz = timezone.get_current_timezone() + initial['ultima_edicao'] = tz.localize(datetime.now()) + return initial def get_context_data(self, **kwargs): @@ -1142,7 +1245,8 @@ class TramitacaoAdmCrud(MasterDetailCrud): '-timestamp', '-id').first() - #TODO: Esta checagem foi inserida na issue #2027, mas é mesmo necessária? + # TODO: Esta checagem foi inserida na issue #2027, mas é mesmo + # necessária? if ultima_tramitacao: if ultima_tramitacao.unidade_tramitacao_destino: context['form'].fields[ @@ -1192,6 +1296,10 @@ class TramitacaoAdmCrud(MasterDetailCrud): initial = super(UpdateView, self).get_initial() initial['ip'] = get_client_ip(self.request) initial['user'] = self.request.user + + tz = timezone.get_current_timezone() + initial['ultima_edicao'] = tz.localize(datetime.now()) + return initial def form_valid(self, form): @@ -1224,13 +1332,12 @@ class TramitacaoAdmCrud(MasterDetailCrud): MasterDetailCrud.DetailView): template_name = 'protocoloadm/tramitacaoadministrativo_detail.html' - + def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['user'] = self.request.user return context - class DeleteView(MasterDetailCrud.DeleteView): logger = logging.getLogger(__name__) @@ -1257,7 +1364,7 @@ class TramitacaoAdmCrud(MasterDetailCrud): messages.add_message(request, messages.ERROR, msg) return HttpResponseRedirect(url) else: - tramitacoes_deletar = [tramitacao.id] + tramitacoes_deletar = [tramitacao] if documento.tramitacaoadministrativo_set.count() == 0: documento.tramitacao = False documento.save() @@ -1267,11 +1374,19 @@ class TramitacaoAdmCrud(MasterDetailCrud): for da in docs_anexados: tram_anexada = da.tramitacaoadministrativo_set.last() if compara_tramitacoes_doc(tram_anexada, tramitacao): - tramitacoes_deletar.append(tram_anexada.id) + tramitacoes_deletar.append(tram_anexada) if da.tramitacaoadministrativo_set.count() == 0: da.tramitacao = False da.save() - TramitacaoAdministrativo.objects.filter(id__in=tramitacoes_deletar).delete() + TramitacaoAdministrativo.objects.filter( + id__in=[t.id for t in tramitacoes_deletar]).delete() + + # TODO: otimizar para passar a lista de matérias + for tramitacao in tramitacoes_deletar: + post_delete_signal.send(sender=None, + instance=tramitacao, + operation='C', + request=self.request) return HttpResponseRedirect(url) @@ -1338,6 +1453,13 @@ class DesvincularDocumentoView(PermissionRequiredMixin, CreateView): ano=form.cleaned_data['ano'], tipo=form.cleaned_data['tipo']) documento.protocolo = None + + documento.user = self.request.user + documento.ip = get_client_ip(self.request) + + tz = timezone.get_current_timezone() + documento.ultima_edicao = tz.localize(datetime.now()) + documento.save() return redirect(self.get_success_url()) @@ -1352,10 +1474,20 @@ class DesvincularMateriaView(PermissionRequiredMixin, FormView): return reverse('sapl.protocoloadm:protocolo') def form_valid(self, form): - materia = MateriaLegislativa.objects.get(numero=form.cleaned_data['numero'], - ano=form.cleaned_data['ano'], - tipo=form.cleaned_data['tipo']) + materia = MateriaLegislativa.objects.get( + numero=form.cleaned_data['numero'], + ano=form.cleaned_data['ano'], + tipo=form.cleaned_data['tipo'] + ) + materia.numero_protocolo = None + + materia.user = self.request.user + materia.ip = get_client_ip(self.request) + + tz = timezone.get_current_timezone() + materia.ultima_edicao = tz.localize(datetime.now()) + materia.save() return redirect(self.get_success_url()) @@ -1464,7 +1596,6 @@ class PrimeiraTramitacaoEmLoteAdmView(PermissionRequiredMixin, FilterView): logger = logging.getLogger(__name__) - def get_context_data(self, **kwargs): context = super(PrimeiraTramitacaoEmLoteAdmView, self).get_context_data(**kwargs) @@ -1486,8 +1617,8 @@ class PrimeiraTramitacaoEmLoteAdmView(PermissionRequiredMixin, FilterView): if self.primeira_tramitacao: context['title'] = _('Primeira Tramitação em Lote') # Pega somente documentos que não possuem tramitação - context['object_list'] = [obj for obj in context['object_list'] - if obj.tramitacaoadministrativo_set.all().count() == 0] + context['object_list'] = [obj for obj in context['object_list'] + if obj.tramitacaoadministrativo_set.all().count() == 0] else: context['title'] = _('Tramitação em Lote') context['form'].fields['unidade_tramitacao_local'].initial = UnidadeTramitacao.objects.get( @@ -1503,6 +1634,9 @@ class PrimeiraTramitacaoEmLoteAdmView(PermissionRequiredMixin, FilterView): user = request.user ip = get_client_ip(request) + tz = timezone.get_current_timezone() + ultima_edicao = tz.localize(datetime.now()) + documentos_ids = request.POST.getlist('documentos') if not documentos_ids: msg = _("Escolha algum Documento para ser tramitado.") @@ -1511,30 +1645,32 @@ class PrimeiraTramitacaoEmLoteAdmView(PermissionRequiredMixin, FilterView): form = TramitacaoEmLoteAdmForm(request.POST, initial= {'documentos': documentos_ids, - 'user': user, 'ip':ip}) + 'user': user, 'ip':ip, + 'ultima_edicao': ultima_edicao}) if form.is_valid(): form.save() msg = _('Tramitação completa.') - self.logger.info('user=' + user.username + '. Tramitação completa.') + self.logger.info('user=' + user.username + + '. Tramitação completa.') messages.add_message(request, messages.SUCCESS, msg) return self.get_success_url() return self.form_invalid(form) - def get_success_url(self): return HttpResponseRedirect(reverse('sapl.protocoloadm:primeira_tramitacao_em_lote_docadm')) - def form_invalid(self, form, *args, **kwargs): for key, erros in form.errors.items(): - if not key=='__all__': - [messages.add_message(self.request, messages.ERROR, form.fields[key].label + ": " + e) for e in erros] + if not key == '__all__': + [messages.add_message( + self.request, messages.ERROR, form.fields[key].label + ": " + e) for e in erros] else: - [messages.add_message(self.request, messages.ERROR, e) for e in erros] - return self.get(self.request, kwargs, {'form':form}) + [messages.add_message(self.request, messages.ERROR, e) + for e in erros] + return self.get(self.request, kwargs, {'form': form}) class TramitacaoEmLoteAdmView(PrimeiraTramitacaoEmLoteAdmView): @@ -1562,21 +1698,18 @@ class TramitacaoEmLoteAdmView(PrimeiraTramitacaoEmLoteAdmView): return context - def pega_ultima_tramitacao(self): return TramitacaoAdministrativo.objects.values( 'documento_id').annotate(data_encaminhamento=Max( 'data_encaminhamento'), id=Max('id')).values_list('id', flat=True) - def filtra_tramitacao_status(self, status): lista = self.pega_ultima_tramitacao() return TramitacaoAdministrativo.objects.filter( id__in=lista, status=status).distinct().values_list('documento_id', flat=True) - def filtra_tramitacao_destino(self, destino): lista = self.pega_ultima_tramitacao() return TramitacaoAdministrativo.objects.filter( @@ -1584,7 +1717,6 @@ class TramitacaoEmLoteAdmView(PrimeiraTramitacaoEmLoteAdmView): unidade_tramitacao_destino=destino).distinct().values_list( 'documento_id', flat=True) - def filtra_tramitacao_destino_and_status(self, status, destino): lista = self.pega_ultima_tramitacao() return TramitacaoAdministrativo.objects.filter( diff --git a/sapl/relatorios/templates/pdf_pauta_sessao_gerar.py b/sapl/relatorios/templates/pdf_pauta_sessao_gerar.py index 29a8ca8ac..7d43e5f9b 100755 --- a/sapl/relatorios/templates/pdf_pauta_sessao_gerar.py +++ b/sapl/relatorios/templates/pdf_pauta_sessao_gerar.py @@ -112,6 +112,17 @@ def inf_basicas(inf_basicas_dic): return tmp +def build_expedientes(expedientes): + """ + """ + tmp = "" + tmp += '\t\tExpedientes\n' + for e in expedientes: + tmp += '\t\t\t{}:'.format(e['tipo']) + tmp += '\t\t\t

{}

'.format(e['conteudo']) + + return tmp + def expediente_materia(lst_expediente_materia): """ @@ -168,7 +179,7 @@ def votacao(lst_votacao): return tmp -def principal(rodape_dic, imagem, inf_basicas_dic, lst_expediente_materia, lst_votacao): +def principal(rodape_dic, imagem, inf_basicas_dic, lst_expediente_materia, lst_votacao, expedientes): """ """ @@ -190,6 +201,7 @@ def principal(rodape_dic, imagem, inf_basicas_dic, lst_expediente_materia, lst_v tmp += paraStyle() tmp += '\t\n' tmp += inf_basicas(inf_basicas_dic) + tmp += build_expedientes(expedientes) tmp += expediente_materia(lst_expediente_materia) tmp += votacao(lst_votacao) tmp += '\t\n' diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py index be65f7b93..16c4f23d6 100755 --- a/sapl/relatorios/views.py +++ b/sapl/relatorios/views.py @@ -4,11 +4,13 @@ import logging import re import tempfile + from django.core.exceptions import ObjectDoesNotExist from django.http import Http404, HttpResponse from django.utils import timezone from django.utils.translation import ugettext_lazy as _ from django.template.loader import render_to_string +from django.utils.html import strip_tags from sapl.settings import MEDIA_URL from sapl.base.models import Autor, CasaLegislativa @@ -23,16 +25,16 @@ from sapl.sessao.models import (ExpedienteMateria, ExpedienteSessao, Orador, OradorExpediente, OrdemDia, PresencaOrdemDia, SessaoPlenaria, SessaoPlenariaPresenca, OcorrenciaSessao, - RegistroVotacao, VotoParlamentar, OradorOrdemDia) + RegistroVotacao, VotoParlamentar, OradorOrdemDia, TipoExpediente) from sapl.settings import STATIC_ROOT from sapl.utils import LISTA_DE_UFS, TrocaTag, filiacao_data -from sapl.sessao.views import (get_identificação_basica, get_mesa_diretora, +from sapl.sessao.views import (get_identificacao_basica, get_mesa_diretora, get_presenca_sessao, get_expedientes, get_materias_expediente, get_oradores_expediente, get_presenca_ordem_do_dia, get_materias_ordem_do_dia, get_oradores_ordemdia, - get_oradores_explicações_pessoais, get_ocorrencias_da_sessão, get_assinaturas) + get_oradores_explicacoes_pessoais, get_ocorrencias_da_sessao, get_assinaturas) from .templates import (pdf_capa_processo_gerar, pdf_documento_administrativo_gerar, pdf_espelho_gerar, @@ -1155,13 +1157,14 @@ def relatorio_pauta_sessao(request, pk): sessao = SessaoPlenaria.objects.get(id=pk) - lst_expediente_materia, lst_votacao, inf_basicas_dic = get_pauta_sessao( + lst_expediente_materia, lst_votacao, inf_basicas_dic, expedientes = get_pauta_sessao( sessao, casa) pdf = pdf_pauta_sessao_gerar.principal(rodape, imagem, inf_basicas_dic, lst_expediente_materia, - lst_votacao) + lst_votacao, + expedientes) response.write(pdf) @@ -1262,9 +1265,20 @@ def get_pauta_sessao(sessao, casa): lst_votacao.append(dic_votacao) + expediente = ExpedienteSessao.objects.filter( + sessao_plenaria_id=sessao.id) + expedientes = [] + for e in expediente: + tipo = e.tipo + conteudo = re.sub( + ' ', ' ', strip_tags(e.conteudo.replace('
', '\n'))) + ex = {'tipo': tipo, 'conteudo': conteudo} + expedientes.append(ex) + return (lst_expediente_materia, lst_votacao, - inf_basicas_dic) + inf_basicas_dic, + expedientes) def make_pdf(base_url,main_template,header_template,main_css='',header_css=''): html = HTML(base_url=base_url, string=main_template) @@ -1301,7 +1315,7 @@ def resumo_ata_pdf(request,pk): sessao_plenaria = SessaoPlenaria.objects.get(pk=pk) context = {} - context.update(get_identificação_basica(sessao_plenaria)) + context.update(get_identificacao_basica(sessao_plenaria)) context.update(get_mesa_diretora(sessao_plenaria)) context.update(get_presenca_sessao(sessao_plenaria)) context.update(get_expedientes(sessao_plenaria)) @@ -1310,8 +1324,8 @@ def resumo_ata_pdf(request,pk): context.update(get_presenca_ordem_do_dia(sessao_plenaria)) context.update(get_materias_ordem_do_dia(sessao_plenaria)) context.update(get_oradores_ordemdia(sessao_plenaria)) - context.update(get_oradores_explicações_pessoais(sessao_plenaria)) - context.update(get_ocorrencias_da_sessão(sessao_plenaria)) + context.update(get_oradores_explicacoes_pessoais(sessao_plenaria)) + context.update(get_ocorrencias_da_sessao(sessao_plenaria)) context.update(get_assinaturas(sessao_plenaria)) context.update({'object': sessao_plenaria}) context.update({'data': dt.today().strftime('%d/%m/%Y')}) @@ -1330,8 +1344,7 @@ def resumo_ata_pdf(request,pk): return response - -def relatorio_doc_administrativos(request, context): +def cria_relatorio(request, context, html_string, header_info=""): base_url = request.build_absolute_uri() casa = CasaLegislativa.objects.first() rodape = ' '.join(get_rodape(casa)) @@ -1339,13 +1352,13 @@ def relatorio_doc_administrativos(request, context): context.update({'data': dt.today().strftime('%d/%m/%Y')}) context.update({'rodape': rodape}) - header_context = {"casa": casa, 'logotipo':casa.logotipo, 'MEDIA_URL': MEDIA_URL} + header_context = {"casa": casa, 'logotipo': casa.logotipo, 'MEDIA_URL': MEDIA_URL, 'info': header_info} - html_template = render_to_string('relatorios/relatorio_doc_administrativos.html', context) + html_template = render_to_string(html_string, context) html_header = render_to_string('relatorios/header_ata.html', header_context) - pdf_file = make_pdf(base_url=base_url,main_template=html_template,header_template=html_header) - + pdf_file = make_pdf(base_url=base_url, main_template=html_template, header_template=html_header) + response = HttpResponse(content_type='application/pdf;') response['Content-Disposition'] = 'inline; filename=relatorio.pdf' response['Content-Transfer-Encoding'] = 'binary' @@ -1353,6 +1366,60 @@ def relatorio_doc_administrativos(request, context): return response +def relatorio_doc_administrativos(request, context): + return cria_relatorio(request, context, 'relatorios/relatorio_doc_administrativos.html') + +def relatorio_materia_em_tramitacao(obj, request, context): + return cria_relatorio(request, context, 'relatorios/relatorio_materias_em_tramitacao.html') + +def relatorio_materia_por_autor(obj, request, context): + return cria_relatorio(request, context, 'relatorios/relatorio_materias_por_autor.html') + +def relatorio_materia_por_ano_autor(obj, request, context): + return cria_relatorio(request, context, 'relatorios/relatorio_materias_por_ano_autor.html') + +def relatorio_presenca_sessao(obj, request, context): + return cria_relatorio(request, context, 'relatorios/relatorio_presenca_sessao.html') + +def relatorio_atas(obj, request, context): + return cria_relatorio(request, context, 'relatorios/relatorio_atas.html') + +def relatorio_historico_tramitacao(obj, request, context): + return cria_relatorio(request, context, 'relatorios/relatorio_historico_tramitacao.html') + +def relatorio_fim_prazo_tramitacao(obj, request, context): + return cria_relatorio(request, context, 'relatorios/relatorio_fim_prazo_tramitacao.html') + +def relatorio_reuniao(obj, request, context): + return cria_relatorio(request, context, 'relatorios/relatorio_reuniao.html') + +def relatorio_audiencia(obj, request, context): + return cria_relatorio(request, context, 'relatorios/relatorio_audiencia.html') + +def relatorio_normas_mes(obj, request, context): + return cria_relatorio(request, context, 'relatorios/relatorio_normas_mes.html') + +def relatorio_normas_vigencia(obj, request, context): + return cria_relatorio(request, context, 'relatorios/relatorio_normas_vigencia.html') + +def relatorio_historico_tramitacao_adm(obj, request, context): + return cria_relatorio(request, context, 'relatorios/relatorio_historico_tramitacao_adm.html') + +def relatorio_estatisticas_acesso_normas(obj, request, context): + return cria_relatorio(request, context, 'relatorios/relatorio_estatisticas_acesso_normas.html') + +def relatorio_documento_acessorio(obj, request, context): + return cria_relatorio(request, context, 'relatorios/relatorio_documento_acessorio.html') + +def relatorio_normas_por_autor(obj, request, context): + return cria_relatorio(request, context, 'relatorios/relatorio_normas_por_autor.html') + +def relatorio_pauta_sessao_weasy(obj, request, context): + sessao = context['object'] + info = "Pauta da {} ({} - {}) Legislatura".format(sessao,sessao.legislatura.data_inicio.year,sessao.legislatura.data_fim.year) + return cria_relatorio(request, context, 'relatorios/relatorio_pauta_sessao.html',info) + + def relatorio_sessao_plenaria_pdf(request, pk): base_url=request.build_absolute_uri() logger = logging.getLogger(__name__) @@ -1411,7 +1478,6 @@ def relatorio_sessao_plenaria_pdf(request, pk): Legislatura".format(inf_basicas_dic['num_sessao_plen'], inf_basicas_dic['nom_sessao'], inf_basicas_dic['num_sessao_leg'], - inf_basicas_dic['num_legislatura'], inf_basicas_dic['num_legislatura'] ) diff --git a/sapl/rules/map_rules.py b/sapl/rules/map_rules.py index 4f1b4b515..e47ebe5dc 100644 --- a/sapl/rules/map_rules.py +++ b/sapl/rules/map_rules.py @@ -127,6 +127,7 @@ rules_group_materia = { ['can_access_impressos'], __perms_publicas__), (materia.Numeracao, __base__, __perms_publicas__), (materia.Tramitacao, __base__, __perms_publicas__), + (materia.MateriaEmTramitacao, __base__, __perms_publicas__), (norma.LegislacaoCitada, __base__, __perms_publicas__), (norma.AutoriaNorma, __base__, __perms_publicas__), (compilacao.Dispositivo, __base__ + [ @@ -186,6 +187,7 @@ rules_group_sessao = { (sessao.VotoParlamentar, __base__, __perms_publicas__), (sessao.JustificativaAusencia, __base__, __perms_publicas__), (sessao.RetiradaPauta, __base__, __perms_publicas__), + (sessao.RegistroLeitura, __base__, __perms_publicas__), ] } @@ -231,6 +233,7 @@ rules_group_geral = { [RP_ADD], __perms_publicas__), (base.TipoAutor, __base__, __perms_publicas__), (base.Autor, __base__, __perms_publicas__), + (base.AuditLog, __base__, set()), (protocoloadm.StatusTramitacaoAdministrativo, __base__, set()), (protocoloadm.TipoDocumentoAdministrativo, __base__, set()), diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py index 01f0c3636..8c5a425c6 100644 --- a/sapl/sessao/forms.py +++ b/sapl/sessao/forms.py @@ -1,6 +1,8 @@ +import django_filters + +from crispy_forms.layout import Button, Fieldset, HTML, Layout from datetime import datetime -from crispy_forms.layout import HTML, Button, Fieldset, Layout from django import forms from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ObjectDoesNotExist, ValidationError @@ -9,26 +11,28 @@ from django.db.models import Q from django.forms import ModelForm from django.forms.widgets import CheckboxSelectMultiple from django.utils.translation import ugettext_lazy as _ -import django_filters -from sapl.settings import MAX_DOC_UPLOAD_SIZE from sapl.base.models import Autor, TipoAutor -from sapl.crispy_layout_mixin import SaplFormHelper -from sapl.crispy_layout_mixin import form_actions, to_row, SaplFormLayout +from sapl.crispy_layout_mixin import (form_actions, to_row, + SaplFormHelper, SaplFormLayout) from sapl.materia.forms import MateriaLegislativaFilterSet from sapl.materia.models import (MateriaLegislativa, StatusTramitacao, TipoMateriaLegislativa) -from sapl.parlamentares.models import Parlamentar, Mandato -from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES, - MateriaPesquisaOrderingFilter, autor_label, - autor_modal, timezone, choice_anos_com_sessaoplenaria, - FileFieldCheckMixin) - -from .models import (Bancada, ExpedienteMateria, JustificativaAusencia, - Orador, OradorExpediente, OrdemDia, PresencaOrdemDia, SessaoPlenaria, - SessaoPlenariaPresenca, TipoResultadoVotacao, - OcorrenciaSessao, RetiradaPauta, TipoRetiradaPauta, OradorOrdemDia, ORDENACAO_RESUMO, - ResumoOrdenacao) +from sapl.parlamentares.models import Mandato, Parlamentar +from sapl.utils import (autor_label, autor_modal, + choice_anos_com_sessaoplenaria, + FileFieldCheckMixin, + MateriaPesquisaOrderingFilter, + RANGE_DIAS_MES, RANGE_MESES, + timezone, validar_arquivo) + +from .models import (Bancada, ExpedienteMateria, + JustificativaAusencia, OcorrenciaSessao, Orador, + OradorExpediente, OradorOrdemDia, OrdemDia, + ORDENACAO_RESUMO, PresencaOrdemDia, + RegistroLeitura, ResumoOrdenacao, RetiradaPauta, + SessaoPlenaria, SessaoPlenariaPresenca, + TipoResultadoVotacao, TipoRetiradaPauta) MES_CHOICES = RANGE_MESES @@ -155,18 +159,14 @@ class SessaoPlenariaForm(FileFieldCheckMixin, ModelForm): upload_ata = self.cleaned_data.get('upload_ata', False) upload_anexo = self.cleaned_data.get('upload_anexo', False) - if upload_pauta and upload_pauta.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Pauta da Sessão deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_pauta.size/1024)/1024)) - - if upload_ata and upload_ata.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Ata da Sessão deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_ata.size/1024)/1024)) - - if upload_anexo and upload_anexo.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Anexo da Sessão deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_anexo.size/1024)/1024)) + if upload_pauta: + validar_arquivo(upload_pauta, "Pauta da Sessão") + if upload_ata: + validar_arquivo(upload_ata, "Ata da Sessão") + + if upload_anexo: + validar_arquivo(upload_anexo, "Anexo da Sessão") return self.cleaned_data @@ -358,6 +358,8 @@ class ExpedienteMateriaForm(ModelForm): initial=datetime.strftime(timezone.now(), '%d/%m/%Y'), widget=forms.TextInput(attrs={'readonly': 'readonly'})) + apenas_leitura = forms.BooleanField(label='Apenas Leitura', required=False) + class Meta: model = ExpedienteMateria fields = ['data_ordem', 'numero_ordem', 'tipo_materia', 'observacao', @@ -493,7 +495,7 @@ class VotacaoForm(forms.Form): resultado_votacao = forms.CharField(label='Resultado da Votação') def clean(self): - cleaned_data = super(VotacaoForm, self).clean() + cleaned_data = super().clean() if not self.is_valid(): return cleaned_data @@ -577,7 +579,7 @@ class AdicionarVariasMateriasFilterSet(MateriaLegislativaFilterSet): o = MateriaPesquisaOrderingFilter() tramitacao__status = django_filters.ModelChoiceFilter( - required=True, + required=False, queryset=StatusTramitacao.objects.all(), label=_('Status da Matéria')) @@ -598,6 +600,10 @@ class AdicionarVariasMateriasFilterSet(MateriaLegislativaFilterSet): ] def __init__(self, *args, **kwargs): + # Colocar super().__init__(*args, **kwargs) quebra a tela + # de adicionar várias matérias em expediente e ordem dia. + # pois herda da classe AdicionarVariasMateriasFilterSet em + # vez de MateriaLegislativaFilterSet super(MateriaLegislativaFilterSet, self).__init__(*args, **kwargs) self.filters['tipo'].label = 'Tipo de Matéria' @@ -677,9 +683,8 @@ class OradorForm(ModelForm): upload_anexo = self.cleaned_data.get('upload_anexo', False) - if upload_anexo and upload_anexo.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Anexo do Orador deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_anexo.size/1024)/1024)) + if upload_anexo: + validar_arquivo(upload_anexo, "Anexo do Orador") return self.cleaned_data @@ -718,9 +723,8 @@ class OradorExpedienteForm(ModelForm): upload_anexo = self.cleaned_data.get('upload_anexo', False) - if upload_anexo and upload_anexo.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Anexo do Orador deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_anexo.size/1024)/1024)) + if upload_anexo: + validar_arquivo(upload_anexo, "Anexo do Orador") return self.cleaned_data @@ -761,9 +765,8 @@ class OradorOrdemDiaForm(ModelForm): upload_anexo = self.cleaned_data.get('upload_anexo', False) - if upload_anexo and upload_anexo.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Anexo do Orador deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_anexo.size/1024)/1024)) + if upload_anexo: + validar_arquivo(upload_anexo, "Anexo do Orador") return self.cleaned_data @@ -1005,9 +1008,8 @@ class JustificativaAusenciaForm(ModelForm): upload_anexo = self.cleaned_data.get('upload_anexo', False) - if upload_anexo and upload_anexo.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("O arquivo Anexo de Justificativa deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_anexo.size/1024)/1024)) + if upload_anexo: + validar_arquivo(upload_anexo, "Anexo de Justificativa") if not sessao_plenaria.finalizada or sessao_plenaria.finalizada is None: raise ValidationError( @@ -1023,3 +1025,51 @@ class JustificativaAusenciaForm(ModelForm): justificativa.materias_do_expediente.clear() justificativa.materias_da_ordem_do_dia.clear() return justificativa + + +class OrdemExpedienteLeituraForm(forms.ModelForm): + + observacao = forms.CharField(required=False, label='Observação', widget=forms.Textarea,) + + class Meta: + model = RegistroLeitura + fields = ['materia', + 'ordem', + 'expediente', + 'observacao', + 'user', + 'ip'] + widgets = {'materia': forms.HiddenInput(), + 'ordem': forms.HiddenInput(), + 'expediente': forms.HiddenInput(), + 'user': forms.HiddenInput(), + 'ip': forms.HiddenInput() + } + + def __init__(self, *args, **kwargs): + + super().__init__(*args, **kwargs) + + instance = self.initial['instance'] + if instance: + self.instance = instance.first() + self.fields['observacao'].initial = self.instance.observacao + + row1 = to_row( + [('observacao', 12)]) + + actions = [HTML('Cancelar Leitura')] + + self.helper = SaplFormHelper() + self.helper.form_method = 'POST' + self.helper.layout = Layout( + Fieldset(_('Leitura de Matéria'), + HTML(''' + Matéria: {{materia}}
+ Ementa: {{materia.ementa}}
+ '''), + row1, + form_actions(more=actions), + ) + ) \ No newline at end of file diff --git a/sapl/sessao/migrations/0043_auto_20190712_1053.py b/sapl/sessao/migrations/0043_auto_20190712_1053.py new file mode 100644 index 000000000..55fc526a5 --- /dev/null +++ b/sapl/sessao/migrations/0043_auto_20190712_1053.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-07-12 13:53 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.sessao.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0042_merge_20190612_0925'), + ] + + operations = [ + migrations.AlterField( + model_name='justificativaausencia', + name='upload_anexo', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.anexo_upload_path, verbose_name='Anexo de Justificativa'), + ), + migrations.AlterField( + model_name='orador', + name='upload_anexo', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.anexo_upload_path, verbose_name='Anexo do Orador'), + ), + migrations.AlterField( + model_name='oradorexpediente', + name='upload_anexo', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.anexo_upload_path, verbose_name='Anexo do Orador'), + ), + migrations.AlterField( + model_name='oradorordemdia', + name='upload_anexo', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.anexo_upload_path, verbose_name='Anexo do Orador'), + ), + migrations.AlterField( + model_name='sessaoplenaria', + name='upload_anexo', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.anexo_upload_path, verbose_name='Anexo da Sessão'), + ), + migrations.AlterField( + model_name='sessaoplenaria', + name='upload_ata', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.ata_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Ata da Sessão'), + ), + migrations.AlterField( + model_name='sessaoplenaria', + name='upload_pauta', + field=models.FileField(blank=True, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.pauta_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Pauta da Sessão'), + ), + ] diff --git a/sapl/sessao/migrations/0044_auto_20190816_1336.py b/sapl/sessao/migrations/0044_auto_20190816_1336.py new file mode 100644 index 000000000..c6d74d88a --- /dev/null +++ b/sapl/sessao/migrations/0044_auto_20190816_1336.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-08-16 16:36 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0043_auto_20190712_1053'), + ] + + operations = [ + migrations.AlterModelOptions( + name='tipoexpediente', + options={'ordering': ['ordenacao'], 'verbose_name': 'Tipo de Expediente', 'verbose_name_plural': 'Tipos de Expediente'}, + ), + migrations.AddField( + model_name='tipoexpediente', + name='ordenacao', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='Ordenação'), + ), + ] diff --git a/sapl/sessao/migrations/0045_auto_20190816_1337.py b/sapl/sessao/migrations/0045_auto_20190816_1337.py new file mode 100644 index 000000000..e835b5998 --- /dev/null +++ b/sapl/sessao/migrations/0045_auto_20190816_1337.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-08-16 16:37 +from __future__ import unicode_literals + +from django.db import migrations + + +def migra_ordenacao_tipos(apps, schema_editor): + TipoExpediente = apps.get_model('sessao', 'TipoExpediente') + + for i,tipo in enumerate(TipoExpediente.objects.all().order_by('nome')): + tipo.ordenacao=i+1 + tipo.save() + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0044_auto_20190816_1336'), + ] + + operations = [ + migrations.RunPython(migra_ordenacao_tipos) + ] diff --git a/sapl/sessao/migrations/0046_auto_20190827_1228.py b/sapl/sessao/migrations/0046_auto_20190827_1228.py new file mode 100644 index 000000000..d37e2b200 --- /dev/null +++ b/sapl/sessao/migrations/0046_auto_20190827_1228.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-08-27 15:28 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0055_auto_20190816_0943'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('sessao', '0045_auto_20190816_1337'), + ] + + operations = [ + migrations.CreateModel( + name='RegistroLeitura', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('observacao', models.TextField(blank=True, verbose_name='Observações')), + ('ip', models.CharField(blank=True, default='', max_length=30, verbose_name='IP')), + ('data_hora', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Data/Hora')), + ], + options={ + 'verbose_name': 'Leitura', + 'verbose_name_plural': 'Leituras', + }, + ), + migrations.AlterField( + model_name='expedientemateria', + name='tipo_votacao', + field=models.PositiveIntegerField(choices=[(1, 'Simbólica'), (2, 'Nominal'), (3, 'Secreta'), (4, 'Leitura')], default=1, verbose_name='Tipo de votação'), + ), + migrations.AlterField( + model_name='ordemdia', + name='tipo_votacao', + field=models.PositiveIntegerField(choices=[(1, 'Simbólica'), (2, 'Nominal'), (3, 'Secreta'), (4, 'Leitura')], default=1, verbose_name='Tipo de votação'), + ), + migrations.AddField( + model_name='registroleitura', + name='expediente', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sessao.ExpedienteMateria'), + ), + migrations.AddField( + model_name='registroleitura', + name='materia', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='materia.MateriaLegislativa'), + ), + migrations.AddField( + model_name='registroleitura', + name='ordem', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sessao.OrdemDia'), + ), + migrations.AddField( + model_name='registroleitura', + name='user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/sapl/sessao/migrations/0046_auto_20191001_1115.py b/sapl/sessao/migrations/0046_auto_20191001_1115.py new file mode 100644 index 000000000..5b773c293 --- /dev/null +++ b/sapl/sessao/migrations/0046_auto_20191001_1115.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-01 14:15 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.sessao.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0045_auto_20190816_1337'), + ] + + operations = [ + migrations.AlterField( + model_name='justificativaausencia', + name='upload_anexo', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.anexo_upload_path, verbose_name='Anexo de Justificativa'), + ), + migrations.AlterField( + model_name='orador', + name='upload_anexo', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.anexo_upload_path, verbose_name='Anexo do Orador'), + ), + migrations.AlterField( + model_name='oradorexpediente', + name='upload_anexo', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.anexo_upload_path, verbose_name='Anexo do Orador'), + ), + migrations.AlterField( + model_name='oradorordemdia', + name='upload_anexo', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.anexo_upload_path, verbose_name='Anexo do Orador'), + ), + migrations.AlterField( + model_name='sessaoplenaria', + name='upload_anexo', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.anexo_upload_path, verbose_name='Anexo da Sessão'), + ), + migrations.AlterField( + model_name='sessaoplenaria', + name='upload_ata', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.ata_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Ata da Sessão'), + ), + migrations.AlterField( + model_name='sessaoplenaria', + name='upload_pauta', + field=models.FileField(blank=True, max_length=200, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.pauta_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Pauta da Sessão'), + ), + ] diff --git a/sapl/sessao/migrations/0047_auto_20190829_1253.py b/sapl/sessao/migrations/0047_auto_20190829_1253.py new file mode 100644 index 000000000..ba9a41753 --- /dev/null +++ b/sapl/sessao/migrations/0047_auto_20190829_1253.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-08-29 15:53 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0046_auto_20190827_1228'), + ('sessao', '0046_auto_20191001_1115'), + ] + + operations = [ + migrations.AlterField( + model_name='registroleitura', + name='data_hora', + field=models.DateTimeField(auto_now=True, null=True, verbose_name='Data/Hora'), + ), + migrations.AlterField( + model_name='registrovotacao', + name='data_hora', + field=models.DateTimeField(auto_now=True, null=True, verbose_name='Data/Hora'), + ), + migrations.AlterField( + model_name='votoparlamentar', + name='data_hora', + field=models.DateTimeField(auto_now=True, null=True, verbose_name='Data/Hora'), + ), + ] diff --git a/sapl/sessao/migrations/0048_auto_20191029_1418.py b/sapl/sessao/migrations/0048_auto_20191029_1418.py new file mode 100644 index 000000000..e2ceacf4b --- /dev/null +++ b/sapl/sessao/migrations/0048_auto_20191029_1418.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-29 17:18 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.sessao.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0047_auto_20190829_1253'), + ] + + operations = [ + migrations.AlterField( + model_name='sessaoplenaria', + name='upload_anexo', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.anexo_upload_path, verbose_name='Anexo da Sessão'), + ), + migrations.AlterField( + model_name='sessaoplenaria', + name='upload_ata', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.ata_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Ata da Sessão'), + ), + migrations.AlterField( + model_name='sessaoplenaria', + name='upload_pauta', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.pauta_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Pauta da Sessão'), + ), + ] diff --git a/sapl/sessao/migrations/0049_auto_20191029_1434.py b/sapl/sessao/migrations/0049_auto_20191029_1434.py new file mode 100644 index 000000000..ebd5fb3e8 --- /dev/null +++ b/sapl/sessao/migrations/0049_auto_20191029_1434.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-29 17:34 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.sessao.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0048_auto_20191029_1418'), + ] + + operations = [ + migrations.AlterField( + model_name='orador', + name='upload_anexo', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.anexo_upload_path, verbose_name='Anexo do Orador'), + ), + migrations.AlterField( + model_name='oradorexpediente', + name='upload_anexo', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.anexo_upload_path, verbose_name='Anexo do Orador'), + ), + migrations.AlterField( + model_name='oradorordemdia', + name='upload_anexo', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.anexo_upload_path, verbose_name='Anexo do Orador'), + ), + ] diff --git a/sapl/sessao/migrations/0050_auto_20191029_1441.py b/sapl/sessao/migrations/0050_auto_20191029_1441.py new file mode 100644 index 000000000..6fd2ee4d6 --- /dev/null +++ b/sapl/sessao/migrations/0050_auto_20191029_1441.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-10-29 17:41 +from __future__ import unicode_literals + +from django.db import migrations, models +import sapl.sessao.models +import sapl.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0049_auto_20191029_1434'), + ] + + operations = [ + migrations.AlterField( + model_name='justificativaausencia', + name='upload_anexo', + field=models.FileField(blank=True, max_length=300, null=True, storage=sapl.utils.OverwriteStorage(), upload_to=sapl.sessao.models.anexo_upload_path, verbose_name='Anexo de Justificativa'), + ), + ] diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py index d438caa9a..2df6e1a14 100644 --- a/sapl/sessao/models.py +++ b/sapl/sessao/models.py @@ -14,7 +14,8 @@ from sapl.parlamentares.models import (CargoMesa, Legislatura, Parlamentar, Partido, SessaoLegislativa) from sapl.utils import (YES_NO_CHOICES, SaplGenericRelation, get_settings_auth_user_model, - restringe_tipos_de_arquivo_txt, texto_upload_path) + restringe_tipos_de_arquivo_txt, texto_upload_path, + OverwriteStorage) @reversion.register() @@ -181,20 +182,26 @@ class SessaoPlenaria(models.Model): max_length=150, blank=True, verbose_name=_('URL Arquivo Vídeo (Formatos MP4 / FLV / WebM)')) upload_pauta = models.FileField( + max_length=300, blank=True, null=True, upload_to=pauta_upload_path, verbose_name=_('Pauta da Sessão'), + storage=OverwriteStorage(), validators=[restringe_tipos_de_arquivo_txt]) upload_ata = models.FileField( + max_length=300, blank=True, null=True, upload_to=ata_upload_path, + storage=OverwriteStorage(), verbose_name=_('Ata da Sessão'), validators=[restringe_tipos_de_arquivo_txt]) upload_anexo = models.FileField( + max_length=300, blank=True, null=True, + storage=OverwriteStorage(), upload_to=anexo_upload_path, verbose_name=_('Anexo da Sessão')) iniciada = models.NullBooleanField(blank=True, @@ -223,7 +230,7 @@ class SessaoPlenaria(models.Model): if self.tipo.tipo_numeracao == tnc.quizenal: base += ' da {}ª Quinzena'.format( - 1 if self.data_inicio.day > 15 else 2) + 1 if self.data_inicio.day <= 15 else 2) if self.tipo.tipo_numeracao <= tnc.mensal: base += ' do mês de {}'.format( @@ -255,17 +262,22 @@ class SessaoPlenaria(models.Model): """ def delete(self, using=None, keep_parents=False): - if self.upload_pauta: - self.upload_pauta.delete() + upload_pauta = self.upload_pauta + upload_ata = self.upload_ata + upload_anexo = self.upload_anexo + + result = super().delete(using=using, keep_parents=keep_parents) - if self.upload_ata: - self.upload_ata.delete() + if upload_pauta: + upload_pauta.delete(save=False) - if self.upload_anexo: - self.upload_anexo.delete() + if upload_ata: + upload_ata.delete(save=False) - return models.Model.delete( - self, using=using, keep_parents=keep_parents) + if upload_anexo: + upload_anexo.delete(save=False) + + return result def save(self, force_insert=False, force_update=False, using=None, update_fields=None): @@ -299,6 +311,7 @@ class AbstractOrdemDia(models.Model): (1, 'simbolica', 'Simbólica'), (2, 'nominal', 'Nominal'), (3, 'secreta', 'Secreta'), + (4, 'leitura', 'Leitura') ) sessao_plenaria = models.ForeignKey(SessaoPlenaria, @@ -346,11 +359,15 @@ class ExpedienteMateria(AbstractOrdemDia): @reversion.register() class TipoExpediente(models.Model): nome = models.CharField(max_length=100, verbose_name=_('Tipo')) + ordenacao = models.PositiveIntegerField( + blank=True, + null=True, + verbose_name=_("Ordenação")) class Meta: verbose_name = _('Tipo de Expediente') verbose_name_plural = _('Tipos de Expediente') - ordering = ['nome'] + ordering = ['ordenacao'] def __str__(self): return self.nome @@ -419,8 +436,10 @@ class AbstractOrador(models.Model): # Oradores observacao = models.CharField( max_length=150, blank=True, verbose_name=_('Observação')) upload_anexo = models.FileField( + max_length=300, blank=True, null=True, + storage=OverwriteStorage(), upload_to=anexo_upload_path, verbose_name=_('Anexo do Orador')) @@ -432,6 +451,14 @@ class AbstractOrador(models.Model): # Oradores 'nome': self.parlamentar, 'numero': self.numero_ordem} + def delete(self, using=None, keep_parents=False): + upload_anexo = self.upload_anexo + result = super().delete(using=using, keep_parents=keep_parents) + + if upload_anexo: + upload_anexo.delete(save=False) + + return result @reversion.register() class Orador(AbstractOrador): # Oradores @@ -534,7 +561,7 @@ class RegistroVotacao(models.Model): default='') data_hora = models.DateTimeField( verbose_name=_('Data/Hora'), - auto_now_add=True, + auto_now=True, blank=True, null=True) @@ -585,7 +612,7 @@ class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar default='') data_hora = models.DateTimeField( verbose_name=_('Data/Hora'), - auto_now_add=True, + auto_now=True, blank=True, null=True) @@ -761,8 +788,10 @@ class JustificativaAusencia(models.Model): OrdemDia, blank=True, verbose_name=_('Matérias do Ordem do Dia')) upload_anexo = models.FileField( + max_length=300, blank=True, null=True, + storage=OverwriteStorage(), upload_to=anexo_upload_path, verbose_name=_('Anexo de Justificativa')) @@ -774,11 +803,13 @@ class JustificativaAusencia(models.Model): return 'Justificativa de Ausência' def delete(self, using=None, keep_parents=False): - if self.upload_anexo: - self.upload_anexo.delete() + upload_anexo = self.upload_anexo + result = super().delete(using=using, keep_parents=keep_parents) + + if upload_anexo: + upload_anexo.delete(save=False) - return models.Model.delete( - self, using=using, keep_parents=keep_parents) + return result def save(self, force_insert=False, force_update=False, using=None, update_fields=None): @@ -850,3 +881,51 @@ class RetiradaPauta(models.Model): 'ReritadaPauta deve ter exatamente um dos campos ' 'ordem ou expediente preenchido. Ambos estão preenchidos: ' '{}, {}'. format(self.ordem, self.expediente)) + + +@reversion.register() +class RegistroLeitura(models.Model): + materia = models.ForeignKey(MateriaLegislativa, on_delete=models.CASCADE) + ordem = models.ForeignKey(OrdemDia, + blank=True, + null=True, + on_delete=models.CASCADE) + expediente = models.ForeignKey(ExpedienteMateria, + blank=True, + null=True, + on_delete=models.CASCADE) + observacao = models.TextField( + blank=True, verbose_name=_('Observações')) + user = models.ForeignKey(get_settings_auth_user_model(), + on_delete=models.PROTECT, + null=True, + blank=True) + ip = models.CharField(verbose_name=_('IP'), + max_length=30, + blank=True, + default='') + data_hora = models.DateTimeField( + verbose_name=_('Data/Hora'), + auto_now=True, + blank=True, + null=True) + + class Meta: + verbose_name = _('Leitura') + verbose_name_plural = _('Leituras') + + def __str__(self): + return _('Leitura - ' + 'Matéria: %(materia)s') % { + 'materia': self.materia} + + def clean(self): + """Exatamente um dos campos ordem ou expediente deve estar preenchido. + """ + # TODO remover esse método quando OrdemDia e ExpedienteMateria + # forem reestruturados e os campos ordem e expediente forem unificados + if not xor(bool(self.ordem), bool(self.expediente)): + raise ValidationError( + 'RegistroLeitura deve ter exatamente um dos campos ' + 'ordem ou expediente preenchido. Ambos estão preenchidos: ' + '{}, {}'. format(self.ordem, self.expediente)) \ No newline at end of file diff --git a/sapl/sessao/tests/test_sessao_view.py b/sapl/sessao/tests/test_sessao_view.py index 3f3c42de7..18ac82340 100644 --- a/sapl/sessao/tests/test_sessao_view.py +++ b/sapl/sessao/tests/test_sessao_view.py @@ -12,12 +12,12 @@ from sapl.sessao.models import (SessaoPlenaria, TipoSessaoPlenaria, from sapl.parlamentares.models import Parlamentar, CargoMesa, Filiacao -from sapl.sessao.views import (get_identificação_basica, get_conteudo_multimidia, +from sapl.sessao.views import (get_identificacao_basica, get_conteudo_multimidia, get_mesa_diretora, get_presenca_sessao, get_expedientes, get_materias_expediente, get_oradores_expediente, get_presenca_ordem_do_dia, - get_materias_ordem_do_dia, get_oradores_explicações_pessoais, - get_ocorrencias_da_sessão + get_materias_ordem_do_dia, get_oradores_explicacoes_pessoais, + get_ocorrencias_da_sessao ) @@ -74,8 +74,8 @@ class TestResumoView(): cargo=self.cargo_mesa) self.integrante_mesa.save() - def test_get_identificação_basica(self): - id_basica = get_identificação_basica(self.sessao_plenaria) + def test_get_identificacao_basica(self): + id_basica = get_identificacao_basica(self.sessao_plenaria) info_basica = id_basica['basica'] assert info_basica[0] == 'Tipo de Sessão: ' + str(self.sessao_plenaria.tipo) @@ -129,12 +129,12 @@ class TestResumoView(): def test_get_materias_expediente(self): pass - def test_get_oradores_explicações_pessoais(self): + def test_get_oradores_explicacoes_pessoais(self): parlamentar = mommy.make(Parlamentar) partido_sigla = mommy.make(Filiacao, parlamentar=parlamentar) orador = mommy.make(Orador,sessao_plenaria=self.sessao_plenaria,parlamentar=parlamentar) - resultado_get_oradores = get_oradores_explicações_pessoais(self.sessao_plenaria) + resultado_get_oradores = get_oradores_explicacoes_pessoais(self.sessao_plenaria) assert resultado_get_oradores['oradores_explicacoes'] == [{ 'numero_ordem': orador.numero_ordem, @@ -142,8 +142,8 @@ class TestResumoView(): 'sgl_partido': partido_sigla.partido.sigla }] - def test_get_ocorrencias_da_sessão(self): + def test_get_ocorrencias_da_sessao(self): ocorrencia = mommy.make(OcorrenciaSessao, sessao_plenaria=self.sessao_plenaria) - resultado_get_ocorrencia = get_ocorrencias_da_sessão(self.sessao_plenaria) + resultado_get_ocorrencia = get_ocorrencias_da_sessao(self.sessao_plenaria) assert resultado_get_ocorrencia['ocorrencias_da_sessao'][0] == ocorrencia \ No newline at end of file diff --git a/sapl/sessao/urls.py b/sapl/sessao/urls.py index 730469c29..3e5dd67d7 100644 --- a/sapl/sessao/urls.py +++ b/sapl/sessao/urls.py @@ -34,7 +34,10 @@ from sapl.sessao.views import (AdicionarVariasMateriasExpediente, sessao_legislativa_legislatura_ajax, VotacaoEmBlocoOrdemDia, VotacaoEmBlocoExpediente, VotacaoEmBlocoSimbolicaView, VotacaoEmBlocoNominalView, - recuperar_nome_tipo_sessao) + recuperar_nome_tipo_sessao, + ExpedienteLeituraView, + OrdemDiaLeituraView, + retirar_leitura) from .apps import AppConfig @@ -117,7 +120,7 @@ urlpatterns = [ PautaSessaoView.as_view(), name='pauta_sessao'), url(r'^sessao/pauta-sessao/pesquisar-pauta$', PesquisarPautaSessaoView.as_view(), name='pesquisar_pauta'), - url(r'^sessao/pauta-sessao/(?P\d+)$', + url(r'^sessao/pauta-sessao/(?P\d+)/(?:pdf)?$', PautaSessaoDetailView.as_view(), name='pauta_sessao_detail'), # Subnav sessão @@ -150,13 +153,11 @@ urlpatterns = [ PesquisarSessaoPlenariaView.as_view(), name='pesquisar_sessao'), url(r'^sessao/(?P\d+)/matordemdia/votnom/(?P\d+)/(?P\d+)$', VotacaoNominalView.as_view(), name='votacaonominal'), - url(r'^sessao/(?P\d+)/matordemdia/votnom' - '/edit/(?P\d+)/(?P\d+)$', + url(r'^sessao/(?P\d+)/matordemdia/votnom/edit/(?P\d+)/(?P\d+)$', VotacaoNominalEditView.as_view(), name='votacaonominaledit'), url(r'^sessao/(?P\d+)/matordemdia/votsec/(?P\d+)/(?P\d+)$', VotacaoView.as_view(), name='votacaosecreta'), - url(r'^sessao/(?P\d+)/matordemdia/votsec' - '/view/(?P\d+)/(?P\d+)$', + url(r'^sessao/(?P\d+)/matordemdia/votsec/view/(?P\d+)/(?P\d+)$', VotacaoEditView.as_view(), name='votacaosecretaedit'), url(r'^sessao/(?P\d+)/matordemdia/votsimb/(?P\d+)/(?P\d+)$', VotacaoView.as_view(), name='votacaosimbolica'), @@ -164,8 +165,7 @@ urlpatterns = [ url(r'^sessao/(?P\d+)/matordemdia/votsimbbloco/$', VotacaoView.as_view(), name='votacaosimbolicabloco'), - url(r'^sessao/(?P\d+)/matordemdia/votsimb' - '/view/(?P\d+)/(?P\d+)$', + url(r'^sessao/(?P\d+)/matordemdia/votsimb/view/(?P\d+)/(?P\d+)$', VotacaoEditView.as_view(), name='votacaosimbolicaedit'), url(r'^sessao/(?P\d+)/matexp/votnom/(?P\d+)/(?P\d+)$', VotacaoNominalExpedienteView.as_view(), name='votacaonominalexp'), @@ -192,4 +192,13 @@ urlpatterns = [ url(r'^sessao/mudar-ordem-materia-sessao/', mudar_ordem_materia_sessao, name='mudar_ordem_materia_sessao'), + + url(r'^sessao/(?P\d+)/matexp/leitura/(?P\d+)/(?P\d+)$', + ExpedienteLeituraView.as_view(), name='leituraexp'), + url(r'^sessao/(?P\d+)/matordemdia/leitura/(?P\d+)/(?P\d+)$', + OrdemDiaLeituraView.as_view(), name='leituraod'), + + url(r'^sessao/(?P\d+)/(?P\d+)/(?P\d+)/retirar-leitura$', + retirar_leitura, name='retirar_leitura'), + ] diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 271f0b3d3..bd42e4788 100755 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -8,7 +8,6 @@ from django.contrib.auth.mixins import PermissionRequiredMixin from django.core.exceptions import ObjectDoesNotExist from django.core.urlresolvers import reverse from django.db.models import Max, Q -from django.forms.utils import ErrorList from django.http import JsonResponse from django.http.response import Http404, HttpResponseRedirect from django.utils import timezone @@ -17,7 +16,7 @@ from django.utils.decorators import method_decorator from django.utils.html import strip_tags from django.utils.translation import ugettext_lazy as _ from django.views.decorators.csrf import csrf_exempt -from django.views.generic import FormView, ListView, TemplateView, CreateView, UpdateView +from django.views.generic import (FormView, ListView, TemplateView) from django.views.generic.base import RedirectView from django.views.generic.detail import DetailView from django.views.generic.edit import FormMixin @@ -34,7 +33,7 @@ from sapl.materia.views import MateriaLegislativaPesquisaView from sapl.parlamentares.models import (Filiacao, Legislatura, Mandato, Parlamentar, SessaoLegislativa) from sapl.sessao.apps import AppConfig -from sapl.sessao.forms import ExpedienteMateriaForm, OrdemDiaForm +from sapl.sessao.forms import ExpedienteMateriaForm, OrdemDiaForm, OrdemExpedienteLeituraForm from sapl.utils import show_results_filter_set, remover_acentos, get_client_ip from .forms import (AdicionarVariasMateriasFilterSet, BancadaForm, @@ -49,7 +48,8 @@ from .models import (Bancada, CargoBancada, CargoMesa, PresencaOrdemDia, RegistroVotacao, ResumoOrdenacao, SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria, VotoParlamentar, TipoRetiradaPauta, - RetiradaPauta, TipoJustificativa, JustificativaAusencia, OradorOrdemDia, ORDENACAO_RESUMO) + RetiradaPauta, TipoJustificativa, JustificativaAusencia, OradorOrdemDia, + ORDENACAO_RESUMO, RegistroLeitura) TipoSessaoCrud = CrudAux.build(TipoSessaoPlenaria, 'tipo_sessao_plenaria') @@ -59,6 +59,12 @@ TipoResultadoVotacaoCrud = CrudAux.build( TipoResultadoVotacao, 'tipo_resultado_votacao') TipoRetiradaPautaCrud = CrudAux.build(TipoRetiradaPauta, 'tipo_retirada_pauta') +# constantes +SIMBOLICA = 1 +NOMINAL = 2 +SECRETA = 3 +LEITURA = 4 + def reordernar_materias_expediente(request, pk): expedientes = ExpedienteMateria.objects.filter( @@ -142,12 +148,12 @@ def verifica_votacoes_abertas(request): kwargs={'pk': v.id}), v.__str__())) username = request.user.username - logger.info('user=' + username + '. Já existem votações abertas nas seguintes Sessões: ' + + logger.info('user=' + username + '. Já existem votações ou leituras abertas nas seguintes Sessões: ' + ', '.join(msg_abertas) + '. Para abrir ' - 'outra, termine ou feche as votações abertas.') - msg = _('Já existem votações abertas nas seguintes Sessões: ' + + 'outra, termine ou feche as votações ou leituras abertas.') + msg = _('Já existem votações ou leituras abertas nas seguintes Sessões: ' + ', '.join(msg_abertas) + '. Para abrir ' - 'outra, termine ou feche as votações abertas.') + 'outra, termine ou feche as votações ou leituras abertas.') messages.add_message(request, messages.INFO, msg) return False @@ -189,6 +195,8 @@ def abrir_votacao(request, pk, spk): if not model: raise Http404() + query_params = "?" + if (verifica_presenca(request, presenca_model, spk) and verifica_votacoes_abertas(request) and verifica_sessao_iniciada(request, spk)): @@ -199,8 +207,15 @@ def abrir_votacao(request, pk, spk): sessao.save() materia_votacao.save() - return HttpResponseRedirect( - reverse('sapl.sessao:' + redirect_url, kwargs={'pk': spk})) + if 'page' in request.GET: + query_params += 'page={}&'.format(request.GET['page']) + + query_params += "#id{}".format(materia_votacao.materia.id) + + success_url = reverse('sapl.sessao:' + redirect_url, kwargs={'pk': spk}) + success_url += query_params + + return HttpResponseRedirect(success_url) def customize_link_materia(context, pk, has_permission, is_expediente): @@ -234,12 +249,13 @@ def customize_link_materia(context, pk, has_permission, is_expediente): turno = t[1] break - title_materia = '''%s
+ title_materia = """%s
Processo: %s
Autor: %s
Protocolo: %s
Turno: %s
- ''' % (url_materia, + """ % (obj.materia.id, + url_materia, row[1][0], numeracao if numeracao else '', autor if autor else '', @@ -254,54 +270,87 @@ def customize_link_materia(context, pk, has_permission, is_expediente): materia=obj.materia).exists() exist_retirada = obj.retiradapauta_set.filter( materia=obj.materia).exists() - if not exist_resultado and not exist_retirada: + exist_leitura = obj.registroleitura_set.filter( + materia=obj.materia).exists() + + if (obj.tipo_votacao != 4 and not exist_resultado and not exist_retirada) or\ + (obj.tipo_votacao == 4 and not exist_leitura): if obj.votacao_aberta: url = '' if is_expediente: - if obj.tipo_votacao == 1: + if obj.tipo_votacao == SIMBOLICA: url = reverse('sapl.sessao:votacaosimbolicaexp', kwargs={ 'pk': obj.sessao_plenaria_id, 'oid': obj.pk, 'mid': obj.materia_id}) - elif obj.tipo_votacao == 2: + elif obj.tipo_votacao == NOMINAL: url = reverse('sapl.sessao:votacaonominalexp', kwargs={ 'pk': obj.sessao_plenaria_id, 'oid': obj.pk, 'mid': obj.materia_id}) - elif obj.tipo_votacao == 3: + elif obj.tipo_votacao == SECRETA: url = reverse('sapl.sessao:votacaosecretaexp', kwargs={ 'pk': obj.sessao_plenaria_id, 'oid': obj.pk, 'mid': obj.materia_id}) + elif obj.tipo_votacao == LEITURA: + url = reverse('sapl.sessao:leituraexp', + kwargs={ + 'pk': obj.sessao_plenaria_id, + 'oid': obj.pk, + 'mid': obj.materia_id}) + else: - if obj.tipo_votacao == 1: + if obj.tipo_votacao == SIMBOLICA: url = reverse('sapl.sessao:votacaosimbolica', kwargs={ 'pk': obj.sessao_plenaria_id, 'oid': obj.pk, 'mid': obj.materia_id}) - elif obj.tipo_votacao == 2: + elif obj.tipo_votacao == NOMINAL: url = reverse('sapl.sessao:votacaonominal', kwargs={ 'pk': obj.sessao_plenaria_id, 'oid': obj.pk, 'mid': obj.materia_id}) - elif obj.tipo_votacao == 3: + elif obj.tipo_votacao == SECRETA: url = reverse('sapl.sessao:votacaosecreta', kwargs={ 'pk': obj.sessao_plenaria_id, 'oid': obj.pk, 'mid': obj.materia_id}) + elif obj.tipo_votacao == LEITURA: + url = reverse('sapl.sessao:leituraod', + kwargs={ + 'pk': obj.sessao_plenaria_id, + 'oid': obj.pk, + 'mid': obj.materia_id}) + + page_number = "" + if 'page' in context: + #url += "?page={}".format(context['page']) + page_number = "" % context['page'] + if has_permission: - btn_registrar = ''' -
- -
''' % ( - url) + if obj.tipo_votacao != LEITURA: + btn_registrar = ''' +
+ + %s +
''' % ( + url, page_number) + else: + btn_registrar = ''' +
+ + %s +
''' % ( + url, page_number) resultado = btn_registrar else: @@ -310,21 +359,36 @@ def customize_link_materia(context, pk, has_permission, is_expediente): if is_expediente: url = reverse('sapl.sessao:abrir_votacao', kwargs={ 'pk': obj.pk, - 'spk': obj.sessao_plenaria_id + 'spk': obj.sessao_plenaria_id, }) + '?tipo_materia=expediente' + + if 'page' in context: + url += '&page=' + context['page'] + else: url = reverse('sapl.sessao:abrir_votacao', kwargs={ 'pk': obj.pk, 'spk': obj.sessao_plenaria_id }) + '?tipo_materia=ordem' + if 'page' in context: + url += '&page=' + context['page'] + if has_permission: - btn_abrir = ''' - Matéria não votada
- Abrir Votação''' % (url) - resultado = btn_abrir + if not obj.tipo_votacao == LEITURA: + btn_abrir = ''' + Matéria não votada
+ Abrir Votação''' % (url) + resultado = btn_abrir + else: + btn_abrir = ''' + Matéria não lida
+ Abrir para Leitura''' % (url) + resultado = btn_abrir else: resultado = '''Não há resultado''' @@ -341,60 +405,80 @@ def customize_link_materia(context, pk, has_permission, is_expediente): retirada_observacao)) else: - resultado = obj.registrovotacao_set.filter( - materia_id=obj.materia_id).last() - resultado_descricao = resultado.tipo_resultado_votacao.nome - resultado_observacao = resultado.observacao + if obj.tipo_votacao == LEITURA: + resultado = obj.registroleitura_set.filter( + materia_id=obj.materia_id).last() + resultado_descricao = "Matéria lida" + resultado_observacao = resultado.observacao + else: + resultado = obj.registrovotacao_set.filter( + materia_id=obj.materia_id).last() + resultado_descricao = resultado.tipo_resultado_votacao.nome + resultado_observacao = resultado.observacao if has_permission: url = '' if is_expediente: - if obj.tipo_votacao == 1: + if obj.tipo_votacao == SIMBOLICA: url = reverse( 'sapl.sessao:votacaosimbolicaexpedit', kwargs={ 'pk': obj.sessao_plenaria_id, 'oid': obj.pk, 'mid': obj.materia_id}) - elif obj.tipo_votacao == 2: + elif obj.tipo_votacao == NOMINAL: url = reverse('sapl.sessao:votacaonominalexpedit', kwargs={ 'pk': obj.sessao_plenaria_id, 'oid': obj.pk, 'mid': obj.materia_id}) - elif obj.tipo_votacao == 3: + elif obj.tipo_votacao == SECRETA: url = reverse('sapl.sessao:votacaosecretaexpedit', kwargs={ 'pk': obj.sessao_plenaria_id, 'oid': obj.pk, 'mid': obj.materia_id}) + elif obj.tipo_votacao == LEITURA: + url = reverse('sapl.sessao:leituraexp', + kwargs={ + 'pk': obj.sessao_plenaria_id, + 'oid': obj.pk, + 'mid': obj.materia_id}) else: - if obj.tipo_votacao == 1: + if obj.tipo_votacao == SIMBOLICA: url = reverse('sapl.sessao:votacaosimbolicaedit', kwargs={ 'pk': obj.sessao_plenaria_id, 'oid': obj.pk, 'mid': obj.materia_id}) - elif obj.tipo_votacao == 2: + elif obj.tipo_votacao == NOMINAL: url = reverse('sapl.sessao:votacaonominaledit', kwargs={ 'pk': obj.sessao_plenaria_id, 'oid': obj.pk, 'mid': obj.materia_id}) - elif obj.tipo_votacao == 3: + elif obj.tipo_votacao == SECRETA: url = reverse('sapl.sessao:votacaosecretaedit', kwargs={ 'pk': obj.sessao_plenaria_id, 'oid': obj.pk, 'mid': obj.materia_id}) + elif obj.tipo_votacao == LEITURA: + url = reverse('sapl.sessao:leituraod', + kwargs={ + 'pk': obj.sessao_plenaria_id, + 'oid': obj.pk, + 'mid': obj.materia_id}) - resultado = ('%s
%s
' % - (url, - resultado_descricao, - resultado_observacao)) + resultado = ( + '%s

%s
' % ( + url, + context.get('page', 1), + resultado_descricao, + resultado_observacao)) else: - if obj.tipo_votacao == 2: + if obj.tipo_votacao == NOMINAL: if is_expediente: url = reverse( 'sapl.sessao:votacao_nominal_transparencia', @@ -417,7 +501,7 @@ def customize_link_materia(context, pk, has_permission, is_expediente): resultado_descricao, resultado_observacao)) - elif obj.tipo_votacao == 1: + elif obj.tipo_votacao == SIMBOLICA: if is_expediente: url = reverse( 'sapl.sessao:votacao_simbolica_transparencia', @@ -448,18 +532,17 @@ def customize_link_materia(context, pk, has_permission, is_expediente): def get_presencas_generic(model, sessao, legislatura): - presencas = model.objects.filter( - sessao_plenaria=sessao) - - presentes = [p.parlamentar for p in presencas] + presentes = [p.parlamentar for p in model.objects.filter( + sessao_plenaria=sessao)] - presentes = sorted( - presentes, key=lambda x: remover_acentos(x.nome_parlamentar)) + parlamentares_mandato = Mandato.objects.filter( + legislatura=legislatura, + data_inicio_mandato__lte=sessao.data_inicio, + data_fim_mandato__gte=sessao.data_inicio + ).distinct().order_by( + 'parlamentar__nome_parlamentar') - mandato = Mandato.objects.filter( - legislatura=legislatura).order_by('parlamentar__nome_parlamentar') - - for m in mandato: + for m in parlamentares_mandato: if m.parlamentar in presentes: yield (m.parlamentar, True) else: @@ -470,14 +553,14 @@ class TipoExpedienteCrud(CrudAux): model = TipoExpediente class DeleteView(CrudAux.DeleteView): - + def delete(self, *args, **kwargs): self.object = self.get_object() - - # Se todas as referências a este tipo forem de conteúdo vazio, + + # Se todas as referências a este tipo forem de conteúdo vazio, # significa que pode ser apagado if self.object.expedientesessao_set.filter(conteudo='').count() == \ - self.object.expedientesessao_set.all().count(): + self.object.expedientesessao_set.all().count(): self.object.expedientesessao_set.all().delete() return CrudAux.DeleteView.delete(self, *args, **kwargs) @@ -529,6 +612,11 @@ class MateriaOrdemDiaCrud(MasterDetailCrud): ordering = ['numero_ordem', 'materia', 'resultado'] def get_context_data(self, **kwargs): + if self.get_queryset().count() > 500: + self.paginate_by = 50 + else: + self.paginate_by = None + context = super().get_context_data(**kwargs) has_permition = self.request.user.has_module_perms(AppConfig.label) return customize_link_materia(context, self.kwargs['pk'], has_permition, False) @@ -568,7 +656,17 @@ class ExpedienteMateriaCrud(MasterDetailCrud): ordering = ['numero_ordem', 'materia', 'resultado'] def get_context_data(self, **kwargs): + + if self.get_queryset().count() > 500: + self.paginate_by = 50 + else: + self.paginate_by = None + context = super().get_context_data(**kwargs) + + if self.request.GET.get('page'): + context['page'] = self.request.GET.get('page') + has_permition = self.request.user.has_module_perms(AppConfig.label) return customize_link_materia(context, self.kwargs['pk'], has_permition, True) @@ -605,6 +703,7 @@ class ExpedienteMateriaCrud(MasterDetailCrud): layout_key = 'ExpedienteMateriaDetail' +# Orador das Explicações Pessoais class OradorCrud(MasterDetailCrud): model = Orador parent_field = 'sessao_plenaria' @@ -620,35 +719,10 @@ class OradorCrud(MasterDetailCrud): sessao = SessaoPlenaria.objects.get(id=sessao_pk) tipo_sessao = sessao.tipo if tipo_sessao.nome == "Solene": - context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'}) + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) return context - class CreateView(MasterDetailCrud.CreateView): - - form_class = OradorForm - - def get_initial(self): - return {'id_sessao': self.kwargs['pk']} - - def get_success_url(self): - return reverse('sapl.sessao:orador_list', - kwargs={'pk': self.kwargs['pk']}) - -class UpdateView(MasterDetailCrud.UpdateView): - - form_class = OradorForm - - def get_initial(self): - initial = super().get_initial() - initial.update({'id_sessao': self.object.sessao_plenaria.id}) - initial.update({'numero': self.object.numero_ordem}) - - return initial - - -class OradorExpedienteCrud(OradorCrud): - model = OradorExpediente - class CreateView(MasterDetailCrud.CreateView): form_class = OradorForm @@ -662,24 +736,15 @@ class OradorExpedienteCrud(OradorCrud): sessao = SessaoPlenaria.objects.get(id=sessao_pk) tipo_sessao = sessao.tipo if tipo_sessao.nome == "Solene": - context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'}) + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) return context def get_success_url(self): return reverse('sapl.sessao:orador_list', kwargs={'pk': self.kwargs['pk']}) - - class UpdateView(MasterDetailCrud.UpdateView): - - form_class = OradorForm - - def get_initial(self): - initial = super().get_initial() - initial.update({'id_sessao': self.object.sessao_plenaria.id}) - initial.update({'numero':self.object.numero_ordem}) - - return initial + class DetailView(MasterDetailCrud.DetailView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) @@ -687,11 +752,19 @@ class OradorExpedienteCrud(OradorCrud): sessao = SessaoPlenaria.objects.get(id=sessao_pk) tipo_sessao = sessao.tipo if tipo_sessao.nome == "Solene": - context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'}) + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) return context - - class DetailView(MasterDetailCrud.DetailView): + class UpdateView(MasterDetailCrud.UpdateView): + + form_class = OradorForm + + def get_initial(self): + initial = super().get_initial() + initial.update({'id_sessao': self.object.sessao_plenaria.id}) + initial.update({'numero': self.object.numero_ordem}) + return initial def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) @@ -699,10 +772,10 @@ class OradorExpedienteCrud(OradorCrud): sessao = SessaoPlenaria.objects.get(id=sessao_pk) tipo_sessao = sessao.tipo if tipo_sessao.nome == "Solene": - context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'}) + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) return context - class DeleteView(MasterDetailCrud.DeleteView): def get_context_data(self, **kwargs): @@ -711,7 +784,8 @@ class OradorExpedienteCrud(OradorCrud): sessao = SessaoPlenaria.objects.get(id=sessao_pk) tipo_sessao = sessao.tipo if tipo_sessao.nome == "Solene": - context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'}) + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) return context @@ -725,16 +799,15 @@ class OradorExpedienteCrud(OradorCrud): def get_initial(self): return {'id_sessao': self.kwargs['pk']} - def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) pk = context['root_pk'] sessao = SessaoPlenaria.objects.get(id=pk) tipo_sessao = sessao.tipo if tipo_sessao.nome == "Solene": - context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'}) + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) return context - def get_success_url(self): return reverse('sapl.sessao:oradorexpediente_list', @@ -747,8 +820,18 @@ class OradorExpedienteCrud(OradorCrud): return {'id_sessao': self.object.sessao_plenaria.id, 'numero': self.object.numero_ordem} + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + pk = context['root_pk'] + sessao = SessaoPlenaria.objects.get(id=pk) + tipo_sessao = sessao.tipo + if tipo_sessao.nome == "Solene": + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) + return context class ListView(MasterDetailCrud.ListView): + ordering = ['numero_ordem'] def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) @@ -756,7 +839,8 @@ class OradorExpedienteCrud(OradorCrud): sessao = SessaoPlenaria.objects.get(id=pk) tipo_sessao = sessao.tipo if tipo_sessao.nome == "Solene": - context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'}) + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) return context class DetailView(MasterDetailCrud.DetailView): @@ -767,21 +851,23 @@ class OradorExpedienteCrud(OradorCrud): sessao = SessaoPlenaria.objects.get(id=pk) tipo_sessao = sessao.tipo if tipo_sessao.nome == "Solene": - context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'}) + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) return context - - class UpdateView(MasterDetailCrud.UpdateView): + class DeleteView(MasterDetailCrud.DeleteView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) - pk = context['root_pk'] - sessao = SessaoPlenaria.objects.get(id=pk) + sessao_pk = context['root_pk'] + sessao = SessaoPlenaria.objects.get(id=sessao_pk) tipo_sessao = sessao.tipo if tipo_sessao.nome == "Solene": - context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'}) + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) return context + class OradorOrdemDiaCrud(OradorCrud): model = OradorOrdemDia @@ -906,7 +992,8 @@ class SessaoCrud(Crud): sessao = context['object'] tipo_sessao = sessao.tipo if tipo_sessao.nome == "Solene": - context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'}) + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) return context def get_initial(self): @@ -953,6 +1040,15 @@ class SessaoCrud(Crud): namespace = self.model._meta.app_config.name return reverse('%s:%s' % (namespace, 'sessaoplenaria_list')) + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + sessao = context['object'] + tipo_sessao = sessao.tipo + if tipo_sessao.nome == "Solene": + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) + return context + class DetailView(Crud.DetailView): @property @@ -963,14 +1059,13 @@ class SessaoCrud(Crud): return 'SessaoSolene' return 'SessaoPlenaria' - def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) sessao = context['object'] tipo_sessao = sessao.tipo if tipo_sessao.nome == "Solene": - context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'}) - # self.layout_key = 'SessaoSolene' + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) return context @@ -1009,7 +1104,8 @@ class PresencaView(FormMixin, PresencaMixin, DetailView): sessao = context['object'] tipo_sessao = sessao.tipo if tipo_sessao.nome == "Solene": - context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'}) + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) return context @method_decorator(permission_required( @@ -1109,7 +1205,8 @@ class PainelView(PermissionRequiredForAppCrudMixin, TemplateView): tipo_sessao = sessao.tipo if tipo_sessao.nome == "Solene": - context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'}) + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) return context @@ -1336,9 +1433,10 @@ class MesaView(FormMixin, DetailView): sessao = context['object'] tipo_sessao = sessao.tipo if tipo_sessao.nome == "Solene": - context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'}) + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) return context - + def get_success_url(self): pk = self.kwargs['pk'] return reverse('sapl.sessao:mesa', kwargs={'pk': pk}) @@ -1539,7 +1637,7 @@ def get_turno(turno): return '' -def get_identificação_basica(sessao_plenaria): +def get_identificacao_basica(sessao_plenaria): # ===================================================================== # Identificação Básica data_inicio = sessao_plenaria.data_inicio @@ -1553,10 +1651,11 @@ def get_identificação_basica(sessao_plenaria): 'abertura': abertura, 'hora_inicio': sessao_plenaria.hora_inicio}, _('Encerramento: %(encerramento)s %(hora_fim)s') % { 'encerramento': encerramento, 'hora_fim': sessao_plenaria.hora_fim}, - ], + ], 'sessaoplenaria': sessao_plenaria} if sessao_plenaria.tipo.nome == "Solene" and tema_solene: - context.update({'tema_solene': 'Tema da Sessão Solene: %s' % tema_solene}) + context.update( + {'tema_solene': 'Tema da Sessão Solene: %s' % tema_solene}) return context @@ -1587,11 +1686,11 @@ def get_presenca_sessao(sessao_plenaria): parlamentares_sessao = [p.parlamentar for p in SessaoPlenariaPresenca.objects.filter( sessao_plenaria_id=sessao_plenaria.id - ).order_by('parlamentar__nome_parlamentar')] + ).order_by('parlamentar__nome_parlamentar').distinct()] ausentes_sessao = JustificativaAusencia.objects.filter( sessao_plenaria_id=sessao_plenaria.id - ).order_by('parlamentar__nome_parlamentar') + ).distinct().order_by('parlamentar__nome_parlamentar') return ({'presenca_sessao': parlamentares_sessao, 'justificativa_ausencia': ausentes_sessao}) @@ -1685,7 +1784,7 @@ def get_oradores_expediente(sessao_plenaria): def get_presenca_ordem_do_dia(sessao_plenaria): parlamentares_ordem = [p.parlamentar for p in PresencaOrdemDia.objects.filter( sessao_plenaria_id=sessao_plenaria.id - ).order_by('parlamentar__nome_parlamentar')] + ).distinct().order_by('parlamentar__nome_parlamentar')] return {'presenca_ordem': parlamentares_ordem} @@ -1721,7 +1820,8 @@ def get_assinaturas(sessao_plenaria): elif config_assinatura_ata == 'P' and presidente_dia and presidente_dia[0]: context.update( {'texto_assinatura': 'Assinatura do Presidente da Sessão'}) - assinatura_presidente = [{'parlamentar': presidente_dia[0], 'cargo': "Presidente"}] + assinatura_presidente = [ + {'parlamentar': presidente_dia[0], 'cargo': "Presidente"}] context.update({'assinatura_mesa': assinatura_presidente}) return context @@ -1834,7 +1934,7 @@ def get_oradores_ordemdia(sessao_plenaria): return context -def get_oradores_explicações_pessoais(sessao_plenaria): +def get_oradores_explicacoes_pessoais(sessao_plenaria): oradores_explicacoes = [] for orador in Orador.objects.filter( sessao_plenaria_id=sessao_plenaria.id).order_by('numero_ordem'): @@ -1856,7 +1956,7 @@ def get_oradores_explicações_pessoais(sessao_plenaria): return context -def get_ocorrencias_da_sessão(sessao_plenaria): +def get_ocorrencias_da_sessao(sessao_plenaria): ocorrencias_sessao = OcorrenciaSessao.objects.filter( sessao_plenaria_id=sessao_plenaria.id) context = {'ocorrencias_da_sessao': ocorrencias_sessao} @@ -1897,7 +1997,7 @@ class ResumoView(DetailView): # ===================================================================== # Identificação Básica - context.update(get_identificação_basica(self.object)) + context.update(get_identificacao_basica(self.object)) # ===================================================================== # Conteúdo Multimídia context.update(get_conteudo_multimidia(self.object)) @@ -1952,10 +2052,10 @@ class ResumoView(DetailView): context.update(get_oradores_ordemdia(self.object)) # ===================================================================== # Oradores nas Explicações Pessoais - context.update(get_oradores_explicações_pessoais(self.object)) + context.update(get_oradores_explicacoes_pessoais(self.object)) # ===================================================================== # Ocorrẽncias da Sessão - context.update(get_ocorrencias_da_sessão(self.object)) + context.update(get_ocorrencias_da_sessao(self.object)) # ===================================================================== # Indica a ordem com a qual o template será renderizado dict_ord_template = { @@ -2016,7 +2116,8 @@ class ResumoView(DetailView): sessao = context['object'] tipo_sessao = sessao.tipo if tipo_sessao.nome == "Solene": - context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'}) + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) return context def get(self, request, *args, **kwargs): @@ -2044,7 +2145,8 @@ class ExpedienteView(FormMixin, DetailView): sessao = context['object'] tipo_sessao = sessao.tipo if tipo_sessao.nome == "Solene": - context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'}) + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) return context @method_decorator(permission_required('sessao.add_expedientesessao')) @@ -2092,16 +2194,14 @@ class ExpedienteView(FormMixin, DetailView): def get(self, request, *args, **kwargs): self.object = self.get_object() context = self.get_context_data(object=self.object) - tipos = TipoExpediente.objects.all().order_by('nome') + tipos = TipoExpediente.objects.all().order_by('ordenacao', 'nome') expedientes_sessao = ExpedienteSessao.objects.filter( - sessao_plenaria_id=self.object.id).order_by('tipo__nome') + sessao_plenaria_id=self.object.id).order_by('tipo__ordenacao', 'tipo__nome') - expedientes_salvos = [] - for e in expedientes_sessao: - expedientes_salvos.append(e.tipo) + expedientes_salvos = [e.tipo.id for e in expedientes_sessao] - tipos_null = list(set(tipos) - set(expedientes_salvos)) - tipos_null.sort(key=lambda x: x.nome) + tipos_null = TipoExpediente.objects.all().exclude( + id__in=expedientes_salvos).order_by('ordenacao', 'nome') expedientes = [] for e, t in zip(expedientes_sessao, tipos): @@ -2137,7 +2237,8 @@ class OcorrenciaSessaoView(FormMixin, DetailView): sessao = context['object'] tipo_sessao = sessao.tipo if tipo_sessao.nome == "Solene": - context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'}) + context.update( + {'subnav_template_name': 'sessao/subnav-solene.yaml'}) return context def delete(self): @@ -2254,9 +2355,13 @@ class VotacaoEditView(SessaoPermissionMixin): yield tipo def get_success_url(self): + page = '' + if 'page' in self.request.GET: + page = '?page={}'.format(self.request.GET['page']) + pk = self.kwargs['pk'] return reverse('sapl.sessao:ordemdia_list', - kwargs={'pk': pk}) + kwargs={'pk': pk}) + page class VotacaoView(SessaoPermissionMixin): @@ -2322,7 +2427,7 @@ class VotacaoView(SessaoPermissionMixin): ordem_id = kwargs['oid'] ordem = OrdemDia.objects.get(id=ordem_id) - + presentes_id = [ presente.parlamentar.id for presente in PresencaOrdemDia.objects.filter( sessao_plenaria_id=self.kwargs['pk'] @@ -2402,9 +2507,13 @@ class VotacaoView(SessaoPermissionMixin): yield tipo def get_success_url(self): + page = '' + if 'page' in self.request.GET: + page = '?page={}'.format(self.request.GET['page']) + pk = self.kwargs['pk'] return reverse('sapl.sessao:ordemdia_list', - kwargs={'pk': pk}) + kwargs={'pk': pk}) + page + "#id{}".format(self.kwargs['mid']) def fechar_votacao_materia(materia): @@ -2521,6 +2630,10 @@ class VotacaoNominalAbstract(SessaoPermissionMixin): form = self.get_form() username = request.user.username + page = '' + if 'page' in self.request.GET: + page = '?page={}'.format(self.request.GET['page']) + if self.ordem: ordem_id = kwargs['oid'] try: @@ -2552,12 +2665,19 @@ class VotacaoNominalAbstract(SessaoPermissionMixin): if 'cancelar-votacao' in request.POST: fechar_votacao_materia(materia_votacao) if self.ordem: - return HttpResponseRedirect(reverse( - 'sapl.sessao:ordemdia_list', kwargs={'pk': kwargs['pk']})) + return HttpResponseRedirect( + reverse( + 'sapl.sessao:ordemdia_list', + kwargs={'pk': kwargs['pk']} + ) + page + "#id{}".format(self.kwargs['mid']) + ) else: - return HttpResponseRedirect(reverse( - 'sapl.sessao:expedientemateria_list', - kwargs={'pk': kwargs['pk']})) + return HttpResponseRedirect( + reverse( + 'sapl.sessao:expedientemateria_list', + kwargs={'pk': kwargs['pk']} + ) + page + "#id{}".format(self.kwargs['mid']) + ) else: if form.cleaned_data['resultado_votacao'] == None: form.add_error(None, 'Não é possível finalizar a votação sem ' @@ -2704,14 +2824,22 @@ class VotacaoNominalAbstract(SessaoPermissionMixin): yield [parlamentar, voto.voto] def get_success_url(self): + page = '' + if 'page' in self.request.GET: + page = '?page={}'.format(self.request.GET['page']) + pk = self.kwargs['pk'] if self.ordem: - return reverse('sapl.sessao:ordemdia_list', - kwargs={'pk': pk}) + return reverse( + 'sapl.sessao:ordemdia_list', + kwargs={'pk': pk} + ) + page + "#id{}".format(self.kwargs['mid']) elif self.expediente: - return reverse('sapl.sessao:expedientemateria_list', - kwargs={'pk': pk}) + return reverse( + 'sapl.sessao:expedientemateria_list', + kwargs={'pk': pk} + ) + page + "#id{}".format(self.kwargs['mid']) class VotacaoNominalEditAbstract(SessaoPermissionMixin): @@ -2829,14 +2957,22 @@ class VotacaoNominalEditAbstract(SessaoPermissionMixin): yield tipo def get_success_url(self): + page = '' + if 'page' in self.request.GET: + page = '?page={}'.format(self.request.GET['page']) + pk = self.kwargs['pk'] if self.ordem: - return reverse('sapl.sessao:ordemdia_list', - kwargs={'pk': pk}) + return reverse( + 'sapl.sessao:ordemdia_list', + kwargs={'pk': pk} + ) + page + "#id{}".format(self.kwargs['mid']) elif self.expediente: - return reverse('sapl.sessao:expedientemateria_list', - kwargs={'pk': pk}) + return reverse( + 'sapl.sessao:expedientemateria_list', + kwargs={'pk': pk} + ) + page + "#id{}".format(self.kwargs['mid']) class VotacaoNominalView(VotacaoNominalAbstract): @@ -2938,9 +3074,13 @@ class VotacaoNominalExpedienteDetailView(DetailView): yield tipo def get_success_url(self): + page = '' + if 'page' in self.request.GET: + page = '?page={}'.format(self.request.GET['page']) + pk = self.kwargs['pk'] return reverse('sapl.sessao:expedientemateria_list', - kwargs={'pk': pk}) + kwargs={'pk': pk}) + page class VotacaoSimbolicaTransparenciaDetailView(TemplateView): @@ -3007,7 +3147,7 @@ class VotacaoExpedienteView(SessaoPermissionMixin): expediente_id = kwargs['oid'] expediente = ExpedienteMateria.objects.get(id=expediente_id) - + presentes_id = [ presente.parlamentar.id for presente in SessaoPlenariaPresenca.objects.filter( sessao_plenaria_id=self.kwargs['pk'] @@ -3125,9 +3265,15 @@ class VotacaoExpedienteView(SessaoPermissionMixin): yield tipo def get_success_url(self): + page = '' + if 'page' in self.request.GET: + page = '?page={}'.format(self.request.GET['page']) + pk = self.kwargs['pk'] - return reverse('sapl.sessao:expedientemateria_list', - kwargs={'pk': pk}) + return reverse( + 'sapl.sessao:expedientemateria_list', + kwargs={'pk': pk} + ) + page + "#id{}".format(self.kwargs['mid']) class VotacaoExpedienteEditView(SessaoPermissionMixin): @@ -3140,9 +3286,15 @@ class VotacaoExpedienteEditView(SessaoPermissionMixin): form_class = VotacaoEditForm def get_success_url(self): + page = '' + if 'page' in self.request.GET: + page = '?page={}'.format(self.request.GET['page']) + pk = self.kwargs['pk'] - return reverse('sapl.sessao:expedientemateria_list', - kwargs={'pk': pk}) + return reverse( + 'sapl.sessao:expedientemateria_list', + kwargs={'pk': pk} + ) + page + "#id{}".format(self.kwargs['mid']) def get_tipos_votacao(self): for tipo in TipoResultadoVotacao.objects.all(): @@ -3243,6 +3395,8 @@ class PautaSessaoDetailView(DetailView): model = SessaoPlenaria def get(self, request, *args, **kwargs): + from sapl.relatorios.views import relatorio_pauta_sessao_weasy # Evitar import ciclico + self.object = self.get_object() context = self.get_context_data(object=self.object) @@ -3254,11 +3408,15 @@ class PautaSessaoDetailView(DetailView): else: encerramento = "" + hora_inicio = self.object.hora_inicio + hora_fim = self.object.hora_fim + context.update({'basica': [ _('Tipo de Sessão: %(tipo)s') % {'tipo': self.object.tipo}, - _('Abertura: %(abertura)s') % {'abertura': abertura}, - _('Encerramento: %(encerramento)s') % { - 'encerramento': encerramento}, + _('Abertura: %(abertura)s - %(hora_inicio)s') % { + 'abertura': abertura, 'hora_inicio': hora_inicio}, + _('Encerramento: %(encerramento)s - %(hora_fim)s') % { + 'encerramento': encerramento, 'hora_fim': hora_fim}, ]}) # ===================================================================== # Matérias Expediente @@ -3304,15 +3462,13 @@ class PautaSessaoDetailView(DetailView): # ===================================================================== # Expedientes expediente = ExpedienteSessao.objects.filter( - sessao_plenaria_id=self.object.id) + sessao_plenaria_id=self.object.id).order_by('tipo__ordenacao') expedientes = [] for e in expediente: - tipo = TipoExpediente.objects.get( - id=e.tipo_id) + tipo = e.tipo conteudo = sub( - ' ', ' ', strip_tags(e.conteudo.replace('
', '\n'))) - + ' ', ' ', e.conteudo) ex = {'tipo': tipo, 'conteudo': conteudo} expedientes.append(ex) @@ -3367,7 +3523,13 @@ class PautaSessaoDetailView(DetailView): context.update({'materias_ordem': materias_ordem}) context.update({'subnav_template_name': 'sessao/pauta_subnav.yaml'}) - return self.render_to_response(context) + is_pdf = True if request.build_absolute_uri().split( + '/')[-1] == 'pdf' else False + + if is_pdf: + return relatorio_pauta_sessao_weasy(self, request, context) + else: + return self.render_to_response(context) class PesquisarSessaoPlenariaView(FilterView): @@ -3767,6 +3929,7 @@ class VotacaoEmBlocoExpediente(PermissionRequiredForAppCrudMixin, ListView): template_name = 'sessao/votacao/votacao_bloco.html' app_label = AppConfig.label expediente = True + paginate_by = 100 def get_queryset(self): return ExpedienteMateria.objects.filter(sessao_plenaria_id=self.kwargs['pk'], @@ -3792,6 +3955,7 @@ class VotacaoEmBlocoExpediente(PermissionRequiredForAppCrudMixin, ListView): class VotacaoEmBlocoOrdemDia(VotacaoEmBlocoExpediente): expediente = False + paginate_by = 100 def get_queryset(self): return OrdemDia.objects.filter(sessao_plenaria_id=self.kwargs['pk'], @@ -3828,7 +3992,7 @@ class VotacaoEmBlocoSimbolicaView(PermissionRequiredForAppCrudMixin, TemplateVie if request.POST['origem'] == 'ordem': ordens = OrdemDia.objects.filter( id__in=request.POST.getlist('marcadas_1')) - + presentes_id = [ presente.parlamentar.id for presente in PresencaOrdemDia.objects.filter( sessao_plenaria_id=self.kwargs['pk'] @@ -3847,7 +4011,7 @@ class VotacaoEmBlocoSimbolicaView(PermissionRequiredForAppCrudMixin, TemplateVie else: expedientes = ExpedienteMateria.objects.filter( id__in=request.POST.getlist('marcadas_1')) - + presentes_id = [ presente.parlamentar.id for presente in SessaoPlenariaPresenca.objects.filter( sessao_plenaria_id=self.kwargs['pk'] @@ -3987,7 +4151,7 @@ class VotacaoEmBlocoSimbolicaView(PermissionRequiredForAppCrudMixin, TemplateVie if self.request.POST['origem'] == 'ordem': ordens = OrdemDia.objects.filter( id__in=self.request.POST.getlist('ordens')) - + presentes_id = [ presente.parlamentar.id for presente in PresencaOrdemDia.objects.filter( sessao_plenaria_id=self.kwargs['pk'] @@ -4001,12 +4165,12 @@ class VotacaoEmBlocoSimbolicaView(PermissionRequiredForAppCrudMixin, TemplateVie qtde_ativos = len(presenca_ativos) context.update({'ordens': ordens, - 'total_presentes': qtde_presentes, + 'total_presentes': qtde_presentes, 'total_votantes': qtde_ativos}) elif self.request.POST['origem'] == 'expediente': expedientes = ExpedienteMateria.objects.filter( id__in=self.request.POST.getlist('expedientes')) - + presentes_id = [ presente.parlamentar.id for presente in SessaoPlenariaPresenca.objects.filter( sessao_plenaria_id=self.kwargs['pk'] @@ -4333,3 +4497,108 @@ class RetiradaPautaCrud(MasterDetailCrud): class DeleteView(MasterDetailCrud.DeleteView): pass + + +class AbstractLeituraView(FormView): + template_name = 'sessao/votacao/leitura_form.html' + success_url = '/' + form_class = OrdemExpedienteLeituraForm + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['materia'] = MateriaLegislativa.objects.get( + id=self.kwargs['mid']) + return context + + def get_initial(self): + initial = super().get_initial() + materia = MateriaLegislativa.objects.get(id=self.kwargs['mid']) + initial['materia'] = materia + initial['materia__ementa'] = materia.ementa + if self.expediente: + expediente = ExpedienteMateria.objects.get(id=self.kwargs['oid']) + instance = RegistroLeitura.objects.filter( + materia=materia, expediente=expediente) + initial['expediente'] = expediente + else: + ordem = OrdemDia.objects.get(id=self.kwargs['oid']) + instance = RegistroLeitura.objects.filter( + materia=materia, ordem=ordem) + initial['ordem'] = ordem + initial['instance'] = instance + initial['user'] = self.request.user + initial['ip'] = get_client_ip(self.request) + return initial + + def form_valid(self, form): + if self.expediente: + model = ExpedienteMateria + else: + model = OrdemDia + ordem_expediente = model.objects.get(id=self.kwargs['oid']) + ordem_expediente.resultado = "Matéria lida" + ordem_expediente.votacao_aberta = False + ordem_expediente.save() + form.save() + return super().form_valid(form) + + def get_success_url(self): + page = '' + if 'page' in self.request.GET: + page = '?page={}'.format(self.request.GET['page']) + + pk = self.kwargs['pk'] + if self.expediente: + url = reverse('sapl.sessao:expedientemateria_list', + kwargs={'pk': pk}) + page + else: + url = reverse('sapl.sessao:ordemdia_list', + kwargs={'pk': pk}) + page + return url + + def cancel_url(self): + page = '' + if 'page' in self.request.GET: + page = '?page={}'.format(self.request.GET['page']) + url = reverse('sapl.sessao:retirar_leitura', + kwargs={ + 'pk': self.kwargs['pk'], + 'iso': 1 if not self.expediente else 0, + 'oid': self.kwargs['oid'], + }, + ) + page + return url + + +class ExpedienteLeituraView(AbstractLeituraView): + expediente = True + + +class OrdemDiaLeituraView(AbstractLeituraView): + expediente = False + + +@permission_required('sessao.change_expedientemateria', + 'sessao.change_ordemdia') +def retirar_leitura(request, pk, iso, oid): + page = '' + if 'page' in request.GET: + page = '?page={}'.format(request.GET['page']) + + is_ordem = bool(int(iso)) + if not is_ordem: + ordem_expediente = ExpedienteMateria.objects.get(id=oid) + RegistroLeitura.objects.filter( + materia=ordem_expediente.materia, expediente=ordem_expediente).delete() + succ_url = reverse('sapl.sessao:expedientemateria_list', + kwargs={'pk': pk}) + page + else: + ordem_expediente = OrdemDia.objects.get(id=oid) + RegistroLeitura.objects.filter( + materia=ordem_expediente.materia, ordem=ordem_expediente).delete() + succ_url = reverse('sapl.sessao:ordemdia_list', + kwargs={'pk': pk}) + page + ordem_expediente.resultado = "" + ordem_expediente.votacao_aberta = False + ordem_expediente.save() + return HttpResponseRedirect(succ_url) diff --git a/sapl/settings.py b/sapl/settings.py index 07b2d6904..b15086217 100644 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -41,7 +41,7 @@ ALLOWED_HOSTS = ['*'] LOGIN_REDIRECT_URL = '/' LOGIN_URL = '/login/?next=' -SAPL_VERSION = '3.1.159' +SAPL_VERSION = '3.1.160-RC12' if DEBUG: EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' @@ -239,8 +239,9 @@ DEFAULT_FROM_EMAIL = config('DEFAULT_FROM_EMAIL', cast=str, default='') SERVER_EMAIL = config('SERVER_EMAIL', cast=str, default='') EMAIL_RUNNING = None -MAX_DOC_UPLOAD_SIZE = 80 * 1024 * 1024 # 80MB +MAX_DOC_UPLOAD_SIZE = 150 * 1024 * 1024 # 150MB MAX_IMAGE_UPLOAD_SIZE = 2 * 1024 * 1024 # 2MB +DATA_UPLOAD_MAX_MEMORY_SIZE= 10 * 1024 * 1024 # 10MB # Internationalization # https://docs.djangoproject.com/en/1.8/topics/i18n/ diff --git a/sapl/static/sapl/frontend/css/chunk-vendors.3c9fe6b4.css b/sapl/static/sapl/frontend/css/chunk-vendors.3c9fe6b4.css deleted file mode 100644 index ec500e971..000000000 --- a/sapl/static/sapl/frontend/css/chunk-vendors.3c9fe6b4.css +++ /dev/null @@ -1,101 +0,0 @@ -.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,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}@font-face{font-family:Font Awesome\ 5 Brands;font-style:normal;font-weight:400;font-display:auto;src:url(../fonts/fa-brands-400.d9d17590.eot);src:url(../fonts/fa-brands-400.d9d17590.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-brands-400.4b115e11.woff2) format("woff2"),url(../fonts/fa-brands-400.b90365bc.woff) format("woff"),url(../fonts/fa-brands-400.c39278f7.ttf) format("truetype"),url(../img/fa-brands-400.80533988.svg#fontawesome) format("svg")}.fab{font-family:Font Awesome\ 5 Brands}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:400;font-display:auto;src:url(../fonts/fa-regular-400.414ff5da.eot);src:url(../fonts/fa-regular-400.414ff5da.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-regular-400.65779ebc.woff2) format("woff2"),url(../fonts/fa-regular-400.5dd3976c.woff) format("woff"),url(../fonts/fa-regular-400.f6c6f6c8.ttf) format("truetype"),url(../img/fa-regular-400.e7e957c8.svg#fontawesome) format("svg")}.far{font-weight:400}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;font-display:auto;src:url(../fonts/fa-solid-900.b5596f4d.eot);src:url(../fonts/fa-solid-900.b5596f4d.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-solid-900.46280631.woff2) format("woff2"),url(../fonts/fa-solid-900.61969d43.woff) format("woff"),url(../fonts/fa-solid-900.b70cea03.ttf) format("truetype"),url(../img/fa-solid-900.82905d8d.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:Font Awesome\ 5 Free}.fa,.fas{font-weight:900} - -/*! - * jQuery UI CSS Framework 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/category/theming/ - */ - -/*! - * jQuery UI Draggable 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - */ - -/*! - * jQuery UI Resizable 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - */ - -/*! - * jQuery UI Button 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/button/#theming - */ - -/*! - * jQuery UI Checkboxradio 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/checkboxradio/#theming - */ - -/*! - * jQuery UI Controlgroup 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/controlgroup/#theming - */ - - -/*! - * jQuery UI Dialog 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/dialog/#theming - */ - -/*! - * jQuery UI Sortable 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - */ - -/*! - * jQuery UI Datepicker 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/datepicker/#theming - */ - -/*! jQuery UI - v1.12.0 - 2016-07-08 -* http://jqueryui.com -* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande%2CLucida%20Sans%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=deedf7&bgTextureHeader=highlight_soft&bgImgOpacityHeader=100&borderColorHeader=aed0ea&fcHeader=222222&iconColorHeader=72a7cf&bgColorContent=f2f5f7&bgTextureContent=highlight_hard&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=362b36&iconColorContent=72a7cf&bgColorDefault=d7ebf9&bgTextureDefault=glass&bgImgOpacityDefault=80&borderColorDefault=aed0ea&fcDefault=2779aa&iconColorDefault=3d80b3&bgColorHover=e4f1fb&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=74b2e2&fcHover=0070a3&iconColorHover=2694e8&bgColorActive=3baae3&bgTextureActive=glass&bgImgOpacityActive=50&borderColorActive=2694e8&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=ffef8f&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=25&borderColorHighlight=f9dd34&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=cd0a0a&bgTextureError=flat&bgImgOpacityError=15&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=eeeeee&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=90&opacityOverlay=80&bgColorShadow=000000&bgTextureShadow=highlight_hard&bgImgOpacityShadow=70&opacityShadow=30&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px -* Copyright jQuery Foundation and other contributors; Licensed MIT */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-active,.ui-menu .ui-state-focus{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:active,.ui-button:hover,.ui-button:link,.ui-button:visited{text-decoration:none}.ui-button-icon-only{width:2em;-webkit-box-sizing:border-box;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}button.ui-button::-moz-focus-inner,input.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup>.ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup>.ui-controlgroup-item.ui-visual-focus,.ui-controlgroup>.ui-controlgroup-item:focus{z-index:9999}.ui-controlgroup-vertical>.ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{-webkit-box-sizing:border-box;box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label+.ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label+.ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc(100% - 2.4em)}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{-webkit-box-shadow:inset 1px 1px 1px #ccc;box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-next-hover,.ui-datepicker .ui-datepicker-prev-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-next span,.ui-datepicker .ui-datepicker-prev span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td a,.ui-datepicker td span{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw,.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:700;line-height:1.5;padding:2px .4em;margin:.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{-webkit-filter:inherit;filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget button,.ui-widget input,.ui-widget select,.ui-widget textarea{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #aed0ea}.ui-widget-content{border:1px solid #ddd;background:#f2f5f7 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkEAIAAACY3hF0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAIpJREFUKM/tz6ENwkAUgOE/DYYJUA0KZkFUIetxqKJZgQUYguJBIQDVAQhhAESTtnf33r0mMAGakKA+/RHPZv01AYA/n2jxSMKeExXqLO9n6CI+rUYusbANkmptE8JKl/GIP8gjZviBzPWGy0OlBd0uZDqkG/u7lMlrzZaSdupTGdE0zoXw7eZP8Qbj00P2LE1L9gAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wNy0wOFQyMDowOTo0OCswMjowMDFydjoAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDBAL86GAAAAAElFTkSuQmCC) 50% top repeat-x;color:#362b36}.ui-widget-content a{color:#362b36}.ui-widget-header{border:1px solid #aed0ea;background:#deedf7 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkEAIAAACY3hF0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAMFJREFUKM/lkD1qwgAYQB8fuHQpgpBO7eDgUByFdO0RuiX0Dj1DzqD0BmZyd9RFTKd2Kc2UQEUL5qdtSJOYCJ+Dh1Do9JYHDx7ZrFrsXwQA/g0CEipRG5cPwdYxvqjFGJ/vVTnYG6R1MW1C0nZhNq6ooQ4e8fVfr+kTdfLnOmF7kbfqiWihT8z5KrJVfcsmzh52kei7PjIVNXDwjsqMz/XPTfUrmDriTfQKh6WodazfMeSV8D7tVpcEQZKU5akvnTkO8y9eZNHr5WMAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDAxcnY6AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwQC/OhgAAAABJRU5ErkJggg==) 50% 50% repeat-x;color:#222;font-weight:700}.ui-widget-header a{color:#222}.ui-button,.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,html .ui-button.ui-state-disabled:active,html .ui-button.ui-state-disabled:hover{border:1px solid #aed0ea;background:#d7ebf9 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQEAIAAACwqkHPAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAJhJREFUSMftzyEOggAYBeD33mZz02pwYxo1GDQT5BBsJr0RBzA4TkAyOzwBBTcx6BwGHEESSPAUTsOfvvzhHr38dy4AAAzDMIxvgzQtirrGyX9Om644QoCpuOQOM2RO2Wu2uMTltcmkkAld6cgrPDHmDZ4UMoGLfF4NWgePfXVuV9KGERbimAEmwgFrDEUHfXT+Im0YhvFDPkIzLk7A/EzKAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwMXJ2OgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNy0wOFQyMDowOTo0OCswMjowMEAvzoYAAAAASUVORK5CYII=) 50% 50% repeat-x;font-weight:700;color:#2779aa}.ui-button,.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button{color:#2779aa;text-decoration:none}.ui-button:focus,.ui-button:hover,.ui-state-focus,.ui-state-hover,.ui-widget-content .ui-state-focus,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-focus,.ui-widget-header .ui-state-hover{border:1px solid #74b2e2;background:#e4f1fb url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQEAIAAACwqkHPAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAJxJREFUSMftz60KwmAYhuHnedEkiFGwujC2uGTRYjAurAp6Ip6BmCyLO4gVk8XgYTiTf3yD/cD2gcFjEA1vutoNN16Hamf3AgCAoiiK8m2QZcY0Da5h7rY9YYENxsIBt3CFHmL4wjVTBLjNi1n7wP1Ydq2D57Q826VwxRQBjNQTe0K+qC+2EnqM6X9ijjBhhKFghD46fzGtKIryQ95Jgy/jpWK+ggAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wNy0wOFQyMDowOTo0OCswMjowMDFydjoAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDBAL86GAAAAAElFTkSuQmCC) 50% 50% repeat-x;font-weight:700;color:#0070a3}.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,a.ui-button:focus,a.ui-button:hover{color:#0070a3;text-decoration:none}.ui-visual-focus{-webkit-box-shadow:0 0 3px 1px #5e9ed6;box-shadow:0 0 3px 1px #5e9ed6}.ui-button.ui-state-active:hover,.ui-button:active,.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active{border:1px solid #2694e8;background:#3baae3 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQEAIAAACwqkHPAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAI5JREFUSMdjSJq6e/fLJiYGBgYGBoZRapQapUapUYrm1M1l79//SmRi7GZczWjBxFLJ2MRQz8Ryh2kNYx8Tix3TdYbZTKwsTLqM2yHUDibWdOYIhqNMbOlM4YzH0ORYFjIxMaxkYrVjus44m6G4/7DE6/dMTIGMjIyhTIzJDNoMfIPD06PUKDVKjVIDRwEAMuIhVFSEkAcAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDAxcnY6AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwQC/OhgAAAABJRU5ErkJggg==) 50% 50% repeat-x;font-weight:700;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#2694e8;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #f9dd34;background:#ffef8f url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkEAIAAACY3hF0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAHNJREFUKM/lkM0Jg2AQBYdXyJc+tI/EJnKyEFvwbkuBCHoQ9CDiMfA8rCGCBSSQ0zD72B8WeynquwDgj/CiEzC5FDBSfswDNwG9s0AuoAtrnQIXAS1JwPNdTALv2cM69+3DBq4HG+OIWOvZlYCV5vtf+mlsEsU1wS9R7TYAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDAxcnY6AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwQC/OhgAAAABJRU5ErkJggg==) 50% top repeat-x;color:#363636}.ui-state-checked{border:1px solid #f9dd34;background:#ffef8f}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#cd0a0a;color:#fff}.ui-state-error-text,.ui-state-error a,.ui-widget-content .ui-state-error-text,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error-text,.ui-widget-header .ui-state-error a{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon,.ui-widget-header .ui-icon{background-image:url(../img/ui-icons_72a7cf_256x240.55a4c5ce.png)}.ui-button .ui-icon{background-image:url(../img/ui-icons_3d80b3_256x240.24fcd129.png)}.ui-button:focus .ui-icon,.ui-button:hover .ui-icon,.ui-state-default .ui-icon,.ui-state-focus .ui-icon,.ui-state-hover .ui-icon{background-image:url(../img/ui-icons_2694e8_256x240.274157b3.png)}.ui-button:active .ui-icon,.ui-state-active .ui-icon{background-image:url(../img/ui-icons_ffffff_256x240.bb2a88be.png)}.ui-button .ui-state-highlight.ui-icon,.ui-state-highlight .ui-icon{background-image:url(../img/ui-icons_2e83ff_256x240.602e5d4d.png)}.ui-state-error-text .ui-icon,.ui-state-error .ui-icon{background-image:url(../img/ui-icons_ffffff_256x240.bb2a88be.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-first,.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-left,.ui-corner-tl,.ui-corner-top{border-top-left-radius:6px}.ui-corner-all,.ui-corner-right,.ui-corner-top,.ui-corner-tr{border-top-right-radius:6px}.ui-corner-all,.ui-corner-bl,.ui-corner-bottom,.ui-corner-left{border-bottom-left-radius:6px}.ui-corner-all,.ui-corner-bottom,.ui-corner-br,.ui-corner-right{border-bottom-right-radius:6px}.ui-widget-overlay{background:#eee url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoEAAAAAD5BTvyAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0T//xSrMc0AAAAHdElNRQfgBwgUCTBBMMWUAAAAhElEQVRIx+3VMQrAIAyF4Wcmz+Y5e4Yey7E4dhGxIqWQf+iQN4ePgJKXrkM9rWhJPrXJ+5yx3AAproMcJxnLSalWkpseheFaMZZbNvRzD5DgJpDhBkhxHeQ4yVhOMpbbfGwfl09juc2G3lNhLLeAxCEzlotO8XPRKdEp0Snf5qJTftgpN3jsoxwYW8JUAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwMXJ2OgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNy0wOFQyMDowOTo0OCswMjowMEAvzoYAAAAASUVORK5CYII=) 50% 50% repeat;opacity:.8;filter:Alpha(Opacity=80)}.ui-widget-shadow{-webkit-box-shadow:-7px -7px 7px #000;box-shadow:-7px -7px 7px #000} \ No newline at end of file diff --git a/sapl/static/sapl/frontend/css/chunk-vendors.3c9fe6b4.css.gz b/sapl/static/sapl/frontend/css/chunk-vendors.3c9fe6b4.css.gz deleted file mode 100644 index 68691a1d0..000000000 Binary files a/sapl/static/sapl/frontend/css/chunk-vendors.3c9fe6b4.css.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/css/chunk-vendors.aa0d128d.css b/sapl/static/sapl/frontend/css/chunk-vendors.aa0d128d.css new file mode 100644 index 000000000..543d14372 --- /dev/null +++ b/sapl/static/sapl/frontend/css/chunk-vendors.aa0d128d.css @@ -0,0 +1,126 @@ +/*! + * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,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}@font-face{font-family:Font Awesome\ 5 Brands;font-style:normal;font-weight:400;font-display:auto;src:url(../fonts/fa-brands-400.5063b105.eot);src:url(../fonts/fa-brands-400.5063b105.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-brands-400.cccc9d29.woff2) format("woff2"),url(../fonts/fa-brands-400.c5e0f14f.woff) format("woff"),url(../fonts/fa-brands-400.06147b6c.ttf) format("truetype"),url(../img/fa-brands-400.a9c4bb73.svg#fontawesome) format("svg")}.fab{font-family:Font Awesome\ 5 Brands}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:400;font-display:auto;src:url(../fonts/fa-regular-400.c1a866ec.eot);src:url(../fonts/fa-regular-400.c1a866ec.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-regular-400.f5f2566b.woff2) format("woff2"),url(../fonts/fa-regular-400.c4f508e7.woff) format("woff"),url(../fonts/fa-regular-400.65b286af.ttf) format("truetype"),url(../img/fa-regular-400.7b9568e6.svg#fontawesome) format("svg")}.far{font-weight:400}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;font-display:auto;src:url(../fonts/fa-solid-900.8e4a6dcc.eot);src:url(../fonts/fa-solid-900.8e4a6dcc.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-solid-900.44d537ab.woff2) format("woff2"),url(../fonts/fa-solid-900.333bae20.woff) format("woff"),url(../fonts/fa-solid-900.0bff33a5.ttf) format("truetype"),url(../img/fa-solid-900.c2801fb4.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:Font Awesome\ 5 Free}.fa,.fas{font-weight:900} + +/*! + * jQuery UI CSS Framework 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/theming/ + */ + +/*! + * jQuery UI Draggable 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +/*! + * jQuery UI Resizable 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +/*! + * jQuery UI Button 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/button/#theming + */ + +/*! + * jQuery UI Checkboxradio 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/checkboxradio/#theming + */ + +/*! + * jQuery UI Controlgroup 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/controlgroup/#theming + */ + + +/*! + * jQuery UI Dialog 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/dialog/#theming + */ + +/*! + * jQuery UI Sortable 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +/*! + * jQuery UI Datepicker 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/datepicker/#theming + */ + +/*! + * jQuery UI Autocomplete 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/autocomplete/#theming + */ + +/*! + * jQuery UI Menu 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/menu/#theming + */ + +/*! jQuery UI - v1.12.0 - 2016-07-08 +* http://jqueryui.com +* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande%2CLucida%20Sans%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=deedf7&bgTextureHeader=highlight_soft&bgImgOpacityHeader=100&borderColorHeader=aed0ea&fcHeader=222222&iconColorHeader=72a7cf&bgColorContent=f2f5f7&bgTextureContent=highlight_hard&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=362b36&iconColorContent=72a7cf&bgColorDefault=d7ebf9&bgTextureDefault=glass&bgImgOpacityDefault=80&borderColorDefault=aed0ea&fcDefault=2779aa&iconColorDefault=3d80b3&bgColorHover=e4f1fb&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=74b2e2&fcHover=0070a3&iconColorHover=2694e8&bgColorActive=3baae3&bgTextureActive=glass&bgImgOpacityActive=50&borderColorActive=2694e8&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=ffef8f&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=25&borderColorHighlight=f9dd34&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=cd0a0a&bgTextureError=flat&bgImgOpacityError=15&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=eeeeee&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=90&opacityOverlay=80&bgColorShadow=000000&bgTextureShadow=highlight_hard&bgImgOpacityShadow=70&opacityShadow=30&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px +* Copyright jQuery Foundation and other contributors; Licensed MIT */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-active,.ui-menu .ui-state-focus{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:active,.ui-button:hover,.ui-button:link,.ui-button:visited{text-decoration:none}.ui-button-icon-only{width:2em;-webkit-box-sizing:border-box;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}button.ui-button::-moz-focus-inner,input.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup>.ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup>.ui-controlgroup-item.ui-visual-focus,.ui-controlgroup>.ui-controlgroup-item:focus{z-index:9999}.ui-controlgroup-vertical>.ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{-webkit-box-sizing:border-box;box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label+.ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label+.ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc(100% - 2.4em)}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{-webkit-box-shadow:inset 1px 1px 1px #ccc;box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-next-hover,.ui-datepicker .ui-datepicker-prev-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-next span,.ui-datepicker .ui-datepicker-prev span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td a,.ui-datepicker td span{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw,.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:700;line-height:1.5;padding:2px .4em;margin:.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{-webkit-filter:inherit;filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget button,.ui-widget input,.ui-widget select,.ui-widget textarea{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #aed0ea}.ui-widget-content{border:1px solid #ddd;background:#f2f5f7 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkEAIAAACY3hF0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAIpJREFUKM/tz6ENwkAUgOE/DYYJUA0KZkFUIetxqKJZgQUYguJBIQDVAQhhAESTtnf33r0mMAGakKA+/RHPZv01AYA/n2jxSMKeExXqLO9n6CI+rUYusbANkmptE8JKl/GIP8gjZviBzPWGy0OlBd0uZDqkG/u7lMlrzZaSdupTGdE0zoXw7eZP8Qbj00P2LE1L9gAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wNy0wOFQyMDowOTo0OCswMjowMDFydjoAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDBAL86GAAAAAElFTkSuQmCC) 50% top repeat-x;color:#362b36}.ui-widget-content a{color:#362b36}.ui-widget-header{border:1px solid #aed0ea;background:#deedf7 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkEAIAAACY3hF0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAMFJREFUKM/lkD1qwgAYQB8fuHQpgpBO7eDgUByFdO0RuiX0Dj1DzqD0BmZyd9RFTKd2Kc2UQEUL5qdtSJOYCJ+Dh1Do9JYHDx7ZrFrsXwQA/g0CEipRG5cPwdYxvqjFGJ/vVTnYG6R1MW1C0nZhNq6ooQ4e8fVfr+kTdfLnOmF7kbfqiWihT8z5KrJVfcsmzh52kei7PjIVNXDwjsqMz/XPTfUrmDriTfQKh6WodazfMeSV8D7tVpcEQZKU5akvnTkO8y9eZNHr5WMAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDAxcnY6AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwQC/OhgAAAABJRU5ErkJggg==) 50% 50% repeat-x;color:#222;font-weight:700}.ui-widget-header a{color:#222}.ui-button,.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,html .ui-button.ui-state-disabled:active,html .ui-button.ui-state-disabled:hover{border:1px solid #aed0ea;background:#d7ebf9 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQEAIAAACwqkHPAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAJhJREFUSMftzyEOggAYBeD33mZz02pwYxo1GDQT5BBsJr0RBzA4TkAyOzwBBTcx6BwGHEESSPAUTsOfvvzhHr38dy4AAAzDMIxvgzQtirrGyX9Om644QoCpuOQOM2RO2Wu2uMTltcmkkAld6cgrPDHmDZ4UMoGLfF4NWgePfXVuV9KGERbimAEmwgFrDEUHfXT+Im0YhvFDPkIzLk7A/EzKAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwMXJ2OgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNy0wOFQyMDowOTo0OCswMjowMEAvzoYAAAAASUVORK5CYII=) 50% 50% repeat-x;font-weight:700;color:#2779aa}.ui-button,.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button{color:#2779aa;text-decoration:none}.ui-button:focus,.ui-button:hover,.ui-state-focus,.ui-state-hover,.ui-widget-content .ui-state-focus,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-focus,.ui-widget-header .ui-state-hover{border:1px solid #74b2e2;background:#e4f1fb url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQEAIAAACwqkHPAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAJxJREFUSMftz60KwmAYhuHnedEkiFGwujC2uGTRYjAurAp6Ip6BmCyLO4gVk8XgYTiTf3yD/cD2gcFjEA1vutoNN16Hamf3AgCAoiiK8m2QZcY0Da5h7rY9YYENxsIBt3CFHmL4wjVTBLjNi1n7wP1Ydq2D57Q826VwxRQBjNQTe0K+qC+2EnqM6X9ijjBhhKFghD46fzGtKIryQ95Jgy/jpWK+ggAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wNy0wOFQyMDowOTo0OCswMjowMDFydjoAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDBAL86GAAAAAElFTkSuQmCC) 50% 50% repeat-x;font-weight:700;color:#0070a3}.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,a.ui-button:focus,a.ui-button:hover{color:#0070a3;text-decoration:none}.ui-visual-focus{-webkit-box-shadow:0 0 3px 1px #5e9ed6;box-shadow:0 0 3px 1px #5e9ed6}.ui-button.ui-state-active:hover,.ui-button:active,.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active{border:1px solid #2694e8;background:#3baae3 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQEAIAAACwqkHPAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAI5JREFUSMdjSJq6e/fLJiYGBgYGBoZRapQapUapUYrm1M1l79//SmRi7GZczWjBxFLJ2MRQz8Ryh2kNYx8Tix3TdYbZTKwsTLqM2yHUDibWdOYIhqNMbOlM4YzH0ORYFjIxMaxkYrVjus44m6G4/7DE6/dMTIGMjIyhTIzJDNoMfIPD06PUKDVKjVIDRwEAMuIhVFSEkAcAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDAxcnY6AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwQC/OhgAAAABJRU5ErkJggg==) 50% 50% repeat-x;font-weight:700;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#2694e8;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #f9dd34;background:#ffef8f url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkEAIAAACY3hF0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAHNJREFUKM/lkM0Jg2AQBYdXyJc+tI/EJnKyEFvwbkuBCHoQ9CDiMfA8rCGCBSSQ0zD72B8WeynquwDgj/CiEzC5FDBSfswDNwG9s0AuoAtrnQIXAS1JwPNdTALv2cM69+3DBq4HG+OIWOvZlYCV5vtf+mlsEsU1wS9R7TYAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDAxcnY6AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwQC/OhgAAAABJRU5ErkJggg==) 50% top repeat-x;color:#363636}.ui-state-checked{border:1px solid #f9dd34;background:#ffef8f}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#cd0a0a;color:#fff}.ui-state-error-text,.ui-state-error a,.ui-widget-content .ui-state-error-text,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error-text,.ui-widget-header .ui-state-error a{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon,.ui-widget-header .ui-icon{background-image:url(../img/ui-icons_72a7cf_256x240.55a4c5ce.png)}.ui-button .ui-icon{background-image:url(../img/ui-icons_3d80b3_256x240.24fcd129.png)}.ui-button:focus .ui-icon,.ui-button:hover .ui-icon,.ui-state-default .ui-icon,.ui-state-focus .ui-icon,.ui-state-hover .ui-icon{background-image:url(../img/ui-icons_2694e8_256x240.274157b3.png)}.ui-button:active .ui-icon,.ui-state-active .ui-icon{background-image:url(../img/ui-icons_ffffff_256x240.bb2a88be.png)}.ui-button .ui-state-highlight.ui-icon,.ui-state-highlight .ui-icon{background-image:url(../img/ui-icons_2e83ff_256x240.602e5d4d.png)}.ui-state-error-text .ui-icon,.ui-state-error .ui-icon{background-image:url(../img/ui-icons_ffffff_256x240.bb2a88be.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-first,.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-left,.ui-corner-tl,.ui-corner-top{border-top-left-radius:6px}.ui-corner-all,.ui-corner-right,.ui-corner-top,.ui-corner-tr{border-top-right-radius:6px}.ui-corner-all,.ui-corner-bl,.ui-corner-bottom,.ui-corner-left{border-bottom-left-radius:6px}.ui-corner-all,.ui-corner-bottom,.ui-corner-br,.ui-corner-right{border-bottom-right-radius:6px}.ui-widget-overlay{background:#eee url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoEAAAAAD5BTvyAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0T//xSrMc0AAAAHdElNRQfgBwgUCTBBMMWUAAAAhElEQVRIx+3VMQrAIAyF4Wcmz+Y5e4Yey7E4dhGxIqWQf+iQN4ePgJKXrkM9rWhJPrXJ+5yx3AAproMcJxnLSalWkpseheFaMZZbNvRzD5DgJpDhBkhxHeQ4yVhOMpbbfGwfl09juc2G3lNhLLeAxCEzlotO8XPRKdEp0Snf5qJTftgpN3jsoxwYW8JUAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwMXJ2OgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNy0wOFQyMDowOTo0OCswMjowMEAvzoYAAAAASUVORK5CYII=) 50% 50% repeat;opacity:.8;filter:Alpha(Opacity=80)}.ui-widget-shadow{-webkit-box-shadow:-7px -7px 7px #000;box-shadow:-7px -7px 7px #000} \ No newline at end of file diff --git a/sapl/static/sapl/frontend/css/chunk-vendors.aa0d128d.css.gz b/sapl/static/sapl/frontend/css/chunk-vendors.aa0d128d.css.gz new file mode 100644 index 000000000..50e81fc00 Binary files /dev/null and b/sapl/static/sapl/frontend/css/chunk-vendors.aa0d128d.css.gz differ diff --git a/sapl/static/sapl/frontend/css/compilacao.1f5fb8cf.css b/sapl/static/sapl/frontend/css/compilacao.1f5fb8cf.css deleted file mode 100644 index 8544d6cbf..000000000 --- a/sapl/static/sapl/frontend/css/compilacao.1f5fb8cf.css +++ /dev/null @@ -1 +0,0 @@ -a:link:after,a:visited:after{content:""}.test_import:nth-child(2n){background-color:#ccc}#wait_message{display:block;position:fixed;top:0;bottom:0;left:0;right:0;background-color:hsla(0,0%,86.3%,.75);z-index:99}#wait_message #msg{position:relative;margin:20% auto;padding:1.2em 2em;max-width:600px;text-align:center;font-size:1.5em;color:#677;border:1px solid #eee;background-color:#fff!important;-webkit-box-shadow:0 1px 2px #999;box-shadow:0 1px 2px #999}.text-center{text-align:center}.cp-notify{z-index:9999;position:fixed;top:2em;left:50%;min-width:600px;-webkit-transform:translate(-50%);transform:translate(-50%);opacity:.97}.cp-notify,.cp-notify.hide{-webkit-transition:all .4s ease;transition:all .4s ease}.cp-notify.hide{opacity:0;top:-1000px;display:block!important}.cp-notify .message{padding:1em;border:2px solid rgba(0,0,0,.1);border-radius:4px;color:rgba(0,0,0,.6);line-height:1em;font-size:1.3em;text-align:center;-webkit-box-shadow:0 0 100px rgba(0,0,0,.2);box-shadow:0 0 100px rgba(0,0,0,.2)}.cp .vigencia-active{margin-top:30px;display:block}.cp .cp-linha-vigencias{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;list-style:none;margin:4rem 0 3rem;padding:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.cp .cp-linha-vigencias ul{list-style:none;margin:0;padding:0}.cp .cp-linha-vigencias>li{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;line-height:0;background:#000;height:2px;text-align:center;max-width:4rem}.cp .cp-linha-vigencias>li .circle{display:block;width:10px;line-height:0;background:#000;height:10px;margin:-5px auto 0;border-radius:50%}.cp .cp-linha-vigencias>li>a{position:absolute;white-space:nowrap;line-height:1.8rem;text-align:center}.cp .cp-linha-vigencias>li:nth-child(2n)>a{top:100%}.cp .cp-linha-vigencias>li:nth-child(odd)>a{bottom:100%}.cp .cp-linha-vigencias>li ul{z-index:1;position:absolute;display:none;background:#fff;margin:30px 0;border:1px solid #aaa;-webkit-box-shadow:0 0 10px #aaa;box-shadow:0 0 10px #aaa;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.cp .cp-linha-vigencias>li ul:before{content:" ";width:2px;height:30px;position:absolute;display:block;background-color:#aaa;bottom:100%;left:50%;margin-left:-1px}.cp .cp-linha-vigencias>li ul li{text-align:left}.cp .cp-linha-vigencias>li ul a{display:block;white-space:nowrap;line-height:2rem;padding:0 10px;font-size:1rem}.cp .cp-linha-vigencias>li ul a:hover{background:#eee}.cp .cp-linha-vigencias>li.active .circle{display:block;width:20px;line-height:0;background:#aaa;height:20px;margin:-10px auto 0}.cp .cp-linha-vigencias>li.active:not(:last-child)>a{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);margin-bottom:15px}.cp .cp-linha-vigencias>li.active>a{margin-bottom:5px}.cp .cp-linha-vigencias>li.active:nth-child(2n)>a{bottom:100%;top:auto}.cp .cp-linha-vigencias>li.active ul{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.cp .cp-linha-vigencias>li.active ul li{text-align:left;width:100%}.cp .cp-vigencias .nav-link{padding:.5rem}.cp .cp-vigencias .dropdown-toggle:after{zoom:.8;margin:0}.cp .cp-vigencias .dropdown-menu{margin-left:.5rem}.cp .cp-vigencias .dropdown-item{padding:0}.cp .cp-vigencias .dropdown-item a{line-height:1;padding:.7rem}.cp .desativado .dpt-link,.cp .desativado .dpt-link *,.cp .desativado .dtxt,.cp .desativado .dtxt *,.cp .dpt .dptt>a.desativado .dpt-link,.cp .dpt .dptt>a.desativado .dpt-link *,.cp .dpt .dptt>a.desativado .dtxt,.cp .dpt .dptt>a.desativado .dtxt *{text-decoration:line-through;color:#999!important}.cp .desativado .dpt-link * table,.cp .desativado .dpt-link * table td,.cp .desativado .dpt-link table,.cp .desativado .dpt-link table td,.cp .desativado .dtxt * table,.cp .desativado .dtxt * table td,.cp .desativado .dtxt table,.cp .desativado .dtxt table td,.cp .dpt .dptt>a.desativado .dpt-link * table,.cp .dpt .dptt>a.desativado .dpt-link * table td,.cp .dpt .dptt>a.desativado .dpt-link table,.cp .dpt .dptt>a.desativado .dpt-link table td,.cp .dpt .dptt>a.desativado .dtxt * table,.cp .dpt .dptt>a.desativado .dtxt * table td,.cp .dpt .dptt>a.desativado .dtxt table,.cp .dpt .dptt>a.desativado .dtxt table td{border:1px dotted #ccc}.cp a{text-decoration:none;cursor:pointer}.cp .diff .desativado,.cp .diff .desativado *,.cp .diff .dpt .dptt>a.desativado,.cp .diff .dpt .dptt>a.desativado *,.cp .dpt .diff .dptt>a.desativado,.cp .dpt .diff .dptt>a.desativado *{text-decoration:line-through;color:#ddd!important;font-size:90%}.cp .diff .added{color:#04de2c}.cp .dpt{font-size:1em;position:relative}.cp .dpt.indent{padding-left:1em}.cp .dpt .ementa{padding:2em 0 2em 35%;font-weight:700}.cp .dpt .anexo,.cp .dpt .capitulo,.cp .dpt .disp_finais,.cp .dpt .disp_gerais,.cp .dpt .disp_preliminares,.cp .dpt .disp_transitorias,.cp .dpt .itemsecao,.cp .dpt .livro,.cp .dpt .parte,.cp .dpt .secao,.cp .dpt .subsecao,.cp .dpt .titulo,.cp .dpt .titulo_generico{text-align:center;margin-bottom:1em;font-size:1.15em;margin-top:3em}.cp .dpt .titulo{margin-top:2em}.cp .dpt .capitulo{margin-top:1.5em;font-size:1.15em}.cp .dpt .secao{margin-top:1.2em;margin-bottom:.7em;font-weight:700;font-size:1.15em}.cp .dpt .itemsecao,.cp .dpt .subsecao{margin-top:1em;margin-bottom:.6em;font-weight:700;font-size:1.15em}.cp .dpt .artigo{font-size:1.15em;float:left}.cp .dpt .artigo .dptt{position:relative}.cp .dpt .caput{margin-top:.3333em;font-size:1.15em}.cp .dpt .paragrafo{font-size:1.1em;margin-top:.2222em}.cp .dpt .inciso{font-size:1.1em;margin-top:.1667em}.cp .dpt .alinea,.cp .dpt .item{font-size:1em;margin-top:2px}.cp .dpt .assinatura,.cp .dpt .fecho_lei{margin-top:.6em;font-size:1.15em}.cp .dpt .page-break{page-break-before:always}.cp .dpt .bloco_alteracao{padding-left:10%;font-style:italic;color:#018}.cp .dpt .bloco_alteracao a{text-decoration:underline}.cp .dpt .bloco_alteracao a,.cp .dpt .bloco_alteracao table,.cp .dpt .bloco_alteracao table td{color:#018!important}.cp .dpt .card-header{font-size:1.7rem}.cp .dpt .dn{font-weight:400;position:relative;font-size:70%}.cp .dpt .dn p,.cp .dpt .dn ul{font-weight:400;margin:0 0 0 0;list-style:none;padding:0}.cp .dpt .dn .dnl{display:block;text-align:left!important}.cp .dpt .dn .dnl *{display:inline}.cp .dpt .dn .dnl .bullet{padding:0 .333em;display:inline-block}.cp .dpt .dn .dnl .dnli{min-height:2.5em}.cp .dpt .dn .dnl .dnli:hover ul{font-size:1rem;clip:auto;opacity:1;background:hsla(0,0%,90.2%,.9)}.cp .dpt .dn .dnl .dnli:hover ul,.cp .dpt .dn .dnl .dnli ul{-webkit-transition:opacity .5s linear,clip 0s .3s;transition:opacity .5s linear,clip 0s .3s}.cp .dpt .dn .dnl .dnli ul{clip:rect(0,0,0,0);opacity:0;position:absolute;background:transparent;right:0;padding:.2em .5em 0 .5em;border:1px solid #c7e3d3;border-top:0;font-size:1.5rem}.cp .dpt .dn .dnl .dnli ul li{display:table-cell;color:#aaa}.cp .dpt .dn .dnl .dnli ul li:hover{color:#787}.cp .dpt .dn .dnl .dnli ul li .nowner,.cp .dpt .dn .dnl .dnli ul li:hover a{color:#27ae60!important}.cp .dpt .dn .dnl .dnli .ntitulo{font-weight:700;color:#03a203;text-decoration:none}.cp .dpt .dn .dnl .dnli .ntitulo a{color:#294!important}.cp .dpt .dn .dnl .dnli .ntexto{color:#06d806}.cp .dpt .dn .dnl .dnli .ntexto a{color:#03a203!important}.cp .dpt .dn .dnl:hover,.cp .dpt .dn .dnl:hover *{display:block}.cp .dpt .dn .dnl:hover>.bullet{display:none}.cp .dpt .dn .dnl:hover .dnli{margin-top:.5em;border-top:1px solid #c7e3d3}.cp .dpt .dptt{clear:left}.cp .dpt .dptt>a{color:#000}.cp .dpt .dptt>a.nota-alteracao{color:#02baf2;font-size:.75em}.cp .dpt .dptt>a.nota-alteracao:hover{text-decoration:underline}.cp .dpt .dptt .dne{position:absolute;display:block;right:0;left:0;top:0;height:0;-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:right;transform-origin:right;-webkit-transition:all .3s ease;transition:all .3s ease;border-top:1px solid #2980b9}.cp .dpt .dptt .dne ul.btns-action{list-style:none;padding:0;position:absolute;right:0;background-color:#2980b9}.cp .dpt .dptt .dne ul.btns-action li{float:left}.cp .dpt .dptt .dne ul.btns-action li:hover{background-color:rgba(0,0,0,.1)}.cp .dpt .dptt .dne ul.btns-action li a{color:#fff;padding:.15em 1em 0;display:inline-block}.cp .dpt .dptt .dne-nota{position:relative;-webkit-transform:scaleX(1);transform:scaleX(1);height:auto;border-top:0}.cp .dpt .dptt .dne-nota ul.btns-action{display:none}.cp .dpt .dptt .dne-nota .dne-form{margin:1em -2em 0;text-align:left;font-size:1rem}.cp .dpt .dptt:hover .dne{height:.1667rem;-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transition-delay:1s;transition-delay:1s}.cp .dpt .dptt:hover .dne-nota{height:auto;-webkit-transition-delay:0s;transition-delay:0s}.cp .tipo-vigencias{margin-bottom:-6px;opacity:.8}.cp .tipo-vigencias div a{color:#fff}.cp .tipo-vigencias:hover,.cp:hover{opacity:1}.cp-print .cp-linha-vigencias{display:none!important}.cp.cpe .desativado,.cp.cpe .dpt .dptt>a.desativado{text-decoration:line-through;color:#999!important}.cp.cpe .desativado table,.cp.cpe .desativado table td,.cp.cpe .dpt .dptt>a.desativado table,.cp.cpe .dpt .dptt>a.desativado table td{border:1px dotted #ccc}.cp.cpe a.nota-alteracao{color:#02baf2!important;font-size:.8rem}.cp.cpe .btn-sm{line-height:1rem}.cp.cpe .btn-outline-primary{background-color:#fff}.cp.cpe .btn-outline-primary:hover{background-color:#02baf2}.cp.cpe .dpt{display:block}.cp.cpe .dpt>.dpt-actions-fixed{position:absolute;right:-1em;top:-.8em;z-index:3;opacity:0}.cp.cpe .dpt>.dpt-actions-fixed .activate{display:none}.cp.cpe .dpt>.dpt-actions-fixed .deactivate{display:inline}.cp.cpe .dpt>.dpt-actions-fixed .btn-dpt-edit.btn-outline-primary{color:#333}.cp.cpe .dpt>.dpt-actions-fixed .btn-dpt-edit.btn-outline-primary:hover{color:#fff;background-color:#02baf2}.cp.cpe .dpt>.dpt-actions,.cp.cpe .dpt>.dpt-actions-bottom{display:none}.cp.cpe .dpt>.dpt-text{cursor:text;min-height:30px;border:1px solid transparent}.cp.cpe .dpt>.dpt-text.hover-fixed,.cp.cpe .dpt>.dpt-text:hover{background-color:rgba(0,0,0,.01);color:#2980b9;border:1px solid #eee;-webkit-transition:color .3s ease;transition:color .3s ease}.cp.cpe .dpt>.dpt-text.artigo{float:none}.cp.cpe .dpt>.dpt-text a.link-rotulo{color:#000}.cp.cpe .dpt:hover>.dpt-actions-fixed{opacity:1}.cp.cpe .dpt:hover>.dpt-actions-fixed:hover~.dpt-text{background-color:rgba(0,0,0,.01);color:#2980b9;border:1px solid #eee;-webkit-transition:color .3s ease;transition:color .3s ease}.cp.cpe .dpt .semtexto{font-weight:700;color:#9aaed6}.cp.cpe .dpt .semtexto:hover{color:#5f76a4}.cp.cpe .dpt-alts{margin:0;margin-bottom:1em;padding:0;background-color:transparent;min-height:100px;border:2px dashed #fff}.cp.cpe .dpt-alts:hover{border-color:#d9ddde}.cp.cpe .dpt-alts:empty{border-color:#ddd}.cp.cpe .dpt-alts.drag{width:100%!important;border-color:#d9ddde}.cp.cpe .dpt-alts.drag .dpt{-webkit-transition-duration:0s!important;transition-duration:0s!important}.cp.cpe .dpt-alts .dpt{width:100%!important;-webkit-box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);padding:0;margin:0;background-color:#edf0f1;height:auto!important;min-height:2em;z-index:1}.cp.cpe .dpt-alts .dpt:not(:first-child){border-top:1px solid #fff}.cp.cpe .dpt-alts .dpt>.dpt-text{padding:.3em 1em;margin-top:0;margin-bottom:0}.cp.cpe .dpt-alts .dpt>.dpt-text a.link-rotulo{text-decoration:underline}.cp.cpe .dpt-alts .dpt-selected.dpt{margin:0 -.5em}.cp.cpe .dpt-selected.dpt{width:auto!important;margin:1em -.5em;border:1px solid #ddd!important;padding:0;background-color:#fafafa;border-radius:3px;z-index:4}.cp.cpe .dpt-selected.dpt>.dpt-text{border:1px solid transparent}.cp.cpe .dpt-selected.dpt>.dpt-text:hover{border:1px solid transparent;background-color:transparent}.cp.cpe .dpt-selected.dpt>.dpt-form{margin:0 1rem}.cp.cpe .dpt-selected.dpt>.dpt-actions,.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom{display:table;background-color:#e5e5e5;padding:.8rem .6rem .2rem .6rem;margin-bottom:0;width:100%}.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom>.btn-action,.cp.cpe .dpt-selected.dpt>.dpt-actions>.btn-action{display:table-cell;float:none}.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom .btns-excluir .btn-danger,.cp.cpe .dpt-selected.dpt>.dpt-actions .btns-excluir .btn-danger{display:inline-block;opacity:.3;color:#fff}.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom .btns-excluir .btn-danger:hover,.cp.cpe .dpt-selected.dpt>.dpt-actions .btns-excluir .btn-danger:hover{opacity:1}.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom{margin:0;padding-bottom:.8rem}.cp.cpe .dpt-selected .dpt-block{border-top:1px solid #e5e5e5!important;opacity:.6;-webkit-transition:opacity .4s ease;transition:opacity .4s ease}.cp.cpe .dpt-selected .dpt-block:hover{opacity:1}.cp.cpe .dpt-selected .dpt-text{opacity:.7;margin:0;padding:.7em}.cp.cpe .dpt-selected .dpt-text:hover{opacity:1;background-color:#f5f5f5}.cp.cpe .dpt-selected .dpt-alts{margin:1em}.cp.cpe .dpt-selected .dpt-alts .dpt{-webkit-box-shadow:0 0 0;box-shadow:0 0 0}.cp.cpe .dpt-selected>.dpt-actions-fixed{opacity:1;top:-15px;right:.5em}.cp.cpe .dpt-selected>.dpt-actions-fixed .activate{display:inline}.cp.cpe .dpt-selected>.dpt-actions-fixed .deactivate{display:none}.cp.cpe .dpt-selected>.dpt-actions-fixed .btn-dpt-edit{padding:0 6px;line-height:1.2rem}.cp.cpe .dpt-selected>.dpt-actions-fixed .btn-dpt-edit.btn-outline-primary,.cp.cpe .dpt-selected>.dpt-actions-fixed .btn-dpt-edit.btn-outline-primary:hover{background-color:#fad46b;border:1px solid #444}.cp.cpe .dpt-selected .btns-tipos-editor{padding:0}.cp.cpe .dpt-selected .dropdown-menu.dropdown-menu-left{right:auto!important;left:0;padding:0}.cp.cpe .dpt-selected .dropdown-menu.dropdown-menu-left:before{content:"";position:absolute;background-color:transparent;width:100%;height:3px;top:-3px;display:inline-block}.cp.cpe .dpt-selected .dropdown-menu li{line-height:1}.cp.cpe .dpt-selected .dropdown-menu li a{display:block;line-height:1.5rem;padding:0 .5rem;white-space:nowrap}.cp.cpe .dpt-selected .dropdown-menu li a:hover{background-color:#f0f0f0}.cp.cpe .dpt-selected .dropdown-menu li:not(:last-child){border-bottom:1px solid #f0f0f0}.cp.cpe .dpt-selected .btn-group .radius-right{border-bottom-right-radius:.2rem!important;border-top-right-radius:.2rem!important}.cp.cpe .dpt-selected:hover>.dpt-actions-fixed{opacity:1}.cp.cpe1_old_apagar{margin-bottom:15em}.cp.cpe1_old_apagar .desativado,.cp.cpe1_old_apagar .desativado *,.cp.cpe1_old_apagar .dpt .dptt>a.desativado,.cp.cpe1_old_apagar .dpt .dptt>a.desativado *{text-decoration:line-through;color:#999!important}.cp.cpe1_old_apagar .desativado * table,.cp.cpe1_old_apagar .desativado * table td,.cp.cpe1_old_apagar .desativado table,.cp.cpe1_old_apagar .desativado table td,.cp.cpe1_old_apagar .dpt .dptt>a.desativado * table,.cp.cpe1_old_apagar .dpt .dptt>a.desativado * table td,.cp.cpe1_old_apagar .dpt .dptt>a.desativado table,.cp.cpe1_old_apagar .dpt .dptt>a.desativado table td{border:1px dotted #ccc}.cp.cpe1_old_apagar a{text-decoration:none;cursor:pointer}.cp.cpe1_old_apagar .dpt{position:relative;display:block}.cp.cpe1_old_apagar .dpt .semtexto{font-weight:700;color:#bfd1f6}.cp.cpe1_old_apagar .dpt .artigo{float:none}.cp.cpe1_old_apagar .dpt .caput{margin-top:0}.cp.cpe1_old_apagar .dpt-selected .csform .dpt>.actions_left,.cp.cpe1_old_apagar .dpt>.actions_right{color:#fff;right:0;position:absolute;opacity:0;-webkit-transition:all .4s ease-in-out;transition:all .4s ease-in-out;z-index:1000}.cp.cpe1_old_apagar .dpt-selected .csform .dpt>.actions_left a.btn-bloco,.cp.cpe1_old_apagar .dpt>.actions_right a.btn-bloco{background-color:#3498db;color:#fff!important;padding:8px 18px 6px;display:inline-block;line-height:1;float:right}.cp.cpe1_old_apagar .dpt-selected .csform .dpt>.actions_left a.btn-bloco:hover,.cp.cpe1_old_apagar .dpt>.actions_right a.btn-bloco:hover{opacity:1;background-image:-webkit-gradient(linear,left top,left bottom,from(#1c81c4),to(#0b6dad));background-image:linear-gradient(180deg,#1c81c4,#0b6dad)}.cp.cpe1_old_apagar .dpt-selected .csform .dpt:hover>.actions_left,.cp.cpe1_old_apagar .dpt:hover>.actions_right{opacity:1}.cp.cpe1_old_apagar .dpt .bloco{display:block;clear:both}.cp.cpe1_old_apagar .dpt .bloco :hover{color:#27ae60}.cp.cpe1_old_apagar .dpt .bloco .de{cursor:pointer}.cp.cpe1_old_apagar .dpt .articulacao{border-top:2px solid #e5e5e5;margin:2em 0}.cp.cpe1_old_apagar .dpt .bloco_alteracao{margin:1em 0;padding:0;background-color:transparent;min-height:100px;border:2px dashed #fff}.cp.cpe1_old_apagar .dpt .bloco_alteracao:hover{border-color:#d9ddde}.cp.cpe1_old_apagar .dpt .bloco_alteracao.drag{width:100%!important;border-color:#d9ddde}.cp.cpe1_old_apagar .dpt .bloco_alteracao.drag .dpt{-webkit-transition-duration:0s!important;transition-duration:0s!important}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt{width:100%!important;-webkit-box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);padding:.3em 1em;margin:0;background-color:#edf0f1;z-index:1}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt:not(:first-child){border-top:1px solid #fff}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt.ui-draggable div{cursor:pointer}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt.dpt-comp-selected{-webkit-transition:all .3s ease;transition:all .3s ease;width:auto!important;margin:2em -3.7em;-webkit-box-shadow:0 0 6px rgba(0,0,0,.16),0 6px 12px rgba(0,0,0,.32);box-shadow:0 0 6px rgba(0,0,0,.16),0 6px 12px rgba(0,0,0,.32)}.cp.cpe1_old_apagar .dpt-selected{font-size:1em;border:0 solid #ccc;margin:1em -1.8em 1em -1.8em;padding:2.2em 2.2em 1.6em 2.2em;-webkit-box-shadow:-4px 15px 15px rgba(0,0,0,.1),0 6px 6px rgba(0,0,0,.23);box-shadow:-4px 15px 15px rgba(0,0,0,.1),0 6px 6px rgba(0,0,0,.23);background-image:-webkit-gradient(linear,left top,left bottom,from(#eaeaee),to(#ddd));background-image:linear-gradient(180deg,#eaeaee,#ddd)}.cp.cpe1_old_apagar .dpt-selected ul{list-style:none;margin:0;padding:0}.cp.cpe1_old_apagar .dpt-selected .semtexto{color:#999}.cp.cpe1_old_apagar .dpt-selected .bloco{opacity:.5}.cp.cpe1_old_apagar .dpt-selected .bloco:hover{opacity:1}.cp.cpe1_old_apagar .dpt-selected .bloco a:hover{background:transparent}.cp.cpe1_old_apagar .dpt-selected>.bloco{opacity:1;margin:1em}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao{margin:0;padding:1em;border:0 transparent;background-image:-webkit-gradient(linear,left top,left bottom,from(#eaeaee),to(#ddd));background-image:linear-gradient(180deg,#eaeaee,#ddd)}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao:hover{border-color:transparent}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao.drag{width:100%!important}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao.drag .dpt{-webkit-transition-duration:0s!important;transition-duration:0s!important}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao .dpt{width:auto!important;-webkit-transition:all .3s ease;transition:all .3s ease;background-color:#fff}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao .dpt:not(:first-child){border-top:0 solid #fff}.cp.cpe1_old_apagar .dpt-selected>.dpt{padding:0}.cp.cpe1_old_apagar .dpt-selected>.dpt:last-child{padding-bottom:1em}.cp.cpe1_old_apagar .dpt-selected .csform .dpt-selected>.actions_left a.btn-bloco,.cp.cpe1_old_apagar .dpt-selected>.actions_right a.btn-bloco{display:none}.cp.cpe1_old_apagar .dpt-selected .csform{display:block;clear:both;z-index:9;position:static}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action{-webkit-animation:fadeIn 1s ease-in-out;-moz-animation:fadeIn 1s ease-in-out;-o-animation:fadeIn 1s ease-in-out;opacity:1;position:absolute;display:table;-webkit-transition:all .4s ease-in-out;transition:all .4s ease-in-out}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action a{color:#16407c;display:block;background:transparent;vertical-align:middle;text-align:center;font-weight:400;text-shadow:0 0 10px rgba(0,0,0,.3);padding:.33em .4em}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action>li{position:relative;display:table-cell;vertical-align:top}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action>li:hover{background-color:hsla(0,0%,100%,.5)}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action>li:hover>a{text-shadow:0 0 5px #777;color:#0a5}.cp.cpe1_old_apagar .dpt-selected .csform .label_status{position:absolute;bottom:0;right:0;color:#889;padding:.3em;font-size:80%;text-align:right;z-index:15;display:table}.cp.cpe1_old_apagar .dpt-selected .csform .label_status li{display:table-cell;padding:0 .5em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents{z-index:11;top:0;left:0}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents a{padding:.62em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents div,.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents li{font-size:80%;display:table-cell;vertical-align:middle;border-right:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents div{padding:0 .4em;font-stretch:condensed;font-variant:small-caps;font-weight:700;text-shadow:0 0 10px #fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents>li:hover a{color:#16407c;font-weight:400}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom,.cp.cpe1_old_apagar .dpt-selected .csform .actions_top{top:0;right:0}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom a,.cp.cpe1_old_apagar .dpt-selected .csform .actions_top a{padding-right:1em;padding-left:1em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom li,.cp.cpe1_old_apagar .dpt-selected .csform .actions_top li{display:table-cell;vertical-align:middle;border-left:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom{top:auto;left:0;bottom:0;display:inline-block;border-top:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom a{padding:0 .4em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom li{border:0;border-right:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_left,.cp.cpe1_old_apagar .dpt-selected .csform .actions_right{top:2.2em;right:0;bottom:0;display:block}.cp.cpe1_old_apagar .dpt-selected .csform .actions_left li,.cp.cpe1_old_apagar .dpt-selected .csform .actions_right li{width:2.2em;display:block;border-bottom:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_left li:first-child,.cp.cpe1_old_apagar .dpt-selected .csform .actions_right li:first-child{border-top:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_left{right:auto;left:0}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts{background:transparent;position:relative;z-index:19;display:table;width:100%}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li{display:table-cell}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li:hover>a{background-image:-webkit-gradient(linear,left top,left bottom,from(#1c81c4),to(#0b6dad));background-image:linear-gradient(180deg,#1c81c4,#0b6dad)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a{background-image:-webkit-gradient(linear,left top,left bottom,from(#3498db),to(#2980c9));background-image:linear-gradient(180deg,#3498db,#2980c9);border-right:1px solid #fff;padding:.2em;display:block;color:#fff;text-align:center;white-space:nowrap}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-excluir,.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar{text-align:left;background:#a70808;color:#c99;padding-left:1.7em;position:relative}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-excluir:hover,.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:hover{background-color:#c70808;color:#ecc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-excluir:before,.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before{z-index:20;position:absolute;background:url(/static/img/icon_delete_white.png) no-repeat 50% 50%;content:"";top:0;left:0;display:block;color:#000;margin-left:.4em;height:100%;width:2em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar{background:#1f8b4d;color:#fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:hover{background:#2d9c5c;color:#fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before{background:url(/static/img/icon_save_white.png) no-repeat 50% 50%}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a span{padding:0 .7em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li:last-child>a{border-right:0 solid #fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>ul li:nth-child(2n) a{background:#3385ca}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>ul li a{border-right:1px solid #fff;display:block;color:#fff;background:#2980c9;font-size:80%;padding:.23em 1em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>ul li a:hover{background:#0a5ea4}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior{table-layout:fixed}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul{-webkit-transform:translateY(30px);transform:translateY(30px);-webkit-transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:transform .1s linear,opacity .1s linear,clip 0s .3s;transition:transform .1s linear,opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;clip:rect(0,0,0,0);opacity:0;position:absolute;margin-left:.5em;-webkit-box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);-webkit-transition-delay:.4s;transition-delay:.4s}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul li a{border-right:0!important}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul li:first-child:before{border-width:.375rem;border-style:inset inset solid;content:"";display:block;height:0;width:0;border-color:transparent transparent #3385ca;position:absolute;top:-.71rem;left:.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul li:first-child:hover:before{border-color:transparent transparent #0a5ea4}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul:after{content:"";position:absolute;z-index:-1;left:0;top:-25px;height:25px;width:100%;-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior:hover>ul{-webkit-transform:translateY(7px);transform:translateY(7px);-webkit-transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:transform .4s linear,opacity .4s linear,clip 0s .2s;transition:transform .4s linear,opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;opacity:1;clip:rect(-100px,2000px,2000px,-100px)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir{display:block;position:static}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul{-webkit-transform:translateY(30px);transform:translateY(30px);-webkit-transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:transform .1s linear,opacity .1s linear,clip 0s .3s;transition:transform .1s linear,opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;clip:rect(0,0,0,0);opacity:0;position:absolute;margin-left:.5em;-webkit-box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);-webkit-transition-delay:.4s;transition-delay:.4s}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li a{border-right:0!important}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:before{border-width:.375rem;border-style:inset inset solid;content:"";display:block;height:0;width:0;border-color:transparent transparent #3385ca;position:absolute;top:-.71rem;left:.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:hover:before{border-color:transparent transparent #0a5ea4}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul:after{content:"";position:absolute;z-index:-1;left:0;top:-25px;height:25px;width:100%;-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir:hover>ul{-webkit-transform:translateY(7px);transform:translateY(7px);-webkit-transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:transform .4s linear,opacity .4s linear,clip 0s .2s;transition:transform .4s linear,opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;opacity:1;clip:rect(-100px,2000px,2000px,-100px)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul{right:.5em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li a{background-color:#a70808}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li a:hover{background:#c70808}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:before{border-color:transparent transparent #a70808;right:10%;left:auto}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:hover:before{border-color:transparent transparent #c70808}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo{z-index:2000}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul{-webkit-transform:translateY(30px);transform:translateY(30px);-webkit-transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:transform .1s linear,opacity .1s linear,clip 0s .3s;transition:transform .1s linear,opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;clip:rect(0,0,0,0);opacity:0;position:absolute;margin-left:.5em;-webkit-box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);-webkit-transition-delay:.4s;transition-delay:.4s}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul li a,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul li a{border-right:0!important}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul li:first-child:before,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul li:first-child:before{border-width:.375rem;border-style:inset inset solid;content:"";display:block;height:0;width:0;border-color:transparent transparent #3385ca;position:absolute;top:-.71rem;left:.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul li:first-child:hover:before,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul li:first-child:hover:before{border-color:transparent transparent #0a5ea4}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul:after,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul:after{content:"";position:absolute;z-index:-1;left:0;top:-25px;height:25px;width:100%;-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li:hover>ul,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li:hover>ul{-webkit-transform:translateY(7px);transform:translateY(7px);-webkit-transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:transform .4s linear,opacity .4s linear,clip 0s .2s;transition:transform .4s linear,opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;opacity:1;clip:rect(-100px,2000px,2000px,-100px)}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li.menu_excluir>ul li:first-child:before,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li.menu_excluir>ul li:first-child:before{right:auto;left:.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform textarea{margin:0;resize:vertical;min-height:12.6em;border:0;font-size:120%;width:100%}.cp.cpe1_old_apagar .dpt-selected .csform textarea:focus{background:#fff}.cp.cpe1_old_apagar .dpt-selected .csform textarea::-webkit-input-placeholder{color:#c70808;opacity:.6;font-size:80%}.cp.cpe1_old_apagar .dpt-selected .csform textarea:-moz-placeholder,.cp.cpe1_old_apagar .dpt-selected .csform textarea::-moz-placeholder{color:#c70808}.cp.cpe1_old_apagar .dpt-selected .csform textarea:-ms-input-placeholder{color:#c70808;opacity:.6}.cp.cpe1_old_apagar .selected{background-color:hsla(0,0%,100%,.5)}.cp.cpe1_old_apagar .selected a:hover{color:#16407c!important;font-weight:400!important}.lista-dispositivo,.result-busca-dispositivo{padding:0 0 1em;min-height:3em}.lista-dispositivo ul,.result-busca-dispositivo ul{list-style:none;margin:0;padding:1em 0 0;-webkit-transition:all 2s linear;transition:all 2s linear;clear:both}.lista-dispositivo ul li,.result-busca-dispositivo ul li{display:table;border-collapse:separate;border-bottom:1px solid #fff;width:100%}.lista-dispositivo ul li.ta_title,.result-busca-dispositivo ul li.ta_title{background-color:rgba(0,0,0,.15);border-radius:4px 4px 0 0;width:100%}.lista-dispositivo ul li:last-child .itemlabel,.result-busca-dispositivo ul li:last-child .itemlabel{border-radius:0 0 4px 0;margin:0}.lista-dispositivo ul li:last-child .iteminput,.result-busca-dispositivo ul li:last-child .iteminput{border-radius:0 0 0 4px}.lista-dispositivo ul li .iteminput,.result-busca-dispositivo ul li .iteminput{background-color:rgba(0,0,0,.1);border-right:1px solid #fff;display:table-cell;padding:.5em;vertical-align:middle;text-align:center}.lista-dispositivo ul li .iteminput input,.result-busca-dispositivo ul li .iteminput input{margin:0}.lista-dispositivo ul li .itemlabel,.result-busca-dispositivo ul li .itemlabel{background-color:rgba(0,0,0,.1);display:table-cell;padding:.5em;vertical-align:middle;width:100%}.lista-dispositivo ul li .itemlabel .artigo,.result-busca-dispositivo ul li .itemlabel .artigo{float:none}.lista-dispositivo .nomenclatura_heranca,.result-busca-dispositivo .nomenclatura_heranca{font-size:90%;color:#057dba;display:inline}.lista-dispositivo.controls-radio-checkbox{border:0}.label_vigencia{border-top:1px solid #fff;display:inline-block;color:#555}.label_vigencia span{color:grey}.cp-nav-parents .dropdown-menu{left:0;right:auto;padding:0}.cp-nav-parents .dropdown-menu:before{content:"";position:absolute;top:-11px;width:100%;height:11px}.cp-nav-parents:hover .dropdown-menu{display:block}.cp-nav-parents a.active small{color:#fff!important}.table-notificacoes tbody tr td{border-top:1px solid #fff;padding:5px;vertical-align:middle}.table-notificacoes tbody tr td ul{margin:0}.table-notificacoes tbody tr td ul li:hover{background-color:rgba(0,0,0,.1)}.btn-modal-open{float:right}.modal .modal-content .alert:only-child{margin:0}.class_color_container{background:#ddd!important}.clear{clear:both}.mce-tinymce.mce-container{border:1px solid #ccc!important;margin-right:2px}.mce-btn button:hover{background-color:rgba(0,0,0,.1)!important;text-shadow:0 0 5px #fff;-webkit-box-shadow:0 0 5px #777;box-shadow:0 0 5px #777}.mce-menu{background:#eee!important}.displaynone{display:none!important}@media only screen and (max-width:800px){.cp .fixed{z-index:98;position:relative}.cp.cpe1 .dpt-selected{margin:1em 0}.cp.cpe1 .dpt-selected .csform .actions_parents,.cp.cpe1 .dpt-selected .csform .label_status{font-size:80%;position:static!important;display:block!important;padding:0;height:auto!important;left:0;right:auto;text-align:left}.cp.cpe1 .dpt-selected .csform .actions_parents div,.cp.cpe1 .dpt-selected .csform .actions_parents li,.cp.cpe1 .dpt-selected .csform .label_status div,.cp.cpe1 .dpt-selected .csform .label_status li{display:inline-block!important}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul{-webkit-transform:translateY(30px);transform:translateY(30px);-webkit-transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:transform .1s linear,opacity .1s linear,clip 0s .3s;transition:transform .1s linear,opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;clip:rect(0,0,0,0);opacity:0;position:absolute;margin-left:.5em;-webkit-box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);-webkit-transition-delay:.4s;transition-delay:.4s}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul li a{border-right:0!important}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul li:first-child:before{border-width:.375rem;border-style:inset inset solid;content:"";display:block;height:0;width:0;border-color:transparent transparent #3385ca;position:absolute;top:-.71rem;left:.9375rem}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul li:first-child:hover:before{border-color:transparent transparent #0a5ea4}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul:after{content:"";position:absolute;z-index:-1;left:0;top:-25px;height:25px;width:100%;-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.cp.cpe1 .dpt-selected .csform .actions_inserts>li:hover>ul{-webkit-transform:translateY(7px);transform:translateY(7px);-webkit-transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:transform .4s linear,opacity .4s linear,clip 0s .2s;transition:transform .4s linear,opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;opacity:1;clip:rect(-100px,2000px,2000px,-100px)}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a span{display:none}.cp.cpe1 .cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-excluir,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar,.cp.cpe1_old_apagar .cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar{padding-left:0;min-width:1em}.cp.cpe1 .cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-excluir:before,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before,.cp.cpe1_old_apagar .cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before{width:100%;margin:0}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_in,.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_next,.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_prior{position:static}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_in>ul{left:1em!important;right:1em!important;margin-left:0}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_in>ul li:first-child:before{left:37%}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_next>ul{left:0!important;right:1em!important}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_prior>ul{left:1em!important;right:0!important;margin-left:0;margin-right:.5em}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_prior>ul li:first-child:before{right:42%;left:auto}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.menu_excluir>ul{left:10%!important;right:0!important;margin-left:0;margin-right:.5em}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:before{right:0;left:auto}}@media print{.button,.cp-linha-vigencias,.cp .vigencias,.dne,.menu-icon,.tipo-vigencias,.toggle-topbar{display:none!important}#btn_font_mais,#btn_font_menos{display:none}.container{width:100%}} \ No newline at end of file diff --git a/sapl/static/sapl/frontend/css/compilacao.1f5fb8cf.css.gz b/sapl/static/sapl/frontend/css/compilacao.1f5fb8cf.css.gz deleted file mode 100644 index ca1c5c876..000000000 Binary files a/sapl/static/sapl/frontend/css/compilacao.1f5fb8cf.css.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/css/compilacao.eff62463.css b/sapl/static/sapl/frontend/css/compilacao.eff62463.css new file mode 100644 index 000000000..96be5dad7 --- /dev/null +++ b/sapl/static/sapl/frontend/css/compilacao.eff62463.css @@ -0,0 +1 @@ +a:link:after,a:visited:after{content:""}.test_import:nth-child(2n){background-color:#ccc}#wait_message{display:block;position:fixed;top:0;bottom:0;left:0;right:0;background-color:hsla(0,0%,86.3%,.75);z-index:99}#wait_message #msg{position:relative;margin:20% auto;padding:1.2em 2em;max-width:600px;text-align:center;font-size:1.5em;color:#677;border:1px solid #eee;background-color:#fff!important;-webkit-box-shadow:0 1px 2px #999;box-shadow:0 1px 2px #999}.text-center{text-align:center}.cp-notify{z-index:10000;position:fixed;top:2em;left:50%;min-width:600px;-webkit-transform:translate(-50%);transform:translate(-50%);opacity:.97}.cp-notify,.cp-notify.hide{-webkit-transition:all .4s ease;transition:all .4s ease}.cp-notify.hide{opacity:0;top:-1000px;display:block!important}.cp-notify .message{padding:1em;border:2px solid rgba(0,0,0,.1);border-radius:4px;color:rgba(0,0,0,.6);line-height:1em;font-size:1.3em;text-align:center;-webkit-box-shadow:0 0 100px rgba(0,0,0,.2);box-shadow:0 0 100px rgba(0,0,0,.2)}.cp .vigencia-active{margin-top:30px;display:block}.cp .cp-linha-vigencias{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;list-style:none;margin:4rem 0 3rem;padding:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.cp .cp-linha-vigencias ul{list-style:none;margin:0;padding:0}.cp .cp-linha-vigencias>li{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;line-height:0;background:#000;height:2px;text-align:center;max-width:4rem}.cp .cp-linha-vigencias>li .circle{display:block;width:10px;line-height:0;background:#000;height:10px;margin:-5px auto 0;border-radius:50%}.cp .cp-linha-vigencias>li>a{position:absolute;white-space:nowrap;line-height:1rem;text-align:center}.cp .cp-linha-vigencias>li:nth-child(2n)>a{top:100%;margin-top:5px}.cp .cp-linha-vigencias>li:nth-child(odd)>a{bottom:100%;margin-bottom:5px}.cp .cp-linha-vigencias>li ul{z-index:1;position:absolute;display:none;background:#fff;margin:30px 0;border:1px solid #aaa;-webkit-box-shadow:0 0 10px #aaa;box-shadow:0 0 10px #aaa;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.cp .cp-linha-vigencias>li ul:before{content:" ";width:2px;height:30px;position:absolute;display:block;background-color:#aaa;bottom:100%;left:50%;margin-left:-1px}.cp .cp-linha-vigencias>li ul li{text-align:left}.cp .cp-linha-vigencias>li ul a{display:block;white-space:nowrap;line-height:2rem;padding:0 10px;font-size:1rem}.cp .cp-linha-vigencias>li ul a:hover{background:#eee}.cp .cp-linha-vigencias>li.active .circle{display:block;width:20px;line-height:0;background:#aaa;height:20px;margin:-10px auto 0}.cp .cp-linha-vigencias>li.active:not(:last-child)>a{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);margin-bottom:25px;font-weight:700}.cp .cp-linha-vigencias>li.active:first-child>a,.cp .cp-linha-vigencias>li.active:last-child>a{-webkit-transform:rotate(0deg);transform:rotate(0deg);margin-bottom:15px;font-weight:700}.cp .cp-linha-vigencias>li.active>a{margin-bottom:5px}.cp .cp-linha-vigencias>li.active:nth-child(2n)>a{bottom:100%;top:auto}.cp .cp-linha-vigencias>li.active ul{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.cp .cp-linha-vigencias>li.active ul li{text-align:left;width:100%}.cp .cp-vigencias .nav-link{padding:.5rem}.cp .cp-vigencias .dropdown-toggle:after{zoom:.8;margin:0}.cp .cp-vigencias .dropdown-menu{margin-left:.5rem}.cp .cp-vigencias .dropdown-item{padding:0}.cp .cp-vigencias .dropdown-item a{line-height:1;padding:.7rem}.cp .desativado .dpt-link,.cp .desativado .dpt-link *,.cp .desativado .dtxt,.cp .desativado .dtxt *,.cp .dpt .dptt>a.desativado .dpt-link,.cp .dpt .dptt>a.desativado .dpt-link *,.cp .dpt .dptt>a.desativado .dtxt,.cp .dpt .dptt>a.desativado .dtxt *{text-decoration:line-through;color:#999!important}.cp .desativado .dpt-link * table,.cp .desativado .dpt-link * table td,.cp .desativado .dpt-link table,.cp .desativado .dpt-link table td,.cp .desativado .dtxt * table,.cp .desativado .dtxt * table td,.cp .desativado .dtxt table,.cp .desativado .dtxt table td,.cp .dpt .dptt>a.desativado .dpt-link * table,.cp .dpt .dptt>a.desativado .dpt-link * table td,.cp .dpt .dptt>a.desativado .dpt-link table,.cp .dpt .dptt>a.desativado .dpt-link table td,.cp .dpt .dptt>a.desativado .dtxt * table,.cp .dpt .dptt>a.desativado .dtxt * table td,.cp .dpt .dptt>a.desativado .dtxt table,.cp .dpt .dptt>a.desativado .dtxt table td{border:1px dotted #ccc}.cp a{text-decoration:none;cursor:pointer}.cp .diff .desativado,.cp .diff .desativado *,.cp .diff .dpt .dptt>a.desativado,.cp .diff .dpt .dptt>a.desativado *,.cp .dpt .diff .dptt>a.desativado,.cp .dpt .diff .dptt>a.desativado *{text-decoration:line-through;color:#ddd!important;font-size:90%}.cp .diff .added{color:#04de2c}.cp .dpt{font-size:1em;position:relative}.cp .dpt.indent{padding-left:1em}.cp .dpt .ementa{padding:2em 0 2em 35%;font-weight:700}.cp .dpt .anexo,.cp .dpt .capitulo,.cp .dpt .disp_finais,.cp .dpt .disp_gerais,.cp .dpt .disp_preliminares,.cp .dpt .disp_transitorias,.cp .dpt .itemsecao,.cp .dpt .livro,.cp .dpt .parte,.cp .dpt .secao,.cp .dpt .subsecao,.cp .dpt .titulo,.cp .dpt .titulo_generico{text-align:center;margin-bottom:1em;font-size:1.5em;margin-top:3em;font-weight:700;font-variant:small-caps}.cp .dpt .titulo{margin-top:2em}.cp .dpt .capitulo{margin-top:1.5em;font-size:1.15em}.cp .dpt .secao{margin-top:1.2em;margin-bottom:.7em;font-weight:700;font-size:1.15em}.cp .dpt .itemsecao,.cp .dpt .subsecao{margin-top:1em;margin-bottom:.6em;font-weight:700;font-size:1.15em}.cp .dpt .artigo{font-size:1.15em;float:left}.cp .dpt .artigo .dptt{position:relative}.cp .dpt .caput{margin-top:.3333em;font-size:1.15em}.cp .dpt .paragrafo{font-size:1.1em;margin-top:.2222em}.cp .dpt .inciso{font-size:1.1em;margin-top:.1667em}.cp .dpt .alinea,.cp .dpt .item{font-size:1em;margin-top:2px}.cp .dpt .assinatura,.cp .dpt .fecho_lei{margin-top:.6em;font-size:1.15em}.cp .dpt .page-break{page-break-before:always}.cp .dpt .bloco_alteracao{padding-left:10%;font-style:italic;color:#018}.cp .dpt .bloco_alteracao a{text-decoration:underline}.cp .dpt .bloco_alteracao a,.cp .dpt .bloco_alteracao table,.cp .dpt .bloco_alteracao table td{color:#018!important}.cp .dpt .bloco_alteracao .desativado,.cp .dpt .bloco_alteracao .desativado a,.cp .dpt .bloco_alteracao .desativado table,.cp .dpt .bloco_alteracao .desativado table td,.cp .dpt .bloco_alteracao .dptt>a.desativado{text-decoration:line-through;color:#999!important}.cp .dpt .card-header{font-size:1.7rem}.cp .dpt .dn{font-weight:400;position:relative;font-size:80%}.cp .dpt .dn p,.cp .dpt .dn ul{font-weight:400;margin:0 0 0 0;list-style:none;padding:0}.cp .dpt .dn .dnl{display:block;text-align:left!important}.cp .dpt .dn .dnl *{display:inline}.cp .dpt .dn .dnl .bullet{padding:0 .333em;display:inline-block}.cp .dpt .dn .dnl .dnli{min-height:2.5em}.cp .dpt .dn .dnl .dnli:hover ul{font-size:1rem;clip:auto;opacity:1;background:hsla(0,0%,90.2%,.9)}.cp .dpt .dn .dnl .dnli:hover ul,.cp .dpt .dn .dnl .dnli ul{-webkit-transition:opacity .5s linear,clip 0s .3s;transition:opacity .5s linear,clip 0s .3s}.cp .dpt .dn .dnl .dnli ul{clip:rect(0,0,0,0);opacity:0;position:absolute;background:transparent;right:0;padding:.2em .5em 0 .5em;border:1px solid #c7e3d3;border-top:0;font-size:1.5rem}.cp .dpt .dn .dnl .dnli ul li{display:table-cell;color:#aaa}.cp .dpt .dn .dnl .dnli ul li:hover{color:#787}.cp .dpt .dn .dnl .dnli ul li .nowner,.cp .dpt .dn .dnl .dnli ul li:hover a{color:#27ae60!important}.cp .dpt .dn .dnl .dnli .ntitulo{font-size:.8rem;font-weight:700;color:#03a203;text-decoration:none}.cp .dpt .dn .dnl .dnli .ntitulo a{color:#294!important}.cp .dpt .dn .dnl .dnli .ntexto{font-variant:normal;font-size:.8rem;color:#018801}.cp .dpt .dn .dnl .dnli .ntexto a{color:#03a203!important}.cp .dpt .dn .dnl:hover,.cp .dpt .dn .dnl:hover *{display:block}.cp .dpt .dn .dnl:hover>.bullet{display:none}.cp .dpt .dn .dnl:hover .dnli{margin-top:.5em;border-top:1px solid #c7e3d3}.cp .dpt .dptt{clear:left}.cp .dpt .dptt>a{color:#000}.cp .dpt .dptt>a.nota-alteracao{color:#02baf2;font-size:.75em}.cp .dpt .dptt>a.nota-alteracao:hover{text-decoration:underline}.cp .dpt .dptt .dne{position:absolute;display:block;right:0;left:0;top:0;height:0;-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:right;transform-origin:right;-webkit-transition:all .3s ease;transition:all .3s ease;border-top:1px solid #2980b9}.cp .dpt .dptt .dne ul.btns-action{list-style:none;padding:0;position:absolute;right:0;background-color:#2980b9}.cp .dpt .dptt .dne ul.btns-action li{float:left}.cp .dpt .dptt .dne ul.btns-action li:hover{background-color:rgba(0,0,0,.1)}.cp .dpt .dptt .dne ul.btns-action li a{color:#fff;padding:.15em 1em 0;display:inline-block}.cp .dpt .dptt .dne-nota{position:relative;-webkit-transform:scaleX(1);transform:scaleX(1);height:auto;border-top:0}.cp .dpt .dptt .dne-nota ul.btns-action{display:none}.cp .dpt .dptt .dne-nota .dne-form{margin:1em -2em 0;text-align:left;font-size:1rem}.cp .dpt .dptt:hover .dne{height:.1667rem;-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transition-delay:1s;transition-delay:1s}.cp .dpt .dptt:hover .dne-nota{height:auto;-webkit-transition-delay:0s;transition-delay:0s}.cp .tipo-vigencias{margin-bottom:-6px;opacity:.8;list-style:none;position:fixed;bottom:0;left:50%;-webkit-transform:translate(-50%);transform:translate(-50%);margin:0;padding:0;z-index:1000;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.cp .tipo-vigencias div a{color:#fff}.cp .tipo-vigencias:hover,.cp:hover{opacity:1}.cp .revogado{color:#800}.cp .revogado .dpt-link{color:#999!important}.cp .omissis a{text-decoration:none!important}.cp-print .cp-linha-vigencias{display:none!important}.cp.cpe .desativado,.cp.cpe .dpt .dptt>a.desativado{text-decoration:line-through;color:#999!important}.cp.cpe .desativado table,.cp.cpe .desativado table td,.cp.cpe .dpt .dptt>a.desativado table,.cp.cpe .dpt .dptt>a.desativado table td{border:1px dotted #ccc}.cp.cpe a.nota-alteracao{color:#02baf2!important;font-size:.8rem}.cp.cpe .btn-sm{line-height:1rem}.cp.cpe .btn-outline-primary{background-color:#fff}.cp.cpe .btn-outline-primary:hover{background-color:#02baf2}.cp.cpe .dpt{display:block}.cp.cpe .dpt>.dpt-actions-fixed{position:absolute;right:-1em;top:-.8em;z-index:3;opacity:0}.cp.cpe .dpt>.dpt-actions-fixed.bottom{top:auto;bottom:3px;right:2px}.cp.cpe .dpt>.dpt-actions-fixed .activate{display:none}.cp.cpe .dpt>.dpt-actions-fixed .deactivate{display:inline}.cp.cpe .dpt>.dpt-actions-fixed .btn-dpt-edit.btn-outline-primary{color:#333}.cp.cpe .dpt>.dpt-actions-fixed .btn-dpt-edit.btn-outline-primary:hover{color:#fff;background-color:#02baf2}.cp.cpe .dpt>.dpt-actions,.cp.cpe .dpt>.dpt-actions-bottom{display:none}.cp.cpe .dpt>.dpt-text{cursor:text;min-height:30px;border:1px solid transparent}.cp.cpe .dpt>.dpt-text.hover-fixed,.cp.cpe .dpt>.dpt-text:hover{background-color:rgba(0,0,0,.01);color:#2980b9;border:1px solid #eee;-webkit-transition:color .3s ease;transition:color .3s ease}.cp.cpe .dpt>.dpt-text.artigo{float:none}.cp.cpe .dpt>.dpt-text a.link-rotulo{color:#000}.cp.cpe .dpt:hover>.dpt-actions-fixed{opacity:1}.cp.cpe .dpt:hover>.dpt-actions-fixed:hover~.dpt-text{background-color:rgba(0,0,0,.01);color:#2980b9;border:1px solid #eee;-webkit-transition:color .3s ease;transition:color .3s ease}.cp.cpe .dpt .semtexto{font-weight:700;color:#9aaed6}.cp.cpe .dpt .semtexto:hover{color:#5f76a4}.cp.cpe .dpt-alts{margin:0;margin-bottom:1em;padding:0;background-color:transparent;min-height:100px;border:2px dashed #fff}.cp.cpe .dpt-alts:hover{border-color:#d9ddde}.cp.cpe .dpt-alts:empty{border-color:#ddd}.cp.cpe .dpt-alts.drag{width:100%!important;border-color:#d9ddde}.cp.cpe .dpt-alts.drag .dpt{-webkit-transition-duration:0s!important;transition-duration:0s!important}.cp.cpe .dpt-alts .dpt{width:100%!important;-webkit-box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);padding:0;margin:0;background-color:#edf0f1;height:auto!important;min-height:2em;z-index:1}.cp.cpe .dpt-alts .dpt:not(:first-child){border-top:1px solid #fff}.cp.cpe .dpt-alts .dpt>.dpt-text{padding:.3em 1em;margin-top:0;margin-bottom:0}.cp.cpe .dpt-alts .dpt>.dpt-text a.link-rotulo{text-decoration:underline}.cp.cpe .dpt-alts .dpt-selected.dpt{margin:0 -.5em}.cp.cpe .dpt-selected.dpt{width:auto!important;margin:1em -.5em;border:1px solid #ddd!important;padding:0;background-color:#fafafa;border-radius:3px;z-index:4}.cp.cpe .dpt-selected.dpt>.dpt-text{border:1px solid transparent}.cp.cpe .dpt-selected.dpt>.dpt-text:hover{border:1px solid transparent;background-color:transparent}.cp.cpe .dpt-selected.dpt>.dpt-form{margin:0 1rem}.cp.cpe .dpt-selected.dpt>.dpt-actions,.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom{display:table;background-color:#e5e5e5;padding:.8rem .6rem .2rem .6rem;margin-bottom:0;width:100%}.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom>.btn-action,.cp.cpe .dpt-selected.dpt>.dpt-actions>.btn-action{display:table-cell;float:none}.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom .btns-excluir .btn-danger,.cp.cpe .dpt-selected.dpt>.dpt-actions .btns-excluir .btn-danger{display:inline-block;opacity:.3;color:#fff}.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom .btns-excluir .btn-danger:hover,.cp.cpe .dpt-selected.dpt>.dpt-actions .btns-excluir .btn-danger:hover{opacity:1}.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom{margin:0;padding-bottom:.8rem}.cp.cpe .dpt-selected .dpt-block{border-top:1px solid #e5e5e5!important;opacity:.6;-webkit-transition:opacity .4s ease;transition:opacity .4s ease}.cp.cpe .dpt-selected .dpt-block:hover{opacity:1}.cp.cpe .dpt-selected .dpt-text{opacity:.7;margin:0;padding:.7em}.cp.cpe .dpt-selected .dpt-text:hover{opacity:1;background-color:#f5f5f5}.cp.cpe .dpt-selected .dpt-alts{margin:1em}.cp.cpe .dpt-selected .dpt-alts .dpt{-webkit-box-shadow:0 0 0;box-shadow:0 0 0}.cp.cpe .dpt-selected>.dpt-actions-fixed{opacity:1;top:-15px;right:.5em}.cp.cpe .dpt-selected>.dpt-actions-fixed .activate{display:inline}.cp.cpe .dpt-selected>.dpt-actions-fixed .deactivate{display:none}.cp.cpe .dpt-selected>.dpt-actions-fixed .btn-dpt-edit{padding:0 6px;line-height:1.2rem}.cp.cpe .dpt-selected>.dpt-actions-fixed .btn-dpt-edit.btn-outline-primary,.cp.cpe .dpt-selected>.dpt-actions-fixed .btn-dpt-edit.btn-outline-primary:hover{background-color:#fad46b;border:1px solid #444}.cp.cpe .dpt-selected .btns-tipos-editor{padding:0}.cp.cpe .dpt-selected .dropdown-menu.dropdown-menu-left{right:auto!important;left:0;padding:0}.cp.cpe .dpt-selected .dropdown-menu.dropdown-menu-left:before{content:"";position:absolute;background-color:transparent;width:100%;height:3px;top:-3px;display:inline-block}.cp.cpe .dpt-selected .dropdown-menu li{line-height:1}.cp.cpe .dpt-selected .dropdown-menu li a{display:block;line-height:1.5rem;padding:0 .5rem;white-space:nowrap}.cp.cpe .dpt-selected .dropdown-menu li a:hover{background-color:#f0f0f0}.cp.cpe .dpt-selected .dropdown-menu li:not(:last-child){border-bottom:1px solid #f0f0f0}.cp.cpe .dpt-selected .btn-group .radius-right{border-bottom-right-radius:.2rem!important;border-top-right-radius:.2rem!important}.cp.cpe .dpt-selected:hover>.dpt-actions-fixed{opacity:1}.cp.cpe1_old_apagar{margin-bottom:15em}.cp.cpe1_old_apagar .desativado,.cp.cpe1_old_apagar .desativado *,.cp.cpe1_old_apagar .dpt .dptt>a.desativado,.cp.cpe1_old_apagar .dpt .dptt>a.desativado *{text-decoration:line-through;color:#999!important}.cp.cpe1_old_apagar .desativado * table,.cp.cpe1_old_apagar .desativado * table td,.cp.cpe1_old_apagar .desativado table,.cp.cpe1_old_apagar .desativado table td,.cp.cpe1_old_apagar .dpt .dptt>a.desativado * table,.cp.cpe1_old_apagar .dpt .dptt>a.desativado * table td,.cp.cpe1_old_apagar .dpt .dptt>a.desativado table,.cp.cpe1_old_apagar .dpt .dptt>a.desativado table td{border:1px dotted #ccc}.cp.cpe1_old_apagar a{text-decoration:none;cursor:pointer}.cp.cpe1_old_apagar .dpt{position:relative;display:block}.cp.cpe1_old_apagar .dpt .semtexto{font-weight:700;color:#bfd1f6}.cp.cpe1_old_apagar .dpt .artigo{float:none}.cp.cpe1_old_apagar .dpt .caput{margin-top:0}.cp.cpe1_old_apagar .dpt-selected .csform .dpt>.actions_left,.cp.cpe1_old_apagar .dpt>.actions_right{color:#fff;right:0;position:absolute;opacity:0;-webkit-transition:all .4s ease-in-out;transition:all .4s ease-in-out;z-index:1000}.cp.cpe1_old_apagar .dpt-selected .csform .dpt>.actions_left a.btn-bloco,.cp.cpe1_old_apagar .dpt>.actions_right a.btn-bloco{background-color:#3498db;color:#fff!important;padding:8px 18px 6px;display:inline-block;line-height:1;float:right}.cp.cpe1_old_apagar .dpt-selected .csform .dpt>.actions_left a.btn-bloco:hover,.cp.cpe1_old_apagar .dpt>.actions_right a.btn-bloco:hover{opacity:1;background-image:-webkit-gradient(linear,left top,left bottom,from(#1c81c4),to(#0b6dad));background-image:linear-gradient(180deg,#1c81c4,#0b6dad)}.cp.cpe1_old_apagar .dpt-selected .csform .dpt:hover>.actions_left,.cp.cpe1_old_apagar .dpt:hover>.actions_right{opacity:1}.cp.cpe1_old_apagar .dpt .bloco{display:block;clear:both}.cp.cpe1_old_apagar .dpt .bloco :hover{color:#27ae60}.cp.cpe1_old_apagar .dpt .bloco .de{cursor:pointer}.cp.cpe1_old_apagar .dpt .articulacao{border-top:2px solid #e5e5e5;margin:2em 0}.cp.cpe1_old_apagar .dpt .bloco_alteracao{margin:1em 0;padding:0;background-color:transparent;min-height:100px;border:2px dashed #fff}.cp.cpe1_old_apagar .dpt .bloco_alteracao:hover{border-color:#d9ddde}.cp.cpe1_old_apagar .dpt .bloco_alteracao.drag{width:100%!important;border-color:#d9ddde}.cp.cpe1_old_apagar .dpt .bloco_alteracao.drag .dpt{-webkit-transition-duration:0s!important;transition-duration:0s!important}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt{width:100%!important;-webkit-box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);padding:.3em 1em;margin:0;background-color:#edf0f1;z-index:1}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt:not(:first-child){border-top:1px solid #fff}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt.ui-draggable div{cursor:pointer}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt.dpt-comp-selected{-webkit-transition:all .3s ease;transition:all .3s ease;width:auto!important;margin:2em -3.7em;-webkit-box-shadow:0 0 6px rgba(0,0,0,.16),0 6px 12px rgba(0,0,0,.32);box-shadow:0 0 6px rgba(0,0,0,.16),0 6px 12px rgba(0,0,0,.32)}.cp.cpe1_old_apagar .dpt-selected{font-size:1em;border:0 solid #ccc;margin:1em -1.8em 1em -1.8em;padding:2.2em 2.2em 1.6em 2.2em;-webkit-box-shadow:-4px 15px 15px rgba(0,0,0,.1),0 6px 6px rgba(0,0,0,.23);box-shadow:-4px 15px 15px rgba(0,0,0,.1),0 6px 6px rgba(0,0,0,.23);background-image:-webkit-gradient(linear,left top,left bottom,from(#eaeaee),to(#ddd));background-image:linear-gradient(180deg,#eaeaee,#ddd)}.cp.cpe1_old_apagar .dpt-selected ul{list-style:none;margin:0;padding:0}.cp.cpe1_old_apagar .dpt-selected .semtexto{color:#999}.cp.cpe1_old_apagar .dpt-selected .bloco{opacity:.5}.cp.cpe1_old_apagar .dpt-selected .bloco:hover{opacity:1}.cp.cpe1_old_apagar .dpt-selected .bloco a:hover{background:transparent}.cp.cpe1_old_apagar .dpt-selected>.bloco{opacity:1;margin:1em}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao{margin:0;padding:1em;border:0 transparent;background-image:-webkit-gradient(linear,left top,left bottom,from(#eaeaee),to(#ddd));background-image:linear-gradient(180deg,#eaeaee,#ddd)}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao:hover{border-color:transparent}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao.drag{width:100%!important}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao.drag .dpt{-webkit-transition-duration:0s!important;transition-duration:0s!important}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao .dpt{width:auto!important;-webkit-transition:all .3s ease;transition:all .3s ease;background-color:#fff}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao .dpt:not(:first-child){border-top:0 solid #fff}.cp.cpe1_old_apagar .dpt-selected>.dpt{padding:0}.cp.cpe1_old_apagar .dpt-selected>.dpt:last-child{padding-bottom:1em}.cp.cpe1_old_apagar .dpt-selected .csform .dpt-selected>.actions_left a.btn-bloco,.cp.cpe1_old_apagar .dpt-selected>.actions_right a.btn-bloco{display:none}.cp.cpe1_old_apagar .dpt-selected .csform{display:block;clear:both;z-index:9;position:static}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action{-webkit-animation:fadeIn 1s ease-in-out;-moz-animation:fadeIn 1s ease-in-out;-o-animation:fadeIn 1s ease-in-out;opacity:1;position:absolute;display:table;-webkit-transition:all .4s ease-in-out;transition:all .4s ease-in-out}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action a{color:#16407c;display:block;background:transparent;vertical-align:middle;text-align:center;font-weight:400;text-shadow:0 0 10px rgba(0,0,0,.3);padding:.33em .4em}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action>li{position:relative;display:table-cell;vertical-align:top}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action>li:hover{background-color:hsla(0,0%,100%,.5)}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action>li:hover>a{text-shadow:0 0 5px #777;color:#0a5}.cp.cpe1_old_apagar .dpt-selected .csform .label_status{position:absolute;bottom:0;right:0;color:#889;padding:.3em;font-size:80%;text-align:right;z-index:15;display:table}.cp.cpe1_old_apagar .dpt-selected .csform .label_status li{display:table-cell;padding:0 .5em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents{z-index:11;top:0;left:0}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents a{padding:.62em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents div,.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents li{font-size:80%;display:table-cell;vertical-align:middle;border-right:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents div{padding:0 .4em;font-stretch:condensed;font-variant:small-caps;font-weight:700;text-shadow:0 0 10px #fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents>li:hover a{color:#16407c;font-weight:400}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom,.cp.cpe1_old_apagar .dpt-selected .csform .actions_top{top:0;right:0}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom a,.cp.cpe1_old_apagar .dpt-selected .csform .actions_top a{padding-right:1em;padding-left:1em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom li,.cp.cpe1_old_apagar .dpt-selected .csform .actions_top li{display:table-cell;vertical-align:middle;border-left:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom{top:auto;left:0;bottom:0;display:inline-block;border-top:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom a{padding:0 .4em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom li{border:0;border-right:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_left,.cp.cpe1_old_apagar .dpt-selected .csform .actions_right{top:2.2em;right:0;bottom:0;display:block}.cp.cpe1_old_apagar .dpt-selected .csform .actions_left li,.cp.cpe1_old_apagar .dpt-selected .csform .actions_right li{width:2.2em;display:block;border-bottom:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_left li:first-child,.cp.cpe1_old_apagar .dpt-selected .csform .actions_right li:first-child{border-top:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_left{right:auto;left:0}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts{background:transparent;position:relative;z-index:19;display:table;width:100%}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li{display:table-cell}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li:hover>a{background-image:-webkit-gradient(linear,left top,left bottom,from(#1c81c4),to(#0b6dad));background-image:linear-gradient(180deg,#1c81c4,#0b6dad)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a{background-image:-webkit-gradient(linear,left top,left bottom,from(#3498db),to(#2980c9));background-image:linear-gradient(180deg,#3498db,#2980c9);border-right:1px solid #fff;padding:.2em;display:block;color:#fff;text-align:center;white-space:nowrap}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-excluir,.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar{text-align:left;background:#a70808;color:#c99;padding-left:1.7em;position:relative}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-excluir:hover,.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:hover{background-color:#c70808;color:#ecc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-excluir:before,.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before{z-index:20;position:absolute;background:url(/static/img/icon_delete_white.png) no-repeat 50% 50%;content:"";top:0;left:0;display:block;color:#000;margin-left:.4em;height:100%;width:2em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar{background:#1f8b4d;color:#fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:hover{background:#2d9c5c;color:#fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before{background:url(/static/img/icon_save_white.png) no-repeat 50% 50%}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a span{padding:0 .7em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li:last-child>a{border-right:0 solid #fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>ul li:nth-child(2n) a{background:#3385ca}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>ul li a{border-right:1px solid #fff;display:block;color:#fff;background:#2980c9;font-size:80%;padding:.23em 1em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>ul li a:hover{background:#0a5ea4}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior{table-layout:fixed}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul{-webkit-transform:translateY(30px);transform:translateY(30px);-webkit-transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:transform .1s linear,opacity .1s linear,clip 0s .3s;transition:transform .1s linear,opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;clip:rect(0,0,0,0);opacity:0;position:absolute;margin-left:.5em;-webkit-box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);-webkit-transition-delay:.4s;transition-delay:.4s}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul li a{border-right:0!important}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul li:first-child:before{border-width:.375rem;border-style:inset inset solid;content:"";display:block;height:0;width:0;border-color:transparent transparent #3385ca;position:absolute;top:-.71rem;left:.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul li:first-child:hover:before{border-color:transparent transparent #0a5ea4}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul:after{content:"";position:absolute;z-index:-1;left:0;top:-25px;height:25px;width:100%;-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior:hover>ul{-webkit-transform:translateY(7px);transform:translateY(7px);-webkit-transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:transform .4s linear,opacity .4s linear,clip 0s .2s;transition:transform .4s linear,opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;opacity:1;clip:rect(-100px,2000px,2000px,-100px)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir{display:block;position:static}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul{-webkit-transform:translateY(30px);transform:translateY(30px);-webkit-transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:transform .1s linear,opacity .1s linear,clip 0s .3s;transition:transform .1s linear,opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;clip:rect(0,0,0,0);opacity:0;position:absolute;margin-left:.5em;-webkit-box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);-webkit-transition-delay:.4s;transition-delay:.4s}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li a{border-right:0!important}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:before{border-width:.375rem;border-style:inset inset solid;content:"";display:block;height:0;width:0;border-color:transparent transparent #3385ca;position:absolute;top:-.71rem;left:.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:hover:before{border-color:transparent transparent #0a5ea4}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul:after{content:"";position:absolute;z-index:-1;left:0;top:-25px;height:25px;width:100%;-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir:hover>ul{-webkit-transform:translateY(7px);transform:translateY(7px);-webkit-transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:transform .4s linear,opacity .4s linear,clip 0s .2s;transition:transform .4s linear,opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;opacity:1;clip:rect(-100px,2000px,2000px,-100px)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul{right:.5em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li a{background-color:#a70808}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li a:hover{background:#c70808}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:before{border-color:transparent transparent #a70808;right:10%;left:auto}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:hover:before{border-color:transparent transparent #c70808}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo{z-index:2000}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul{-webkit-transform:translateY(30px);transform:translateY(30px);-webkit-transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:transform .1s linear,opacity .1s linear,clip 0s .3s;transition:transform .1s linear,opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;clip:rect(0,0,0,0);opacity:0;position:absolute;margin-left:.5em;-webkit-box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);-webkit-transition-delay:.4s;transition-delay:.4s}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul li a,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul li a{border-right:0!important}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul li:first-child:before,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul li:first-child:before{border-width:.375rem;border-style:inset inset solid;content:"";display:block;height:0;width:0;border-color:transparent transparent #3385ca;position:absolute;top:-.71rem;left:.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul li:first-child:hover:before,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul li:first-child:hover:before{border-color:transparent transparent #0a5ea4}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul:after,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul:after{content:"";position:absolute;z-index:-1;left:0;top:-25px;height:25px;width:100%;-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li:hover>ul,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li:hover>ul{-webkit-transform:translateY(7px);transform:translateY(7px);-webkit-transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:transform .4s linear,opacity .4s linear,clip 0s .2s;transition:transform .4s linear,opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;opacity:1;clip:rect(-100px,2000px,2000px,-100px)}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li.menu_excluir>ul li:first-child:before,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li.menu_excluir>ul li:first-child:before{right:auto;left:.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform textarea{margin:0;resize:vertical;min-height:12.6em;border:0;font-size:120%;width:100%}.cp.cpe1_old_apagar .dpt-selected .csform textarea:focus{background:#fff}.cp.cpe1_old_apagar .dpt-selected .csform textarea::-webkit-input-placeholder{color:#c70808;opacity:.6;font-size:80%}.cp.cpe1_old_apagar .dpt-selected .csform textarea:-moz-placeholder,.cp.cpe1_old_apagar .dpt-selected .csform textarea::-moz-placeholder{color:#c70808}.cp.cpe1_old_apagar .dpt-selected .csform textarea:-ms-input-placeholder{color:#c70808;opacity:.6}.cp.cpe1_old_apagar .selected{background-color:hsla(0,0%,100%,.5)}.cp.cpe1_old_apagar .selected a:hover{color:#16407c!important;font-weight:400!important}.lista-dispositivo,.result-busca-dispositivo{padding:0 0 1em;min-height:3em}.lista-dispositivo ul,.result-busca-dispositivo ul{list-style:none;margin:0;padding:1em 0 0;-webkit-transition:all 2s linear;transition:all 2s linear;clear:both;position:relative}.lista-dispositivo ul li,.result-busca-dispositivo ul li{display:table;border-collapse:separate;border-bottom:1px solid #fff;width:100%}.lista-dispositivo ul li.ta_title,.result-busca-dispositivo ul li.ta_title{background-color:rgba(0,0,0,.15);width:100%}.lista-dispositivo ul li:last-child .itemlabel,.result-busca-dispositivo ul li:last-child .itemlabel{margin:0}.lista-dispositivo ul li .iteminput,.result-busca-dispositivo ul li .iteminput{background-color:rgba(0,0,0,.1);border-right:1px solid #fff;display:table-cell;padding:.5em;vertical-align:middle;text-align:center;position:relative}.lista-dispositivo ul li .iteminput input,.result-busca-dispositivo ul li .iteminput input{margin:0}.lista-dispositivo ul li .iteminput .flag,.result-busca-dispositivo ul li .iteminput .flag{position:absolute;top:0;left:0;right:0;line-height:1;background-color:#ccc;color:#fff;cursor:default;font-size:80%}.lista-dispositivo ul li .itemlabel,.result-busca-dispositivo ul li .itemlabel{margin:0;background-color:rgba(0,0,0,.1);display:table-cell;padding:.5em;vertical-align:middle;width:100%}.lista-dispositivo ul li .itemlabel .artigo,.result-busca-dispositivo ul li .itemlabel .artigo{float:none}.lista-dispositivo .label-tip-results,.result-busca-dispositivo .label-tip-results{background-color:rgba(0,0,0,.1);padding:0 5px;top:0;z-index:1;line-height:1.3;color:#00f;font-size:.9em}.lista-dispositivo .nomenclatura_heranca,.result-busca-dispositivo .nomenclatura_heranca{font-size:90%;color:#057dba;display:inline}.lista-dispositivo.controls-radio-checkbox{border:0}.label_vigencia{border-top:1px solid #fff;display:inline-block;color:#555}.label_vigencia span{color:grey}.cp-nav-parents .dropdown-menu{left:0;right:auto;padding:0}.cp-nav-parents .dropdown-menu:before{content:"";position:absolute;top:-11px;width:100%;height:11px}.cp-nav-parents:hover .dropdown-menu{display:block}.cp-nav-parents a.active small{color:#fff!important}.table-notificacoes tbody tr td{border-top:1px solid #fff;padding:5px;vertical-align:middle}.table-notificacoes tbody tr td ul{margin:0}.table-notificacoes tbody tr td ul li:hover{background-color:rgba(0,0,0,.1)}.btn-modal-open{float:right}.modal .modal-content .alert:only-child{margin:0}.class_color_container{background:#ddd!important}.clear{clear:both}.mce-tinymce.mce-container{border:1px solid #ccc!important;margin-right:2px}.mce-btn button:hover{background-color:rgba(0,0,0,.1)!important;text-shadow:0 0 5px #fff;-webkit-box-shadow:0 0 5px #777;box-shadow:0 0 5px #777}.mce-menu{background:#eee!important}.displaynone{display:none!important}@media only screen and (max-width:991.98px){.cp .table,.cp table{width:auto!important;white-space:normal;overflow-x:auto!important}}@media only screen and (max-width:800px){.cp .fixed{z-index:98;position:relative}.cp.cpe1 .dpt-selected{margin:1em 0}.cp.cpe1 .dpt-selected .csform .actions_parents,.cp.cpe1 .dpt-selected .csform .label_status{font-size:80%;position:static!important;display:block!important;padding:0;height:auto!important;left:0;right:auto;text-align:left}.cp.cpe1 .dpt-selected .csform .actions_parents div,.cp.cpe1 .dpt-selected .csform .actions_parents li,.cp.cpe1 .dpt-selected .csform .label_status div,.cp.cpe1 .dpt-selected .csform .label_status li{display:inline-block!important}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul{-webkit-transform:translateY(30px);transform:translateY(30px);-webkit-transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:transform .1s linear,opacity .1s linear,clip 0s .3s;transition:transform .1s linear,opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;clip:rect(0,0,0,0);opacity:0;position:absolute;margin-left:.5em;-webkit-box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);-webkit-transition-delay:.4s;transition-delay:.4s}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul li a{border-right:0!important}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul li:first-child:before{border-width:.375rem;border-style:inset inset solid;content:"";display:block;height:0;width:0;border-color:transparent transparent #3385ca;position:absolute;top:-.71rem;left:.9375rem}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul li:first-child:hover:before{border-color:transparent transparent #0a5ea4}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul:after{content:"";position:absolute;z-index:-1;left:0;top:-25px;height:25px;width:100%;-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.cp.cpe1 .dpt-selected .csform .actions_inserts>li:hover>ul{-webkit-transform:translateY(7px);transform:translateY(7px);-webkit-transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:transform .4s linear,opacity .4s linear,clip 0s .2s;transition:transform .4s linear,opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;opacity:1;clip:rect(-100px,2000px,2000px,-100px)}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a span{display:none}.cp.cpe1 .cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-excluir,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar,.cp.cpe1_old_apagar .cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar{padding-left:0;min-width:1em}.cp.cpe1 .cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-excluir:before,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before,.cp.cpe1_old_apagar .cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before{width:100%;margin:0}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_in,.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_next,.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_prior{position:static}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_in>ul{left:1em!important;right:1em!important;margin-left:0}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_in>ul li:first-child:before{left:37%}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_next>ul{left:0!important;right:1em!important}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_prior>ul{left:1em!important;right:0!important;margin-left:0;margin-right:.5em}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_prior>ul li:first-child:before{right:42%;left:auto}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.menu_excluir>ul{left:10%!important;right:0!important;margin-left:0;margin-right:.5em}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:before{right:0;left:auto}}@media only screen and (max-width:575.98px){.cp .cp-linha-vigencias>li{height:1px}.cp .cp-linha-vigencias>li .circle{width:8px;height:8px;margin:-4px auto 0}.cp .cp-linha-vigencias>li>a{font-size:.75rem}.cp .cp-linha-vigencias>li:nth-child(2n)>a{margin-top:4px}.cp .cp-linha-vigencias>li:nth-child(odd)>a{margin-bottom:4px}.cp .cp-linha-vigencias>li ul a{line-height:1.3rem;font-size:.7rem;background:#fff}.cp .cp-linha-vigencias>li.active .circle{width:14px;height:14px;margin:-7px auto 0}.cp .cp-linha-vigencias>li.active:not(:last-child)>a{margin-bottom:15px}.cp .cp-linha-vigencias>li.active:first-child>a,.cp .cp-linha-vigencias>li.active:last-child>a{margin-bottom:10px}}@media print{.button,.cp-linha-vigencias,.cp .vigencias,.dne,.menu-icon,.tipo-vigencias,.toggle-topbar{display:none!important}#btn_font_mais,#btn_font_menos{display:none}.container{width:100%}} \ No newline at end of file diff --git a/sapl/static/sapl/frontend/css/compilacao.eff62463.css.gz b/sapl/static/sapl/frontend/css/compilacao.eff62463.css.gz new file mode 100644 index 000000000..b251d5e36 Binary files /dev/null and b/sapl/static/sapl/frontend/css/compilacao.eff62463.css.gz differ diff --git a/sapl/static/sapl/frontend/css/global.3b8f6afb.css b/sapl/static/sapl/frontend/css/global.3b8f6afb.css new file mode 100644 index 000000000..80eaf9615 --- /dev/null +++ b/sapl/static/sapl/frontend/css/global.3b8f6afb.css @@ -0,0 +1 @@ +*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#02baf2;text-decoration:none;background-color:transparent}a:hover{color:#0180a6;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.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-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.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-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.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-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1,.col-auto{-webkit-box-flex:0}.col-1{-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-2{-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-2,.col-3{-webkit-box-flex:0}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-4,.col-5{-webkit-box-flex:0}.col-5{-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-6,.col-7{-webkit-box-flex:0}.col-7{-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-8{-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-8,.col-9{-webkit-box-flex:0}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-10,.col-11{-webkit-box-flex:0}.col-11{-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8ecfb}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7bdbf8}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a0e6fa}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#fdcbcb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#fb9e9e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#fcb2b2}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;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,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{-webkit-transition:none;transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#76defe;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.25);box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.25);box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#28a745}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.25);box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.25);box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#f84545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(248,69,69,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#f84545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f84545' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23f84545' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#f84545;-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.25);box-shadow:0 0 0 .2rem rgba(248,69,69,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#f84545;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f84545' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23f84545' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#f84545;-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.25);box-shadow:0 0 0 .2rem rgba(248,69,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#f84545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#f84545}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#f84545}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#fa7676;background-color:#fa7676}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.25);box-shadow:0 0 0 .2rem rgba(248,69,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#f84545}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#f84545;-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.25);box-shadow:0 0 0 .2rem rgba(248,69,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .form-group,.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;align-items:center;margin-bottom:0}.form-inline .form-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{-webkit-transition:none;transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#02baf2;border-color:#02baf2}.btn-primary:hover{color:#fff;background-color:#029dcc;border-color:#0293bf}.btn-primary.focus,.btn-primary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(40,196,244,.5);box-shadow:0 0 0 .2rem rgba(40,196,244,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#02baf2;border-color:#02baf2}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0293bf;border-color:#0189b3}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(40,196,244,.5);box-shadow:0 0 0 .2rem rgba(40,196,244,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(130,138,145,.5);box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(130,138,145,.5);box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{-webkit-box-shadow:0 0 0 .2rem rgba(72,180,97,.5);box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(72,180,97,.5);box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{-webkit-box-shadow:0 0 0 .2rem rgba(58,176,195,.5);box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(58,176,195,.5);box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{-webkit-box-shadow:0 0 0 .2rem rgba(222,170,12,.5);box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(222,170,12,.5);box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#f84545;border-color:#f84545}.btn-danger:hover{color:#fff;background-color:#f72020;border-color:#f61414}.btn-danger.focus,.btn-danger:focus{-webkit-box-shadow:0 0 0 .2rem rgba(249,97,97,.5);box-shadow:0 0 0 .2rem rgba(249,97,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#f84545;border-color:#f84545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#f61414;border-color:#f40909}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(249,97,97,.5);box-shadow:0 0 0 .2rem rgba(249,97,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{-webkit-box-shadow:0 0 0 .2rem rgba(216,217,219,.5);box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(216,217,219,.5);box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{-webkit-box-shadow:0 0 0 .2rem rgba(82,88,93,.5);box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(82,88,93,.5);box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-link{font-weight:400;color:#02baf2;text-decoration:none}.btn-link:hover{color:#0180a6;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;-webkit-box-shadow:none;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{-webkit-transition:opacity .15s linear;transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{-webkit-transition:none;transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{-webkit-transition:none;transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#02baf2}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.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:1}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#02baf2;background-color:#02baf2}.custom-control-input:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#76defe}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#a8eafe;border-color:#a8eafe}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#fff;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#02baf2;background-color:#02baf2}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(2,186,242,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(2,186,242,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(2,186,242,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-transform .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-transform .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{-webkit-transition:none;transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(2,186,242,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#76defe;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.5em + .75rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#76defe;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.5em + .75rem + 2px);font-weight:400;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.5;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(2,186,242,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(2,186,242,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(2,186,242,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#02baf2;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#a8eafe}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#02baf2;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-webkit-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#a8eafe}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#02baf2;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-webkit-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#a8eafe}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{-webkit-transition:none;transition:none}}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#02baf2}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm,.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md,.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg,.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl,.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0,0,0,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255,255,255,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck,.card-deck .card{-webkit-box-direction:normal}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#02baf2;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0180a6;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#02baf2;border-color:#02baf2}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{-webkit-transition:none;transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#02baf2}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0293bf}a.badge-primary.focus,a.badge-primary:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.5);box-shadow:0 0 0 .2rem rgba(2,186,242,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(108,117,125,.5);box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.5);box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(23,162,184,.5);box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(255,193,7,.5);box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#f84545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#f61414}a.badge-danger.focus,a.badge-danger:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.5);box-shadow:0 0 0 .2rem rgba(248,69,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(52,58,64,.5);box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#01617e;background-color:#ccf1fc;border-color:#b8ecfb}.alert-primary hr{border-top-color:#a0e6fa}.alert-primary .alert-link{color:#013a4b}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#812424;background-color:#fedada;border-color:#fdcbcb}.alert-danger hr{border-top-color:#fcb2b2}.alert-danger .alert-link{color:#591919}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress,.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex}.progress-bar{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#02baf2;-webkit-transition:width .6s ease;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{-webkit-transition:none;transition:none}}.progress-bar-striped{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:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#02baf2;border-color:#02baf2}.list-group-horizontal{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#01617e;background-color:#b8ecfb}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#01617e;background-color:#a0e6fa}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#01617e;border-color:#01617e}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#812424;background-color:#fdcbcb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#812424;background-color:#fcb2b2}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#812424;border-color:#812424}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);-webkit-box-shadow:0 .25rem .75rem rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-50px);transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{-webkit-transition:none;transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:-webkit-box;display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{-webkit-transition:none;transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;-webkit-transition:opacity 0s .6s;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{-webkit-transition:none;transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;-webkit-transition:opacity .15s ease;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{-webkit-transition:none;transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;-webkit-transition:opacity .6s ease;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{-webkit-transition:none;transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#02baf2!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0293bf!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#f84545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#f61414!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#02baf2!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#f84545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.85714%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column,.flex-row{-webkit-box-direction:normal!important}.flex-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse,.flex-row-reverse{-webkit-box-direction:reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column,.flex-sm-row{-webkit-box-direction:normal!important}.flex-sm-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column,.flex-md-row{-webkit-box-direction:normal!important}.flex-md-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column,.flex-lg-row{-webkit-box-direction:normal!important}.flex-lg-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column,.flex-xl-row{-webkit-box-direction:normal!important}.flex-xl-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{-webkit-box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important;box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{-webkit-box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important;box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{-webkit-box-shadow:none!important;box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#02baf2!important}a.text-primary:focus,a.text-primary:hover{color:#0180a6!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#f84545!important}a.text-danger:focus,a.text-danger:hover{color:#e80909!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{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 #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}.btn-outline-primary{color:#02baf2;border-color:#02baf2;border-color:#d6e1e5}.btn-outline-primary:hover{color:#fff;background-color:#02baf2;border-color:#02baf2}.btn-outline-primary.focus,.btn-outline-primary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.5);box-shadow:0 0 0 .2rem rgba(2,186,242,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#02baf2;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#02baf2;border-color:#02baf2}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.5);box-shadow:0 0 0 .2rem rgba(2,186,242,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d;border-color:#d6e1e5}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(108,117,125,.5);box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(108,117,125,.5);box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745;border-color:#d6e1e5}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.5);box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.5);box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8;border-color:#d6e1e5}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{-webkit-box-shadow:0 0 0 .2rem rgba(23,162,184,.5);box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(23,162,184,.5);box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107;border-color:#d6e1e5}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,193,7,.5);box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,193,7,.5);box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#f84545;border-color:#f84545;border-color:#d6e1e5}.btn-outline-danger:hover{color:#fff;background-color:#f84545;border-color:#f84545}.btn-outline-danger.focus,.btn-outline-danger:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.5);box-shadow:0 0 0 .2rem rgba(248,69,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#f84545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#f84545;border-color:#f84545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.5);box-shadow:0 0 0 .2rem rgba(248,69,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa;border-color:#d6e1e5}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40;border-color:#d6e1e5}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{-webkit-box-shadow:0 0 0 .2rem rgba(52,58,64,.5);box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(52,58,64,.5);box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.navbar{padding:0}.navbar-nav{-ms-flex-preferred-size:100%;flex-basis:100%}.navbar-nav a{white-space:nowrap;color:#93a4aa}.navbar-nav .nav-link{padding-top:0;padding-bottom:0;line-height:4.5rem}.navbar-nav .dropdown-menu{background-color:#20282a;margin:0;border:0;border-radius:0;padding:0}.navbar-nav .dropdown-item{padding:0}.navbar-nav .dropdown-item:first-child,.navbar-nav .dropdown-item:last-child{border-radius:0}.navbar-nav .dropdown-item a{padding:0 15px;line-height:2.3rem;display:block;text-decoration:none;min-width:15rem}.navbar-nav .dropdown-item:hover{background-color:#364347}.navbar-nav .dropdown-item:hover a{color:#fff}.navbar-nav .pesquisa .dropdown-menu{min-width:15rem}.navbar-nav .search-form{padding:10px;min-width:20%}.navbar-nav a:not([href]):not([tabindex]){color:#777}.navbar-nav.justify-content-end .dropdown-menu{left:auto;right:0}.nav-pills .dropdown-menu{padding:0}.nav-pills .dropdown-item a{display:block}.nav-pills .dropdown-item.active a{color:#fff}@media (max-width:1199px){nav .container{max-width:none;-ms-flex-preferred-size:100%;flex-basis:100%}nav .caret{margin-left:-3px}}@media (max-width:1091px){.navbar-expand-lg .navbar-nav .nav-link{padding-left:4px;padding-right:4px;font-size:.95rem}}@media (max-width:991px){.navbar{padding:5px}.navbar-nav .nav-link{line-height:2.5rem}.navbar-nav.justify-content-end{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.navbar-nav.justify-content-end>li{display:inline-block}}@media (max-width:767px){.table{width:auto;white-space:normal;display:block;overflow-x:auto}}html{position:relative;min-height:100%}a,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,img,p{margin:0;padding:0}.h1,h1{font-size:30px}.h2,h2{font-size:24px}.h3,h3{font-size:20px}.h4,h4{font-size:16px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:.25em 0}p.control-label{font-weight:700}label{margin-bottom:0;line-height:1}input[type=checkbox],input[type=radio]{margin:0 5px 0 0;position:relative}fieldset fieldset{font-size:95%}fieldset fieldset legend{font-size:18px}ul{margin:0}.hidden{display:none}.form-control-static{padding:.2em 0;padding-left:12px;background-color:#f7f7f7}.form-control-static:empty{display:none}.legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5;clear:both}.page-header{margin:20px 0 10px}.caret.top{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.lista-parlamentares .table td{vertical-align:middle}small{color:#777}.container-tabaux .sidebar-tabaux{background:#fafafa;margin-top:-70px;padding:10px;border:1px solid #eee}.container-tabaux .sidebar-tabaux .navbar-right{margin:0}.container-tabaux .sidebar-tabaux .nav-pills>li+li{margin-left:0}.container-tabaux .sidebar-tabaux li{width:100%}.container-tabaux .sidebar-tabaux span{display:none}.container-tabaux .sidebar-tabaux .dropdown-menu{padding:0;right:10px;margin-top:-5px;overflow:hidden}.container-tabaux .sidebar-tabaux .dropdown-menu a{border:0}.container-tabaux ul{list-style:none;padding:0}.container-tabaux .list{font-family:SourceSansProSemiBold,Helvetica,Arial,sans-serif;font-size:0}.container-tabaux .list,.container-tabaux .list ul{display:table;width:100%;margin:0}.container-tabaux .list li{width:50%;display:inline-block;position:relative}.container-tabaux .list>li{width:100%;border-bottom:1px solid #eee;padding-bottom:20px;margin-bottom:20px}.container-tabaux .list .head_title{color:#364347;font-size:1.7rem;text-transform:none}.container-tabaux .list a span,.mce-branding.mce-label{display:none}.dont-break-out{overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}@media print{a[href]:after{content:none!important}}.container-home{position:relative;padding:2em 1.5em 1.5em 1.5em;max-width:1000px;margin:0 auto}.container-home a:hover{color:#444;-webkit-transition:.3s ease-in;-moz-transition:.3s ease-in;-o-transition:.3s ease-in}.container-home #homeIndex{text-align:center}.container-home .homeBanner span{color:#fff;font-size:32px;font-weight:600;display:inline-block;vertical-align:middle;padding:2px 45px 4px;border:2px solid}.container-home .homeBanner:after{display:inline-block;vertical-align:middle;height:100%}.container-home .homeBlock{display:inline-block;position:relative;background-color:#f3f3f3;width:190px;height:260px;margin:3px;text-align:center;font-size:0;overflow:hidden}.container-home .homeBlock>a{display:block;position:absolute;width:100%;height:100%;top:0;left:0}.container-home .homeBlock:after{content:"";display:inline-block;vertical-align:middle;height:100%;overflow:visible;clear:none;visibility:initial}.container-home .homeContent{position:relative;padding:10px;text-align:justify;font-size:14px;color:#fff;opacity:0;-webkit-transition:opacity .5s ease;transition:opacity .5s ease;display:inline-block;vertical-align:middle}.container-home .homeContent p{display:block;line-height:13px;font-size:80%;color:#fff}.container-home .homeIcon{position:relative;display:inline-block;width:105px;height:105px;border-radius:50%;background:#364347;z-index:1}.container-home .homeIcon:before{content:"";position:absolute;width:100%;height:100%;border-radius:50%;background:#364347;top:0;left:0;-webkit-transform:scale(.95);transform:scale(.95);-webkit-transition:-webkit-transform .6s ease;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}.container-home .homeIcon img{position:absolute;margin:auto;top:0;bottom:0;right:0;left:0;-webkit-transition:opacity .4s ease .4s;transition:opacity .4s ease .4s}.container-home .homeFront{position:absolute;top:46%;width:100%;font-size:0;-webkit-transform:translateY(-60%);transform:translateY(-60%)}.container-home .homeFront h2{position:absolute;margin-top:18px;font-size:22px;font-weight:700;color:#595959!important;width:100%;padding:0 6%;z-index:0}.container-home .homeTitle{display:block;height:32px;text-align:center;width:100%;opacity:0;-webkit-transition:opacity .4s ease;transition:opacity .4s ease}.container-home .homeTitle:before{content:"";display:inline-block;vertical-align:middle;height:100%}.container-home .homeTitle h2{display:inline-block;vertical-align:middle;max-width:110px;font-size:14px;color:#fff!important;line-height:1em}.container-home .homeTitle img{display:inline-block;vertical-align:middle;height:30px;margin-right:5px}.container-home .homeBlock:hover .homeIcon:before{-webkit-transform:scale(3.6) translateY(7px);transform:scale(3.6) translateY(7px)}.container-home .homeBlock:hover .homeContent{opacity:1;-webkit-transition-delay:.2s;transition-delay:.2s}.container-home .homeBlock:hover .homeIcon img{opacity:0;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-delay:0s;transition-delay:0s}.container-home .homeBlock:hover .homeTitle{opacity:1}.masthead{padding:10px}.masthead .navbar-brand{padding:0;font-size:24px}.masthead .navbar-brand img.img-responsive{height:95px;display:inline-block}.masthead .navbar-brand small{color:#93a4aa;font-size:75%;line-height:25px}.masthead .navbar-brand .vcenter{display:inline-block;vertical-align:middle;float:none;padding:10px;line-height:1.5rem}.masthead .nav-link{padding:.3rem .5rem;margin:0 1px}.masthead .nav-link:hover{background-color:#b2c6cd;color:#fff}@media (max-width:1091px){.masthead .navbar-brand{font-size:22px}.masthead .navbar-brand img.img-responsive{height:60px}}@media (max-width:767px){.masthead{text-align:center}.masthead .container{max-width:100%;padding:0}.masthead .navbar-brand{white-space:normal;margin:0}.masthead .navbar-brand .vcenter{display:block;line-height:1em}}@media (max-width:576px){.masthead .navbar-brand{font-size:1.2rem}}@media (max-width:360px){.masthead .navbar-brand{font-size:1rem}}body{margin-bottom:160px}.footer{background:#364347;color:#fff;text-align:center;position:absolute;width:100%;bottom:0}.footer p{color:#fff;margin-top:10px}.footer .container{padding-top:25px}@media (max-width:991px){.footer{position:relative}}.jcrop-holder{-ms-touch-action:none;direction:ltr;text-align:left}.jcrop-hline,.jcrop-vline{background:#fff url(data:image/gif;base64,R0lGODlhCAAIAJEAAKqqqv///wAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgAAACwAAAAACAAIAAACDZQFCadrzVRMB9FZ5SwAIfkECQoAAAAsAAAAAAgACAAAAg+ELqCYaudeW9ChyOyltQAAIfkECQoAAAAsAAAAAAgACAAAAg8EhGKXm+rQYtC0WGl9oAAAIfkECQoAAAAsAAAAAAgACAAAAg+EhWKQernaYmjCWLF7qAAAIfkECQoAAAAsAAAAAAgACAAAAg2EISmna81UTAfRWeUsACH5BAkKAAAALAAAAAAIAAgAAAIPFA6imGrnXlvQocjspbUAACH5BAkKAAAALAAAAAAIAAgAAAIPlIBgl5vq0GLQtFhpfaIAACH5BAUKAAAALAAAAAAIAAgAAAIPlIFgknq52mJowlixe6gAADs=);font-size:0;position:absolute}.jcrop-vline{height:100%;width:1px!important}.jcrop-vline.right{right:0}.jcrop-hline{height:1px!important;width:100%}.jcrop-hline.bottom{bottom:0}.jcrop-tracker{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none;height:100%;width:100%}.jcrop-handle{background-color:#333;border:1px solid #eee;font-size:1px;height:7px;width:7px}.jcrop-handle.ord-n{left:50%;margin-left:-4px;margin-top:-4px;top:0}.jcrop-handle.ord-s{bottom:0;left:50%;margin-bottom:-4px;margin-left:-4px}.jcrop-handle.ord-e{margin-right:-4px;margin-top:-4px;right:0;top:50%}.jcrop-handle.ord-w{left:0;margin-left:-4px;margin-top:-4px;top:50%}.jcrop-handle.ord-nw{left:0;margin-left:-4px;margin-top:-4px;top:0}.jcrop-handle.ord-ne{margin-right:-4px;margin-top:-4px;right:0;top:0}.jcrop-handle.ord-se{bottom:0;margin-bottom:-4px;margin-right:-4px;right:0}.jcrop-handle.ord-sw{bottom:0;left:0;margin-bottom:-4px;margin-left:-4px}.jcrop-dragbar.ord-n,.jcrop-dragbar.ord-s{height:7px;width:100%}.jcrop-dragbar.ord-e,.jcrop-dragbar.ord-w{height:100%;width:7px}.jcrop-dragbar.ord-n{margin-top:-4px}.jcrop-dragbar.ord-s{bottom:0;margin-bottom:-4px}.jcrop-dragbar.ord-e{margin-right:-4px;right:0}.jcrop-dragbar.ord-w{margin-left:-4px}.jcrop-light .jcrop-hline,.jcrop-light .jcrop-vline{background:#fff;filter:alpha(opacity=70)!important;opacity:.7!important}.jcrop-light .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#000;border-color:#fff;border-radius:3px}.jcrop-dark .jcrop-hline,.jcrop-dark .jcrop-vline{background:#000;filter:alpha(opacity=70)!important;opacity:.7!important}.jcrop-dark .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#fff;border-color:#000;border-radius:3px}.solid-line .jcrop-hline,.solid-line .jcrop-vline{background:#fff}.jcrop-holder img,img.jcrop-preview{max-width:none}div.jcrop-image.size-warning .jcrop-hline,div.jcrop-image.size-warning .jcrop-vline{border:1px solid red;background:none}body.change-form .allow-fullsize+.help,body.change-form .jcrop-holder+.help{clear:left}body.change-form .jcrop-holder{float:left}div.allow-fullsize{padding:5px 0 0 10px} \ No newline at end of file diff --git a/sapl/static/sapl/frontend/css/global.3b8f6afb.css.gz b/sapl/static/sapl/frontend/css/global.3b8f6afb.css.gz new file mode 100644 index 000000000..0fba99fb0 Binary files /dev/null and b/sapl/static/sapl/frontend/css/global.3b8f6afb.css.gz differ diff --git a/sapl/static/sapl/frontend/css/global.d160bbe2.css b/sapl/static/sapl/frontend/css/global.d160bbe2.css deleted file mode 100644 index e7ae402ba..000000000 --- a/sapl/static/sapl/frontend/css/global.d160bbe2.css +++ /dev/null @@ -1 +0,0 @@ -*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#02baf2;text-decoration:none;background-color:transparent}a:hover{color:#0180a6;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.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-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.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-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.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-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1,.col-auto{-webkit-box-flex:0}.col-1{-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-2{-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-2,.col-3{-webkit-box-flex:0}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-4,.col-5{-webkit-box-flex:0}.col-5{-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-6,.col-7{-webkit-box-flex:0}.col-7{-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-8{-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-8,.col-9{-webkit-box-flex:0}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-10,.col-11{-webkit-box-flex:0}.col-11{-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8ecfb}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7bdbf8}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a0e6fa}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#fdcbcb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#fb9e9e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#fcb2b2}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;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,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{-webkit-transition:none;transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#76defe;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.25);box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.25);box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#28a745}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.25);box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.25);box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#f84545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(248,69,69,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#f84545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f84545' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23f84545' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#f84545;-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.25);box-shadow:0 0 0 .2rem rgba(248,69,69,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#f84545;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f84545' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23f84545' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#f84545;-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.25);box-shadow:0 0 0 .2rem rgba(248,69,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#f84545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#f84545}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#f84545}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#fa7676;background-color:#fa7676}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.25);box-shadow:0 0 0 .2rem rgba(248,69,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#f84545}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#f84545;-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.25);box-shadow:0 0 0 .2rem rgba(248,69,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .form-group,.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;align-items:center;margin-bottom:0}.form-inline .form-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{-webkit-transition:none;transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#02baf2;border-color:#02baf2}.btn-primary:hover{color:#fff;background-color:#029dcc;border-color:#0293bf}.btn-primary.focus,.btn-primary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(40,196,244,.5);box-shadow:0 0 0 .2rem rgba(40,196,244,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#02baf2;border-color:#02baf2}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0293bf;border-color:#0189b3}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(40,196,244,.5);box-shadow:0 0 0 .2rem rgba(40,196,244,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(130,138,145,.5);box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(130,138,145,.5);box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{-webkit-box-shadow:0 0 0 .2rem rgba(72,180,97,.5);box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(72,180,97,.5);box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{-webkit-box-shadow:0 0 0 .2rem rgba(58,176,195,.5);box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(58,176,195,.5);box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{-webkit-box-shadow:0 0 0 .2rem rgba(222,170,12,.5);box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(222,170,12,.5);box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#f84545;border-color:#f84545}.btn-danger:hover{color:#fff;background-color:#f72020;border-color:#f61414}.btn-danger.focus,.btn-danger:focus{-webkit-box-shadow:0 0 0 .2rem rgba(249,97,97,.5);box-shadow:0 0 0 .2rem rgba(249,97,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#f84545;border-color:#f84545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#f61414;border-color:#f40909}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(249,97,97,.5);box-shadow:0 0 0 .2rem rgba(249,97,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{-webkit-box-shadow:0 0 0 .2rem rgba(216,217,219,.5);box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(216,217,219,.5);box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{-webkit-box-shadow:0 0 0 .2rem rgba(82,88,93,.5);box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(82,88,93,.5);box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-link{font-weight:400;color:#02baf2;text-decoration:none}.btn-link:hover{color:#0180a6;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;-webkit-box-shadow:none;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{-webkit-transition:opacity .15s linear;transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{-webkit-transition:none;transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{-webkit-transition:none;transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#02baf2}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.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:1}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#02baf2;background-color:#02baf2}.custom-control-input:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#76defe}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#a8eafe;border-color:#a8eafe}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#fff;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#02baf2;background-color:#02baf2}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(2,186,242,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(2,186,242,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(2,186,242,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-transform .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-transform .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{-webkit-transition:none;transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(2,186,242,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#76defe;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.5em + .75rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#76defe;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.5em + .75rem + 2px);font-weight:400;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.5;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(2,186,242,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(2,186,242,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(2,186,242,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#02baf2;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#a8eafe}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#02baf2;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-webkit-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#a8eafe}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#02baf2;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-webkit-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#a8eafe}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{-webkit-transition:none;transition:none}}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#02baf2}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm,.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md,.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg,.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl,.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck,.card-deck .card{-webkit-box-direction:normal}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;column-count:3;-webkit-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#02baf2;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0180a6;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#02baf2;border-color:#02baf2}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{-webkit-transition:none;transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#02baf2}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0293bf}a.badge-primary.focus,a.badge-primary:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.5);box-shadow:0 0 0 .2rem rgba(2,186,242,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(108,117,125,.5);box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.5);box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(23,162,184,.5);box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(255,193,7,.5);box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#f84545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#f61414}a.badge-danger.focus,a.badge-danger:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.5);box-shadow:0 0 0 .2rem rgba(248,69,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(52,58,64,.5);box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#01617e;background-color:#ccf1fc;border-color:#b8ecfb}.alert-primary hr{border-top-color:#a0e6fa}.alert-primary .alert-link{color:#013a4b}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#812424;background-color:#fedada;border-color:#fdcbcb}.alert-danger hr{border-top-color:#fcb2b2}.alert-danger .alert-link{color:#591919}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress,.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex}.progress-bar{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#02baf2;-webkit-transition:width .6s ease;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{-webkit-transition:none;transition:none}}.progress-bar-striped{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:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#02baf2;border-color:#02baf2}.list-group-horizontal{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#01617e;background-color:#b8ecfb}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#01617e;background-color:#a0e6fa}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#01617e;border-color:#01617e}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#812424;background-color:#fdcbcb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#812424;background-color:#fcb2b2}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#812424;border-color:#812424}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);-webkit-box-shadow:0 .25rem .75rem rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-50px);transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{-webkit-transition:none;transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:-webkit-box;display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{-webkit-transition:none;transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;-webkit-transition:opacity 0s .6s;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{-webkit-transition:none;transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;-webkit-transition:opacity .15s ease;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{-webkit-transition:none;transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;-webkit-transition:opacity .6s ease;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{-webkit-transition:none;transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#02baf2!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0293bf!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#f84545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#f61414!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#02baf2!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#f84545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.85714%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column,.flex-row{-webkit-box-direction:normal!important}.flex-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse,.flex-row-reverse{-webkit-box-direction:reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column,.flex-sm-row{-webkit-box-direction:normal!important}.flex-sm-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column,.flex-md-row{-webkit-box-direction:normal!important}.flex-md-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column,.flex-lg-row{-webkit-box-direction:normal!important}.flex-lg-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column,.flex-xl-row{-webkit-box-direction:normal!important}.flex-xl-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{-webkit-box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important;box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{-webkit-box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important;box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{-webkit-box-shadow:none!important;box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#02baf2!important}a.text-primary:focus,a.text-primary:hover{color:#0180a6!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#f84545!important}a.text-danger:focus,a.text-danger:hover{color:#e80909!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{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 #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}.btn-outline-primary{color:#02baf2;border-color:#02baf2;border-color:#d6e1e5}.btn-outline-primary:hover{color:#fff;background-color:#02baf2;border-color:#02baf2}.btn-outline-primary.focus,.btn-outline-primary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.5);box-shadow:0 0 0 .2rem rgba(2,186,242,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#02baf2;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#02baf2;border-color:#02baf2}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.5);box-shadow:0 0 0 .2rem rgba(2,186,242,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d;border-color:#d6e1e5}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(108,117,125,.5);box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(108,117,125,.5);box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745;border-color:#d6e1e5}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.5);box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.5);box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8;border-color:#d6e1e5}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{-webkit-box-shadow:0 0 0 .2rem rgba(23,162,184,.5);box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(23,162,184,.5);box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107;border-color:#d6e1e5}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,193,7,.5);box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,193,7,.5);box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#f84545;border-color:#f84545;border-color:#d6e1e5}.btn-outline-danger:hover{color:#fff;background-color:#f84545;border-color:#f84545}.btn-outline-danger.focus,.btn-outline-danger:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.5);box-shadow:0 0 0 .2rem rgba(248,69,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#f84545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#f84545;border-color:#f84545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.5);box-shadow:0 0 0 .2rem rgba(248,69,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa;border-color:#d6e1e5}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40;border-color:#d6e1e5}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{-webkit-box-shadow:0 0 0 .2rem rgba(52,58,64,.5);box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(52,58,64,.5);box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.navbar{padding:0}.navbar-nav{-ms-flex-preferred-size:100%;flex-basis:100%}.navbar-nav a{white-space:nowrap;color:#93a4aa}.navbar-nav .nav-link{padding-top:0;padding-bottom:0;line-height:4.5rem}.navbar-nav .dropdown-menu{background-color:#20282a;margin:0;border:0;border-radius:0;padding:0}.navbar-nav .dropdown-item{padding:0}.navbar-nav .dropdown-item:first-child,.navbar-nav .dropdown-item:last-child{border-radius:0}.navbar-nav .dropdown-item a{padding:0 15px;line-height:2.3rem;display:block;text-decoration:none;min-width:15rem}.navbar-nav .dropdown-item:hover{background-color:#364347}.navbar-nav .dropdown-item:hover a{color:#fff}.navbar-nav .pesquisa .dropdown-menu{min-width:15rem}.navbar-nav .search-form{padding:10px;min-width:20%}.navbar-nav a:not([href]):not([tabindex]){color:#777}.navbar-nav.justify-content-end .dropdown-menu{left:auto;right:0}.nav-pills .dropdown-menu{padding:0}.nav-pills .dropdown-item a{display:block}.nav-pills .dropdown-item.active a{color:#fff}@media (max-width:1199px){nav .container{max-width:none;-ms-flex-preferred-size:100%;flex-basis:100%}nav .caret{margin-left:-3px}}@media (max-width:1091px){.navbar-expand-lg .navbar-nav .nav-link{padding-left:4px;padding-right:4px;font-size:.95rem}}@media (max-width:991px){.navbar{padding:5px}.navbar-nav .nav-link{line-height:2.5rem}.navbar-nav.justify-content-end{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.navbar-nav.justify-content-end>li{display:inline-block}}@media (max-width:767px){.table{width:auto;white-space:normal;display:block;overflow-x:auto}}html{position:relative;min-height:100%}a,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,img,p{margin:0;padding:0}.h1,h1{font-size:30px}.h2,h2{font-size:24px}.h3,h3{font-size:20px}.h4,h4{font-size:16px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:.25em 0}p.control-label{font-weight:700}label{margin-bottom:0;line-height:1}input[type=checkbox],input[type=radio]{margin:0 5px 0 0;position:relative}fieldset fieldset{font-size:95%}fieldset fieldset legend{font-size:18px}ul{margin:0}.hidden{display:none}.form-control-static{padding:.2em 0;padding-left:12px;background-color:#f7f7f7}.form-control-static:empty{display:none}.legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5;clear:both}.page-header{margin:20px 0 10px}.caret.top{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.lista-parlamentares .table td{vertical-align:middle}small{color:#777}.container-tabaux .sidebar-tabaux{background:#fafafa;margin-top:-70px;padding:10px;border:1px solid #eee}.container-tabaux .sidebar-tabaux .navbar-right{margin:0}.container-tabaux .sidebar-tabaux .nav-pills>li+li{margin-left:0}.container-tabaux .sidebar-tabaux li{width:100%}.container-tabaux .sidebar-tabaux span{display:none}.container-tabaux .sidebar-tabaux .dropdown-menu{padding:0;right:10px;margin-top:-5px;overflow:hidden}.container-tabaux .sidebar-tabaux .dropdown-menu a{border:0}.container-tabaux ul{list-style:none;padding:0}.container-tabaux .list{font-family:SourceSansProSemiBold,Helvetica,Arial,sans-serif;font-size:0}.container-tabaux .list,.container-tabaux .list ul{display:table;width:100%;margin:0}.container-tabaux .list li{width:50%;display:inline-block;position:relative}.container-tabaux .list>li{width:100%;border-bottom:1px solid #eee;padding-bottom:20px;margin-bottom:20px}.container-tabaux .list .head_title{color:#364347;font-size:1.7rem;text-transform:none}.container-tabaux .list a span,.mce-branding.mce-label{display:none}.dont-break-out{overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}@media print{a[href]:after{content:none!important}}.container-home{position:relative;padding:2em 1.5em 1.5em 1.5em;max-width:1000px;margin:0 auto}.container-home a:hover{color:#444;-webkit-transition:.3s ease-in;-moz-transition:.3s ease-in;-o-transition:.3s ease-in}.container-home #homeIndex{text-align:center}.container-home .homeBanner span{color:#fff;font-size:32px;font-weight:600;display:inline-block;vertical-align:middle;padding:2px 45px 4px;border:2px solid}.container-home .homeBanner:after{display:inline-block;vertical-align:middle;height:100%}.container-home .homeBlock{display:inline-block;position:relative;background-color:#f3f3f3;width:190px;height:260px;margin:3px;text-align:center;font-size:0;overflow:hidden}.container-home .homeBlock>a{display:block;position:absolute;width:100%;height:100%;top:0;left:0}.container-home .homeBlock:after{content:"";display:inline-block;vertical-align:middle;height:100%;overflow:visible;clear:none;visibility:initial}.container-home .homeContent{position:relative;padding:10px;text-align:justify;font-size:14px;color:#fff;opacity:0;-webkit-transition:opacity .5s ease;transition:opacity .5s ease;display:inline-block;vertical-align:middle}.container-home .homeContent p{display:block;line-height:13px;font-size:80%;color:#fff}.container-home .homeIcon{position:relative;display:inline-block;width:105px;height:105px;border-radius:50%;background:#364347;z-index:1}.container-home .homeIcon:before{content:"";position:absolute;width:100%;height:100%;border-radius:50%;background:#364347;top:0;left:0;-webkit-transform:scale(.95);transform:scale(.95);-webkit-transition:-webkit-transform .6s ease;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}.container-home .homeIcon img{position:absolute;margin:auto;top:0;bottom:0;right:0;left:0;-webkit-transition:opacity .4s ease .4s;transition:opacity .4s ease .4s}.container-home .homeFront{position:absolute;top:46%;width:100%;font-size:0;-webkit-transform:translateY(-60%);transform:translateY(-60%)}.container-home .homeFront h2{position:absolute;margin-top:18px;font-size:22px;font-weight:700;color:#595959!important;width:100%;padding:0 6%;z-index:0}.container-home .homeTitle{display:block;height:32px;text-align:center;width:100%;opacity:0;-webkit-transition:opacity .4s ease;transition:opacity .4s ease}.container-home .homeTitle:before{content:"";display:inline-block;vertical-align:middle;height:100%}.container-home .homeTitle h2{display:inline-block;vertical-align:middle;max-width:110px;font-size:14px;color:#fff!important;line-height:1em}.container-home .homeTitle img{display:inline-block;vertical-align:middle;height:30px;margin-right:5px}.container-home .homeBlock:hover .homeIcon:before{-webkit-transform:scale(3.6) translateY(7px);transform:scale(3.6) translateY(7px)}.container-home .homeBlock:hover .homeContent{opacity:1;-webkit-transition-delay:.2s;transition-delay:.2s}.container-home .homeBlock:hover .homeIcon img{opacity:0;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-delay:0s;transition-delay:0s}.container-home .homeBlock:hover .homeTitle{opacity:1}.masthead{padding:10px}.masthead .navbar-brand{padding:0;font-size:24px}.masthead .navbar-brand img.img-responsive{height:95px;display:inline-block}.masthead .navbar-brand small{color:#93a4aa;font-size:75%;line-height:25px}.masthead .navbar-brand .vcenter{display:inline-block;vertical-align:middle;float:none;padding:10px;line-height:1.5rem}.masthead .nav-link{padding:.3rem .5rem;margin:0 1px}.masthead .nav-link:hover{background-color:#b2c6cd;color:#fff}@media (max-width:1091px){.masthead .navbar-brand{font-size:22px}.masthead .navbar-brand img.img-responsive{height:60px}}@media (max-width:767px){.masthead{text-align:center}.masthead .container{max-width:100%;padding:0}.masthead .navbar-brand{white-space:normal;margin:0}.masthead .navbar-brand .vcenter{display:block;line-height:1em}}@media (max-width:576px){.masthead .navbar-brand{font-size:1.2rem}}@media (max-width:360px){.masthead .navbar-brand{font-size:1rem}}body{margin-bottom:160px}.footer{background:#364347;color:#fff;text-align:center;position:absolute;width:100%;bottom:0}.footer p{color:#fff;margin-top:10px}.footer .container{padding-top:25px}@media (max-width:991px){.footer{position:relative}}.jcrop-holder{-ms-touch-action:none;direction:ltr;text-align:left}.jcrop-hline,.jcrop-vline{background:#fff url(data:image/gif;base64,R0lGODlhCAAIAJEAAKqqqv///wAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgAAACwAAAAACAAIAAACDZQFCadrzVRMB9FZ5SwAIfkECQoAAAAsAAAAAAgACAAAAg+ELqCYaudeW9ChyOyltQAAIfkECQoAAAAsAAAAAAgACAAAAg8EhGKXm+rQYtC0WGl9oAAAIfkECQoAAAAsAAAAAAgACAAAAg+EhWKQernaYmjCWLF7qAAAIfkECQoAAAAsAAAAAAgACAAAAg2EISmna81UTAfRWeUsACH5BAkKAAAALAAAAAAIAAgAAAIPFA6imGrnXlvQocjspbUAACH5BAkKAAAALAAAAAAIAAgAAAIPlIBgl5vq0GLQtFhpfaIAACH5BAUKAAAALAAAAAAIAAgAAAIPlIFgknq52mJowlixe6gAADs=);font-size:0;position:absolute}.jcrop-vline{height:100%;width:1px!important}.jcrop-vline.right{right:0}.jcrop-hline{height:1px!important;width:100%}.jcrop-hline.bottom{bottom:0}.jcrop-tracker{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none;height:100%;width:100%}.jcrop-handle{background-color:#333;border:1px solid #eee;font-size:1px;height:7px;width:7px}.jcrop-handle.ord-n{left:50%;margin-left:-4px;margin-top:-4px;top:0}.jcrop-handle.ord-s{bottom:0;left:50%;margin-bottom:-4px;margin-left:-4px}.jcrop-handle.ord-e{margin-right:-4px;margin-top:-4px;right:0;top:50%}.jcrop-handle.ord-w{left:0;margin-left:-4px;margin-top:-4px;top:50%}.jcrop-handle.ord-nw{left:0;margin-left:-4px;margin-top:-4px;top:0}.jcrop-handle.ord-ne{margin-right:-4px;margin-top:-4px;right:0;top:0}.jcrop-handle.ord-se{bottom:0;margin-bottom:-4px;margin-right:-4px;right:0}.jcrop-handle.ord-sw{bottom:0;left:0;margin-bottom:-4px;margin-left:-4px}.jcrop-dragbar.ord-n,.jcrop-dragbar.ord-s{height:7px;width:100%}.jcrop-dragbar.ord-e,.jcrop-dragbar.ord-w{height:100%;width:7px}.jcrop-dragbar.ord-n{margin-top:-4px}.jcrop-dragbar.ord-s{bottom:0;margin-bottom:-4px}.jcrop-dragbar.ord-e{margin-right:-4px;right:0}.jcrop-dragbar.ord-w{margin-left:-4px}.jcrop-light .jcrop-hline,.jcrop-light .jcrop-vline{background:#fff;filter:alpha(opacity=70)!important;opacity:.7!important}.jcrop-light .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#000;border-color:#fff;border-radius:3px}.jcrop-dark .jcrop-hline,.jcrop-dark .jcrop-vline{background:#000;filter:alpha(opacity=70)!important;opacity:.7!important}.jcrop-dark .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#fff;border-color:#000;border-radius:3px}.solid-line .jcrop-hline,.solid-line .jcrop-vline{background:#fff}.jcrop-holder img,img.jcrop-preview{max-width:none}div.jcrop-image.size-warning .jcrop-hline,div.jcrop-image.size-warning .jcrop-vline{border:1px solid red;background:none}body.change-form .allow-fullsize+.help,body.change-form .jcrop-holder+.help{clear:left}body.change-form .jcrop-holder{float:left}div.allow-fullsize{padding:5px 0 0 10px} \ No newline at end of file diff --git a/sapl/static/sapl/frontend/css/global.d160bbe2.css.gz b/sapl/static/sapl/frontend/css/global.d160bbe2.css.gz deleted file mode 100644 index 779a66a77..000000000 Binary files a/sapl/static/sapl/frontend/css/global.d160bbe2.css.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/css/painel.baa845ab.css b/sapl/static/sapl/frontend/css/painel.5d957a9b.css similarity index 100% rename from sapl/static/sapl/frontend/css/painel.baa845ab.css rename to sapl/static/sapl/frontend/css/painel.5d957a9b.css diff --git a/sapl/static/sapl/frontend/css/painel.baa845ab.css.gz b/sapl/static/sapl/frontend/css/painel.5d957a9b.css.gz similarity index 100% rename from sapl/static/sapl/frontend/css/painel.baa845ab.css.gz rename to sapl/static/sapl/frontend/css/painel.5d957a9b.css.gz diff --git a/sapl/static/sapl/frontend/css/parlamentar.0e433876.css b/sapl/static/sapl/frontend/css/parlamentar.0e433876.css new file mode 100644 index 000000000..e69de29bb diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.c39278f7.ttf b/sapl/static/sapl/frontend/fonts/fa-brands-400.06147b6c.ttf similarity index 70% rename from sapl/static/sapl/frontend/fonts/fa-brands-400.c39278f7.ttf rename to sapl/static/sapl/frontend/fonts/fa-brands-400.06147b6c.ttf index 5f72e9127..82e255ac5 100644 Binary files a/sapl/static/sapl/frontend/fonts/fa-brands-400.c39278f7.ttf and b/sapl/static/sapl/frontend/fonts/fa-brands-400.06147b6c.ttf differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.06147b6c.ttf.gz b/sapl/static/sapl/frontend/fonts/fa-brands-400.06147b6c.ttf.gz new file mode 100644 index 000000000..04fcf144e Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-brands-400.06147b6c.ttf.gz differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.4b115e11.woff2 b/sapl/static/sapl/frontend/fonts/fa-brands-400.4b115e11.woff2 deleted file mode 100644 index b5a956765..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-brands-400.4b115e11.woff2 and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.d9d17590.eot b/sapl/static/sapl/frontend/fonts/fa-brands-400.5063b105.eot similarity index 70% rename from sapl/static/sapl/frontend/fonts/fa-brands-400.d9d17590.eot rename to sapl/static/sapl/frontend/fonts/fa-brands-400.5063b105.eot index da7bd5eb7..f6b7c7dc1 100644 Binary files a/sapl/static/sapl/frontend/fonts/fa-brands-400.d9d17590.eot and b/sapl/static/sapl/frontend/fonts/fa-brands-400.5063b105.eot differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.5063b105.eot.gz b/sapl/static/sapl/frontend/fonts/fa-brands-400.5063b105.eot.gz new file mode 100644 index 000000000..9a8c61144 Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-brands-400.5063b105.eot.gz differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.b90365bc.woff b/sapl/static/sapl/frontend/fonts/fa-brands-400.b90365bc.woff deleted file mode 100644 index c64755a52..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-brands-400.b90365bc.woff and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.c39278f7.ttf.gz b/sapl/static/sapl/frontend/fonts/fa-brands-400.c39278f7.ttf.gz deleted file mode 100644 index fef011f3d..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-brands-400.c39278f7.ttf.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.c5e0f14f.woff b/sapl/static/sapl/frontend/fonts/fa-brands-400.c5e0f14f.woff new file mode 100644 index 000000000..b0021db2e Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-brands-400.c5e0f14f.woff differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.cccc9d29.woff2 b/sapl/static/sapl/frontend/fonts/fa-brands-400.cccc9d29.woff2 new file mode 100644 index 000000000..b53cbbf56 Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-brands-400.cccc9d29.woff2 differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.d9d17590.eot.gz b/sapl/static/sapl/frontend/fonts/fa-brands-400.d9d17590.eot.gz deleted file mode 100644 index f53bcd8fe..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-brands-400.d9d17590.eot.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.414ff5da.eot.gz b/sapl/static/sapl/frontend/fonts/fa-regular-400.414ff5da.eot.gz deleted file mode 100644 index 8e17eb99b..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-regular-400.414ff5da.eot.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.65779ebc.woff2 b/sapl/static/sapl/frontend/fonts/fa-regular-400.65779ebc.woff2 deleted file mode 100644 index 3ef9c3edb..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-regular-400.65779ebc.woff2 and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.f6c6f6c8.ttf b/sapl/static/sapl/frontend/fonts/fa-regular-400.65b286af.ttf similarity index 94% rename from sapl/static/sapl/frontend/fonts/fa-regular-400.f6c6f6c8.ttf rename to sapl/static/sapl/frontend/fonts/fa-regular-400.65b286af.ttf index a309313d5..5267d851b 100644 Binary files a/sapl/static/sapl/frontend/fonts/fa-regular-400.f6c6f6c8.ttf and b/sapl/static/sapl/frontend/fonts/fa-regular-400.65b286af.ttf differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.65b286af.ttf.gz b/sapl/static/sapl/frontend/fonts/fa-regular-400.65b286af.ttf.gz new file mode 100644 index 000000000..dfc9cff79 Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-regular-400.65b286af.ttf.gz differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.414ff5da.eot b/sapl/static/sapl/frontend/fonts/fa-regular-400.c1a866ec.eot similarity index 92% rename from sapl/static/sapl/frontend/fonts/fa-regular-400.414ff5da.eot rename to sapl/static/sapl/frontend/fonts/fa-regular-400.c1a866ec.eot index 55085ca95..e1bcc447d 100644 Binary files a/sapl/static/sapl/frontend/fonts/fa-regular-400.414ff5da.eot and b/sapl/static/sapl/frontend/fonts/fa-regular-400.c1a866ec.eot differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.c1a866ec.eot.gz b/sapl/static/sapl/frontend/fonts/fa-regular-400.c1a866ec.eot.gz new file mode 100644 index 000000000..29d4b3612 Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-regular-400.c1a866ec.eot.gz differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.5dd3976c.woff b/sapl/static/sapl/frontend/fonts/fa-regular-400.c4f508e7.woff similarity index 90% rename from sapl/static/sapl/frontend/fonts/fa-regular-400.5dd3976c.woff rename to sapl/static/sapl/frontend/fonts/fa-regular-400.c4f508e7.woff index 257826189..f513c1c3c 100644 Binary files a/sapl/static/sapl/frontend/fonts/fa-regular-400.5dd3976c.woff and b/sapl/static/sapl/frontend/fonts/fa-regular-400.c4f508e7.woff differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.f5f2566b.woff2 b/sapl/static/sapl/frontend/fonts/fa-regular-400.f5f2566b.woff2 new file mode 100644 index 000000000..2e72e872c Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-regular-400.f5f2566b.woff2 differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.f6c6f6c8.ttf.gz b/sapl/static/sapl/frontend/fonts/fa-regular-400.f6c6f6c8.ttf.gz deleted file mode 100644 index 9b8e2aaf4..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-regular-400.f6c6f6c8.ttf.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.b70cea03.ttf b/sapl/static/sapl/frontend/fonts/fa-solid-900.0bff33a5.ttf similarity index 81% rename from sapl/static/sapl/frontend/fonts/fa-solid-900.b70cea03.ttf rename to sapl/static/sapl/frontend/fonts/fa-solid-900.0bff33a5.ttf index 7ece3282a..16d4469b0 100644 Binary files a/sapl/static/sapl/frontend/fonts/fa-solid-900.b70cea03.ttf and b/sapl/static/sapl/frontend/fonts/fa-solid-900.0bff33a5.ttf differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.0bff33a5.ttf.gz b/sapl/static/sapl/frontend/fonts/fa-solid-900.0bff33a5.ttf.gz new file mode 100644 index 000000000..f5b8f33df Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-solid-900.0bff33a5.ttf.gz differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.333bae20.woff b/sapl/static/sapl/frontend/fonts/fa-solid-900.333bae20.woff new file mode 100644 index 000000000..608f9e1b0 Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-solid-900.333bae20.woff differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.44d537ab.woff2 b/sapl/static/sapl/frontend/fonts/fa-solid-900.44d537ab.woff2 new file mode 100644 index 000000000..5a60d47c1 Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-solid-900.44d537ab.woff2 differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.46280631.woff2 b/sapl/static/sapl/frontend/fonts/fa-solid-900.46280631.woff2 deleted file mode 100644 index 71b07ce02..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-solid-900.46280631.woff2 and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.61969d43.woff b/sapl/static/sapl/frontend/fonts/fa-solid-900.61969d43.woff deleted file mode 100644 index a892a7a9c..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-solid-900.61969d43.woff and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.b5596f4d.eot b/sapl/static/sapl/frontend/fonts/fa-solid-900.8e4a6dcc.eot similarity index 81% rename from sapl/static/sapl/frontend/fonts/fa-solid-900.b5596f4d.eot rename to sapl/static/sapl/frontend/fonts/fa-solid-900.8e4a6dcc.eot index 68c010a86..c867e7ebb 100644 Binary files a/sapl/static/sapl/frontend/fonts/fa-solid-900.b5596f4d.eot and b/sapl/static/sapl/frontend/fonts/fa-solid-900.8e4a6dcc.eot differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.8e4a6dcc.eot.gz b/sapl/static/sapl/frontend/fonts/fa-solid-900.8e4a6dcc.eot.gz new file mode 100644 index 000000000..f9deb7005 Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-solid-900.8e4a6dcc.eot.gz differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.b5596f4d.eot.gz b/sapl/static/sapl/frontend/fonts/fa-solid-900.b5596f4d.eot.gz deleted file mode 100644 index 06c1c3dca..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-solid-900.b5596f4d.eot.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.b70cea03.ttf.gz b/sapl/static/sapl/frontend/fonts/fa-solid-900.b70cea03.ttf.gz deleted file mode 100644 index 0559c739d..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-solid-900.b70cea03.ttf.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/img/fa-brands-400.80533988.svg.gz b/sapl/static/sapl/frontend/img/fa-brands-400.80533988.svg.gz deleted file mode 100644 index 7706bec50..000000000 Binary files a/sapl/static/sapl/frontend/img/fa-brands-400.80533988.svg.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/img/fa-brands-400.80533988.svg b/sapl/static/sapl/frontend/img/fa-brands-400.a9c4bb73.svg similarity index 77% rename from sapl/static/sapl/frontend/img/fa-brands-400.80533988.svg rename to sapl/static/sapl/frontend/img/fa-brands-400.a9c4bb73.svg index caa8cc43c..cf4d7ceb1 100644 --- a/sapl/static/sapl/frontend/img/fa-brands-400.80533988.svg +++ b/sapl/static/sapl/frontend/img/fa-brands-400.a9c4bb73.svg @@ -1,8 +1,12 @@ + -Created by FontForge 20190112 at Tue Feb 12 10:24:59 2019 +Created by FontForge 20190801 at Mon Sep 23 12:53:49 2019 By Robert Madole Copyright (c) Font Awesome @@ -18,8 +22,8 @@ Copyright (c) Font Awesome descent="-64" bbox="-0.200195 -66.9505 641.5 448.3" underline-thickness="25" - underline-position="-51" - unicode-range="U+0020-F7E3" + underline-position="-50" + unicode-range="U+0020-F8E8" /> +d="M400 416c26.4961 0 48 -21.5039 48 -48v-352c0 -26.4961 -21.5039 -48 -48 -48h-137.25v152.31h57.7803l11 71.6904h-68.7803v46.5498c0 19.6104 9.61035 38.7305 40.4199 38.7305h31.2705v61s-28.3809 4.83984 -55.5205 4.83984 +c-56.6699 0 -93.6699 -34.3301 -93.6699 -96.4805v-54.6396h-63v-71.6904h63v-152.31h-137.25c-26.4961 0 -48 21.5039 -48 48v352c0 26.4961 21.5039 48 48 48h352z" /> - - + +d="M100.28 0h-92.8799v299.1h92.8799v-299.1zM53.79 339.9c-29.7002 0 -53.79 24.5996 -53.79 54.2998c0 29.6914 24.0977 53.79 53.79 53.79s53.79 -24.0986 53.79 -53.79c0 -29.7002 -24.0996 -54.2998 -53.79 -54.2998zM447.9 0h-92.6807v145.6 +c0 34.7002 -0.700195 79.2002 -48.29 79.2002c-48.29 0 -55.6895 -37.7002 -55.6895 -76.7002v-148.1h-92.7803v299.1h89.0801v-40.7998h1.2998c12.4004 23.5 42.6904 48.2998 87.8799 48.2998c94 0 111.28 -61.8994 111.28 -142.3v-164.3h-0.0996094z" /> - - - - - + @@ -154,10 +159,10 @@ d="M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 - c-2.39941 0.599609 -5 -0.200195 -8 -1.40039c-27.6992 -11.0996 -42.5 1 -42.5 22.4004v83.2998h52.1006c3.39941 0 6.2002 2.7998 6.2002 6.2002v51.0996c0 3.40039 -2.80078 6.2002 -6.2002 6.2002h-51.9004v72c0 3.40039 -2.7998 6.2002 -6.2002 6.2002h-44.2998 c-5.89941 0 -9.5 -3.2998 -10 -10.2002c-1.7998 -25.7002 -13.8994 -59.5 -52.7002 -73.2002c-4.2998 -1.5 -7.09961 -5.5 -7.09961 -10v-42.5c0 -3.39941 2.7998 -6.19922 6.2002 -6.19922h29.7002v-90c0 -32.4004 16.3994 -87.9004 91.8994 -87.9004 c29.7002 0 52.4004 10.7002 60.9004 19.7998z" /> - + - - - - - - - @@ -371,7 +376,7 @@ c82.4004 23 209.7 12.7998 280.9 -29.7002c4.5 -2.59961 7.7002 -3.89941 12.8994 -3 - - - +d="M100.59 113.76c48.5703 -3.30957 58.9502 -2.10938 58.9502 -11.9395c0 -20 -65.5498 -20.0605 -65.5498 -1.52051c0.00976562 5.08984 3.29004 9.40039 6.59961 13.46zM128.54 230.4c30.96 0 31.7598 -44.4707 -0.75 -44.4707c-33 0 -31.54 44.4707 0.75 44.4707z +M448 368v-352c0 -26.4961 -21.5039 -48 -48 -48h-352c-26.4961 0 -48 21.5039 -48 48v352c0 26.4961 21.5039 48 48 48h352c26.4961 0 48 -21.5039 48 -48zM221 298.69c0 -14.4902 8.37988 -22.8809 22.8604 -22.8809c14.7393 0 23.1299 8.39062 23.1299 22.8809 +c0 14.4893 -8.37012 22.3096 -23.1104 22.3096c-14.4795 0 -22.8799 -7.83984 -22.8799 -22.3096zM199.18 253h-49.5498c-25 6.5498 -81.5596 4.84961 -81.5596 -46.75c0 -18.7998 9.39941 -32 21.8496 -38.1104c-15.6895 -14.3701 -23.1201 -21.1396 -23.1201 -30.7393 +c0 -6.87012 2.79004 -13.2207 11.1807 -16.7607c-8.90039 -8.39941 -14 -14.4795 -14 -25.9199c0.0195312 -20.0693 17.5498 -31.7197 63.5391 -31.7197c44.2207 0 69.8701 16.5098 69.8701 45.7305c0 36.6699 -28.2295 35.3193 -94.7695 39.3799l8.37988 13.4297 +c17 -4.74023 74.1904 -6.23047 74.1904 42.4297c0 11.6904 -4.83008 19.8203 -9.40039 25.6699l23.3799 1.78027zM283.52 143.16l-13 1.78027c-3.81934 0.509766 -4.06934 1 -4.06934 5.08984v105.45h-52.6006l-2.79004 -20.5703c15.75 -5.5498 17 -4.86035 17 -10.1699 +v-74.7402c0 -5.62012 -0.30957 -4.58008 -17 -6.87012v-20.0596h72.4209zM384 133l-6.87012 22.3701c-40.9297 -15.3701 -37.8496 12.4102 -37.8496 16.7295v60.7207h37.8496v25.4102h-35.8203c-2.86914 0 -2 -2.52051 -2 38.6299h-24.1797 +c-2.79004 -27.7002 -11.6797 -38.8799 -34 -41.4199v-22.6201c20.4697 0 19.8203 0.849609 19.8203 -2.54004v-66.5703c0 -28.7197 11.4297 -40.9102 41.6699 -40.9102c14.4502 0 30.4502 4.83008 41.3799 10.2002z" /> + - @@ -471,12 +476,15 @@ c0 32.7998 -10.5996 45.7002 -40.8994 45.7002h-317.7c-31.7002 0 -40.6006 -10.8008 c1.09961 15.7998 10 25.7998 33.6992 24.9004c32.3008 -1.40039 91.7002 -7.7002 160.601 29.6992z" /> - + - @@ -746,7 +754,7 @@ c-133.96 0 -247.56 109.51 -247.56 248c0 132.939 104.74 248 247.56 248zM248.43 -1 - - @@ -824,7 +832,7 @@ c-0.5 -1.2002 -0.899414 -2.2998 -1.2998 -3.5c0.400391 1.2002 0.900391 2.40039 1. d="M313.9 415.3c-170.2 0 -252.601 -223.8 -147.5 -355.1c36.5 -45.4004 88.5996 -75.6006 147.5 -75.6006c36.2998 0 70.2998 11.1006 99.3994 30.4004c-43.7998 -39.2002 -101.899 -63 -165.3 -63c-3.90039 0 -8 0 -11.9004 0.299805 c-131.5 6.10059 -236.1 114.601 -236.1 247.7c0 137 111 248 248 248h0.799805c63.1006 -0.299805 120.7 -24.0996 164.4 -63.0996c-29 19.3994 -63.1006 30.3994 -99.2998 30.3994zM415.7 17.5996c-40.9004 -24.6992 -90.7002 -23.5996 -132 5.80078 c56.2002 20.5 97.7002 91.5996 97.7002 176.6c0 84.7002 -41.2002 155.8 -97.4004 176.6c41.7998 29.2002 91.2002 30.3008 132.9 5c105.899 -98.6992 105.5 -265.699 -1.2002 -364z" /> - - - - + - - - - @@ -938,13 +946,13 @@ c4.2998 2.5 9.19922 4.2002 14.0996 4.2002c11.4004 0 12.2998 -8.2998 12.2998 -17. c-2.2002 0.900391 -7.2002 2.2998 -9.59961 2.2998c-23.1006 0 -38.7002 -10.5 -58.2002 -21.5l-0.5 0.5c4.2998 29.4004 14.5996 57.2002 14.5996 87.4004c0 44.5996 -23.7998 62.7002 -67.5 62.7002c-71.7002 0 -108 -70.8008 -108 -123.5c0 -54.7002 32 -85 86.2998 -85 c7.5 0 6.90039 0.599609 6.90039 -2.30078c-10.5 -80.2998 -56.5 -82.8994 -56.5 -58.8994c0 24.3994 28 36.5 28.2998 38c-0.200195 7.59961 -29.2998 17.2002 -36.7002 17.2002c-21.0996 0 -32.6992 -33 -32.6992 -50.6006c0 -32.2998 20.3994 -54.7002 53.2998 -54.7002 c48.2002 0 83.3994 49.7002 94.2998 91.7002c9.40039 37.7002 7 39.4004 12.2998 42.1006c20 10.0996 35.7998 16.7998 58.4004 16.7998c11.0996 0 19 -2.2998 36.7002 -5.2002c1.7998 -0.0996094 4.09961 1.7002 4.09961 3.5z" /> - - - - - - - - - - - - - - - - - - @@ -1383,7 +1391,7 @@ c56.5762 1.79199 78.3359 38.9121 78.3359 38.9121z" /> - d="M87.2002 394.5c-41.5 -50.2002 -65.6006 -116.2 -65.5 -192.9c-0.100586 -86.7998 29 -159.5 78.7002 -212.1h-100.4v405h87.2002zM325.4 384.8c46.1992 -0.0996094 79.5996 -33.5 80.6992 -83.2002h-169.899c4.09961 49.7002 43.2998 83.1006 89.2002 83.2002z M556.1 394.4h0.300781l-0.100586 0.0996094zM556.4 394.4h83.5996v-405h-80.7998c21.3994 23 40.5 49.8994 57.8994 80.7998l-96.3994 48.2002c-33.9004 -55.1006 -83.4004 -105.801 -151.9 -106.101c-99.7002 0.400391 -138.8 85.6006 -138.6 195.3h372.399 c0.5 12.4004 0.5 18.1006 0 24.1006c2.5 65.2002 -14.7998 120 -46.1992 162.7z" /> - - + + - - - - - + - - - - + @@ -1878,7 +1900,7 @@ d="M350.5 290.3l-54.2002 46.1006l73.4004 39l78.2998 -44.2002zM192 325.9l45.7002 M82.4004 314.8l23.8994 18.1006l8.90039 -24l-26.7002 -18.3008zM59 241.5l-3.59961 28.4004l22.2998 15.5l6.09961 -28.7002zM28.4004 224.9l20.7998 12.7998l3.2998 -33.4004l-22.9004 -12zM1.40039 180l19.1992 10.2002l0.400391 -38.2002l-21 -8.7998zM60.5 120.7 l-28.2998 -8.2998l-1.60059 46.7998l25.1006 10.7002zM99 184.8l-31.0996 -13l-5.2002 40.7998l27.3994 14.4004zM123.2 71l-41.6006 -5.90039l-8.09961 63.5l35.2002 10.8008zM151.7 210.9l21.2002 -57.1006l-46.2002 -13.5996l-13.7002 54.0996zM237.4 -19.5996 l-70.9004 3.2998l-24.2998 95.7998l55.2002 8.59961zM152.5 260.1l42.2002 22.4004l28 -45.9004l-50.7998 -21.2998zM193.5 165.2l61.2998 18.7002l52.7998 -86.6006l-79.7998 -11.2998zM244.9 250.8l67.2998 28.7998l65.5 -65.3994l-88.6006 -26.2002z" /> - - - + - - - - - - - - + +d="M301.84 69.0801c-0.299805 -0.599609 -0.599609 -1.08008 0 0zM550.97 156.08c57.9092 0.300781 90.5703 -37.0801 88.9707 -71.0801c-1.10059 -26.9004 -25.6904 -37.9004 -30.29 -38.7002c-3.30078 -0.599609 -5.10059 -0.700195 -5.60059 1.90039 +c-0.299805 1.7998 0.900391 2.7002 4.7998 5.09961c3.90039 2.40039 15.6006 10.5 17.7002 25c2.10059 14.5 -8.7998 49.2998 -64.4795 55.7998c-26 3 -46.3906 -0.599609 -62.0898 -7.19922c2.89941 -7.60059 5.09961 -15.5 5.39941 -23.4004 +c0.799805 -17.5 -11.29 -30.4004 -23.79 -39.5996c-5.48535 -3.98535 -15.1572 -8.95801 -21.5898 -11.1006c-5.2002 -2.2002 -12.2002 -4.5 -17.0996 -3.5c-10.9004 2.2002 -16.7002 11.7998 -9.30078 33.1006c4 11.5 15.5 29 34.0908 44.0996 +c-4.30078 8.7002 -8.99023 17.5996 -11.3906 25.7002c-2.18164 7.00781 -4.95898 18.5664 -6.2002 25.7998c0 0 -15.2998 -31.7197 -35.0898 -60.6201c-1.09961 -1.7002 -2.2998 -3.39941 -3.39941 -5c3.7998 -9 6.89941 -18.5996 7.2998 -28.2002 +c0.700195 -17.3994 -6.90039 -30.5996 -19.4004 -39.7998c-5.16211 -3.70605 -14.208 -8.45508 -20.1895 -10.5996c-3.90039 -1.7998 -12 -4.60059 -23.5 -5.40039c-6.29004 -0.5 -12.29 -0.0996094 -15.6904 2.5c-4.59961 3.40039 -5.2002 7.7998 -2.7998 13.7002 +c2 5 17.21 22.4004 30 37.5996c3.5 4.2002 6.90039 8.5 9.90039 12.5c-0.0498047 0.0449219 -0.09375 0.134766 -0.100586 0.200195c0 0 2.2998 3 6.10059 8.2002c-4.7002 10.0996 -10.6006 20.5 -13.4004 30c-2.18164 7.00781 -4.95898 18.5664 -6.2002 25.7998 +c0 0 -15.4902 -39.7002 -31.6895 -71.5c-12.4902 -24.5996 -20.79 -39.5 -24.5908 -46v-0.299805s-0.5 -0.900391 -1.5 -2.40039c-0.5 -0.799805 -0.699219 -1.19922 -0.699219 -1.19922v0.0996094c-4.20996 -6.2002 -13.6104 -18.2998 -23 -18.2998 +c-25.7002 0 -16.3008 52.2002 -16.3008 52.2002s-7.5 -19.3008 -16 -35.9004c-6.88965 -13.5996 -13.0898 -25 -26.8896 -25c-3.90039 0 -10.1904 0.0996094 -15.3896 5c-11.8008 11.2002 -20.9004 39.7002 -19.1006 61.7002c1.5 18.7998 4.40039 31.7998 8.40039 42.5996 +c-7.10059 -3.89941 -15.2002 -8.39941 -23.4902 -13.2998c-4.2998 -2.5 -8.59961 -5 -12.7998 -7.5c0.0996094 -0.299805 0.299805 -0.5 0.400391 -0.799805c10.5996 -20.4004 13.3896 -65.2002 -9.60059 -99.5s-65.7803 -55.2002 -107.57 -43.6006 +c-13.3896 3.80078 -33.79 31.6006 -16.29 70.4004c15.4902 34.2002 77.3809 66.5996 93.6709 74.7002c1.39941 0.799805 2.89941 1.59961 4.5 2.5c-32.4902 28.3994 -113.671 66.7998 -125.061 125.7c-3.2002 16.5996 4.58984 56.2998 53.2803 101.899 +c40.9902 38.2998 97.9697 67.7002 150.66 86.4004c88.4297 31.3994 181.949 12.8994 196.31 -43.5c14.1006 -55.5 -33.9902 -121.8 -95.7695 -145.601c-54.9902 -21.2998 -100.471 -17.8994 -119.17 -11.7998c-21.29 7 -33.79 21 -36.79 28.9004 +c-1.2002 3.09961 -3.30078 8.2998 0 10.0996c2 1.10059 2.7998 0.799805 8.09961 -5.09961c5.09961 -5.60059 25.4902 -20.6006 64.2803 -16.2998c101.77 11.3994 163.06 90.5 143.66 133c-13.4902 29.7998 -91.8408 43.1992 -189.841 -5.60059 +c-119.569 -59.5996 -126.069 -108.7 -127.069 -127.399c-2.7998 -51.3008 63.2793 -78.3008 99.0693 -116.5c0.5 -0.5 0.900391 -1 1.40039 -1.5c6.7002 3.69922 13.7998 7.59961 20.7002 11.3994c18 9.90039 35.0996 19.2002 43 23.5 +c12.5801 18.2998 38.1797 38.5 56.5801 38.5c29.4893 0 19.3896 -42.3994 19.3896 -42.3994s0.599609 2 1.40039 2c0.799805 0 4.09961 5.5 13.1992 2.19922c9.40039 -3.5 7.2002 -10 7.30078 -10.6992c0.0996094 -1.30078 -11 -38.9004 -15.7002 -63.1006 +c-2.2002 -11.5 -0.900391 -19.8994 -0.299805 -19.8994c0.899414 0 2.7998 2.89941 4.5 6.09961v0.0996094s1.2998 2.40039 3.5 6.7002c0 0.200195 -0.200195 -0.299805 -0.5 -0.799805c0.199219 0.400391 0.5 0.900391 0.899414 1.7002 +c2.60059 5 6.2002 12.3994 10.4004 21.5996c8.18945 18.1006 39.4795 87.7002 42.0801 95.4004c2.59961 7.7002 4 15.7002 5.2998 19.0996c1.2998 3.40039 12.4102 6 25.2998 5.90039c12.8906 -0.100586 14.1904 -5.60059 14.29 -6.7002 +c0.100586 -1.09961 -6.2002 -16.4004 -7.59961 -27.2002c-1.40039 -10.7998 -0.100586 -16.2002 1.09961 -25.2998c0.799805 -6 4.5 -13.5 8.90039 -22c13.2998 21.7998 36.79 63.5996 39.0898 75.2998c1.03613 5.38965 3.41016 13.9473 5.2998 19.1006 +c1.29004 3.39941 12.3896 6 25.29 5.89941c12.9004 -0.0996094 14.2002 -5.59961 14.2998 -6.7002c0.100586 -1.09961 -6.2002 -16.3994 -7.59961 -27.1992c-1.40039 -10.8008 -0.100586 -16.2002 1.09961 -25.3008c1 -7.7998 7.10059 -18.1992 13 -30.0996 +c15.1289 7.45215 41.0938 13.5 57.958 13.5h0.0419922zM121.79 11.3799c19.4004 21.0996 27.3896 47.9199 19.0996 78.3203c-1 -0.600586 -2 -1.10059 -2.89941 -1.7002c0 0 -0.400391 -0.200195 -1.2002 -0.700195c-4.7998 -2.89941 -8.7002 -5.2998 -11.4004 -6.89941 +c-11.7998 -7.40039 -29.5898 -19.4004 -43.3896 -32.4004c-22.6904 -21.4199 -27.3896 -51 -15.4902 -57.9199c11.0898 -6.40039 36.8906 1.2002 55.2803 21.2998zM256.15 102.78c4 9.7998 19.6992 53.2998 16.1992 59.2002c-2.59961 4.5 -13.6992 0.899414 -23.79 -10.4004 +c-6.2998 -7 -16.8994 -25 -21.8994 -40.0996c-9.90039 -30 -5.60059 -60.5 1.39941 -62.3008c8.2002 -2.09961 21.6904 37.9004 28.0908 53.6006zM367.15 49.7803c7.7998 4.7998 24.96 16.8994 25.0898 34.7998c0 0.599609 -0.100586 1.09961 -0.100586 1.59961 +c-3.98926 -5.19922 -7.68945 -9.89941 -10.8896 -13.8994c-5.5 -6.7998 -19.4004 -21.7002 -19.4004 -21.7002s-2 -1.90039 -1.09961 -2.40039c1.2002 -0.699219 3.7002 0.200195 6.40039 1.60059zM452.73 69.2803c9.68945 3.5 25.7998 11.8994 25.8994 34.3994 +c-0.0673828 3.06152 -0.918945 7.90039 -1.89941 10.8008c-10.4102 -9.2002 -16.4004 -18.8008 -19 -24.5c-6.7002 -14.6006 -7 -19.3008 -5 -20.7002z" /> - + - - + - - - + + - + - + - - + + - + - + - + - + - - - + + + - - - + + + - + - - + - + - - + - + - - - - - + + + + - - + - + - +d="M225 416c123.7 -0.299805 223.7 -100.9 223.4 -224.6c-0.300781 -123.7 -100.9 -223.7 -224.601 -223.4l-170.2 0.400391v0c-29.5879 0 -53.6006 24.0127 -53.6006 53.5996c0 0.0830078 0.000976562 0.216797 0.000976562 0.299805l0.400391 170.3 +c0.399414 123.7 100.899 223.7 224.6 223.4zM394.8 258.8c-0.0771484 6.26953 -1.33203 16.3047 -2.7998 22.4004l-55.2002 56.0996v-1.59961c0 -5.10059 -1.5 -9.60059 -3.7998 -14.2998zM331 353.7c1.65332 -2.31348 3.53516 -6.43555 4.2002 -9.2002l54.2998 -54.5996 +c-8.27539 24.8252 -34.4834 53.4082 -58.5 63.7998zM118.1 200.8c-4.54785 -0.369141 -11.8057 -1.66895 -16.1992 -2.89941l8.5 -8.5c1.68457 3.44336 5.13477 8.55078 7.69922 11.3994zM97 196.6c-3.91211 -1.08984 -10.0498 -3.41895 -13.7002 -5.19922l27 -27.2002 +c-1.30469 3.32617 -2.37988 8.92676 -2.39941 12.5l0.899414 8zM78.7998 189.2c-3.21484 -1.79492 -8.23242 -5.02051 -11.2002 -7.2002l35.3008 -35.9004c3.70801 1.84668 10.0254 3.95215 14.0996 4.7002zM63.5996 179.4 +c-3.06738 -2.29395 -7.5918 -6.50488 -10.0996 -9.40039l34.9004 -34.5996c2.66113 2.6377 7.36523 6.44629 10.5 8.5zM50.2998 167.1c-2.89941 -3.2998 -5.7998 -6.69922 -8.59961 -10.5l35.7998 -35.8994c1.74121 3.40527 5.19141 8.5127 7.7002 11.3994zM39.2998 152.8 +c-2.07715 -3.18457 -5.0791 -8.56055 -6.7002 -12l39.5 -39.7998c0.306641 4.3584 1.91895 11.168 3.60059 15.2002zM30.5 136.5c-1.7998 -4.90039 -3.2998 -9.59961 -4.7002 -14.5l52.7002 -53.5c-3.42578 6.82812 -6.42773 18.5654 -6.7002 26.2002zM22.5996 93.5 +c0.0380859 -6.14551 1.33789 -15.957 2.90039 -21.9004l55.4004 -55.6992v1.09961c0.0341797 4.18848 1.64746 10.5947 3.59961 14.2998zM27.9004 62.7998c8.29785 -24.8047 34.5059 -53.3867 58.5 -63.7998c-1.61816 2.33008 -3.5 6.45117 -4.2002 9.2002zM22.5996 99.7998 +l64.4004 -64.2002c2.30469 2.8877 6.74023 6.78613 9.90039 8.7002l-72.2002 72.5c-1.08105 -4.62988 -2.02148 -12.2461 -2.10059 -17zM275.9 151.6c32.5996 -0.0996094 32.6992 49.2002 0.199219 49.4004l-33.5996 0.0996094 +c-4.91309 0.0224609 -8.90039 4.02734 -8.90039 8.94043v0.0595703l0.100586 47c0.0996094 40.5 38.5996 60.8008 66 54.9004c15.3994 -3.90039 30.2998 8.40039 30.2998 23.9004c0 12.0996 -8.7002 22.1992 -19.9004 24 +c-5.39062 1.26953 -14.2617 2.30078 -19.8008 2.30078c-0.110352 0 -0.289062 -0.000976562 -0.398438 -0.000976562c-0.116211 0 -0.304688 0.000976562 -0.420898 0.000976562c-57.96 0 -105.081 -47.041 -105.18 -105.001l-0.0996094 -56l-42.6006 0.0996094 +c-32.5996 0.100586 -32.6992 -49.2002 -0.0996094 -49.2998l33.5996 -0.0996094c4.40039 0 8.90039 -4.5 8.90039 -9l-0.0996094 -47c-0.00585938 -30.8574 -25.0537 -55.9004 -55.9102 -55.9004h-0.19043c-9.39941 0 -9.39941 1.59961 -15.7002 1.59961 +c-13.3691 -0.208008 -24.3457 -11.2295 -24.5 -24.5996c0 -15.5 14.2002 -24.2002 19.9004 -24.2002c61.2998 -12.8994 125.5 33.6006 125.7 102.9l0.0996094 56zM299.4 151.9c4.50781 0.442383 11.7207 1.74219 16.0996 2.89941l-8.5 8.5 +c-1.48047 -3.55762 -4.88477 -8.66504 -7.59961 -11.3994zM320.4 156.1c3.9248 1.09082 10.0625 3.46484 13.6992 5.30078l-27 27.1992c1.30566 -3.32617 2.38086 -8.92578 2.40039 -12.5l-0.900391 -8.09961zM338.4 163.5c4 2.2002 8.09961 4.7002 11.8994 7.2002 +l-36.2002 35.8994c-4.09961 -2.2998 -8.7998 -3.59961 -13.6992 -4.69922zM353.9 173.3c2.92188 2.33301 7.44727 6.36426 10.0996 9l-34.9004 35c-2.63672 -2.66797 -7.34082 -6.47656 -10.5 -8.5zM367.1 185.6c2.52539 2.77441 6.37793 7.47852 8.60059 10.5 +l-35.7998 35.9004c-1.78125 -3.37891 -5.23047 -8.48633 -7.7002 -11.4004zM378.1 199.9c2.10938 3.16602 5.11133 8.54199 6.7002 12l-39.5 39.7998c-0.305664 -4.3584 -1.91895 -11.168 -3.59961 -15.2002zM391.6 230.8l-53.0996 53.4004 +c3.69434 -6.76172 6.875 -18.499 7.09961 -26.2002l41.3008 -41.5c1.50879 3.87695 3.61426 10.2832 4.69922 14.2998zM392.6 236.4c1.05957 4.52246 2.08984 11.959 2.30078 16.5996l-64.3008 64.7002c-2.18359 -3.12988 -6.61816 -7.25098 -9.89941 -9.2002z" /> + - - - - +d="M341.52 162.59v-0.149414c33.6504 0 82.3408 6.93945 82.3408 47c0.219727 6.73926 0.859375 1.81934 -20.8799 96.2393c-4.62012 19.1504 -8.68066 27.8398 -42.3105 44.6504c-26.0898 13.3398 -82.9199 35.3701 -99.7295 35.3701 +c-15.6602 0 -20.2002 -20.1699 -38.8701 -20.1699c-18 0 -31.3105 15.0596 -48.1201 15.0596c-16.1406 0 -26.6602 -11 -34.7803 -33.6201c-27.5 -77.5498 -26.2803 -74.2695 -26.1201 -78.2695c0 -24.7998 97.6406 -106.11 228.47 -106.11zM429.07 193.19 +l-0.0703125 -0.0302734c4.65039 -22 4.65039 -24.3506 4.65039 -27.25c0 -37.6602 -42.3301 -58.5605 -98 -58.5605c-125.74 -0.0800781 -235.91 73.6504 -235.91 122.33v0.0771484c0 5.65332 1.81836 14.4531 4.05957 19.6436 +c-45.2402 -2.26074 -103.8 -10.3301 -103.8 -62.0303c0 -84.6699 200.63 -189 359.49 -189c121.79 0 152.51 55.0801 152.51 98.5801c0 34.21 -29.5898 73.0498 -82.9297 96.2402z" /> + + + - - + + + + + + + + + + + + + + + + + + + + diff --git a/sapl/static/sapl/frontend/img/fa-brands-400.a9c4bb73.svg.gz b/sapl/static/sapl/frontend/img/fa-brands-400.a9c4bb73.svg.gz new file mode 100644 index 000000000..5f08e30fb Binary files /dev/null and b/sapl/static/sapl/frontend/img/fa-brands-400.a9c4bb73.svg.gz differ diff --git a/sapl/static/sapl/frontend/img/fa-regular-400.e7e957c8.svg b/sapl/static/sapl/frontend/img/fa-regular-400.7b9568e6.svg similarity index 99% rename from sapl/static/sapl/frontend/img/fa-regular-400.e7e957c8.svg rename to sapl/static/sapl/frontend/img/fa-regular-400.7b9568e6.svg index bba54466b..f32e41e30 100644 --- a/sapl/static/sapl/frontend/img/fa-regular-400.e7e957c8.svg +++ b/sapl/static/sapl/frontend/img/fa-regular-400.7b9568e6.svg @@ -1,8 +1,12 @@ + -Created by FontForge 20190112 at Tue Feb 12 10:24:59 2019 +Created by FontForge 20190801 at Mon Sep 23 12:53:49 2019 By Robert Madole Copyright (c) Font Awesome @@ -18,7 +22,7 @@ Copyright (c) Font Awesome descent="-64" bbox="-0.0663408 -64.0662 640.01 448.1" underline-thickness="25" - underline-position="-51" + underline-position="-50" unicode-range="U+0020-F5C8" /> @@ -54,7 +58,7 @@ d="M336 448c26.5098 0 48 -21.4902 48 -48v-464l-192 112l-192 -112v464c0 26.5098 2 d="M464 384c26.5098 0 48 -21.4902 48 -48v-288c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h416zM458 48c3.31152 0 6 2.68848 6 6v276c0 3.31152 -2.68848 6 -6 6h-404c-3.31152 0 -6 -2.68848 -6 -6v-276 c0 -3.31152 2.68848 -6 6 -6h404zM128 296c22.0908 0 40 -17.9092 40 -40s-17.9092 -40 -40 -40s-40 17.9092 -40 40s17.9092 40 40 40zM96 96v48l39.5137 39.5146c4.6875 4.68652 12.2852 4.68652 16.9717 0l39.5146 -39.5146l119.514 119.515 c4.6875 4.68652 12.2852 4.68652 16.9717 0l87.5146 -87.5146v-80h-320z" /> - - - - d="M288 200v-28c0 -6.59961 -5.40039 -12 -12 -12h-168c-6.59961 0 -12 5.40039 -12 12v28c0 6.59961 5.40039 12 12 12h168c6.59961 0 12 -5.40039 12 -12zM276 128c6.59961 0 12 -5.40039 12 -12v-28c0 -6.59961 -5.40039 -12 -12 -12h-168c-6.59961 0 -12 5.40039 -12 12 v28c0 6.59961 5.40039 12 12 12h168zM384 316.1v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996l83.9004 -83.9004c9 -8.90039 14.0996 -21.2002 14.0996 -33.9004z M256 396.1v-76.0996h76.0996zM336 -16v288h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416h288z" /> - - - @@ -730,7 +734,7 @@ c-3.69922 0 -7 2.60059 -7.7998 6.2002c-0.899414 3.7998 1.10059 7.7002 4.7002 9.2 c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.19922c-3.59961 1.5 -5.59961 5.40039 -4.7002 9.2002c0.799805 3.7998 4.40039 6.60059 8.2002 6.2002c42.7002 -2.5 71.5 -24.7998 71.5 -44zM328 296 c23.7998 0 52.7002 -29.2998 55.7998 -71.4004c0.299805 -3.7998 -2 -7.19922 -5.59961 -8.2998c-3.10059 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996c-12.3008 0 -23.8008 -7.89941 -31.5 -21.5996l-9.5 -17 c-1.80078 -3.2002 -5.80078 -4.7002 -9.30078 -3.7002c-3.59961 1.10059 -5.89941 4.60059 -5.59961 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004z" /> - + -Created by FontForge 20190112 at Tue Feb 12 10:24:59 2019 +Created by FontForge 20190801 at Mon Sep 23 12:53:50 2019 By Robert Madole Copyright (c) Font Awesome @@ -18,17 +22,17 @@ Copyright (c) Font Awesome descent="-64" bbox="-0.983398 -64.9834 640.104 448.427" underline-thickness="25" - underline-position="-51" - unicode-range="U+0020-F82F" + underline-position="-50" + unicode-range="U+0020-F8D9" /> - + @@ -72,16 +76,16 @@ c9.99707 -9.99707 9.99707 -26.2061 0 -36.2041l-294.4 -294.401c-9.99805 -9.99707 d="M242.72 192l100.07 -100.07c12.2803 -12.29 12.2803 -32.1992 0 -44.4795l-22.2402 -22.2402c-12.2803 -12.2803 -32.2002 -12.2803 -44.4795 0l-100.07 100.07l-100.07 -100.07c-12.2793 -12.2803 -32.1992 -12.2803 -44.4795 0l-22.2402 22.2402 c-12.2803 12.29 -12.2803 32.2002 0 44.4795l100.07 100.07l-100.07 100.07c-12.2803 12.29 -12.2803 32.1992 0 44.4795l22.2402 22.2402c12.29 12.2803 32.2002 12.2803 44.4795 0l100.07 -100.07l100.07 100.07c12.29 12.2803 32.1992 12.2803 44.4795 0 l22.2402 -22.2402c12.2803 -12.29 12.2803 -32.2002 0 -44.4795z" /> - - - @@ -119,17 +123,18 @@ s9 -20 20 -20s20 9 20 20zM452 -16c0 11 -9 20 -20 20s-20 -9 -20 -20s9 -20 20 -20s - + +d="M440.65 435.43c-0.0078125 0.157227 -0.0136719 0.413086 -0.0136719 0.570312c0 6.62012 5.37305 11.9961 11.9932 12h47.3701c6.62402 0 12 -5.37598 12 -12v-200.35c0 -6.62402 -5.37598 -12 -12 -12h-200.22c-6.62402 0 -12 5.37598 -12 12v47.4092v0.0136719 +c0 6.62402 5.37598 12 12 12c0.157227 0 0.412109 -0.00585938 0.569336 -0.0136719l101.46 -4.85938c-28.8584 42.9248 -94.2598 77.7627 -145.984 77.7627c-76.4834 0 -153.099 -60.3467 -171.016 -134.703c-1.19727 -5.10547 -6.4248 -9.25391 -11.6699 -9.25977 +h-49.0498c-6.62402 0 -12 5.37598 -12 12c0 0.606445 0.0898438 1.58301 0.200195 2.17969c21.6201 114.9 122.44 201.82 243.54 201.82h0.28418c63.2031 0 147.667 -39.1279 188.536 -87.3398zM255.83 16c76.4971 0 153.144 60.3633 171.03 134.74 +c1.19727 5.10547 6.4248 9.25391 11.6699 9.25977h49.0498c6.62402 0 12 -5.37598 12 -12c0 -0.606445 -0.0898438 -1.58301 -0.200195 -2.17969c-21.6201 -114.9 -122.439 -201.82 -243.55 -201.82h-0.234375c-63.1289 0 -147.53 39.0518 -188.396 87.1699 +l4.14941 -82.5703c0.00878906 -0.165039 0.015625 -0.433594 0.015625 -0.599609c0 -6.62402 -5.37598 -12 -12 -12h-0.015625h-47.3496c-6.62402 0 -12 5.37598 -12 12v200.33c0 6.62402 5.37598 12 12 12h200.2c6.62402 0 12 -5.37598 12 -12v-47.4004v-0.0136719 +c0 -6.62402 -5.37598 -12 -12 -12c-0.157227 0 -0.413086 0.00683594 -0.570312 0.0136719l-101.8 4.87012c28.7998 -42.9453 94.1406 -77.7998 145.85 -77.7998h0.150391z" /> - d="M256 416c141.504 0 256 -114.521 256 -256v-48c0 -10.917 -7.9248 -23.7402 -17.6904 -28.6221l-14.3818 -7.19141c-2.01074 -60.0889 -51.3486 -108.187 -111.928 -108.187h-24c-13.2549 0 -24 10.7451 -24 24v176c0 13.2549 10.7451 24 24 24h24 c31.3418 0 59.6709 -12.8789 80 -33.627v1.62695c0 105.869 -86.1309 192 -192 192s-192 -86.1309 -192 -192v-1.62695c20.3291 20.748 48.6582 33.627 80 33.627h24c13.2549 0 24 -10.7451 24 -24v-176c0 -13.2549 -10.7451 -24 -24 -24h-24 c-60.5791 0 -109.917 48.0967 -111.928 108.187l-14.3828 7.19141c-9.76465 4.88184 -17.6895 17.7051 -17.6895 28.6221v0v48c0 141.504 114.52 256 256 256z" /> - + - - @@ -187,57 +192,62 @@ c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z" /> d="M512 304v-288c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h88l12.2998 32.9004c7 18.6992 24.9004 31.0996 44.9004 31.0996h125.5c20 0 37.8994 -12.4004 44.8994 -31.0996l12.4004 -32.9004h88c26.5 0 48 -21.5 48 -48zM376 160 c0 66.2002 -53.7998 120 -120 120s-120 -53.7998 -120 -120s53.7998 -120 120 -120s120 53.7998 120 120zM344 160c0 -48.5 -39.5 -88 -88 -88s-88 39.5 -88 88s39.5 88 88 88s88 -39.5 88 -88z" /> +d="M432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h19.5801l-23.2998 64h-152.561l-23.2998 -64h19.5801c8.83203 0 16 -7.16797 16 -16v-32 +c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h23.4102l130.71 362.31c4.07422 11.9736 17.6465 21.6904 30.2939 21.6904h0.00585938h47.1602h0.00585938c12.6475 0 26.2197 -9.7168 30.2939 -21.6904 +l130.71 -362.31h23.4102zM176.85 176h94.3008l-47.1504 129.49z" /> +d="M333.49 210c34.4395 -27.54 55.5693 -71.1504 50.8301 -119.6c-6.86035 -70.6504 -70.2002 -122.4 -141 -122.4h-209.32c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16h31.8701v288h-31.8701c-8.83203 0 -16 7.16797 -16 16v48 +c0 8.83203 7.16797 16 16 16h199.42c74.5801 0 134.45 -64.4902 127.07 -140.79c-2.01367 -20.25 -14.1094 -49.4639 -27 -65.21zM145.66 336v-96h87.7598c26.4961 0 48 21.5039 48 48s-21.5039 48 -48 48h-87.7598zM233.42 48c30.9121 0 56 25.0879 56 56 +s-25.0879 56 -56 56h-87.7598v-112h87.7598z" /> +d="M320 400v-32c0 -8.83203 -7.16797 -16 -16 -16h-62.7598l-80 -320h46.7598c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-192c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h62.7598l80 320h-46.7598 +c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192c8.83203 0 16 -7.16797 16 -16z" /> +d="M304 416c8.83203 0 16 -7.16797 16 -16v-96c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32h-56v-304h40c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-160c-8.83203 0 -16 7.16797 -16 16v32 +c0 8.83203 7.16797 16 16 16h40v304h-56v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v96c0 8.83203 7.16797 16 16 16h288zM560 80c15.6396 0 20.6396 -18 11.3096 -27.3096l-80 -80c-2.58594 -2.58496 -7.65332 -4.68262 -11.3096 -4.68262 +s-8.72363 2.09766 -11.3096 4.68262l-80 80c-10.0107 10 -3 27.3096 11.3096 27.3096h48v224h-48c-15.6396 0 -20.6396 18 -11.3096 27.3096l80 80c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262l80 -80 +c10.0205 -10 3 -27.3096 -11.3096 -27.3096h-48v-224h48z" /> +d="M432 416c8.83203 0 16 -7.16797 16 -16v-80c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v16h-120v-112h24c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32 +c0 8.83203 7.16797 16 16 16h24v112h-120v-16c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v80c0 8.83203 7.16797 16 16 16h416zM363.31 155.31l80 -80c2.58496 -2.58594 4.68262 -7.65332 4.68262 -11.3096s-2.09766 -8.72363 -4.68262 -11.3096 +l-80 -80c-10 -10.0205 -27.3096 -3 -27.3096 11.3096v48h-224v-48c0 -15.6396 -18 -20.6396 -27.3096 -11.3096l-80 80c-2.58496 2.58594 -4.68262 7.65332 -4.68262 11.3096s2.09766 8.72363 4.68262 11.3096l80 80c10 10.0107 27.3096 3 27.3096 -11.3096v-48h224v48 +c0 15.6396 18 20.6396 27.3096 11.3096z" /> +d="M12.8301 96c-7.07715 0 -12.8301 5.74316 -12.8301 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34h0.00976562c7.07715 0 12.8203 -5.74316 12.8203 -12.8203v-0.00976562v-38.3398v-0.00976562 +c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34zM12.8301 352c-7.07715 0 -12.8301 5.74316 -12.8301 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34h0.00976562 +c7.07715 0 12.8203 -5.74316 12.8203 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34zM432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16 +v32c0 8.83203 7.16797 16 16 16h416zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z" /> +d="M432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16 +v32c0 8.83203 7.16797 16 16 16h416zM108.1 352c-6.67871 0 -12.0996 5.4209 -12.0996 12.0996v39.8105c0 6.67383 5.41602 12.0898 12.0898 12.0898h0.00976562h231.811c6.67383 0 12.0898 -5.41602 12.0898 -12.0898v-39.8105v-0.00976562 +c0 -6.67383 -5.41602 -12.0898 -12.0898 -12.0898v0h-231.811zM339.91 96h-231.811c-6.67871 0 -12.0996 5.4209 -12.0996 12.0996v39.8105c0 6.67383 5.41602 12.0898 12.0898 12.0898h0.00976562h231.811c6.67383 0 12.0898 -5.41602 12.0898 -12.0898v-39.8105 +v-0.00976562c0 -6.67383 -5.41602 -12.0898 -12.0898 -12.0898v0z" /> +d="M16 224c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16 +v32c0 8.83203 7.16797 16 16 16h416zM435.17 416c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203 +v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34zM435.17 160c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34 +h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34z" /> +d="M432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM432 160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16 +v32c0 8.83203 7.16797 16 16 16h416zM432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM432 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16 +h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z" /> +d="M80 80c8.83203 0 16 -7.16797 16 -16v-64c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v64c0 8.83203 7.16797 16 16 16h64zM80 400c8.83203 0 16 -7.16797 16 -16v-64c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v64 +c0 8.83203 7.16797 16 16 16h64zM80 240c8.83203 0 16 -7.16797 16 -16v-64c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v64c0 8.83203 7.16797 16 16 16h64zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320 +c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 384c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 224c8.83203 0 16 -7.16797 16 -16v-32 +c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320z" /> +d="M100.69 84.71l-96 95.9805c-2.58496 2.58594 -4.68262 7.65332 -4.68262 11.3096s2.09766 8.72363 4.68262 11.3096l96 96c9.97949 10 27.3096 3.01074 27.3096 -11.3096v-191.98c0 -14.2393 -17.3096 -21.3096 -27.3096 -11.3096zM432 32c8.83203 0 16 -7.16797 16 -16 +v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM435.17 160c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562 +h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM435.17 288c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562 +c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM432 416c8.83203 0 16 -7.16797 16 -16 +v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z" /> +d="M27.3096 84.7002c-9.97949 -10 -27.3096 -3.00977 -27.3096 11.2998v192c0 14.2197 17.2695 21.3398 27.3096 11.3203l96 -96c2.58496 -2.58691 4.68262 -7.65332 4.68262 -11.3105c0 -3.65625 -2.09766 -8.72363 -4.68262 -11.3096zM432 32 +c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM435.17 160c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562 +c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM435.17 288 +c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562 +c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM432 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z" /> @@ -251,7 +261,7 @@ d="M8 192c0 136.967 111.034 248 248 248s248 -111.034 248 -248s-111.033 -248 -248 - @@ -264,13 +274,13 @@ l-171.5 155.3v-130.7c0 -27.4004 -31.9004 -41.7002 -52.5 -24.5996l-171.5 155.3v-1 - - - - +d="M164.07 299.9h-152.07c-6.62402 0 -12 5.37598 -12 12v80c0 19.8721 16.1279 36 36 36h104c19.8721 0 36 -16.1279 36 -36v-80c0 -0.03125 0.000976562 -0.0800781 0.000976562 -0.110352c0 -6.56348 -5.32715 -11.8896 -11.8906 -11.8896h-0.0400391zM512 311.9 +c0 -6.56348 -5.32715 -11.9014 -11.8896 -11.9014c-0.0302734 0 -0.0800781 0.000976562 -0.110352 0.000976562h-152c-6.62402 0 -12 5.37598 -12 12v80c0 19.8721 16.1279 36 36 36h104c19.8721 0 36 -16.1279 36 -36v-80.0996zM348 267.9h151.85h0.000976562 +c6.62402 0 12 -5.37598 12 -12c0 -0.0283203 0 -0.0732422 -0.000976562 -0.100586c-0.199219 -20.2002 -0.599609 -40.3994 0 -53.2002c0 -150.699 -134.42 -246.699 -255 -246.699s-256.75 96 -256.75 246.6c0.600586 13 0.100586 31.9004 0 53.2998v0.100586 +c0 6.62402 5.37598 12 12 12v0h151.9c6.62402 0 12 -5.37598 12 -12v-52c0 -127.9 160 -128.101 160 0v52c0 6.62402 5.37598 12 12 12z" /> - - @@ -439,7 +450,7 @@ c-35.2998 0 -64 -28.7002 -64 -64c0 -8.7998 7.2002 -16 16 -16z" /> d="M512 271.999c0 -97.2021 -78.7979 -175.999 -176 -175.999c-11.2197 0 -22.1904 1.06152 -32.8271 3.06934l-24.0117 -27.0146c-3.95215 -4.44629 -11.9883 -8.05469 -17.9375 -8.05469h-0.000976562h-37.2227v-40c0 -13.2549 -10.7451 -24 -24 -24h-40v-40 c0 -13.2549 -10.7451 -24 -24 -24h-112c-13.2549 0 -24 10.7451 -24 24v78.0586c0 6.36523 2.5293 12.4707 7.0293 16.9717l161.802 161.802c-5.72266 17.3535 -8.83105 35.8965 -8.83105 55.168c0 97.2021 78.7969 175.999 175.999 176 c97.4893 0.000976562 176.001 -78.5107 176.001 -176.001zM336 320c0 -26.5098 21.4902 -48 48 -48s48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48z" /> - - - - +d="M139.61 412.5l17 -16.5c1.90234 -1.94531 3.44727 -5.7334 3.44727 -8.4541c0 -2.7627 -1.58496 -6.5918 -3.53809 -8.5459l-72.1992 -72.1904l-15.5898 -15.6191c-2.04297 -1.94238 -5.9873 -3.51758 -8.80566 -3.51758c-2.81738 0 -6.7627 1.5752 -8.80469 3.51758 +l-47.5898 47.3994c-1.94824 1.94141 -3.5293 5.75 -3.5293 8.5c0 2.75098 1.58105 6.55859 3.5293 8.5l15.7002 15.7197c1.94141 1.94824 5.74902 3.53027 8.5 3.53027c2.75 0 6.55762 -1.58203 8.5 -3.53027l22.6992 -22.1191l63.6807 63.3096 +c1.94141 1.94824 5.74902 3.5293 8.5 3.5293c2.75 0 6.55859 -1.58105 8.5 -3.5293zM139.61 253.31l16.9795 -17c1.89648 -1.93164 3.43457 -5.69727 3.43457 -8.4043c0 -2.74805 -1.5791 -6.55371 -3.52441 -8.49512l-72.2002 -72.2197l-15.7002 -15.6904 +c-2.04102 -1.94141 -5.9834 -3.5166 -8.7998 -3.5166s-6.75879 1.5752 -8.7998 3.5166l-47.4697 47.5c-1.94824 1.94141 -3.5293 5.74902 -3.5293 8.5s1.58105 6.55859 3.5293 8.5l15.7002 15.6904c1.94141 1.94824 5.74902 3.5293 8.5 3.5293 +c2.75 0 6.55762 -1.58105 8.5 -3.5293l22.6992 -22.1006l63.6807 63.7197c1.94141 1.94824 5.74902 3.53027 8.5 3.53027c2.75 0 6.55859 -1.58203 8.5 -3.53027zM64 80c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48c-26.4697 0 -48.5898 21.5 -48.5898 48 +s22.0996 48 48.5898 48zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288zM496 384c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288 +c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288zM496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288z" /> - - - +d="M48 400c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48s-48 21.5039 -48 48s21.5039 48 48 48zM48 240c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48s-48 21.5039 -48 48s21.5039 48 48 48zM48 80c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48 +s-48 21.5039 -48 48s21.5039 48 48 48zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 384c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16 +h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320z" /> + +d="M496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-480c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h102.29c-11.6797 16.5303 -19.7803 35.4697 -21.7803 56.3604c-0.319336 3.29297 -0.579102 8.65137 -0.579102 11.96 +c0 68.2158 55.3633 123.624 123.579 123.68h68h0.0117188c43.6865 0 94.9863 -31.7188 114.509 -70.7998l0.529297 -1c0.930664 -1.86328 1.68652 -5.06641 1.68652 -7.14844c0 -5.45898 -3.96289 -11.8711 -8.8457 -14.3115l-42.9404 -21.4707 +c-1.86426 -0.931641 -5.06836 -1.6875 -7.15234 -1.6875c-5.45605 0 -11.8652 3.95996 -14.3076 8.83789c-7.61133 15.2246 -27.6025 27.5801 -44.624 27.5801h-0.0361328h-66.79c-24.0391 -0.000976562 -43.5488 -19.5107 -43.5488 -43.5498 +c0 -17.749 13.7666 -36.3945 30.7295 -41.6201l87.1699 -26.8301h202.1zM315.76 128h94.3906c2.21191 -6.56152 4.60352 -17.4746 5.33984 -24.3604c0.319336 -3.29297 0.579102 -8.65137 0.579102 -11.96c0 -68.2158 -55.3633 -123.624 -123.579 -123.68h-68h-0.0117188 +c-43.6865 0 -94.9863 31.7188 -114.509 70.7998l-0.529297 1c-0.930664 1.86328 -1.68652 5.06641 -1.68652 7.14844c0 5.45898 3.96289 11.8711 8.8457 14.3115l42.9404 21.4707c1.86426 0.931641 5.06836 1.6875 7.15234 1.6875 +c5.45605 0 11.8652 -3.95996 14.3076 -8.83789c7.61133 -15.2246 27.6025 -27.5801 44.624 -27.5801h0.0361328h66.79c24.0176 0.0224609 43.5273 19.5322 43.5498 43.5498c-0.00976562 13.1572 -9.07715 29.4863 -20.2402 36.4502z" /> +d="M32 384c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h144c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32v-160c0 -44.1602 35.8398 -80 80 -80s80 35.8398 80 80v160h-32c-8.83203 0 -16 7.16797 -16 16v32 +c0 8.83203 7.16797 16 16 16h144c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32v-160c0 -88.2197 -71.7803 -160 -160 -160s-160 71.7803 -160 160v160h-32zM432 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416 +c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z" /> - - - @@ -673,13 +686,13 @@ d="M41 160h238c21.4004 0 32.0996 -25.9004 17 -41l-119 -119c-9.40039 -9.40039 -24 c9.30078 9.40039 24.5 9.40039 33.9004 0z" /> - - @@ -784,7 +797,7 @@ c9.40039 9.40039 24.6006 9.40039 33.9004 0l136 -136c9.5 -9.40039 9.5 -24.5996 0. - - + - - @@ -883,19 +897,15 @@ c0 11.0459 8.9541 20 20 20zM96 448c39.7637 0 72 -32.2354 72 -72s-32.2354 -72 -72 d="M176 16c0 -44.1123 -35.8877 -80 -80 -80s-80 35.8877 -80 80s35.8877 80 80 80s80 -35.8877 80 -80zM25.2598 422.801c-0.68457 13.709 10.2441 25.1992 23.9707 25.1992h93.5391c13.7266 0 24.6553 -11.4902 23.9707 -25.1992l-13.6006 -272 c-0.638672 -12.7725 -11.1807 -22.8008 -23.9697 -22.8008h-66.3398c-12.7891 0 -23.3311 10.0283 -23.9697 22.8008z" /> +d="M496 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v96h-16c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32 +c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-144h16zM336 384c8.83203 0 16 -7.16797 16 -16v-48c0 -8.83203 -7.16797 -16 -16 -16h-33.4805l-77.8096 -112l77.8096 -112h33.4805c8.83203 0 16 -7.16797 16 -16v-48 +c0 -8.83203 -7.16797 -16 -16 -16h-67c-4.58984 0.0224609 -10.4404 3.10059 -13.0596 6.87012l-79.9004 115l-79.9004 -115c-2.63477 -3.79199 -8.52148 -6.87012 -13.1387 -6.87012h-0.000976562h-67c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16 +h33.4805l77.8096 112l-77.8096 112h-33.4805c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16h67c4.58984 -0.0224609 10.4404 -3.10059 13.0596 -6.87012l79.9004 -115l79.9004 115c2.63477 3.79199 8.52148 6.87012 13.1387 6.87012h0.000976562h67z" /> +d="M496 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v96h-16c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32 +c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-144h16zM336 384c8.83203 0 16 -7.16797 16 -16v-48c0 -8.83203 -7.16797 -16 -16 -16h-33.4805l-77.8096 -112l77.8096 -112h33.4805c8.83203 0 16 -7.16797 16 -16v-48 +c0 -8.83203 -7.16797 -16 -16 -16h-67c-4.58984 0.0224609 -10.4404 3.10059 -13.0596 6.87012l-79.9004 115l-79.9004 -115c-2.63477 -3.79199 -8.52148 -6.87012 -13.1387 -6.87012h-0.000976562h-67c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16 +h33.4805l77.8096 112l-77.8096 112h-33.4805c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16h67c4.58984 -0.0224609 10.4404 -3.10059 13.0596 -6.87012l79.9004 -115l79.9004 115c2.63477 3.79199 8.52148 6.87012 13.1387 6.87012h0.000976562h67z" /> @@ -922,7 +932,7 @@ d="M434.027 421.671c7.31445 1.21875 13.9727 -4.4209 13.9727 -11.8369v-115.668c0 c0 -13.2549 -10.7451 -24 -24 -24h-144c-13.2549 0 -24 10.7451 -24 24v246.795c0 44.8945 30.457 83.2666 72 94.1289v27.0762c-61.0361 0 -92.9424 7.00977 -121.711 -64.9141c-4.91699 -12.2949 -18.8789 -18.2959 -31.1963 -13.3701 c-12.3066 4.92285 -18.293 18.8906 -13.3701 31.1973c14.668 36.6709 38.0107 77.833 90.0498 90.8838c-14.1406 36.5273 12.793 76.2031 52.2275 76.2031c37.4463 0 64.3525 -36.1084 53.668 -72h58.332c0 4.2002 -1.30664 15.7822 10.0273 17.6709zM144 376 c8.82227 0 16 7.17773 16 16s-7.17773 16 -16 16s-16 -7.17773 -16 -16s7.17773 -16 16 -16z" /> - - - d="M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM288 76v8c0 6.59961 -5.40039 12 -12 12h-168c-6.59961 0 -12 -5.40039 -12 -12v-8 c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12zM288 140v8c0 6.59961 -5.40039 12 -12 12h-168c-6.59961 0 -12 -5.40039 -12 -12v-8c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12zM288 212c0 6.59961 -5.40039 12 -12 12h-168 c-6.59961 0 -12 -5.40039 -12 -12v-8c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12v8zM384 326.1v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004z" /> - - + + +d="M304 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h64zM176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96 +c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96c-10.0801 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32c8.83203 0 16 -7.16797 16 -16v-304h48zM432 288 +c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-192c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192zM368 160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32 +c0 8.83203 7.16797 16 16 16h128zM496 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-256c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h256z" /> - - - + + + - +d="M480 288c17.6641 0 32 -14.3359 32 -32v-288c0 -17.6641 -14.3359 -32 -32 -32h-320c-17.6641 0 -32 14.3359 -32 32v448c0 17.6641 14.3359 32 32 32h242.75c7.31348 -0.000976562 17.4473 -4.19922 22.6201 -9.37012l45.25 -45.25 +c5.17676 -5.17285 9.37891 -15.3115 9.37988 -22.6299v-82.75zM288 16v32c0 8.83203 -7.16797 16 -16 16h-32c-8.83203 0 -16 -7.16797 -16 -16v-32c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16zM288 144v32c0 8.83203 -7.16797 16 -16 16h-32 +c-8.83203 0 -16 -7.16797 -16 -16v-32c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16zM416 16v32c0 8.83203 -7.16797 16 -16 16h-32c-8.83203 0 -16 -7.16797 -16 -16v-32c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16zM416 144v32 +c0 8.83203 -7.16797 16 -16 16h-32c-8.83203 0 -16 -7.16797 -16 -16v-32c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16zM416 256v64h-48c-8.83203 0 -16 7.16797 -16 16v48h-160v-128h224zM64 320c17.6641 0 32 -14.3359 32 -32v-320 +c0 -17.6641 -14.3359 -32 -32 -32h-32c-17.6641 0 -32 14.3359 -32 32v320c0 17.6641 14.3359 32 32 32h32z" /> - - - - +d="M448 352v-320h32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-160c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32v128h-192v-128h32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-160 +c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32v320h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32v-128h192v128h-32c-8.83203 0 -16 7.16797 -16 16v32 +c0 8.83203 7.16797 16 16 16h160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32z" /> + - - - @@ -1520,7 +1530,7 @@ s24 10.7451 24 24s-10.7451 24 -24 24z" /> d="M624 240c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-64v-64c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v64h-64c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h64v64c0 8.7998 7.2002 16 16 16h32 c8.7998 0 16 -7.2002 16 -16v-64h64zM224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM313.6 160c74.2002 0 134.4 -60.2002 134.4 -134.4v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352 c-26.5 0 -48 21.5 -48 48v41.5996c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992z" /> - - +d="M592 448c26.4961 0 48 -21.5039 48 -48v-320c0 -26.4961 -21.5039 -48 -48 -48h-240v-32h176c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h176v32h-240 +c-26.4961 0 -48 21.5039 -48 48v320c0 26.4961 21.5039 48 48 48h544zM576 96v288h-512v-288h512z" /> - - - - - - @@ -1940,7 +1950,7 @@ c18.75 18.75 49.1602 18.75 67.9102 0z" /> d="M497.94 373.83c18.75 -18.7598 18.75 -49.1602 0 -67.9102l-56.5508 -56.5498l-128.02 128.02l56.5498 56.5508c18.75 18.75 49.1602 18.75 67.9102 0zM251.14 394.36l84.8506 -84.8506l82.7695 -82.7695l-196.79 -196.79 c-44.8223 -44.8203 -132.335 -86.8428 -195.34 -93.7998c-15.2803 -1.69043 -28.1895 11.2295 -26.4902 26.5098l0.0302734 0.229492c7.00195 62.9189 49.0156 150.315 93.7803 195.08l151.56 151.55l-22.6299 22.6201l-101.82 -101.819 c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-22.6299 22.6299c-6.25 6.24023 -6.25 16.3701 0 22.6201l118.78 118.79c15.6201 15.6201 40.9395 15.6201 56.5596 0z" /> - d="M88 281.941h-46.0576c-21.3828 0 -32.0908 25.8516 -16.9717 40.9707l86.0596 86.0586c9.37207 9.37305 24.5674 9.37305 33.9404 0l86.0596 -86.0586c15.1191 -15.1201 4.41113 -40.9707 -16.9717 -40.9707h-46.0586v-301.941c0 -6.62695 -5.37305 -12 -12 -12h-56 c-6.62695 0 -12 5.37305 -12 12v301.941z" /> +d="M448 104v-112v-0.0605469c0 -13.2148 -10.7246 -23.9395 -23.9395 -23.9395h-0.0605469h-112c-21.3896 0 -32.0898 25.9004 -17 41l36.2002 36.2002l-107.2 107.2l-107.23 -107.301l36.2305 -36.0996c15.0898 -15.0996 4.38965 -41 -17 -41h-112h-0.0605469 +c-13.2148 0 -23.9395 10.7246 -23.9395 23.9395v0.0605469v112c0 21.4004 25.8896 32.0996 41 17l36.1904 -36.2002l107.27 107.2l-107.28 107.3l-36.1797 -36.2998c-15.0996 -15.0996 -41 -4.40039 -41 17v112v0.0605469c0 13.2148 10.7246 23.9395 23.9395 23.9395 +h0.0605469h112c21.3896 0 32.0898 -25.9004 17 -41l-36.2002 -36.2002l107.2 -107.2l107.23 107.301l-36.2305 36.0996c-15.0898 15.0996 -4.38965 41 17 41h112h0.0605469c13.2148 0 23.9395 -10.7246 23.9395 -23.9395v-0.0605469v-112 +c0 -21.4004 -25.8896 -32.0996 -41 -17l-36.1904 36.2002l-107.27 -107.2l107.28 -107.3l36.1797 36.2002c15.0996 15.1992 41 4.5 41 -16.9004z" /> @@ -1977,10 +1988,10 @@ v-70.9004h-116c-6.59961 0 -12 -5.40039 -12 -12v-64c0 -6.59961 5.40039 -12 12 -12 - + @@ -2058,7 +2069,7 @@ c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h55.0996z" /> d="M464 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h416zM380.4 125.5l-67.1006 66.5l67.1006 66.5c4.7998 4.7998 4.7998 12.5996 0 17.4004l-40.5 40.5 c-4.80078 4.7998 -12.6006 4.7998 -17.4004 0l-66.5 -67.1006l-66.5 67.1006c-4.7998 4.7998 -12.5996 4.7998 -17.4004 0l-40.5 -40.5c-4.7998 -4.80078 -4.7998 -12.6006 0 -17.4004l67.1006 -66.5l-67.1006 -66.5c-4.7998 -4.7998 -4.7998 -12.5996 0 -17.4004 l40.5 -40.5c4.80078 -4.7998 12.6006 -4.7998 17.4004 0l66.5 67.1006l66.5 -67.1006c4.7998 -4.7998 12.5996 -4.7998 17.4004 0l40.5 40.5c4.7998 4.80078 4.7998 12.6006 0 17.4004z" /> - - + +d="M8 160.12c0 73.3799 59.8096 181.08 112.6 225.37c-14 3.41992 -24.5996 15.5098 -24.5996 30.5098c0 17.6641 14.3359 32 32 32h64c17.6641 0 32 -14.3359 32 -32c0 -15.0498 -10.5996 -27.0898 -24.5996 -30.5098c24.3994 -20.4902 50.0693 -54.6807 70.8691 -92.5898 +l-107.89 -107.931c-1.29199 -1.29297 -2.34082 -3.82617 -2.34082 -5.6543c0 -1.8291 1.04883 -4.3623 2.34082 -5.65527l11.3105 -11.3105c1.29297 -1.29199 3.82617 -2.34082 5.6543 -2.34082s4.3623 1.04883 5.65527 2.34082l100.31 100.33 +c15.96 -35.46 26.6904 -71.9492 26.6904 -102.56c0 -51.6006 -22.1396 -73.8301 -56 -84.6006v-43.5195h-192v43.5195c-33.8604 10.7705 -56 32.9609 -56 84.6006zM304 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288 +c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288z" /> +d="M255.9 447.8v-64h-64v64h64zM0 383.83h64v-64h-64v64zM128 447.8v-64h-64v64h64zM192 191.9h64v-64h-64v64zM0 255.88h64v-64h-64v64zM383.85 447.8v-64h-64v64h64zM511.85 447.8v-64h-64v64h64zM128 191.9v-64h-64v64h64zM511.8 0h-64v64h64v-64zM511.8 128h-64v64h64 +v-64zM383.85 -64v64h64v-64h-64zM511.85 255.88h-64v64h64v-64zM128 -64v64h64v-64h-64zM0 -64v64h64v-64h-64zM255.9 -64v64h64v-64h-64zM0 127.93h64v-64h-64v64zM319.88 319.85h-64v64h64v-64zM255.88 191.85v64h64v-64h-64zM191.88 63.8496h64v-64h-64v64z +M319.88 127.85v64h64v-64h-64zM319.88 255.8v64h64v-64h-64zM319.88 63.8701h64v-64h-64v64zM64 63.9502h64v-64h-64v64zM192 319.85h-64v64h64v-64zM383.92 63.9502v64h64v-64h-64zM255.92 255.88h-64v64h64v-64zM383.92 383.83h64v-64h-64v64zM255.92 127.93h64v-64h-64 +v64zM191.92 255.88l0.0800781 -64h-64v64h63.9199zM383.84 191.88v64h64v-64h-64zM128 319.85v-64h-64v64h64zM128 127.93h64v-64h-64v64z" /> +d="M400 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h352zM416 288c17.6504 -0.0136719 31.9756 -14.3496 31.9756 -32c0 -2.69434 -0.652344 -6.96777 -1.45605 -9.54004 +l-73.0791 -214.46h-298.881l-73.0791 214.46c-0.803711 2.57227 -1.45605 6.8457 -1.45605 9.54004c0 17.6504 14.3252 31.9863 31.9756 32h160v48h-40c-4.41602 0 -8 3.58398 -8 8v48c0 4.41602 3.58398 8 8 8h40v40c0 4.41602 3.58398 8 8 8h48c4.41602 0 8 -3.58398 8 -8 +v-40h40c4.41602 0 8 -3.58398 8 -8v-48c0 -4.41602 -3.58398 -8 -8 -8h-40v-48h160z" /> +d="M19 175.53c-10.4883 4.66211 -19 17.7627 -19 29.2402v0.0195312v137.21v0.0585938c0 5.47461 3.13574 13.0635 7 16.9414l9 9l-14.21 28.4199c-0.988281 1.97266 -1.79004 5.36328 -1.79004 7.56934v0.0107422c0 6.62402 5.37598 12 12 12h147.94 +c106 0 191.92 -86 191.92 -192v-192h-319.86v14.5195v0.0224609c0 27.2783 19.7969 59.3271 44.1904 71.5381l57.2197 28.6504c14.6445 7.32324 26.5303 26.5566 26.5303 42.9297v0.00976562v50.3301l-22.1201 -11.0801 +c-5.45117 -2.72559 -11.0732 -9.7373 -12.5508 -15.6504l-9.21973 -30.6494c-2.4502 -8.15332 -10.8545 -17.3379 -18.7598 -20.5l-12.7803 -5.12012c-3.1582 -1.2627 -8.48145 -2.28809 -11.8828 -2.28809c-3.74902 0 -9.57129 1.23535 -12.9971 2.75781zM52 320 +c-11.04 0 -20 -8.95996 -20 -20s8.95996 -20 20 -20s20 8.95996 20 20s-8.95996 20 -20 20zM368 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h352z" /> +d="M105.1 224c-29.3896 18.3799 -49.0996 50.7803 -49.0996 88c0 57.4082 46.5918 104 104 104s104 -46.5918 104 -104c0 -37.2197 -19.71 -69.6201 -49.0996 -88h25.0996c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-16v-5.49023 +c0 -44 4.11035 -86.5996 24 -122.51h-176c19.8604 35.9102 24 78.5098 24 122.51v5.49023h-16c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h25.0996zM304 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288 +c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288z" /> +d="M256 336c-30.9121 0 -56 25.0879 -56 56s25.0879 56 56 56s56 -25.0879 56 -56s-25.0879 -56 -56 -56zM432 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h352zM504.87 263.84 +c3.93457 -2.62109 7.12891 -8.58691 7.12891 -13.3154c0 -2.08496 -0.756836 -5.29004 -1.68945 -7.1543l-102.55 -211.37h-303.52l-102.55 211.33c-0.932617 1.86426 -1.68945 5.06934 -1.68945 7.1543c0 4.72852 3.19434 10.6943 7.12891 13.3154l28.5703 16 +c7.35938 4.91016 16.8096 2.5498 22.0898 -4.54004c7.86035 -10.6357 24.9736 -19.2676 38.1992 -19.2676c0.922852 0 2.41992 0.0527344 3.34082 0.118164c25.6699 1.73926 44.6699 24.7998 44.6699 50.4893c0 7.39746 6.00293 13.4004 13.4004 13.4004v0h38.7695 +c6.04004 0 11.6104 -3.99023 12.8604 -9.91016c4.42969 -21.0361 25.4717 -38.1094 46.9697 -38.1094s42.54 17.0732 46.9697 38.1094c1.25 5.91016 6.86035 9.91016 12.8604 9.91016h38.7695c7.39746 0 13.4004 -6.00293 13.4004 -13.4004 +c0 -23.5293 15.7002 -45.46 38.8398 -49.75c2.48926 -0.484375 6.56738 -0.878906 9.10352 -0.878906c13.166 0 30.2471 8.56152 38.127 19.1094c5.37988 7.13965 14.8496 9.67969 22.29 4.67969z" /> +d="M368 416c8.83203 0 16 -7.16797 16 -16v-176l-64 -32c0 -47.7197 1.54004 -95 13.21 -160h-282.42c11.6699 65 13.21 111.67 13.21 160l-64 32v176c0 8.83203 7.16797 16 16 16h56.0996c8.83203 0 16 -7.16797 16 -16v-48h47.9004v48c0 8.83203 7.16797 16 16 16h80 +c8.83203 0 16 -7.16797 16 -16v-48h48v48c0 8.83203 7.16797 16 16 16h56zM224 128v64c0 17.6641 -14.3359 32 -32 32s-32 -14.3359 -32 -32v-64h64zM368 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32 +c0 8.83203 7.16797 16 16 16h352z" /> - d="M496.2 151.5c-64.1006 43.2002 -149.5 27.9004 -195.601 -34.2002l-211.5 211.5l56 56.1006c83.9004 84.0996 220 84.0996 303.9 0c63 -63.1006 78.7002 -155.601 47.2002 -233.4zM278.3 71.7998c-3.7002 -12.7002 -6.2998 -25.8994 -6.2002 -39.7002 c0 -19.5 3.90039 -38.0996 11 -55.0996c-25.6992 2.7998 -50.5996 13.5996 -70.2998 33.2998l-35.7002 35.7002l-89.2998 -103.3c-7.5 -8.60059 -20.7002 -9.10059 -28.7002 -1l-53.3994 53.5c-8.10059 8.09961 -7.60059 21.2998 1 28.7998l103 89.4004l-34.5 34.5996 c-39 39.0996 -44.6006 98.7998 -17.2998 144.1zM416 128c53 0 96 -43 96 -96s-43 -96 -96 -96s-96 43 -96 96s43 96 96 96z" /> - + - @@ -2241,7 +2254,7 @@ v56h56c4.40039 0 8 3.59961 8 8zM288 296v16c0 4.40039 -3.59961 8 -8 8h-176c-4.400 - @@ -2274,7 +2287,7 @@ l66.4004 66.4004l-7.10059 63.5996c-2.59961 24.2998 5.7002 48.0996 23 65.4004l26. l55.6992 -55.7998c3.10059 -3.09961 8.2002 -3.09961 11.3008 0l11.2998 11.2998c3.09961 3.10059 3.09961 8.2002 0 11.3008zM509.7 366.5c3.09961 -3.2002 3.09961 -8.2002 0 -11.4004l-11.2998 -11.2998c-3.10059 -3.09961 -8.2002 -3.09961 -11.3008 0l-28.2998 28.2998 l-45.2998 -45.2998l73.5 -73.5c3.09961 -3.09961 3.09961 -8.2002 0 -11.2998l-33.9004 -34c-3.09961 -3.09961 -8.19922 -3.09961 -11.2998 0l-17 17l-135.7 135.9l-17 17c-3.09961 3.09961 -3.09961 8.19922 0 11.2998l33.9004 33.8994 c3.09961 3.10059 8.2002 3.10059 11.2998 0l17 -17l56.6006 -56.5996l45.2998 45.2998l-28.2998 28.2998c-3.10059 3.10059 -3.10059 8.2002 0 11.3008l11.2998 11.2998c3.09961 3.09961 8.2002 3.09961 11.2998 0z" /> - - + - - @@ -2457,9 +2472,10 @@ l190.601 45.9004c13 3.09961 26.7002 3.09961 39.7002 0l190.399 -46c18.2002 -4.400 l-66 15.9004v-52.6006c7 -4.2002 12 -11.5 12 -20.2998c0 -8.40039 -4.59961 -15.4004 -11.0996 -19.7002l15.5996 -62.2998c1.7002 -6.90039 -2.09961 -14 -7.59961 -14h-41.8008c-5.5 0 -9.2998 7.09961 -7.59961 14l15.5996 62.2998 c-6.5 4.2998 -11.0996 11.2998 -11.0996 19.7002c0 8.7998 5 16.0996 12 20.2998v58.4004z" /> +d="M224 192c-70.6562 0 -128 57.3438 -128 128s57.3438 128 128 128s128 -57.3438 128 -128s-57.3438 -128 -128 -128zM320 128v-160c0.0644531 -9.49707 4.05176 -23.833 8.90039 -32h-280.9c-26.4961 0 -48 21.5039 -48 48v41.5996 +c0.0166016 74.1729 60.2275 134.384 134.4 134.4h16.6992c19.1514 -8.83203 51.8105 -16 72.9004 -16s53.749 7.16797 72.9004 16h16.6992c5 0 9.7002 -1 14.5 -1.5c-4.41016 -7.84082 -8.03906 -21.5049 -8.09961 -30.5zM608 160c17.6641 0 32 -14.3359 32 -32v-160 +c0 -17.6641 -14.3359 -32 -32 -32h-224c-17.6641 0 -32 14.3359 -32 32v160c0 17.6641 14.3359 32 32 32h32v80c0 44.1602 35.8398 80 80 80s80 -35.8398 80 -80v-80h32zM496 16c17.6641 0 32 14.3359 32 32s-14.3359 32 -32 32s-32 -14.3359 -32 -32s14.3359 -32 32 -32z +M528 160v80c0 17.6641 -14.3359 32 -32 32s-32 -14.3359 -32 -32v-80h64z" /> @@ -2475,7 +2491,7 @@ c2.60059 0 5 -0.700195 7.5 -0.799805c-0.299805 -2.40039 -1.09961 -4.7002 -1.0996 - - + + - @@ -2821,7 +2849,7 @@ h-49.3994c13.6797 64.6797 54.1699 119.48 109.54 152h-79.7305c-9.5 -23.4404 -32.4 c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32v96c0 17.6699 14.3301 32 32 32h96zM576 400c35.3398 0 64 -28.6504 64 -64s-28.6602 -64 -64 -64c-26.8398 0 -49.75 16.5596 -59.25 40h-79.7305c55.3701 -32.5195 95.8604 -87.3203 109.54 -152 h-49.3994c-11.2998 41.6104 -36.7705 77.21 -71.04 101.56c3.68945 8.08008 5.87988 16.9902 5.87988 26.4404v72h84.75c9.5 23.4404 32.4102 40 59.25 40zM576 128c17.6699 0 32 -14.3301 32 -32v-96c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32 v96c0 17.6699 14.3301 32 32 32h96z" /> - +d="M505 273.2c9.2998 -9.2998 9.2998 -24.5 -0.0996094 -34l-296 -296.2c-9.30078 -9.40039 -24.5 -9.40039 -33.9004 0l-168 168.1c-9.40039 9.40039 -9.40039 24.6006 0 34l39.7002 39.7002c9.2998 9.40039 24.5 9.40039 33.8994 0l111.4 -111.5l239.5 239.5 +c9.2998 9.40039 24.5 9.40039 33.9004 0zM180.7 167.2l-112 112.2c-6.2002 6.19922 -6.2002 16.2998 0 22.5996l45.2998 45.2998c6.2002 6.2998 16.4004 6.2998 22.5996 0l55.4004 -55.5l151.5 151.5c6.2002 6.2998 16.4004 6.2998 22.5996 0l45.2002 -45.2998 +c6.2002 -6.2002 6.2002 -16.2998 0 -22.5996l-208 -208.2c-6.2002 -6.2998 -16.3994 -6.2998 -22.5996 0z" /> - - + - @@ -3068,7 +3097,7 @@ c5.7002 -3.09961 12 1.7002 11 7.90039l-6 34.8994l25.3994 24.6006c4.60059 4.59961 c1.90039 11.7998 -9.2002 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002c-11.4004 3.59961 -22.7002 -6.10059 -20.7002 -17.9004c9.2998 -55 83.2002 -93.2998 143.8 -93.2998zM405.7 265.9 c4.59961 4.59961 1.89941 12.1992 -4.40039 13.0996l-34.8994 5l-15.5 31.5996c-2.90039 5.80078 -11 5.80078 -13.9004 0l-15.5 -31.5996l-34.9004 -5c-6.19922 -1 -8.7998 -8.59961 -4.2998 -13.2002l25.4004 -24.5996l-6 -34.9004c-1 -6.2002 5.2998 -11 11 -7.89941 l31.2998 16.2998l31.2998 -16.2002c5.7002 -3.09961 12 1.7002 11 7.90039l-6 34.8994z" /> - - - @@ -3272,7 +3301,7 @@ c13.2998 -16.0996 38.2998 4 24.5 20.4004c-28.4004 34.2002 -70.2998 53.7998 -114. d="M628.88 237.35c7.17969 -8.62988 11.1201 -19.5 11.1201 -30.7295v-110.62c0 -17.6699 -14.3301 -32 -32 -32h-32c0 -53.0195 -42.9805 -96 -96 -96s-96 42.9805 -96 96h-128c0 -53.0195 -42.9805 -96 -96 -96s-96 42.9805 -96 96h-32c-17.6699 0 -32 14.3301 -32 32v288 c0 17.6699 14.3301 32 32 32h425.52c12.4082 -0.00195312 28.9258 -7.73926 36.8701 -17.2695zM64 256h96v96h-96v-96zM160 16c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48zM320 256v96h-96v-96h96zM480 16 c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48zM384 256h146.02l-80 96h-66.0195v-96z" /> - - + +d="M208 448c35.2998 0 64 -28.7002 64 -64v-376c0 -39.7998 -32.2002 -72 -72 -72c-31.7998 0 -58.4004 20.7002 -68 49.2002c-3.90039 -0.700195 -7.90039 -1.2002 -12 -1.2002c-39.7998 0 -72 32.2002 -72 72c0 4.7998 0.5 9.5 1.40039 14.0996 +c-29 12 -49.4004 40.6006 -49.4004 73.9004c0 29.7002 16.2998 55.2998 40.2998 69.0996c-5.09961 10.6006 -8.2998 22.3008 -8.2998 34.9004c0 33.4004 20.5 62 49.7002 74c-1.10059 4.5 -1.7002 9.2002 -1.7002 14c0 35.2998 28.7002 64 64 64 +c0.799805 0 1.40039 -0.200195 2.2002 -0.200195c7.09961 27.7002 31.8994 48.2002 61.7998 48.2002zM576 144c0 -33.2998 -20.4004 -61.9004 -49.4004 -73.9004c0.900391 -4.59961 1.40039 -9.2998 1.40039 -14.0996c0 -39.7998 -32.2002 -72 -72 -72 +c-4.09961 0 -8.09961 0.5 -12 1.2002c-9.59961 -28.5 -36.2002 -49.2002 -68 -49.2002c-39.7998 0 -72 32.2002 -72 72v376c0 35.4004 28.7002 64 64 64c29.9004 0 54.7002 -20.5 61.7998 -48.2002c0.700195 0 1.40039 0.200195 2.2002 0.200195 +c35.2998 0 64 -28.7002 64 -64c0 -4.7998 -0.700195 -9.5 -1.7002 -14c29.2002 -12 49.7002 -40.5996 49.7002 -74c0 -12.5996 -3.09961 -24.2998 -8.2998 -34.9004c24 -13.7998 40.2998 -39.3994 40.2998 -69.0996z" /> - - d="M448 16c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48v-352zM112 256h128c8.83984 0 16 7.16016 16 16v32c0 8.83984 -7.16016 16 -16 16h-128c-8.83984 0 -16 -7.16016 -16 -16v-32 c0 -8.83984 7.16016 -16 16 -16zM112 160h224c8.83984 0 16 7.16016 16 16v32c0 8.83984 -7.16016 16 -16 16h-224c-8.83984 0 -16 -7.16016 -16 -16v-32c0 -8.83984 7.16016 -16 16 -16zM112 64h64c8.83984 0 16 7.16016 16 16v32c0 8.83984 -7.16016 16 -16 16h-64 c-8.83984 0 -16 -7.16016 -16 -16v-32c0 -8.83984 7.16016 -16 16 -16z" /> - @@ -3776,7 +3802,7 @@ d="M571.31 196.69c6.25 -6.25 6.25 -16.3809 0 -22.6309l-46.0596 -46.0596l46.0596 l-22.6191 22.6191c-6.25 6.25 -6.25 16.3809 0 22.6309l46.0596 46.0596l-46.0596 46.0596c-6.25 6.25 -6.25 16.3809 0 22.6309l22.6191 22.6191c6.25 6.25 16.3809 6.25 22.6309 0l46.0596 -46.0596l46.0596 46.0596c6.25 6.25 16.3809 6.25 22.6309 0zM552 448 c13.25 0 24 -10.7402 24 -24v-48c0 -13.25 -10.75 -24 -24 -24h-194.97l-97.8105 -374.52c-9.83984 -32.4805 -37.0098 -41.4805 -54.2793 -41.4805c-18.6406 0 -35.9502 8.5 -48.4404 28.2695l-88.8799 163.73h-43.6201c-13.25 0 -24 10.75 -24 24v48 c0 13.2598 10.75 24 24 24h81.4697c10.4385 -0.00292969 22.9961 -7.42578 28.0303 -16.5703l58.4102 -106.1l84.79 322.8c3.68945 14.0703 16.4102 23.8701 30.9502 23.8701h244.35z" /> - +d="M320.05 81.5195l-17.7402 29.6406h35.46zM419.26 247.52l-18.3994 -30.8193l-18.46 30.8193h36.8594zM48 448c26.5098 0 48 -14.3301 48 -32v-448c0 -17.6699 -21.4902 -32 -48 -32s-48 14.3301 -48 32v448c0 17.6699 21.4902 32 48 32zM220.74 136.5l18.3896 30.8203 +l18.46 -30.8203h-36.8496zM382.45 136.5l18.4102 30.7998l18.4492 -30.7998h-36.8594zM128 -16v416h384v-416h-384zM194.77 262.13c-1.53711 -2.65625 -2.78516 -7.30176 -2.78516 -10.3711c0 -3.20312 1.35059 -8.02246 3.01562 -10.7588l29.3604 -49l-29.21 -48.8398 +c-1.6709 -2.77344 -3.02637 -7.65234 -3.02637 -10.8906c0 -11.6523 9.45703 -21.1094 21.1104 -21.1094h0.015625h59.5l29.25 -48.8799c3.33105 -5.6416 11.3516 -10.2207 17.9023 -10.2207h0.0976562c6.64844 0.0136719 14.7842 4.67285 18.1602 10.4004l29.1299 48.7002 +h59.4697h0.0224609c6.8125 0 15.082 4.80273 18.458 10.7197c1.53418 2.65332 2.7793 7.29297 2.7793 10.3584c0 3.2041 -1.35254 8.02539 -3.01953 10.7617l-29.3701 49l29.2402 48.8496c1.66602 2.77246 3.01758 7.64648 3.01758 10.8809 +c0 11.6562 -9.46094 21.1182 -21.1182 21.1191h-59.5195l-29.25 48.8604c-3.3252 5.63574 -11.3359 10.21 -17.8799 10.21h-0.0703125h-0.0341797c-6.65137 0 -14.7988 -4.64551 -18.1855 -10.3701l-29.1299 -48.71h-59.4502h-0.0458984 +c-6.80469 0 -15.0635 -4.79785 -18.4346 -10.71zM592 448c26.5098 0 48 -14.3301 48 -32v-448c0 -17.6699 -21.4902 -32 -48 -32s-48 14.3301 -48 32v448c0 17.6699 21.4902 32 48 32zM320 302.47l17.6797 -29.6201h-35.46zM257.55 247.47l-18.3701 -30.7998 +l-18.4395 30.7998h36.8096zM287.13 136.47l-33.2295 55.5303l33.1699 55.5195h65.79l33.2295 -55.5195l-33.1699 -55.5303h-65.79z" /> - d="M290.59 256c11.8906 -58.3496 63.6006 -102.4 125.41 -102.4c11.1104 0 21.71 1.87012 32 4.54004v-206.14c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v144l-128 -96h32c17.6699 0 32 -14.3301 32 -32v-16c0 -8.83984 -7.16016 -16 -16 -16 h-176c-35.2998 0 -64 28.7002 -64 64v256c0 17.6396 -14.3604 32 -32 32c-17.6699 0 -32 14.3301 -32 32s14.3301 32 32 32c52.9404 0 96 -43.0596 96 -96v-85.9502c55.7695 83.9697 142.41 85.9502 162.59 85.9502zM448 352l64 64v-134.4c0 -53.0195 -42.9805 -96 -96 -96 s-96 42.9805 -96 96v134.4l64 -64h64zM376 272c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16zM456 272c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16z" /> - @@ -3934,7 +3958,7 @@ s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699zM528 320c-13.25 - - - - - - - - - - - + - - - +d="M328.2 192.2c0 28.5996 -15.2002 53.5 -37.7998 67.7998l80.3994 128.4c4.7998 7.69922 15.2998 10.0996 22.7002 4.7998c58.0996 -42 97.4004 -108.4 102.5 -184.2c0.599609 -9.09961 -7.09961 -16.7998 -16.2002 -16.7998h-151.6zM290.4 124.5l80.3994 -128.5 +c4.7998 -7.59961 2.40039 -18.0996 -5.59961 -22.4004c-34.9004 -18.7998 -74.7998 -29.5996 -117.2 -29.5996s-82.2998 10.7998 -117.2 29.5996c-8 4.30078 -10.3994 14.7002 -5.59961 22.4004l80.3994 128.5c12.4004 -7.7002 26.8008 -12.4004 42.4004 -12.4004 +s30.0996 4.7002 42.4004 12.4004zM248 144.2c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM16.2002 192.2c-9.10059 0 -16.7998 7.7002 -16.2002 16.7002c5.09961 75.7998 44.4004 142.199 102.5 184.199 +c7.40039 5.40039 17.9004 2.90039 22.7002 -4.7998l80.3994 -128.399c-22.5996 -14.2002 -37.7998 -39.1006 -37.7998 -67.7002h-151.6z" /> - + - +d="M0 384c0 35.2998 28.7002 64 64 64h192l128 -128v-320c0 -35.2998 -28.7002 -64 -64 -64h-256c-35.2998 0 -64 28.7002 -64 64v384zM224 192v64h-64v-64h64zM320 192v32c0 17.7002 -14.2998 32 -32 32h-32v-64h64zM256 64v-64h32c17.7002 0 32 14.2998 32 32v32h-64z +M160 64v-64h64v64h-64zM64 64v-32c0 -17.7002 14.2998 -32 32 -32h32v64h-64zM64 160v-64h256v64h-256zM64 224v-32h64v64h-32c-17.7002 0 -32 -14.2998 -32 -32z" /> - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sapl/static/sapl/frontend/img/fa-solid-900.c2801fb4.svg.gz b/sapl/static/sapl/frontend/img/fa-solid-900.c2801fb4.svg.gz new file mode 100644 index 000000000..4e0c092ad Binary files /dev/null and b/sapl/static/sapl/frontend/img/fa-solid-900.c2801fb4.svg.gz differ diff --git a/sapl/static/sapl/frontend/js/chunk-vendors.0003dc37.js b/sapl/static/sapl/frontend/js/chunk-vendors.0003dc37.js deleted file mode 100644 index f5eed7086..000000000 --- a/sapl/static/sapl/frontend/js/chunk-vendors.0003dc37.js +++ /dev/null @@ -1,278 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([["chunk-vendors"],{"014b":function(e,t,n){"use strict";var r=n("e53d"),i=n("07e3"),o=n("8e60"),a=n("63b6"),s=n("9138"),u=n("ebfd").KEY,c=n("294c"),l=n("dbdb"),f=n("45f2"),d=n("62a0"),h=n("5168"),p=n("ccb9"),m=n("6718"),g=n("47ee"),A=n("9003"),v=n("e4ae"),b=n("f772"),y=n("36c3"),w=n("1bc3"),x=n("aebd"),E=n("a159"),C=n("0395"),_=n("bf0b"),D=n("d9f6"),S=n("c3a1"),T=_.f,k=D.f,I=C.f,B=r.Symbol,N=r.JSON,R=N&&N.stringify,M=h("_hidden"),P=h("toPrimitive"),O={}.propertyIsEnumerable,F=l("symbol-registry"),L=l("symbols"),Q=l("op-symbols"),U=Object.prototype,H="function"==typeof B,z=r.QObject,j=!z||!z.prototype||!z.prototype.findChild,W=o&&c(function(){return 7!=E(k({},"a",{get:function(){return k(this,"a",{value:7}).a}})).a})?function(e,t,n){var r=T(U,t);r&&delete U[t],k(e,t,n),r&&e!==U&&k(U,t,r)}:k,Y=function(e){var t=L[e]=E(B.prototype);return t._k=e,t},V=H&&"symbol"==typeof B.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof B},G=function(e,t,n){return e===U&&G(Q,t,n),v(e),t=w(t,!0),v(n),i(L,t)?(n.enumerable?(i(e,M)&&e[M][t]&&(e[M][t]=!1),n=E(n,{enumerable:x(0,!1)})):(i(e,M)||k(e,M,x(1,{})),e[M][t]=!0),W(e,t,n)):k(e,t,n)},J=function(e,t){v(e);for(var n,r=g(t=y(t)),i=0,o=r.length;o>i;)G(e,n=r[i++],t[n]);return e},q=function(e){var t=O.call(this,e=w(e,!0));return!(this===U&&i(L,e)&&!i(Q,e))&&(!(t||!i(this,e)||!i(L,e)||i(this,M)&&this[M][e])||t)},K=function(e,t){if(e=y(e),t=w(t,!0),e!==U||!i(L,t)||i(Q,t)){var n=T(e,t);return!n||!i(L,t)||i(e,M)&&e[M][t]||(n.enumerable=!0),n}},X=function(e){for(var t,n=I(y(e)),r=[],o=0;n.length>o;)i(L,t=n[o++])||t==M||t==u||r.push(t);return r},$=function(e){for(var t,n=e===U,r=I(n?Q:y(e)),o=[],a=0;r.length>a;)!i(L,t=r[a++])||n&&!i(U,t)||o.push(L[t]);return o};H||(s((B=function(){if(this instanceof B)throw TypeError("Symbol is not a constructor!");var e=d(arguments.length>0?arguments[0]:void 0),t=function(n){this===U&&t.call(Q,n),i(this,M)&&i(this[M],e)&&(this[M][e]=!1),W(this,e,x(1,n))};return o&&j&&W(U,e,{configurable:!0,set:t}),Y(e)}).prototype,"toString",function(){return this._k}),_.f=K,D.f=G,n("6abf").f=C.f=X,n("355d").f=q,n("9aa9").f=$,o&&!n("b8e3")&&s(U,"propertyIsEnumerable",q,!0),p.f=function(e){return Y(h(e))}),a(a.G+a.W+a.F*!H,{Symbol:B});for(var Z="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ee=0;Z.length>ee;)h(Z[ee++]);for(var te=S(h.store),ne=0;te.length>ne;)m(te[ne++]);a(a.S+a.F*!H,"Symbol",{for:function(e){return i(F,e+="")?F[e]:F[e]=B(e)},keyFor:function(e){if(!V(e))throw TypeError(e+" is not a symbol!");for(var t in F)if(F[t]===e)return t},useSetter:function(){j=!0},useSimple:function(){j=!1}}),a(a.S+a.F*!H,"Object",{create:function(e,t){return void 0===t?E(e):J(E(e),t)},defineProperty:G,defineProperties:J,getOwnPropertyDescriptor:K,getOwnPropertyNames:X,getOwnPropertySymbols:$}),N&&a(a.S+a.F*(!H||c(function(){var e=B();return"[null]"!=R([e])||"{}"!=R({a:e})||"{}"!=R(Object(e))})),"JSON",{stringify:function(e){for(var t,n,r=[e],i=1;arguments.length>i;)r.push(arguments[i++]);if(n=t=r[1],(b(t)||void 0!==e)&&!V(e))return A(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!V(t))return t}),r[1]=t,R.apply(N,r)}}),B.prototype[P]||n("35e8")(B.prototype,P,B.prototype.valueOf),f(B,"Symbol"),f(Math,"Math",!0),f(r.JSON,"JSON",!0)},"01f9":function(e,t,n){"use strict";var r=n("2d00"),i=n("5ca1"),o=n("2aba"),a=n("32e9"),s=n("84f2"),u=n("41a0"),c=n("7f20"),l=n("38fd"),f=n("2b4c")("iterator"),d=!([].keys&&"next"in[].keys()),h=function(){return this};e.exports=function(e,t,n,p,m,g,A){u(n,t,p);var v,b,y,w=function(e){if(!d&&e in _)return _[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},x=t+" Iterator",E="values"==m,C=!1,_=e.prototype,D=_[f]||_["@@iterator"]||m&&_[m],S=D||w(m),T=m?E?w("entries"):S:void 0,k="Array"==t&&_.entries||D;if(k&&(y=l(k.call(new e)))!==Object.prototype&&y.next&&(c(y,x,!0),r||"function"==typeof y[f]||a(y,f,h)),E&&D&&"values"!==D.name&&(C=!0,S=function(){return D.call(this)}),r&&!A||!d&&!C&&_[f]||a(_,f,S),s[t]=S,s[x]=h,m)if(v={values:E?S:w("values"),keys:g?S:w("keys"),entries:T},A)for(b in v)b in _||o(_,b,v[b]);else i(i.P+i.F*(d||C),t,v);return v}},"02f4":function(e,t,n){var r=n("4588"),i=n("be13");e.exports=function(e){return function(t,n){var o,a,s=String(i(t)),u=r(n),c=s.length;return u<0||u>=c?e?"":void 0:(o=s.charCodeAt(u))<55296||o>56319||u+1===c||(a=s.charCodeAt(u+1))<56320||a>57343?e?s.charAt(u):o:e?s.slice(u,u+2):a-56320+(o-55296<<10)+65536}}},"0390":function(e,t,n){"use strict";var r=n("02f4")(!0);e.exports=function(e,t,n){return t+(n?r(e,t).length:1)}},"0395":function(e,t,n){var r=n("36c3"),i=n("6abf").f,o={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return a&&"[object Window]"==o.call(e)?function(e){try{return i(e)}catch(e){return a.slice()}}(e):i(r(e))}},"0773":function(e,t,n){},"07d1":function(e,t,n){n("94ce")},"07e3":function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},"097d":function(e,t,n){"use strict";var r=n("5ca1"),i=n("8378"),o=n("7726"),a=n("ebd6"),s=n("bcaa");r(r.P+r.R,"Promise",{finally:function(e){var t=a(this,i.Promise||o.Promise),n="function"==typeof e;return this.then(n?function(n){return s(t,e()).then(function(){return n})}:e,n?function(n){return s(t,e()).then(function(){throw n})}:e)}})},"0a49":function(e,t,n){var r=n("9b43"),i=n("626a"),o=n("4bf8"),a=n("9def"),s=n("cd1c");e.exports=function(e,t){var n=1==e,u=2==e,c=3==e,l=4==e,f=6==e,d=5==e||f,h=t||s;return function(t,s,p){for(var m,g,A=o(t),v=i(A),b=r(s,p,3),y=a(v.length),w=0,x=n?h(t,y):u?h(t,0):void 0;y>w;w++)if((d||w in v)&&(g=b(m=v[w],w,A),e))if(n)x[w]=g;else if(g)switch(e){case 3:return!0;case 5:return m;case 6:return w;case 2:x.push(m)}else if(l)return!1;return f?-1:c||l?l:x}}},"0ae9":function(e,t,n){var r,i,o; -/*! - * jQuery UI :data 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - */i=[n("1157"),n("4309")],void 0===(o="function"==typeof(r=function(e){return e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(n){return!!e.data(n,t)}}):function(t,n,r){return!!e.data(t,r[3])}})})?r.apply(t,i):r)||(e.exports=o)},"0bfb":function(e,t,n){"use strict";var r=n("cb7c");e.exports=function(){var e=r(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}},"0d58":function(e,t,n){var r=n("ce10"),i=n("e11e");e.exports=Object.keys||function(e){return r(e,i)}},"0fc9":function(e,t,n){var r=n("3a38"),i=Math.max,o=Math.min;e.exports=function(e,t){return(e=r(e))<0?i(e+t,0):o(e,t)}},1157:function(e,t,n){var r; -/*! - * jQuery JavaScript Library v3.3.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2018-01-20T17:24Z - */ -/*! - * jQuery JavaScript Library v3.3.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2018-01-20T17:24Z - */ -!function(t,n){"use strict";"object"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}:n(t)}("undefined"!=typeof window?window:this,function(n,i){"use strict";var o=[],a=n.document,s=Object.getPrototypeOf,u=o.slice,c=o.concat,l=o.push,f=o.indexOf,d={},h=d.toString,p=d.hasOwnProperty,m=p.toString,g=m.call(Object),A={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},b=function(e){return null!=e&&e===e.window},y={type:!0,src:!0,noModule:!0};function w(e,t,n){var r,i=(t=t||a).createElement("script");if(i.text=e,n)for(r in y)n[r]&&(i[r]=n[r]);t.head.appendChild(i).parentNode.removeChild(i)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?d[h.call(e)]||"object":typeof e}var E=function(e,t){return new E.fn.init(e,t)},C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function _(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!b(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}E.fn=E.prototype={jquery:"3.3.1",constructor:E,length:0,toArray:function(){return u.call(this)},get:function(e){return null==e?u.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=E.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return E.each(this,e)},map:function(e){return this.pushStack(E.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(u.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n+~]|"+O+")"+O+"*"),W=new RegExp("="+O+"*([^\\]'\"]*?)"+O+"*\\]","g"),Y=new RegExp(Q),V=new RegExp("^"+F+"$"),G={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),TAG:new RegExp("^("+F+"|[*])"),ATTR:new RegExp("^"+L),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+O+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)","i")},J=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,X=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+O+"?|("+O+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){d()},ie=ve(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{N.apply(k=R.call(w.childNodes),w.childNodes),k[w.childNodes.length].nodeType}catch(e){N={apply:k.length?function(e,t){B.apply(e,R.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function oe(e,t,r,i){var o,s,c,l,f,p,A,v=t&&t.ownerDocument,x=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==x&&9!==x&&11!==x)return r;if(!i&&((t?t.ownerDocument||t:w)!==h&&d(t),t=t||h,m)){if(11!==x&&(f=X.exec(e)))if(o=f[1]){if(9===x){if(!(c=t.getElementById(o)))return r;if(c.id===o)return r.push(c),r}else if(v&&(c=v.getElementById(o))&&b(t,c)&&c.id===o)return r.push(c),r}else{if(f[2])return N.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return N.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!D[e+" "]&&(!g||!g.test(e))){if(1!==x)v=t,A=e;else if("object"!==t.nodeName.toLowerCase()){for((l=t.getAttribute("id"))?l=l.replace(te,ne):t.setAttribute("id",l=y),s=(p=a(e)).length;s--;)p[s]="#"+l+" "+Ae(p[s]);A=p.join(","),v=$.test(e)&&me(t.parentNode)||t}if(A)try{return N.apply(r,v.querySelectorAll(A)),r}catch(e){}finally{l===y&&t.removeAttribute("id")}}}return u(e.replace(H,"$1"),t,r,i)}function ae(){var e=[];return function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}}function se(e){return e[y]=!0,e}function ue(e){var t=h.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ce(e,t){for(var n=e.split("|"),i=n.length;i--;)r.attrHandle[n[i]]=t}function le(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function de(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function he(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function pe(e){return se(function(t){return t=+t,se(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function me(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},d=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==h&&9===a.nodeType&&a.documentElement?(p=(h=a).documentElement,m=!o(h),w!==h&&(i=h.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(h.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=K.test(h.getElementsByClassName),n.getById=ue(function(e){return p.appendChild(e).id=y,!h.getElementsByName||!h.getElementsByName(y).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&m)return t.getElementsByClassName(e)},A=[],g=[],(n.qsa=K.test(h.querySelectorAll))&&(ue(function(e){p.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]="+O+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||g.push("\\["+O+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+y+"-]").length||g.push("~="),e.querySelectorAll(":checked").length||g.push(":checked"),e.querySelectorAll("a#"+y+"+*").length||g.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=h.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&g.push("name"+O+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),p.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(n.matchesSelector=K.test(v=p.matches||p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=v.call(e,"*"),v.call(e,"[s!='']:x"),A.push("!=",Q)}),g=g.length&&new RegExp(g.join("|")),A=A.length&&new RegExp(A.join("|")),t=K.test(p.compareDocumentPosition),b=t||K.test(p.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},S=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===h||e.ownerDocument===w&&b(w,e)?-1:t===h||t.ownerDocument===w&&b(w,t)?1:l?M(l,e)-M(l,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===h?-1:t===h?1:i?-1:o?1:l?M(l,e)-M(l,t):0;if(i===o)return le(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[r]===s[r];)r++;return r?le(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},h):h},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==h&&d(e),t=t.replace(W,"='$1']"),n.matchesSelector&&m&&!D[t+" "]&&(!A||!A.test(t))&&(!g||!g.test(t)))try{var r=v.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,h,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==h&&d(e),b(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==h&&d(e);var i=r.attrHandle[t.toLowerCase()],o=i&&T.call(r.attrHandle,t.toLowerCase())?i(e,t,!m):void 0;return void 0!==o?o:n.attributes||!m?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,l=!n.sortStable&&e.slice(0),e.sort(S),f){for(;t=e[o++];)t===e[o]&&(i=r.push(o));for(;i--;)e.splice(r[i],1)}return l=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&Y.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&C(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace(U," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,d,h,p,m=o!==a?"nextSibling":"previousSibling",g=t.parentNode,A=s&&t.nodeName.toLowerCase(),v=!u&&!s,b=!1;if(g){if(o){for(;m;){for(d=t;d=d[m];)if(s?d.nodeName.toLowerCase()===A:1===d.nodeType)return!1;p=m="only"===e&&!p&&"nextSibling"}return!0}if(p=[a?g.firstChild:g.lastChild],a&&v){for(b=(h=(c=(l=(f=(d=g)[y]||(d[y]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]||[])[0]===x&&c[1])&&c[2],d=h&&g.childNodes[h];d=++h&&d&&d[m]||(b=h=0)||p.pop();)if(1===d.nodeType&&++b&&d===t){l[e]=[x,h,b];break}}else if(v&&(b=h=(c=(l=(f=(d=t)[y]||(d[y]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]||[])[0]===x&&c[1]),!1===b)for(;(d=++h&&d&&d[m]||(b=h=0)||p.pop())&&((s?d.nodeName.toLowerCase()!==A:1!==d.nodeType)||!++b||(v&&((l=(f=d[y]||(d[y]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]=[x,b]),d!==t)););return(b-=i)===r||b%r==0&&b/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[y]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){for(var r,o=i(e,t),a=o.length;a--;)e[r=M(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(H,"$1"));return r[y]?se(function(e,t,n,i){for(var o,a=r(e,null,i,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return V.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=m?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===p},focus:function(e){return e===h.activeElement&&(!h.hasFocus||h.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:he(!1),disabled:he(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return q.test(e.nodeName)},input:function(e){return J.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:pe(function(){return[0]}),last:pe(function(e,t){return[t-1]}),eq:pe(function(e,t,n){return[n<0?n+t:n]}),even:pe(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:pe(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function ye(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,c=null!=t;s-1&&(o[c]=!(a[c]=f))}}else A=ye(A===a?A.splice(p,A.length):A),i?i(null,a,A,u):N.apply(a,A)})}function xe(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,l=ve(function(e){return e===t},s,!0),f=ve(function(e){return M(t,e)>-1},s,!0),d=[function(e,n,r){var i=!a&&(r||n!==c)||((t=n).nodeType?l(e,n,r):f(e,n,r));return t=null,i}];u1&&be(d),u>1&&Ae(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(H,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,l){var f,p,g,A=0,v="0",b=o&&[],y=[],w=c,E=o||i&&r.find.TAG("*",l),C=x+=null==w?1:Math.random()||.1,_=E.length;for(l&&(c=a===h||a||l);v!==_&&null!=(f=E[v]);v++){if(i&&f){for(p=0,a||f.ownerDocument===h||(d(f),s=!m);g=e[p++];)if(g(f,a||h,s)){u.push(f);break}l&&(x=C)}n&&((f=!g&&f)&&A--,o&&b.push(f))}if(A+=v,n&&v!==A){for(p=0;g=t[p++];)g(b,y,a,s);if(o){if(A>0)for(;v--;)b[v]||y[v]||(y[v]=I.call(u));y=ye(y)}N.apply(u,y),l&&!o&&y.length>0&&A+t.length>1&&oe.uniqueSort(u)}return l&&(x=C,c=w),b};return n?se(o):o}(o,i))).selector=e}return s},u=oe.select=function(e,t,n,i){var o,u,c,l,f,d="function"==typeof e&&e,h=!i&&a(e=d.selector||e);if(n=n||[],1===h.length){if((u=h[0]=h[0].slice(0)).length>2&&"ID"===(c=u[0]).type&&9===t.nodeType&&m&&r.relative[u[1].type]){if(!(t=(r.find.ID(c.matches[0].replace(Z,ee),t)||[])[0]))return n;d&&(t=t.parentNode),e=e.slice(u.shift().value.length)}for(o=G.needsContext.test(e)?0:u.length;o--&&(c=u[o],!r.relative[l=c.type]);)if((f=r.find[l])&&(i=f(c.matches[0].replace(Z,ee),$.test(u[0].type)&&me(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&Ae(u)))return N.apply(n,i),n;break}}return(d||s(e,h))(i,t,!m,n,!t||$.test(e)&&me(t.parentNode)||t),n},n.sortStable=y.split("").sort(S).join("")===y,n.detectDuplicates=!!f,d(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(h.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||ce("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ce("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||ce(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(n);E.find=D,E.expr=D.selectors,E.expr[":"]=E.expr.pseudos,E.uniqueSort=E.unique=D.uniqueSort,E.text=D.getText,E.isXMLDoc=D.isXML,E.contains=D.contains,E.escapeSelector=D.escape;var S=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&E(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=E.expr.match.needsContext;function I(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var B=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function N(e,t,n){return v(t)?E.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?E.grep(e,function(e){return e===t!==n}):"string"!=typeof t?E.grep(e,function(e){return f.call(t,e)>-1!==n}):E.filter(t,e,n)}E.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?E.find.matchesSelector(r,e)?[r]:[]:E.find.matches(e,E.grep(t,function(e){return 1===e.nodeType}))},E.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(E(e).filter(function(){for(t=0;t1?E.uniqueSort(n):n},filter:function(e){return this.pushStack(N(this,e||[],!1))},not:function(e){return this.pushStack(N(this,e||[],!0))},is:function(e){return!!N(this,"string"==typeof e&&k.test(e)?E(e):e||[],!1).length}});var R,M=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||R,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:M.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:a,!0)),B.test(r[1])&&E.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=a.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,R=E(a);var P=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function F(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&E.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?E.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?f.call(E(e),this[0]):f.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(E.uniqueSort(E.merge(this.get(),E(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),E.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return S(e,"parentNode")},parentsUntil:function(e,t,n){return S(e,"parentNode",n)},next:function(e){return F(e,"nextSibling")},prev:function(e){return F(e,"previousSibling")},nextAll:function(e){return S(e,"nextSibling")},prevAll:function(e){return S(e,"previousSibling")},nextUntil:function(e,t,n){return S(e,"nextSibling",n)},prevUntil:function(e,t,n){return S(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return I(e,"iframe")?e.contentDocument:(I(e,"template")&&(e=e.content||e),E.merge([],e.childNodes))}},function(e,t){E.fn[e]=function(n,r){var i=E.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=E.filter(r,i)),this.length>1&&(O[e]||E.uniqueSort(i),P.test(e)&&i.reverse()),this.pushStack(i)}});var L=/[^\x20\t\r\n\f]+/g;function Q(e){return e}function U(e){throw e}function H(e,t,n,r){var i;try{e&&v(i=e.promise)?i.call(e).done(t).fail(n):e&&v(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}E.Callbacks=function(e){e="string"==typeof e?function(e){var t={};return E.each(e.match(L)||[],function(e,n){t[n]=!0}),t}(e):E.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1)for(n=a.shift();++s-1;)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?E.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},E.extend({Deferred:function(e){var t=[["notify","progress",E.Callbacks("memory"),E.Callbacks("memory"),2],["resolve","done",E.Callbacks("once memory"),E.Callbacks("once memory"),0,"resolved"],["reject","fail",E.Callbacks("once memory"),E.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},catch:function(e){return i.then(null,e)},pipe:function(){var e=arguments;return E.Deferred(function(n){E.each(t,function(t,r){var i=v(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&v(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(e,r,i){var o=0;function a(e,t,r,i){return function(){var s=this,u=arguments,c=function(){var n,c;if(!(e=o&&(r!==U&&(s=void 0,u=[n]),t.rejectWith(s,u))}};e?l():(E.Deferred.getStackHook&&(l.stackTrace=E.Deferred.getStackHook()),n.setTimeout(l))}}return E.Deferred(function(n){t[0][3].add(a(0,n,v(i)?i:Q,n.notifyWith)),t[1][3].add(a(0,n,v(e)?e:Q)),t[2][3].add(a(0,n,v(r)?r:U))}).promise()},promise:function(e){return null!=e?E.extend(e,i):i}},o={};return E.each(t,function(e,n){var a=n[2],s=n[5];i[n[1]]=a.add,s&&a.add(function(){r=s},t[3-e][2].disable,t[3-e][3].disable,t[0][2].lock,t[0][3].lock),a.add(n[3].fire),o[n[0]]=function(){return o[n[0]+"With"](this===o?void 0:this,arguments),this},o[n[0]+"With"]=a.fireWith}),i.promise(o),e&&e.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=u.call(arguments),o=E.Deferred(),a=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?u.call(arguments):n,--t||o.resolveWith(r,i)}};if(t<=1&&(H(e,o.done(a(n)).resolve,o.reject,!t),"pending"===o.state()||v(i[n]&&i[n].then)))return o.then();for(;n--;)H(i[n],a(n),o.reject);return o.promise()}});var z=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;E.Deferred.exceptionHook=function(e,t){n.console&&n.console.warn&&e&&z.test(e.name)&&n.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},E.readyException=function(e){n.setTimeout(function(){throw e})};var j=E.Deferred();function W(){a.removeEventListener("DOMContentLoaded",W),n.removeEventListener("load",W),E.ready()}E.fn.ready=function(e){return j.then(e).catch(function(e){E.readyException(e)}),this},E.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--E.readyWait:E.isReady)||(E.isReady=!0,!0!==e&&--E.readyWait>0||j.resolveWith(a,[E]))}}),E.ready.then=j.then,"complete"===a.readyState||"loading"!==a.readyState&&!a.documentElement.doScroll?n.setTimeout(E.ready):(a.addEventListener("DOMContentLoaded",W),n.addEventListener("load",W));var Y=function(e,t,n,r,i,o,a){var s=0,u=e.length,c=null==n;if("object"===x(n))for(s in i=!0,n)Y(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,v(r)||(a=!0),c&&(a?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(E(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){Z.remove(this,e)})}}),E.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=$.get(e,t),n&&(!r||Array.isArray(n)?r=$.access(e,t,E.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=E.queue(e,t),r=n.length,i=n.shift(),o=E._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){E.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return $.get(e,n)||$.access(e,n,{empty:E.Callbacks("once memory").add(function(){$.remove(e,[t+"queue",n])})})}}),E.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,pe=/^$|^module$|\/(?:java|ecma)script/i,me={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ge(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&I(e,t)?E.merge([e],n):n}function Ae(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(c=E.contains(o.ownerDocument,o),a=ge(f.appendChild(o),"script"),c&&Ae(a),n)for(l=0;o=a[l++];)pe.test(o.type||"")&&n.push(o);return f}ve=a.createDocumentFragment().appendChild(a.createElement("div")),(be=a.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),ve.appendChild(be),A.checkClone=ve.cloneNode(!0).cloneNode(!0).lastChild.checked,ve.innerHTML="",A.noCloneChecked=!!ve.cloneNode(!0).lastChild.defaultValue;var xe=a.documentElement,Ee=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,_e=/^([^.]*)(?:\.(.+)|)/;function De(){return!0}function Se(){return!1}function Te(){try{return a.activeElement}catch(e){}}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return E().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=E.guid++)),e.each(function(){E.event.add(this,t,i,r,n)})}E.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,c,l,f,d,h,p,m,g=$.get(e);if(g)for(n.handler&&(n=(o=n).handler,i=o.selector),i&&E.find.matchesSelector(xe,i),n.guid||(n.guid=E.guid++),(u=g.events)||(u=g.events={}),(a=g.handle)||(a=g.handle=function(t){return void 0!==E&&E.event.triggered!==t.type?E.event.dispatch.apply(e,arguments):void 0}),c=(t=(t||"").match(L)||[""]).length;c--;)h=m=(s=_e.exec(t[c])||[])[1],p=(s[2]||"").split(".").sort(),h&&(f=E.event.special[h]||{},h=(i?f.delegateType:f.bindType)||h,f=E.event.special[h]||{},l=E.extend({type:h,origType:m,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&E.expr.match.needsContext.test(i),namespace:p.join(".")},o),(d=u[h])||((d=u[h]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,p,a)||e.addEventListener&&e.addEventListener(h,a)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,l):d.push(l),E.event.global[h]=!0)},remove:function(e,t,n,r,i){var o,a,s,u,c,l,f,d,h,p,m,g=$.hasData(e)&&$.get(e);if(g&&(u=g.events)){for(c=(t=(t||"").match(L)||[""]).length;c--;)if(h=m=(s=_e.exec(t[c])||[])[1],p=(s[2]||"").split(".").sort(),h){for(f=E.event.special[h]||{},d=u[h=(r?f.delegateType:f.bindType)||h]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=d.length;o--;)l=d[o],!i&&m!==l.origType||n&&n.guid!==l.guid||s&&!s.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(d.splice(o,1),l.selector&&d.delegateCount--,f.remove&&f.remove.call(e,l));a&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,p,g.handle)||E.removeEvent(e,h,g.handle),delete u[h])}else for(h in u)E.event.remove(e,h+t[c],n,r,!0);E.isEmptyObject(u)&&$.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=E.event.fix(e),u=new Array(arguments.length),c=($.get(this,"events")||{})[s.type]||[],l=E.event.special[s.type]||{};for(u[0]=s,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||!0!==c.disabled)){for(o=[],a={},n=0;n-1:E.find(i,this,null,[c]).length),a[i]&&o.push(r);o.length&&s.push({elem:c,handlers:o})}return c=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Be=/\s*$/g;function Me(e,t){return I(e,"table")&&I(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s,u,c;if(1===t.nodeType){if($.hasData(e)&&(o=$.access(e),a=$.set(t,o),c=o.events))for(i in delete a.handle,a.events={},c)for(n=0,r=c[i].length;n1&&"string"==typeof p&&!A.checkClone&&Ne.test(p))return e.each(function(i){var o=e.eq(i);m&&(t[0]=p.call(this,i,o.html())),Le(o,t,n,r)});if(d&&(o=(i=we(t,e[0].ownerDocument,!1,e,r)).firstChild,1===i.childNodes.length&&(i=o),o||r)){for(s=(a=E.map(ge(i,"script"),Pe)).length;f")},clone:function(e,t,n){var r,i,o,a,s,u,c,l=e.cloneNode(!0),f=E.contains(e.ownerDocument,e);if(!(A.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||E.isXMLDoc(e)))for(a=ge(l),r=0,i=(o=ge(e)).length;r0&&Ae(a,!f&&ge(e,"script")),l},cleanData:function(e){for(var t,n,r,i=E.event.special,o=0;void 0!==(n=e[o]);o++)if(K(n)){if(t=n[$.expando]){if(t.events)for(r in t.events)i[r]?E.event.remove(n,r):E.removeEvent(n,r,t.handle);n[$.expando]=void 0}n[Z.expando]&&(n[Z.expando]=void 0)}}}),E.fn.extend({detach:function(e){return Qe(this,e,!0)},remove:function(e){return Qe(this,e)},text:function(e){return Y(this,function(e){return void 0===e?E.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Le(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Me(this,e).appendChild(e)})},prepend:function(){return Le(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Me(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Le(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Le(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(E.cleanData(ge(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return E.clone(this,e,t)})},html:function(e){return Y(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Be.test(e)&&!me[(he.exec(e)||["",""])[1].toLowerCase()]){e=E.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=He(e),i=je(e,t,r),o="border-box"===E.css(e,"boxSizing",!1,r),a=o;if(Ue.test(i)){if(!n)return i;i="auto"}return a=a&&(A.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===E.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}E.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=je(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=q(t),u=Ve.test(t),c=e.style;if(u||(t=Xe(s)),a=E.cssHooks[t]||E.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:c[t];"string"===(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n==n&&("number"===o&&(n+=i&&i[3]||(E.cssNumber[s]?"":"px")),A.clearCloneStyle||""!==n||0!==t.indexOf("background")||(c[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?c.setProperty(t,n):c[t]=n))}},css:function(e,t,n,r){var i,o,a,s=q(t);return Ve.test(t)||(t=Xe(s)),(a=E.cssHooks[t]||E.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=je(e,t,r)),"normal"===i&&t in Je&&(i=Je[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),E.each(["height","width"],function(e,t){E.cssHooks[t]={get:function(e,n,r){if(n)return!Ye.test(E.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ge,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=He(e),a="border-box"===E.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&A.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=E.css(e,t)),$e(0,n,s)}}}),E.cssHooks.marginLeft=We(A.reliableMarginLeft,function(e,t){if(t)return(parseFloat(je(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),E.each({margin:"",padding:"",border:"Width"},function(e,t){E.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(E.cssHooks[e+t].set=$e)}),E.fn.extend({css:function(e,t){return Y(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=He(e),i=t.length;a1)}}),E.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||E.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(E.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=E.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=E.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){E.fx.step[e.prop]?E.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[E.cssProps[e.prop]]&&!E.cssHooks[e.prop]?e.elem[e.prop]=e.now:E.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},E.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},E.fx=tt.prototype.init,E.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===a.hidden&&n.requestAnimationFrame?n.requestAnimationFrame(at):n.setTimeout(at,E.fx.interval),E.fx.tick())}function st(){return n.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){E.removeAttr(this,e)})}}),E.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?E.prop(e,t,n):(1===o&&E.isXMLDoc(e)||(i=E.attrHooks[t.toLowerCase()]||(E.expr.match.bool.test(t)?ft:void 0)),void 0!==n?null===n?void E.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=E.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!A.radioValue&&"radio"===t&&I(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(L);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),ft={set:function(e,t,n){return!1===t?E.removeAttr(e,n):e.setAttribute(n,n),n}},E.each(E.expr.match.bool.source.match(/\w+/g),function(e,t){var n=dt[t]||E.find.attr;dt[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=dt[a],dt[a]=i,i=null!=n(e,t,r)?a:null,dt[a]=o),i}});var ht=/^(?:input|select|textarea|button)$/i,pt=/^(?:a|area)$/i;function mt(e){return(e.match(L)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function At(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(L)||[]}E.fn.extend({prop:function(e,t){return Y(this,E.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[E.propFix[e]||e]})}}),E.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&E.isXMLDoc(e)||(t=E.propFix[t]||t,i=E.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=E.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||pt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),A.optSelected||(E.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),E.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){E.propFix[this.toLowerCase()]=this}),E.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(v(e))return this.each(function(t){E(this).addClass(e.call(this,t,gt(this)))});if((t=At(e)).length)for(;n=this[u++];)if(i=gt(n),r=1===n.nodeType&&" "+mt(i)+" "){for(a=0;o=t[a++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(v(e))return this.each(function(t){E(this).removeClass(e.call(this,t,gt(this)))});if(!arguments.length)return this.attr("class","");if((t=At(e)).length)for(;n=this[u++];)if(i=gt(n),r=1===n.nodeType&&" "+mt(i)+" "){for(a=0;o=t[a++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):v(e)?this.each(function(n){E(this).toggleClass(e.call(this,n,gt(this),t),t)}):this.each(function(){var t,i,o,a;if(r)for(i=0,o=E(this),a=At(e);t=a[i++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&"boolean"!==n||((t=gt(this))&&$.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":$.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+mt(gt(n))+" ").indexOf(t)>-1)return!0;return!1}});var vt=/\r/g;E.fn.extend({val:function(e){var t,n,r,i=this[0];return arguments.length?(r=v(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,E(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=E.map(i,function(e){return null==e?"":e+""})),(t=E.valHooks[this.type]||E.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))})):i?(t=E.valHooks[i.type]||E.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(vt,""):null==n?"":n:void 0}}),E.extend({valHooks:{option:{get:function(e){var t=E.find.attr(e,"value");return null!=t?t:mt(E.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),E.each(["radio","checkbox"],function(){E.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=E.inArray(E(e).val(),t)>-1}},A.checkOn||(E.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),A.focusin="onfocusin"in n;var bt=/^(?:focusinfocus|focusoutblur)$/,yt=function(e){e.stopPropagation()};E.extend(E.event,{trigger:function(e,t,r,i){var o,s,u,c,l,f,d,h,m=[r||a],g=p.call(e,"type")?e.type:e,A=p.call(e,"namespace")?e.namespace.split("."):[];if(s=h=u=r=r||a,3!==r.nodeType&&8!==r.nodeType&&!bt.test(g+E.event.triggered)&&(g.indexOf(".")>-1&&(A=g.split("."),g=A.shift(),A.sort()),l=g.indexOf(":")<0&&"on"+g,(e=e[E.expando]?e:new E.Event(g,"object"==typeof e&&e)).isTrigger=i?2:3,e.namespace=A.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+A.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=r),t=null==t?[e]:E.makeArray(t,[e]),d=E.event.special[g]||{},i||!d.trigger||!1!==d.trigger.apply(r,t))){if(!i&&!d.noBubble&&!b(r)){for(c=d.delegateType||g,bt.test(c+g)||(s=s.parentNode);s;s=s.parentNode)m.push(s),u=s;u===(r.ownerDocument||a)&&m.push(u.defaultView||u.parentWindow||n)}for(o=0;(s=m[o++])&&!e.isPropagationStopped();)h=s,e.type=o>1?c:d.bindType||g,(f=($.get(s,"events")||{})[e.type]&&$.get(s,"handle"))&&f.apply(s,t),(f=l&&s[l])&&f.apply&&K(s)&&(e.result=f.apply(s,t),!1===e.result&&e.preventDefault());return e.type=g,i||e.isDefaultPrevented()||d._default&&!1!==d._default.apply(m.pop(),t)||!K(r)||l&&v(r[g])&&!b(r)&&((u=r[l])&&(r[l]=null),E.event.triggered=g,e.isPropagationStopped()&&h.addEventListener(g,yt),r[g](),e.isPropagationStopped()&&h.removeEventListener(g,yt),E.event.triggered=void 0,u&&(r[l]=u)),e.result}},simulate:function(e,t,n){var r=E.extend(new E.Event,n,{type:e,isSimulated:!0});E.event.trigger(r,null,t)}}),E.fn.extend({trigger:function(e,t){return this.each(function(){E.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return E.event.trigger(e,t,n,!0)}}),A.focusin||E.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){E.event.simulate(t,e.target,E.event.fix(e))};E.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=$.access(r,t);i||r.addEventListener(e,n,!0),$.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=$.access(r,t)-1;i?$.access(r,t,i):(r.removeEventListener(e,n,!0),$.remove(r,t))}}});var wt=n.location,xt=Date.now(),Et=/\?/;E.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new n.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||E.error("Invalid XML: "+e),t};var Ct=/\[\]$/,_t=/\r?\n/g,Dt=/^(?:submit|button|image|reset|file)$/i,St=/^(?:input|select|textarea|keygen)/i;function Tt(e,t,n,r){var i;if(Array.isArray(t))E.each(t,function(t,i){n||Ct.test(e)?r(e,i):Tt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)Tt(e+"["+i+"]",t[i],n,r)}E.param=function(e,t){var n,r=[],i=function(e,t){var n=v(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!E.isPlainObject(e))E.each(e,function(){i(this.name,this.value)});else for(n in e)Tt(n,e[n],t,i);return r.join("&")},E.fn.extend({serialize:function(){return E.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=E.prop(this,"elements");return e?E.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!E(this).is(":disabled")&&St.test(this.nodeName)&&!Dt.test(e)&&(this.checked||!de.test(e))}).map(function(e,t){var n=E(this).val();return null==n?null:Array.isArray(n)?E.map(n,function(e){return{name:t.name,value:e.replace(_t,"\r\n")}}):{name:t.name,value:n.replace(_t,"\r\n")}}).get()}});var kt=/%20/g,It=/#.*$/,Bt=/([?&])_=[^&]*/,Nt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Rt=/^(?:GET|HEAD)$/,Mt=/^\/\//,Pt={},Ot={},Ft="*/".concat("*"),Lt=a.createElement("a");function Qt(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(L)||[];if(v(n))for(;r=o[i++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function Ut(e,t,n,r){var i={},o=e===Ot;function a(s){var u;return i[s]=!0,E.each(e[s]||[],function(e,s){var c=s(t,n,r);return"string"!=typeof c||o||i[c]?o?!(u=c):void 0:(t.dataTypes.unshift(c),a(c),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function Ht(e,t){var n,r,i=E.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&E.extend(!0,e,r),e}Lt.href=wt.href,E.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:wt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(wt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Ft,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":E.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ht(Ht(e,E.ajaxSettings),t):Ht(E.ajaxSettings,e)},ajaxPrefilter:Qt(Pt),ajaxTransport:Qt(Ot),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var r,i,o,s,u,c,l,f,d,h,p=E.ajaxSetup({},t),m=p.context||p,g=p.context&&(m.nodeType||m.jquery)?E(m):E.event,A=E.Deferred(),v=E.Callbacks("once memory"),b=p.statusCode||{},y={},w={},x="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(l){if(!s)for(s={};t=Nt.exec(o);)s[t[1].toLowerCase()]=t[2];t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?o:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,y[e]=t),this},overrideMimeType:function(e){return null==l&&(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)C.always(e[C.status]);else for(t in e)b[t]=[b[t],e[t]];return this},abort:function(e){var t=e||x;return r&&r.abort(t),_(0,t),this}};if(A.promise(C),p.url=((e||p.url||wt.href)+"").replace(Mt,wt.protocol+"//"),p.type=t.method||t.type||p.method||p.type,p.dataTypes=(p.dataType||"*").toLowerCase().match(L)||[""],null==p.crossDomain){c=a.createElement("a");try{c.href=p.url,c.href=c.href,p.crossDomain=Lt.protocol+"//"+Lt.host!=c.protocol+"//"+c.host}catch(e){p.crossDomain=!0}}if(p.data&&p.processData&&"string"!=typeof p.data&&(p.data=E.param(p.data,p.traditional)),Ut(Pt,p,t,C),l)return C;for(d in(f=E.event&&p.global)&&0==E.active++&&E.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Rt.test(p.type),i=p.url.replace(It,""),p.hasContent?p.data&&p.processData&&0===(p.contentType||"").indexOf("application/x-www-form-urlencoded")&&(p.data=p.data.replace(kt,"+")):(h=p.url.slice(i.length),p.data&&(p.processData||"string"==typeof p.data)&&(i+=(Et.test(i)?"&":"?")+p.data,delete p.data),!1===p.cache&&(i=i.replace(Bt,"$1"),h=(Et.test(i)?"&":"?")+"_="+xt+++h),p.url=i+h),p.ifModified&&(E.lastModified[i]&&C.setRequestHeader("If-Modified-Since",E.lastModified[i]),E.etag[i]&&C.setRequestHeader("If-None-Match",E.etag[i])),(p.data&&p.hasContent&&!1!==p.contentType||t.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Ft+"; q=0.01":""):p.accepts["*"]),p.headers)C.setRequestHeader(d,p.headers[d]);if(p.beforeSend&&(!1===p.beforeSend.call(m,C,p)||l))return C.abort();if(x="abort",v.add(p.complete),C.done(p.success),C.fail(p.error),r=Ut(Ot,p,t,C)){if(C.readyState=1,f&&g.trigger("ajaxSend",[C,p]),l)return C;p.async&&p.timeout>0&&(u=n.setTimeout(function(){C.abort("timeout")},p.timeout));try{l=!1,r.send(y,_)}catch(e){if(l)throw e;_(-1,e)}}else _(-1,"No Transport");function _(e,t,a,s){var c,d,h,y,w,x=t;l||(l=!0,u&&n.clearTimeout(u),r=void 0,o=s||"",C.readyState=e>0?4:0,c=e>=200&&e<300||304===e,a&&(y=function(e,t,n){for(var r,i,o,a,s=e.contents,u=e.dataTypes;"*"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(p,C,a)),y=function(e,t,n,r){var i,o,a,s,u,c={},l=e.dataTypes.slice();if(l[1])for(a in e.converters)c[a.toLowerCase()]=e.converters[a];for(o=l.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=l.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=c[u+" "+o]||c["* "+o]))for(i in c)if((s=i.split(" "))[1]===o&&(a=c[u+" "+s[0]]||c["* "+s[0]])){!0===a?a=c[i]:!0!==c[i]&&(o=s[0],l.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(p,y,C,c),c?(p.ifModified&&((w=C.getResponseHeader("Last-Modified"))&&(E.lastModified[i]=w),(w=C.getResponseHeader("etag"))&&(E.etag[i]=w)),204===e||"HEAD"===p.type?x="nocontent":304===e?x="notmodified":(x=y.state,d=y.data,c=!(h=y.error))):(h=x,!e&&x||(x="error",e<0&&(e=0))),C.status=e,C.statusText=(t||x)+"",c?A.resolveWith(m,[d,x,C]):A.rejectWith(m,[C,x,h]),C.statusCode(b),b=void 0,f&&g.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?d:h]),v.fireWith(m,[C,x]),f&&(g.trigger("ajaxComplete",[C,p]),--E.active||E.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return E.get(e,t,n,"json")},getScript:function(e,t){return E.get(e,void 0,t,"script")}}),E.each(["get","post"],function(e,t){E[t]=function(e,n,r,i){return v(n)&&(i=i||r,r=n,n=void 0),E.ajax(E.extend({url:e,type:t,dataType:i,data:n,success:r},E.isPlainObject(e)&&e))}}),E._evalUrl=function(e){return E.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},E.fn.extend({wrapAll:function(e){var t;return this[0]&&(v(e)&&(e=e.call(this[0])),t=E(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return v(e)?this.each(function(t){E(this).wrapInner(e.call(this,t))}):this.each(function(){var t=E(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v(e);return this.each(function(n){E(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){E(this).replaceWith(this.childNodes)}),this}}),E.expr.pseudos.hidden=function(e){return!E.expr.pseudos.visible(e)},E.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},E.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(e){}};var zt={0:200,1223:204},jt=E.ajaxSettings.xhr();A.cors=!!jt&&"withCredentials"in jt,A.ajax=jt=!!jt,E.ajaxTransport(function(e){var t,r;if(A.cors||jt&&!e.crossDomain)return{send:function(i,o){var a,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(a in e.xhrFields)s[a]=e.xhrFields[a];for(a in e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest"),i)s.setRequestHeader(a,i[a]);t=function(e){return function(){t&&(t=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(zt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=t(),r=s.onerror=s.ontimeout=t("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&n.setTimeout(function(){t&&r()})},t=t("abort");try{s.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}}),E.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),E.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return E.globalEval(e),e}}}),E.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),E.ajaxTransport("script",function(e){var t,n;if(e.crossDomain)return{send:function(r,i){t=E(" + } + {% endblock %} diff --git a/sapl/templates/comissoes/reuniao_detail.html b/sapl/templates/comissoes/reuniao_detail.html index be4152e44..bb6e19491 100644 --- a/sapl/templates/comissoes/reuniao_detail.html +++ b/sapl/templates/comissoes/reuniao_detail.html @@ -3,63 +3,57 @@ {% block detail_content %} {{ block.super }} -

Pauta

- {% if mats %} -

Total de Registros: {{num_mats}}

- - - - - - - - {% for mat in mats %} - - - - {% endfor %} - -
Matéria
- {{mat}} -
- {% if perms.comissoes.add_reuniao %} - +

Pauta

+ {% if mats %} +

Total de Registros: {{ num_mats }}

+ + + + {% for mat in mats %} + + {% endfor %} + +
Matéria
{{mat}}
+ {% if perms.comissoes.add_reuniao %} +
+ {% trans 'Adicionar Matéria(s)' %} + {% if num_mats == 1 %} + + {% trans 'Remover Matéria' %} + + {% else %} + + {% trans 'Remover Matéria(s)' %} + {% endif %} - {% else %} - {% if perms.comissoes.add_reuniao %} - {% trans 'Adicionar Matéria' %} - {% endif %} - {% endif %} -

-

Documentos Acessórios

- {% if docs %} -

Total de registros: {{num_docs}}

- - - - - - - - {% for doc in docs %} - - - - {% endfor %} - -
Documento Acessório
- {{ doc.nome }} -
- {% if perms.comissoes.add_reuniao %} - {% trans 'Adicionar Documento' %} - {% endif %} - {% else %} - {% if perms.comissoes.add_reuniao %} - {% trans 'Adicionar Documento' %} - {% endif %} - {% endif %} -

+
+ {% endif %} + {% else %} + {% if perms.comissoes.add_reuniao %} + {% trans 'Adicionar Matéria(s)' %} + {% endif %} + {% endif %} +

+

Documentos Acessórios

+ {% if docs %} +

Total de registros: {{ num_docs }}

+ + + + {% for doc in docs %} + + {% endfor %} + +
Documento Acessório
{{ doc.nome }}
+ {% if perms.comissoes.add_reuniao %} + + {% trans 'Adicionar Documento' %} + + {% endif %} + {% else %} + {% if perms.comissoes.add_reuniao %} + {% trans 'Adicionar Documento' %} + {% endif %} + {% endif %} +

{% endblock detail_content %} diff --git a/sapl/templates/compilacao/dispositivo_form_search_fragment.html b/sapl/templates/compilacao/dispositivo_form_search_fragment.html index 5e18a1b08..df0ee7626 100644 --- a/sapl/templates/compilacao/dispositivo_form_search_fragment.html +++ b/sapl/templates/compilacao/dispositivo_form_search_fragment.html @@ -8,14 +8,19 @@ {{ message|safe }} {% endfor %} - -{% if object_list.count >= 100 %} -
- {% trans 'Use argumentos para simplificar listagem...' %} +{% if object_list|length > 1000 %} +
+ {% trans 'Mais de Mil itens no resultado... melhore os argumentos para simplificar listagem...' %}
{% endif %} - -{% for dpt in object_list %} +{% with object_list|length as length_results %} + {% if length_results %} + + {{ length_results }} ite{{ length_results|pluralize:"m,ns"}} corresponde{{length_results|pluralize:"m"}} a sua busca. + + {% endif %} +{% endwith %} +{% for dpt in object_list %} {% ifchanged dpt.ta%} {% if not forloop.first %}{% endif %} {% endif %} +{% empty %} +
Não foram encontrados itens com seus critérios de busca!
{% endfor %} diff --git a/sapl/templates/compilacao/dispositivo_form_search_fragment_child.html b/sapl/templates/compilacao/dispositivo_form_search_fragment_child.html new file mode 100644 index 000000000..d835a87bc --- /dev/null +++ b/sapl/templates/compilacao/dispositivo_form_search_fragment_child.html @@ -0,0 +1,45 @@ +{% load i18n compilacao_filters %} + +
  • +
    + {% if df.I %} +
    I
    + {% endif %} + {% if df.S %} +
    S
    + {% endif %} + + +
    + + +
  • + diff --git a/sapl/templates/compilacao/layout/dispositivo_checkbox.html b/sapl/templates/compilacao/layout/dispositivo_checkbox.html index 6f29a171a..e0a7ab4d5 100644 --- a/sapl/templates/compilacao/layout/dispositivo_checkbox.html +++ b/sapl/templates/compilacao/layout/dispositivo_checkbox.html @@ -25,7 +25,12 @@
    {% if choice.1.ta_publicado_id %} - {% trans "Herança:" %} {% nomenclatura_heranca choice.1 1 1 %} + + {% trans "Herança:" %} + {% nomenclatura_heranca choice.1 1 1 %} + {% endif %}
    diff --git a/sapl/templates/compilacao/layout/dispositivo_radio.html b/sapl/templates/compilacao/layout/dispositivo_radio.html index 797e8885b..f0cd84e6b 100644 --- a/sapl/templates/compilacao/layout/dispositivo_radio.html +++ b/sapl/templates/compilacao/layout/dispositivo_radio.html @@ -18,7 +18,14 @@
    {% if dpt.nivel > 1 %} - {% trans "Herança:" %} {% heranca request dpt 0 0 %} + + {% for p in dpt.get_parents_asc %} + {{ p.rotulo }} + {% endfor %} + {% endif %}
    diff --git a/sapl/templates/compilacao/subnav.html b/sapl/templates/compilacao/subnav.html index 8710eaa63..72c90749c 100644 --- a/sapl/templates/compilacao/subnav.html +++ b/sapl/templates/compilacao/subnav.html @@ -1,7 +1,7 @@ {% load i18n %} {% load compilacao_filters %} {% load common_tags %} -