浏览代码

ShariX Open Tickets v1.0

- README.md updated, simplified and supplemented
- Upgrading to Bootstrap 5.3
- Removed idle or unused files, directories and code parts
- Correct file structure of the project is organized
- Complete redesign and optimization of all parts of the application
- Improving the interface, simplifying and optimizing user interaction
- Bug fixies & other improvements
TonyKurts 1 年之前
父节点
当前提交
1b2c3e1c67
共有 72 个文件被更改,包括 21723 次插入1 次删除
  1. 21 0
      .gitignore
  2. 46 1
      README.md
  3. 40 0
      _apiviews.py
  4. 30 0
      _post_migration.py
  5. 27 0
      _serializer.py
  6. 25 0
      admin.py
  7. 12 0
      apps.py
  8. 18 0
      defaults.py
  9. 2 0
      forms/__init__.py
  10. 62 0
      forms/ticket.py
  11. 34 0
      forms/ticket_list.py
  12. 659 0
      license-eng.md
  13. 587 0
      license-ru.md
  14. 4 0
      models/__init__.py
  15. 33 0
      models/attachment.py
  16. 37 0
      models/comment.py
  17. 72 0
      models/ticket.py
  18. 14 0
      models/ticket_list.py
  19. 6 0
      requirements.txt
  20. 7955 0
      static/tickets/assets/fontawesome/css/all.css
  21. 5 0
      static/tickets/assets/fontawesome/css/all.min.css
  22. 1522 0
      static/tickets/assets/fontawesome/css/brands.css
  23. 5 0
      static/tickets/assets/fontawesome/css/brands.min.css
  24. 6372 0
      static/tickets/assets/fontawesome/css/fontawesome.css
  25. 5 0
      static/tickets/assets/fontawesome/css/fontawesome.min.css
  26. 19 0
      static/tickets/assets/fontawesome/css/regular.css
  27. 6 0
      static/tickets/assets/fontawesome/css/regular.min.css
  28. 19 0
      static/tickets/assets/fontawesome/css/solid.css
  29. 6 0
      static/tickets/assets/fontawesome/css/solid.min.css
  30. 639 0
      static/tickets/assets/fontawesome/css/svg-with-js.css
  31. 5 0
      static/tickets/assets/fontawesome/css/svg-with-js.min.css
  32. 26 0
      static/tickets/assets/fontawesome/css/v4-font-face.css
  33. 6 0
      static/tickets/assets/fontawesome/css/v4-font-face.min.css
  34. 2194 0
      static/tickets/assets/fontawesome/css/v4-shims.css
  35. 5 0
      static/tickets/assets/fontawesome/css/v4-shims.min.css
  36. 22 0
      static/tickets/assets/fontawesome/css/v5-font-face.css
  37. 6 0
      static/tickets/assets/fontawesome/css/v5-font-face.min.css
  38. 二进制
      static/tickets/assets/fontawesome/webfonts/fa-brands-400.ttf
  39. 二进制
      static/tickets/assets/fontawesome/webfonts/fa-brands-400.woff2
  40. 二进制
      static/tickets/assets/fontawesome/webfonts/fa-regular-400.ttf
  41. 二进制
      static/tickets/assets/fontawesome/webfonts/fa-regular-400.woff2
  42. 二进制
      static/tickets/assets/fontawesome/webfonts/fa-solid-900.ttf
  43. 二进制
      static/tickets/assets/fontawesome/webfonts/fa-solid-900.woff2
  44. 二进制
      static/tickets/assets/fontawesome/webfonts/fa-v4compatibility.ttf
  45. 二进制
      static/tickets/assets/fontawesome/webfonts/fa-v4compatibility.woff2
  46. 4 0
      static/tickets/css/bootstrap.min.css
  47. 0 0
      static/tickets/css/bootstrap.min.css.map
  48. 8 0
      static/tickets/css/style.css
  49. 二进制
      static/tickets/favicon.ico
  50. 5 0
      static/tickets/js/bootstrap.bundle.min.js
  51. 0 0
      static/tickets/js/bootstrap.bundle.min.js.map
  52. 1 0
      static/tickets/js/jquery-3.7.0.min.js
  53. 117 0
      static/tickets/js/jquery.cookie.js
  54. 14 0
      static/tickets/js/search.js
  55. 76 0
      templates/tickets/base.html
  56. 23 0
      templates/tickets/include/form.html
  57. 33 0
      templates/tickets/search.html
  58. 238 0
      templates/tickets/ticket_detail.html
  59. 181 0
      templates/tickets/ticket_list_detail.html
  60. 57 0
      templates/tickets/ticket_list_list.html
  61. 34 0
      urls.py
  62. 43 0
      utils.py
  63. 9 0
      views/__init__.py
  64. 28 0
      views/attachment_remove.py
  65. 36 0
      views/delete.py
  66. 44 0
      views/search.py
  67. 27 0
      views/ticket_create.py
  68. 70 0
      views/ticket_detail.py
  69. 27 0
      views/ticket_edit.py
  70. 21 0
      views/ticket_list_create.py
  71. 49 0
      views/ticket_list_detail.py
  72. 32 0
      views/ticket_list_list.py

+ 21 - 0
.gitignore

@@ -0,0 +1,21 @@
+# Virtualenv
+env/
+venv/
+
+# VSCode
+.vscode
+
+# Python
+__pycache__/
+*.py[cod]
+*$py.class
+
+# Django
+migrations/
+staticfiles/
+media/
+
+# Other
+*.sqlite3
+*.*~
+*.*.swp

+ 46 - 1
README.md

@@ -1 +1,46 @@
-# ShariX Open Tickets
+<<<<<<< HEAD
+# ShariX Open Tickets
+=======
+# ShariX Open Tickets
+
+Ticketing system implemented as a Django application.
+
+## Installation
+
+Download or clone repository in core project:
+
+```bash
+git clone -b master http://git.sharix-app.org/ShariX_Open/sharix-open-tickets.git tickets
+```
+
+Install required libraries from *tickets/requirements.txt* (don't forget to create and activate virtual environment):
+
+```bash
+pip install -r tickets/requirements.txt
+```
+
+Set required apps in *core/settings.py*:
+
+```python
+# core/settings.py
+
+INSTALLED_APPS = [
+    # ...
+    'django.contrib.sites',
+    'tickets.apps.TicketsConfig',
+    # ...
+]
+```
+
+Include ShariX Open Tickets URLs in *core/urls.py*:
+
+```python
+# core/urls.py
+
+urlpatterns = [
+    # ...
+    path('tickets/', include('tickets.urls', namespace='tickets'), name='tickets'),
+    # ...
+] 
+```
+>>>>>>> bf39928 (ShariX Open Tickets v1.0)

+ 40 - 0
_apiviews.py

@@ -0,0 +1,40 @@
+from tickets.serializer import *
+from rest_framework import viewsets, permissions, exceptions
+from rest_framework.authentication import TokenAuthentication
+from rest_framework.decorators import action
+from tickets.models import *
+
+class TaskMVS(viewsets.ModelViewSet):
+    queryset = Task.objects.all()
+    serializer_class = TaskSerializer
+    permission_classes = [permissions.IsAuthenticated]
+
+    def get_queryset(self):
+        queryset = Task.objects.all()
+        task_list = self.request.query_params.get('list_id')
+        task_status = self.request.query_params.get('status')
+        if task_list is not None:
+            queryset = queryset.filter(task_list__pk=task_list)
+        if task_status is not None:
+            queryset = queryset.filter(status=task_status)
+        return queryset
+
+class TaskListMVS(viewsets.ModelViewSet):
+    queryset = TaskList.objects.all()
+    serializer_class = TaskListSerializer
+    permission_classes = [permissions.IsAuthenticated]
+
+class TicketTypeMVS(viewsets.ModelViewSet):
+    queryset = TicketType.objects.all()
+    serializer_class = TicketTypeSerializer
+    permission_classes = [permissions.IsAuthenticated]
+
+class CommentMVS(viewsets.ModelViewSet):
+    queryset = Comment.objects.all()
+    serializer_class = CommentSerializer
+    permission_classes = [permissions.IsAuthenticated]
+
+class AttachmentMVS(viewsets.ModelViewSet):
+    queryset = Attachment.objects.all()
+    serializer_class = AttachmentSerializer
+    permission_classes = [permissions.IsAuthenticated]

+ 30 - 0
_post_migration.py

@@ -0,0 +1,30 @@
+from .models import TicketType, TaskList
+from django.dispatch import receiver
+from django.db.models.signals import post_migrate
+from django.contrib.auth.models import Group
+
+
+@receiver(post_migrate)
+def create_lists(sender, **kwargs):
+    TaskList.objects.get_or_create(name='MS-ADMIN Активация партнеров NEG_REQUEST', slug='partner_activation', group=Group.objects.get(name='METASERVICE-ADMIN'))
+    TaskList.objects.get_or_create(name='MS-ADMIN права в сервисе ACCESS_REQUEST', slug='metaservice_roles', group=Group.objects.get(name='METASERVICE-ADMIN'))
+    TaskList.objects.get_or_create(name='MS-ADMIN проверка документов ST_REQUEST', slug='metaservice_partner_docs', group=Group.objects.get(name='METASERVICE-ADMIN'))
+    TaskList.objects.get_or_create(name='MS-SUPER активность пользователей ST_REQUEST', slug='activity_control', group=Group.objects.get(name='METASERVICE-SUPERVISOR'))
+    TaskList.objects.get_or_create(name='MS-SUPER оперативный доступ ST_REQUEST', slug='operational_control', group=Group.objects.get(name='METASERVICE-SUPERVISOR'))
+    TaskList.objects.get_or_create(name='MS-SUPER опер доступ экстра ACCESS_REQUEST', slug='operational_control_extra', group=Group.objects.get(name='METASERVICE-SUPERVISOR'))
+    TaskList.objects.get_or_create(name='MS-SUPER права сервиса ST_REQUEST', slug='access_control', group=Group.objects.get(name='METASERVICE-SUPERVISOR'))
+    TaskList.objects.get_or_create(name='MS-SUPER проверка документов ST_REQUEST', slug='metaservice_partner_docs', group=Group.objects.get(name='METASERVICE-SUPERVISOR'))
+    TaskList.objects.get_or_create(name='MS-SUP входящие обычные заявки ST_REQUEST', slug='service-inbox', group=Group.objects.get(name='METASERVICE-SUPPORT'))
+    TaskList.objects.get_or_create(name='MS-SUP Заявки на УСЛУГИ сервиса SERVICE_REQUEST', slug='service_request', group=Group.objects.get(name='METASERVICE-SUPPORT'))
+    TaskList.objects.get_or_create(name='MS-TSUP входящие тех заявки ST_REQUEST', slug='service-inbox-tech', group=Group.objects.get(name='METASERVICE-TECHSUPPORT'))
+    TaskList.objects.get_or_create(name='P-ADMIN документы исполнителей ST_REQUEST', slug='provider_docs', group=Group.objects.get(name='PARTNER-ADMIN'))
+    TaskList.objects.get_or_create(name='P-ADMIN документы ресурсов ST_REQUEST', slug='resource_docs', group=Group.objects.get(name='PARTNER-ADMIN'))
+    TaskList.objects.get_or_create(name='P-ADMIN права в партнерке ACCESS_REQUEST', slug='partner_roles', group=Group.objects.get(name='PARTNER-ADMIN'))
+    TaskList.objects.get_or_create(name='P-SUPER активность внутри партнера ST_REQUEST', slug='activity_control', group=Group.objects.get(name='PARTNER-SUPERVISOR'))
+    TaskList.objects.get_or_create(name='P-SUPER документы исполнителей ST_REQUEST', slug='provider_docs', group=Group.objects.get(name='PARTNER-SUPERVISOR'))
+    TaskList.objects.get_or_create(name='P-SUPER документы ресурсов ST_REQUEST', slug='resource_docs', group=Group.objects.get(name='PARTNER-SUPERVISOR'))
+    TaskList.objects.get_or_create(name='P-SUPER доступ внутри партнера ST_REQUEST', slug='access_control', group=Group.objects.get(name='PARTNER-SUPERVISOR'))
+    TaskList.objects.get_or_create(name='P-SUPER оперативный доступ ST_REQUEST', slug='operational_control', group=Group.objects.get(name='PARTNER-SUPERVISOR'))
+    TaskList.objects.get_or_create(name='P-SUPER оперативный доступ экстра ST_REQUEST', slug='operational_control_extra', group=Group.objects.get(name='PARTNER-SUPERVISOR'))
+    TaskList.objects.get_or_create(name='P-SUPER ручной аппрув заявок ACCESS-REQUEST', slug='service_request_edit', group=Group.objects.get(name='PARTNER-SUPERVISOR'))
+    TaskList.objects.get_or_create(name='P-TSUP входящие тех заявки ST_REQUEST', slug='partner-inbox-tech', group=Group.objects.get(name='PARTNER-TECHSUPPORT'))

+ 27 - 0
_serializer.py

@@ -0,0 +1,27 @@
+from rest_framework import serializers
+from tickets.models import *
+
+class TaskSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Task
+        fields = "__all__"
+
+class TaskListSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = TaskList
+        fields = "__all__"
+
+class TicketTypeSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = TicketType
+        fields = "__all__"
+
+class CommentSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Comment
+        fields = "__all__"
+
+class AttachmentSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Attachment
+        fields = "__all__"

+ 25 - 0
admin.py

@@ -0,0 +1,25 @@
+from django.contrib import admin
+
+from tickets.models import *
+
+
+class TicketAdmin(admin.ModelAdmin):
+    list_display = ("title", "ticket_list", "ticket_type",  "status", "priority", "created_at", "due_date")
+    list_filter = ("ticket_list", "ticket_type",)
+    ordering = ("priority",)
+    search_fields = ("title",)
+
+
+class CommentAdmin(admin.ModelAdmin):
+    list_display = ("author", "date", "snippet")
+
+
+class AttachmentAdmin(admin.ModelAdmin):
+    list_display = ("ticket", "added_by", "timestamp", "file")
+    autocomplete_fields = ["added_by", "ticket"]
+
+
+admin.site.register(TicketList)
+admin.site.register(Comment, CommentAdmin)
+admin.site.register(Ticket, TicketAdmin)
+admin.site.register(Attachment, AttachmentAdmin)

+ 12 - 0
apps.py

@@ -0,0 +1,12 @@
+from django.apps import AppConfig
+
+
+class TicketsConfig(AppConfig):
+    default_auto_field = "django.db.models.BigAutoField"
+    name = "tickets"
+
+    # def ready(self):
+    #     from django.db.models.signals import post_migrate
+    #     from .post_migration import create_types, create_lists
+    #     post_migrate.connect(create_types, sender=self)
+    #     post_migrate.connect(create_lists, sender=self)

+ 18 - 0
defaults.py

@@ -0,0 +1,18 @@
+from django.conf import settings
+
+
+hash = {
+    "TICKETS_LIMIT_FILE_ATTACHMENTS": [".jpg", ".gif", ".png", ".csv", ".pdf", ".zip", ".txt"],
+    "TICKETS_MAXIMUM_ATTACHMENT_SIZE": 5000000,
+    "TICKETS_PUBLIC_SUBMIT_REDIRECT": "/",
+}
+
+def defaults(key: str):
+    """Try to get a setting from project settings.
+    If empty or doesn't exist, fall back to a value from defaults hash."""
+
+    if hasattr(settings, key):
+        val = getattr(settings, key)
+    else:
+        val = hash.get(key)
+    return val

+ 2 - 0
forms/__init__.py

@@ -0,0 +1,2 @@
+from tickets.forms.ticket_list import TicketListForm
+from tickets.forms.ticket import TicketForm

+ 62 - 0
forms/ticket.py

@@ -0,0 +1,62 @@
+from datetime import timedelta
+
+from django import forms
+from django.contrib.auth.models import Group
+from django.utils import timezone
+
+from tickets.models import Ticket, TicketList
+
+
+class TicketForm(forms.ModelForm):
+    ticket_type = forms.ChoiceField(
+        choices=Ticket.TICKET_TYPES,
+        widget=forms.Select(attrs={
+                'class': 'form-control'
+        }),
+    )
+
+    def __init__(self, user, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+        group_ids = Group.objects.values_list("pk", flat=True)
+        if not user.is_superuser:
+            group_ids = group_ids.filter(user=user) 
+        ticket_lists = TicketList.objects.select_related("group")
+        ticket_lists = ticket_lists.filter(group__in=group_ids)
+
+        self.fields["ticket_list"].empty_label = None
+        self.fields["ticket_list"].queryset = ticket_lists
+        self.fields["ticket_list"].label_from_instance = lambda obj: f"{obj.group} > {obj}"
+        self.fields["assigned_to"].empty_label = "Select a user"
+        self.initial["due_date"] = (timezone.now() + timedelta(days=7)).date().strftime('%Y-%m-%d')
+
+    class Meta:
+        model = Ticket
+        exclude = ["status"]
+
+        widgets = {
+            'title': forms.TextInput(attrs={
+                'class': 'form-control',
+                'autofocus': True,
+            }),
+            'ticket_list': forms.Select(attrs={
+                'class': 'form-control'
+            }),
+            'ticket_type': forms.Select(attrs={
+                'class': 'form-control',
+            }),
+            'due_date': forms.DateInput(attrs={
+                'class': 'form-control',
+                'type': 'date'
+            }),
+            'assigned_to': forms.Select(attrs={
+                'class': 'form-control'
+            }),
+            'note': forms.Textarea(attrs={
+                'class': 'form-control',
+                'rows': 4
+            }),
+            'priority': forms.NumberInput(attrs={
+                'class': 'form-control',
+            }),
+        }

+ 34 - 0
forms/ticket_list.py

@@ -0,0 +1,34 @@
+from django import forms
+from django.contrib.auth.models import Group
+
+from tickets.models import TicketList
+
+
+class TicketListForm(forms.ModelForm):
+    def __init__(self, user, *args, **kwargs):
+        super(TicketListForm, self).__init__(*args, **kwargs)
+
+        groups = Group.objects.all()
+        if not user.is_superuser:
+            self.fields['group'].queryset = groups.filter(user=user)
+        self.fields['group'].empty_label = "Select a group"
+
+    class Meta:
+        model = TicketList
+        fields = "__all__"
+        
+        labels = {
+            'name': 'List Name',
+            'group': 'Group',
+        }
+
+        widgets = {
+            'name': forms.TextInput(attrs={
+                'class': 'form-control',
+                'placeholder': 'The full display name for this list',
+                'autofocus': True
+            }),
+            'group': forms.Select(attrs={
+                'class': 'form-control',
+            }),
+        }

+ 659 - 0
license-eng.md

@@ -0,0 +1,659 @@
+ GNU AFFERO GENERAL PUBLIC LICENSE
+ Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+ A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate. Many developers of free software are heartened and
+encouraged by the resulting cooperation. However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+ The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community. It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server. Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+ An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals. This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU Affero General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Remote Network Interaction; Use with the GNU General Public License.
+
+ Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software. This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero General Public License from time to time. Such new versions
+will be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source. For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code. There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.

+ 587 - 0
license-ru.md

@@ -0,0 +1,587 @@
+This is an unofficial translation of the GNU Affero General Public License into
+Russian language. It was not published by the Free Software Foundation, and does
+not legally state the distribution terms for software that uses the GNU AGPL—
+only the original English text of the GNU AGPL does that. However, we hope that
+this translation will help language speakers understand the GNU AGPL better.
+You may publish this translation, modified or unmodified, only under the terms
+at http://www.gnu.org/licenses/translations.html.
+Это неофициальный перевод GNU Affero General Public License на русский язык. Он
+был опубликован не Фондом свободного программного обеспечения и не содержит
+условий распространения программ, которые используют GNU AGPL -- для этого
+пригоден только ее исходный английский текст. Тем не менее мы надеемся, что этот
+перевод поможет лучше понять ее текст.
+Вы можете распространять перевод, с изменениями или без, только с соблюдением
+условий, описанных по адресу: http://www.gnu.org/licenses/translations.html.
+Генеральная публичная лицензия GNU Affero,
+Редакция 3, 19 ноября 2007 г.
+Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>. Перевод:
+Павел Протасов <pvphome@gmail.com>, 2016 г. Разрешается свободно копировать и
+распространять текст настоящей Лицензии, запрещается вносить в него изменения.
+Введение
+Генеральная публичная лицензия GNU Affero (Affero GPL, AGPL) -- свободная
+лицензия для программного обеспечения и произведений других видов, разрешающая
+свободное создание производных произведений, используемых на условиях GNU AGPL,
+предназначенная для обеспечения сотрудничества с сообществом разработчиков
+программного обеспечения, работающего на сетевых серверах.
+Лицензии на большинство программ и других прикладных работ составлены так, чтобы
+лишить Вас права распространять и изменять такие произведения. В
+противоположность этому, Генеральные публичные лицензии GNU предназначены для
+того, чтобы предоставить Вам право распространять и изменять все версии
+программы, чтобы она оставалась свободным программным обеспечением для всех
+пользователей.
+Когда мы говорим о свободном программном обеспечении, мы имеем в виду свободу
+использования, а не бесплатность. Наши Генеральные публичные лицензии составлены
+для того, чтобы убедиться, что у Вас есть право распространять копии свободного
+ПО (и взимать плату за них, если Вы хотите), что Вы получаете исходные тексты
+или можете получить их, если захотите, что Вы можете изменять программное
+обеспечение или использовать его части в новых свободных программах, и что Вы
+знаете о своем праве делать все это.
+Разработчики, использующие наши Генеральные публичные лицензии, гарантируют Ваши
+права при помощи следующих мер:
+(1) закрепляют авторское право на программное обеспечение, и (2) предлагают Вам
+принять условия настоящей Лицензии, закрепляющей Ваше право на создание копий,
+распространение и (или) модификацию программного обеспечения.
+Еще одно преимущество защиты свободы всех пользователей заключается в том, что
+улучшения, сделанные в разных версиях программы, при их широком распространении
+становятся доступными для использования другими разработчиками. Многие
+разработчики программного обеспечения воодушевляются этим сотрудничеством и
+пользуются его преимуществами. Однако если речь идет о программах, работающих на
+сетевых серверах, такого результата можно не достичь. Генеральная публичная
+лицензия GNU разрешает создание измененных версий и предоставление
+неограниченного доступа к ним, не делая общедоступным их исходного текста.
+Генеральная публичная лицензия GNU Affero предназначена для того, чтобы
+обеспечить в таких ситуациях общедоступность измененного исходного текста. Она
+налагает на владельца сетевого сервера обязанность предоставить исходный текст
+измененной версии программы пользователям этого сервера. Таким образом,
+использование измененной версии на общедоступном сервере влечет за собой
+предоставление общего доступа к исходному тексту такой измененной версии.
+Предыдущая лицензия, которая называлась "Генеральной публичной лицензией Affero"
+и была опубликована компанией Affero, была разработана для достижения тех же
+целей. Настоящая Лицензия не является версией Affero GPL; компания Affero
+опубликовала новую редакцию Affero GPL, которая позволяет повторный выпуск
+произведения на условиях настоящей Лицензии.
+Детальные определения используемых терминов и описание условий копирования,
+распространения и внесения изменений приведены ниже.
+ТЕРМИНЫ И УСЛОВИЯ
+0. Определения
+"Настоящая Лицензия" -- версия 3 Генеральной публичной лицензии GNU Affero.
+Под "Авторским правом" также понимаются законы, сходные с авторско-правовыми,
+которые применяются к другим видам работ, например, к топологиям микросхем.
+Термином "Программа" обозначается любое охраноспособное произведение,
+используемое в соответствии с настоящей Лицензией. Лицензиат именуется "Вы".
+"Лицензиаты" и "получатели" могут быть как физическими лицами, так и
+организациями.
+"Внесение изменений" в произведение означает копирование или адаптацию
+произведения целиком или в части, способом, требующим разрешения
+правообладателя, за исключением изготовления его точной копии. Получившееся
+произведение называется "измененной версией" предыдущего произведения или
+произведением, "основанным на" более ранней работе.
+Термином "Лицензионное произведение" обозначается неизмененная Программа или
+произведение, основанное на Программе.
+"Распространение" произведения означает совершение с ним действий, которые при
+отсутствии разрешения сделают Вас прямо или косвенно ответственным за нарушение
+действующего закона об авторском праве, за исключением запуска на компьютере или
+изменения копии, созданной в личных целях. Распространение включает в себя
+копирование, раздачу копий (с изменениями или без них), доведение до всеобщего
+сведения, а в некоторых странах -- и другие действия.
+"Передача" произведения означает любой вид распространения, который позволяет
+другим лицам создавать или получать копии произведения. Обычное взаимодействие с
+пользователем через компьютерную сеть без создания копии передачей не является.
+В диалоговом режиме пользователю должна быть показана "Информация об авторском
+праве", достаточная для того, чтобы (1) обеспечить отображение соответствующего
+уведомления об авторских правах и (2) сообщить пользователю о том, что ему не
+предоставляется никакой гарантии на произведение (за исключением фактически
+предоставленных гарантий), о том, что лицензиаты могут передавать произведение
+на условиях, описанных в настоящей Лицензии, а также о том, как ознакомиться с
+текстом настоящей Лицензии. Если интерфейс предоставляет собой список
+пользовательских команд или настроек, наподобие меню, это требование считается
+выполненным при наличии явно выделенного пункта в таком меню.
+1. Исходный текст
+Под "Исходным текстом" понимается произведение в форме, которая более всего
+подходит для внесения в него изменений.
+"Объектным кодом" называется произведение в любой иной форме.
+"Стандартный интерфейс" -- интерфейс, который либо является общепринятым
+стандартом, введенным общепризнанным органом по стандартизации, либо, в случае
+интерфейсов, характерных для конкретного языка программирования -- тот, который
+широко используется разработчиками, пишущими программы на этом языке.
+"Системные библиотеки" исполняемого произведения включают в себя то, что не
+относится к произведению в целом и при этом (a) входит в обычный комплект
+Основного компонента, но при этом не является его частью и (b) служит только для
+обеспечения работы с этим Основным компонентом или реализации Стандартного
+интерфейса, для которого существует общедоступная реализация, опубликованная в
+виде исходного текста. "Основным компонентом" в данном контексте назван главный
+существенный компонент (ядро, оконная система и т.д.) определенной операционной
+системы (если она используется), под управлением которой функционирует
+исполняемое произведение, либо компилятор, используемый для создания
+произведения или интерпретатор объектного кода, используемый для его запуска.
+"Полный исходный текст" для произведения в форме объектного кода -- весь
+исходный текст, необходимый для создания, установки и (для исполняемого
+произведения) функционирования объектного кода, а также модификации
+произведения, включая сценарии, контролирующие эти действия. Однако он не
+включает в себя Системные библиотеки, необходимые для функционирования
+произведения, инструменты общего назначения или общедоступные свободные
+программы, которые используются в неизменном виде для выполнения этих действий,
+но не являются частью произведения. Полный исходный текст включает в себя,
+например, файлы описания интерфейса, прилагаемые к файлам исходного текста
+произведения, а также исходные тексты общих библиотек и динамически связанных
+подпрограмм, которые требуются для функционирования произведения и разработаны
+специально для этого, например для прямой передачи данных или управления
+потоками между этими подпрограммами и другими частями произведения.
+Полный исходный текст не включает в себя то, что пользователи могут
+сгенерировать автоматически из других частей Полного исходного текста.
+Полным исходным текстом для произведения в форме исходных текстов является само
+это произведение.
+2. Основные права
+Все права, предоставленные на основании настоящей Лицензии, действуют в течение
+срок действия авторских прав на Программу и не могут быть отозваны при условии,
+что сформулированные в ней условия соблюдены. Настоящая Лицензия однозначно
+подтверждает Ваши неограниченные права на запуск неизмененной Программы.
+Результаты функционирования Лицензионного произведения распространяются на
+условиях настоящей Лицензии в том случае, если они, учитывая их содержание,
+являются частью Лицензионного произведения. Настоящая Лицензия подтверждает Ваши
+права на свободное использование произведения или другие аналогичные полномочия,
+предусмотренные действующим законодательством об авторском праве.
+Если Вы не осуществляете обычную передачу Лицензионного произведения, то можете
+как угодно создавать, запускать и распространять его копии до тех пор, пока
+Лицензия сохраняет силу. Вы можете передавать Лицензионные произведения третьим
+лицам исключительно для того, чтобы они внесли в них изменения для Вас или
+предоставили Вам возможность их запуска, при условии, что Вы соглашаетесь с
+условиями настоящей Лицензии при передаче всех материалов, авторскими правами на
+которые Вы не обладаете. Лица, создающие или запускающие Лицензионные
+произведения для Вас, должны делать это исключительно от Вашего имени, под Вашим
+руководством и контролем, на условиях, которые запрещают им создание без Вашей
+санкции каких-либо копий материалов, на которые Вы обладаете авторским правом.
+Любая другая передача разрешается исключительно при соблюдении описанных ниже
+условий. Сублицензирование не допускается; раздел 10 делает его не нужным.
+3. Защита прав пользователей от законов, запрещающих обход
+технических средств
+Ни одно Лицензионное произведение не должно считаться содержащим эффективные
+технические средства, удовлетворяющие требованиям любого действующего закона,
+принятого для исполнения обязательств, предусмотренных статьей 11 Договора ВОИС
+по авторскому праву от 20 декабря 1996 года или аналогичных законов, запрещающих
+или ограничивающих обход таких технических средств.
+При передаче Лицензионного произведения Вы отказываетесь от всех предоставляемых
+законом полномочий по запрету обхода технических средств, используемых авторами
+в связи с осуществлением их прав, признавая, что такой обход находится в рамках
+осуществления прав на использование Лицензионного произведения, предоставленных
+настоящей Лицензией; также Вы отказываетесь от любых попыток ограничить
+функционирование произведения или внесение в него изменений, направленных на
+реализацию предоставленных Вам законом прав на запрет пользователю обхода
+технических средств.
+4. Передача не измененных копий
+Вы можете передавать точные копии исходных текстов Программы в том виде, в
+котором Вы их получили, на любом носителе, при условии, что Вы прилагаете к
+каждой копии соответствующее уведомление об авторских правах способом,
+обеспечивающим ознакомление с ним пользователя; сохраняете все уведомления о
+том, что к тексту применима настоящая Лицензия и любые ограничения, добавленные
+в соответствии с разделом 7; сохраняете все уведомления об отсутствии каких-либо
+гарантий; предоставляете всем получателям вместе с Программой копию настоящей
+Лицензии.
+Вы можете установить любую цену за каждую копию, которую Вы передаете, или
+распространять копии бесплатно; также Вы можете предложить поддержку или
+гарантию за отдельную плату.
+5. Передача измененных исходных текстов
+Вы можете передавать исходный текст произведения, основанного на Программе, или
+изменений, необходимых для того, чтобы получить его из Программы, на условиях,
+описанных в разделе 4, при соблюдении следующих условий:
+а) Произведение должно содержать уведомления о произведенных Вами изменениях с
+указанием их даты, сделанные способом, обеспечивающим ознакомление с ними
+пользователя.
+b) Произведение должно содержать уведомление о том, что оно распространяется на
+условиях настоящей Лицензии, а также об условиях, добавленных в соответствии с
+разделом 7, сделанное способом, обеспечивающим ознакомление с ним пользователя.
+Данное требование имеет приоритет над требованиями раздела 4 "оставлять
+нетронутыми все уведомления".
+c) Вы должны передать на условиях настоящей Лицензии всю работу целиком любому
+лицу, которое приобретает копию.
+ Таким образом, настоящая Лицензия вместе с любыми применимыми условиями раздела
+7 будет применяться к произведению в целом и всем его частям, независимо от их
+комплектности.
+Настоящая Лицензия не дает права на лицензирование произведения на любых других
+условиях, но это не лишает законной силы такое разрешение, если Вы получили его
+отдельно.
+d) Если произведение имеет интерактивные пользовательские интерфейсы, каждый из
+них должен отображать Информацию об авторском праве; однако, если Программа
+имеет пользовательские интерфейсы, которые не отображают информацию об авторском
+праве, от Вашего произведения этого также не требуется.
+Включение Лицензионного произведения в подборку на разделе хранения данных или
+на носителе, на котором распространяется произведение, вместе с другими
+отдельными самостоятельными произведениями, которые по своей природе не являются
+переработкой Лицензионного произведения и не объединены с ним, например, в
+программный комплекс, называется "набором", если авторские права на подборку не
+используются для ограничения доступа к ней или законных прав ее пользователей
+сверх того, что предусматривают лицензии на отдельные произведения. Включение
+Лицензионного произведения в набор не влечет применения положений настоящей
+Лицензии к остальным его частям.
+6. Передача произведения в формах, не относящихся к исходному
+тексту
+Вы можете передавать Лицензионное произведение в виде объектного кода в
+соответствии с положениями разделов 4 и 5, при условии, что Вы также передаете
+машиночитаемый Полный исходный текст в соответствии с условиями настоящей
+Лицензии, одним из следующих способов:
+а) Передавая объектный код или содержащий его материальный продукт (включая
+распределенный материальный носитель), с приложением Полного исходного текста на
+материальном носителе, обычно используемом для обмена программным обеспечением.
+b) Передавая объектный код или содержащий его материальный продукт (включая
+носитель, на котором распространяется произведение), с письменным предложением,
+действительным в течение не менее трех лет либо до тех пор, пока Вы
+предоставляете запасные части или поддержку для данного продукта, о передаче
+любому обладателю объектного кода (1) копии Полного исходного текста для всего
+программного обеспечения, содержащегося в продукте, на которое распространяется
+действие настоящей Лицензии, на физическом носителе, обычно используемом для
+обмена программным обеспечением, по цене, не превышающей разумных затрат на
+передачу копии, или (2) доступа к Полному исходному тексту с возможностью его
+копирования с сетевого сервера без взимания платы.
+с) Передавая отдельные копии объектного кода с письменной копией предложения о
+предоставлении Полного исходного текста. Этот вариант допускается только в
+отдельных случаях при распространении без извлечения прибыли, и только если Вы
+получили объектный код с таким предложением в соответствии с пунктом 6b.
+d) Передавая объектный код посредством предоставления доступа к нему по
+определенному адресу (бесплатно или за дополнительную плату), и предлагая
+эквивалентный доступ к Полному исходному тексту таким же способом по тому же
+адресу без какой-либо дополнительной оплаты. От Вас не требуется принуждать
+получателей копировать Полный исходный текст вместе с объектным кодом. Если
+объектный код размещен на сетевом сервере, Полный исходный текст может
+находиться на другом сервере (управляемом Вами или третьим лицом), который
+предоставляет аналогичную возможность копирования; при этом Вы должны четко
+указать рядом с объектным кодом способ получения Полного исходного текста.
+Независимо от того, на каком сервере расположен Полный исходный текст, Вы
+обязаны убедиться в том, что он будет распространяться в течение времени,
+необходимого для соблюдения этих требований.
+e) Передавая объектный код с использованием одноранговой (пиринговой) сети, при
+условии информирования других пользователей сети о том, где можно бесплатно
+получить объектный код и Полный исходный текст произведения способом, описанным
+в пункте 6d.
+Не нужно включать в передаваемый объектный код его отделимые части, исходные
+тексты которых не входят в состав Полного исходного текста, такие как Системные
+библиотеки.
+"Потребительский товар" это либо (1) "товар, предназначенный для личных нужд",
+под которым понимается любое материальное личное имущество, которое обычно
+используется для личных, семейных или домашних целей, или (2) что-либо
+спроектированное или продающееся для использования в жилище. При определении
+того, предназначен ли товар для личных нужд, сомнения должны толковаться в
+пользу положительного ответа на этот вопрос. Применительно к конкретному товару,
+используемому конкретным пользователем, под выражением "обычно используется"
+имеется в виду способ, которым данный вид товаров преимущественно или как
+правило используется, независимо от статуса конкретного пользователя или
+способа, которым конкретный пользователь использует, предполагает или будет
+использовать товар. Товар относится к предназначенным для личных нужд независимо
+от того, насколько часто он используется в коммерческой деятельности,
+промышленности или иной сфере, не относящейся к личным нуждам, за исключением
+случая, когда использование в этой сфере представляет собой единственный
+основной способ использования такого товара.
+"Информация, необходимая для установки" Потребительского товара -- любые методы,
+процедуры, сведения, необходимые для авторизации, или другая информация,
+необходимая для установки и запуска в Потребительском товаре измененных версий
+Лицензионного произведения, полученных при изменении Полного исходного текста.
+Данная информация должна быть достаточной для того, чтобы обеспечить возможность
+внесения в исходный текст изменений, не приводящих к ограничению или нарушению
+его дальнейшей работоспособности.
+Если вместе с Потребительским товаром или специально для использования в нем Вы
+передаете произведение в виде объектного кода на условиях, описанных в данном
+разделе, и такая передача является частью сделки, по которой право владения и
+пользования Потребительским товаром переходит к получателю пожизненно или на
+определенный срок (независимо от признаков сделки), Полный исходный текст,
+передаваемый согласно данному разделу, должен сопровождаться Информацией,
+необходимой для установки. Но это требование не применяется, если ни Вы, ни
+какое-либо третье лицо не сохраняет за собой возможности установки измененного
+объектного кода на Потребительский товар (например, произведение было
+установлено в постоянную память).
+Требование о предоставлении Информации, необходимой для установки, не включает в
+себя требование продолжения оказания услуг по поддержке, предоставления гарантии
+или обновлений для произведения, которое было изменено или установлено
+получателем, либо для Потребительского товара, в котором оно было изменено или
+на который оно было установлено. В доступе к сети может быть отказано, если само
+внесение изменений существенно и негативно влияет на работу сети, нарушает
+правила обмена данными или не поддерживает протоколы для обмена данными по сети.
+Передаваемый в соответствии с данным разделом Полный исходный текст и
+предоставленная Информация, необходимая для установки, должны быть записаны в
+формате, который имеет общедоступное описание (и общедоступную реализацию,
+опубликованную в форме исходного текста) и не должны требовать никаких
+специальных паролей или ключей для распаковки, чтения или копирования.
+7. Дополнительные условия
+"Дополнительными разрешениями" называются условия, которые дополняют условия
+настоящей Лицензии, делая исключения из одного или нескольких ее положений.
+Дополнительные разрешения, которые применимы ко всей Программе, должны
+рассматриваться как часть настоящей Лицензии, в той степени, в которой они
+соответствуют действующему законодательству. Если дополнительные разрешения
+применяются только к части Программы, эта часть может быть использована отдельно
+на измененных условиях, но вся Программа продолжает использоваться на условиях
+настоящей Лицензии без учета дополнительных разрешений.
+Когда Вы передаете копию Лицензионного произведения, Вы можете по своему
+усмотрению исключить любые дополнительные разрешения, примененные к этой копии
+или к любой ее части. (Для дополнительных разрешений может быть заявлено
+требование об их удалении в определенных случаях, когда Вы вносите изменения в
+произведение.) Вы можете добавлять дополнительные разрешения к добавленным Вами
+в Лицензионное произведение материалам, на которые Вы обладаете авторскими
+правами или правом выдачи соответствующего разрешения.
+Независимо от любых других положений настоящей Лицензии, Вы можете дополнить
+следующими условиями положения настоящей Лицензии в отношении материала,
+добавленного к Лицензионному произведению (если это разрешено обладателями
+авторских прав на материал):
+a) отказом от гарантий или ограничением ответственности, отличающимися от тех,
+что описаны в разделах 15 и 16 настоящей Лицензии; либо
+b) требованием сохранения соответствующей информации о правах или об авторстве
+материала, или включения ее в Информацию об авторском праве, отображаемую
+содержащим его произведением; либо
+c) запретом на искажение информации об источнике происхождения материала или
+требованием того, чтобы измененные версии такого материала содержали корректную
+отметку об отличиях от исходной версии; либо
+d) ограничением использования в целях рекламы имен лицензиаров или авторов
+материала; либо
+e) отказом от предоставления прав на использование в качестве товарных знаков
+некоторых торговых наименований, товарных знаков или знаков обслуживания; либо
+f) требованием от каждого, кто по договору передает материал (или его измененные
+версии), предоставления компенсации лицензиарам и авторам материала в виде
+принятия на себя любой ответственности, которую этот договор налагает на
+лицензиаров и авторов.
+Все остальные ограничительные дополнительные условия считаются "дополнительными
+запретами" по смыслу раздела 10. Если программа, которую Вы получили, или любая
+ее часть содержит уведомление о том, что наряду с настоящей Лицензией ее
+использование регулируется условием, относящимся к дополнительным запретам, Вы
+можете удалить такое условие. Если лицензия содержит дополнительный запрет, но
+допускает лицензирование на измененных условиях или передачу в соответствии с
+настоящей Лицензией, Вы можете добавить к Лицензионному произведению материал,
+используемый на условиях такой лицензии, в том случае, если дополнительный
+запрет не сохраняется при таком изменении условий лицензии или передаче.
+Если Вы добавляете условия для использования Лицензионного произведения в
+соответствии с настоящим разделом, Вы должны поместить в соответствующих файлах
+исходного текста уведомление о том, что к этим файлам применяются дополнительные
+условия, или указание на то, как ознакомиться с соответствующими условиями.
+Дополнительные разрешающие или ограничивающие условия могут быть сформулированы
+в виде отдельной лицензии или зафиксированы как исключения; вышеуказанные
+требования применяются в любом случае.
+8. Прекращение действия
+Вы не можете распространять Лицензионное произведение или вносить в него
+изменения на условиях, отличающихся от явно оговоренных в настоящей Лицензии.
+Любая попытка распространения или внесения изменений на иных условиях является
+ничтожной и автоматически прекращает Ваши права, полученные по настоящей
+Лицензии (включая лицензию на любые патенты, предоставленные согласно третьему
+пункту раздела 11).
+Тем не менее если Вы прекращаете нарушение настоящей Лицензии, Ваши права,
+полученные от конкретного правообладателя, восстанавливаются (а) временно, до
+тех пор пока правообладатель явно и окончательно не прекратит действие Ваших
+прав, и (б) навсегда, если правообладатель не уведомит Вас о нарушении с помощью
+надлежащих средств в течение 60 дней после прекращения нарушений.
+Кроме того, Ваши права, полученные от конкретного правообладателя,
+восстанавливаются навсегда, если правообладатель впервые любым подходящим
+способом уведомляет Вас о нарушении настоящей Лицензии на свое произведение (для
+любого произведения) и Вы устраняете нарушение в течение 30 дней после получения
+уведомления.
+Прекращение Ваших прав, описанное в настоящем разделе, не прекращает действие
+лицензий лиц, которые получили от Вас копии произведения или права,
+предоставляемые настоящей Лицензией. Если Ваши права были прекращены навсегда и
+не восстановлены, Вы не можете вновь получить право на тот же материал на
+условиях, описанных в разделе 10.
+9. Акцепт не требуется для получения копий
+Вы не обязаны принимать условия настоящей Лицензии для того, чтобы получить или
+запустить копию Программы. Случайное распространение Лицензионного произведения,
+происходящее вследствие использования одноранговой (пиринговой) сети для
+получения его копии, также не требует принятия этих условий. Тем не менее только
+настоящая Лицензия дает Вам право распространять или изменять любое Лицензионное
+произведение. Если Вы не приняли условия настоящей Лицензии, такие действия
+будут нарушением авторского права. Поэтому изменяя или распространяя
+Лицензионное произведение, Вы выражаете согласие с условиями настоящей Лицензии.
+10. Автоматическое получение прав последующими получателями
+Каждый раз, когда Вы передаете Лицензионное произведение, получатель
+автоматически получает от его лицензиара право запускать, изменять и
+распространять это произведение при условии соблюдения настоящей Лицензии. Вы не
+несете ответственности за соблюдение третьими лицами условий настоящей Лицензии.
+"Реорганизацией" называются действия, в результате которых передается управление
+организацией или значительная часть ее активов, а также происходит разделение
+или слияние организаций. Если распространение Лицензионного произведения
+является результатом реорганизации, каждая из сторон сделки, получающая копию
+произведения, также получает все права на произведение, которые предшествующее
+юридическое лицо имело или могло предоставить согласно предыдущему абзацу, а
+также право на владение Полным исходным текстом произведения от предшественника,
+осуществляемое в его интересах, если предшественник владеет им или может
+получить его при разумных усилиях.
+Вы не можете налагать каких-либо дополнительных ограничений на осуществление
+прав, предоставленных или подтвержденных в соответствии с настоящей Лицензией.
+Например, Вы не можете ставить осуществление прав, предоставленных по настоящей
+Лицензии, в зависимость от оплаты отчислений, роялти или других сборов; также Вы
+не можете инициировать судебный процесс (включая встречный иск или заявление
+встречного требования в судебном процессе) о нарушении любых патентных прав при
+создании, использовании, продаже, предложении продажи, импорте Программы или
+любой ее части.
+11. Патенты
+"Инвестором" называется правообладатель, разрешающий использование Программы
+либо произведения, на котором основана Программа, на условиях настоящей
+Лицензии. Произведение, лицензированное таким образом, называется "версией со
+вкладом" инвестора.
+"Неотъемлемые патентные претензии" инвестора -- все патентные права,
+принадлежащие инвестору или контролируемые им в настоящее время либо
+приобретенные в будущем, которые могут быть нарушены созданием, использованием
+или продажей версии со вкладом, допускаемыми настоящей Лицензией; они не
+включают в себя права, которые будут нарушены исключительно вследствие будущих
+изменений версии со вкладом. Для целей данного определения под "контролем"
+понимается право выдавать патентные сублицензии способами, не нарушающими
+требований настоящей Лицензии.
+Каждый инвестор предоставляет Вам неисключительную безвозмездную лицензию на
+патент, действующую во всем мире, соответствующую неотъемлемым патентным
+претензиям инвестора, на создание, использование, продажу, предложение для
+продажи, импорт, а также запуск, внесение изменений и распространение всего, что
+входит в состав версии со вкладом.
+В следующих трех абзацах "лицензией на патент" называется любое явно выраженное
+вовне согласие или обязательство не применять патент (например, выдача
+разрешения на использование запатентованного объекта или обещание не подавать в
+суд за нарушение патента). "Выдать" кому-то такую лицензию на патент означает
+заключить такое соглашение или обязаться не применять патент против него.
+Если Вы передаете Лицензионное произведение, сознательно основываясь на лицензии
+на патент, в то время как Полный исходный текст произведения невозможно
+бесплатно скопировать с общедоступного сервера или другим не вызывающим
+затруднений способом, Вы должны либо (1) обеспечить возможность такого доступа к
+Полному исходному тексту, либо (2) отказаться от прав, предоставленных по
+лицензии на патент для данного произведения, либо (3) принять меры по передаче
+лицензии на патент последующим получателям произведения, в соответствии с
+требованиями настоящей Лицензии. "Сознательно основываясь" означает, что Вы
+знаете, что при отсутствии лицензии на патент передача Вами Лицензионного
+произведения в определенной стране или использование получателем переданного ему
+Вами Лицензионного произведения в этой стране нарушит один или несколько
+определенных патентов этой страны, срок действия которых не истек.
+Если в соответствии или в связи с единичной сделкой либо соглашением Вы
+передаете или делаете заказ на распространение Лицензионного произведения, и
+предоставляете определенным лицам, получающим Лицензионное произведение,
+лицензию на патент, разрешающую им использовать, распространять, вносить
+изменения или передавать конкретные экземпляры Лицензионного произведения,
+права, которые Вы предоставляете по лицензии на патент, автоматически переходят
+ко всем получателям Лицензионного произведения и произведений, созданных на его
+основе.
+Патентная лицензия называется "дискриминирующей", если она не покрывает,
+запрещает осуществление или содержит в качестве условия отказ от применения
+одного или нескольких прав, предоставленных настоящей Лицензией. Вы не можете
+передавать Лицензионное произведение, если Вы являетесь участником договора с
+третьим лицом, осуществляющим распространение программного обеспечения, в
+соответствии с которым Вы делаете в пользу третьего лица выплаты, размер которых
+зависит от масштабов Вашей деятельности по передаче произведения, и в
+соответствии с которым любое третье лицо, получающее от Вас Лицензионное
+произведение, делает это на условиях дискриминирующей патентной лицензии (а)
+которая зависит от количества копий Лицензионного произведения, переданных Вами
+(или копий, сделанных с этих копий), или (b) которая используется
+преимущественно в конкретных товарах или подборках, содержащих Лицензионное
+произведение, или в связи с ними, в том случае, если Вы заключили данный договор
+или получили лицензию на патент после 28 марта 2007 года.
+Ничто в настоящей Лицензии не должно толковаться как исключение или ограничение
+любого предполагаемого права или других способов противодействия нарушениям,
+которые во всем остальном могут быть доступны для Вас в соответствии с
+применимым патентным правом.
+12. Запрет отказывать в свободе другим
+Если на Вас наложены обязанности (будь то по решению суда, договору или иным
+способом), которые противоречат условиям настоящей Лицензии, это не освобождает
+Вас от соблюдения ее условий. Если Вы не можете передать Лицензионное
+произведение так, чтобы одновременно выполнять Ваши обязательства по настоящей
+Лицензии и любые другие относящиеся к делу обязательства, то Вы не можете
+передавать его вообще. Например, если Вы согласны с условием, обязывающими Вас
+производить сбор отчислений за дальнейшую передачу от тех, кому Вы передаете
+Программу, то для того, чтобы соблюсти это условие и выполнить требования
+настоящей Лицензии, Вы должны полностью воздержаться от передачи Программы.
+13. Удаленное сетевое взаимодействие; Применение совместно с
+Генеральной публичной лицензией GNU
+Независимо от любых других положений настоящей Лицензии, при изменении программы
+Ваша модифицированная версия должна в явной форме предложить всем пользователям,
+взаимодействующим с ней удаленно через компьютерную сеть (если Ваша версия
+поддерживает такое взаимодействие), возможность получить Полный исходный текст
+Вашей версии путем предоставляя доступа к нему с сетевого сервера без взимания
+платы, посредством стандартных или традиционных способов, используемых для
+копирования программного обеспечения. Этот Полный исходный текст должен включать
+в себя Полный исходный текст для любого произведения, распространяемого на
+условиях редакции 3 Генеральной публичной лицензии GNU, условия которой
+применяются в соответствии со следующим абзацем.
+Независимо от любых других положений настоящей Лицензии, Вам разрешается
+связывать или соединять любое Лицензионное произведение в единое составное
+произведение с произведением, лицензированным на условиях редакции 3 Генеральной
+публичной лицензии GNU, а также передавать получившееся произведение. Условия
+настоящей Лицензии продолжают применяться к той его части, которая является
+Лицензионным произведением, но использование того произведения, с которым оно
+объединено, будет по-прежнему регулироваться редакцией 3 Генеральной публичной
+лицензии GNU.
+14. Пересмотренные редакции настоящей Лицензии
+Фонд свободного программного обеспечения время от времени может публиковать
+пересмотренные и (или) новые редакции Генеральной публичной лицензии GNU Affero.
+Они будут аналогичны по смыслу настоящей редакции, но могут отличаться от нее в
+деталях, направленных на решение новых проблем или регулирование новых
+отношений.
+Каждой редакции присваивается собственный номер. Если для Программы указано, что
+к ней применима определенная редакция Генеральной публичной лицензии GNU Affero
+"или любая более поздняя редакция", у Вас есть возможность использовать термины
+и условия, содержащиеся в редакции с указанным номером или любой более поздней
+редакции, опубликованной Фондом свободного программного обеспечения. Если для
+Программы не указан номер редакции Генеральной публичной лицензии GNU Affero, Вы
+можете выбрать любую редакцию, опубликованную Фондом свободного программного
+обеспечения.
+Если Вы получили Программу, содержащую указание на то, что доверенное лицо
+правообладателя может выбирать, какую из будущих версий Генеральной публичной
+лицензии GNU Affero использовать, то публичное заявление этого лица о принятии
+любой версии позволяет Вам выбрать эту версию для применения ее условий к
+Программе.
+Более поздние редакции Лицензии могут дать Вам дополнительные или принципиально
+иные права. Тем не менее в результате Вашего выбора более поздней редакции на
+автора или правообладателя не возлагается никаких дополнительных обязанностей.
+15. Отказ от гарантий
+НА ПРОГРАММУ НЕ ПРЕДОСТАВЛЯЕТСЯ НИКАКИХ ГАРАНТИЙ ЗА ИСКЛЮЧЕНИЕМ ПРЕДУСМОТРЕННЫХ
+ДЕЙСТВУЮЩИМ ЗАКОНОДАТЕЛЬСТВОМ. ЕСЛИ ИНОЕ НЕ УКАЗАНО В ПИСЬМЕННОЙ ФОРМЕ,
+ПРАВООБЛАДАТЕЛИ И (ИЛИ) ТРЕТЬИ ЛИЦА ПРЕДОСТАВЛЯЮТ ПРОГРАММУ "КАК ЕСТЬ", БЕЗ
+КАКИХ-ЛИБО ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ, ВКЛЮЧАЯ ГАРАНТИИ ПРИГОДНОСТИ ДЛЯ
+КОНКРЕТНЫХ ЦЕЛЕЙ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ. ВЕСЬ РИСК, СВЯЗАННЫЙ С КАЧЕСТВОМ И
+ПРОИЗВОДИТЕЛЬНОСТЬЮ ПРОГРАММЫ, ВОЗЛАГАЕТСЯ НА ВАС. ЕСЛИ В ПРОГРАММЕ БУДУТ
+ВЫЯВЛЕНЫ НЕДОСТАТКИ, ВЫ ПРИНИМАЕТЕ НА СЕБЯ СТОИМОСТЬ ВСЕГО НЕОБХОДИМОГО
+ОБСЛУЖИВАНИЯ, РЕМОНТА ИЛИ ИСПРАВЛЕНИЯ.
+16. Ограничение ответственности
+ЕСЛИ ИНОЕ НЕ ПРЕДУСМОТРЕНО ДЕЙСТВУЮЩИМ ЗАКОНОДАТЕЛЬСТВОМ ИЛИ СОГЛАШЕНИЕМ СТОРОН,
+ЗАКЛЮЧЕННЫМ В ПИСЬМЕННОЙ ФОРМЕ, ПРАВООБЛАДАТЕЛЬ ИЛИ ИНОЕ ЛИЦО, КОТОРОЕ ВНОСИТ
+ИЗМЕНЕНИЯ В ПРОГРАММУ И (ИЛИ) ПЕРЕДАЕТ ЕЕ НА УСЛОВИЯХ, СФОРМУЛИРОВАННЫХ ВЫШЕ, НЕ
+МОЖЕТ НЕСТИ ОТВЕТСТВЕННОСТЬ ПЕРЕД ВАМИ ЗА ПРИЧИНЕННЫЙ УЩЕРБ, ВКЛЮЧАЯ УЩЕРБ
+ОБЩЕГО ЛИБО КОНКРЕТНОГО ХАРАКТЕРА, ПРИЧИНЕННЫЙ СЛУЧАЙНО ИЛИ ЯВЛЯЮЩИЙСЯ
+СЛЕДСТВИЕМ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ ЛИБО НЕВОЗМОЖНОСТИ ЕЕ ИСПОЛЬЗОВАНИЯ (В ТОМ
+ЧИСЛЕ ЗА УНИЧТОЖЕНИЕ ИЛИ МОДИФИКАЦИЮ ИНФОРМАЦИИ, ЛИБО УБЫТКИ, ПОНЕСЕННЫЕ ВАМИ
+ИЛИ ТРЕТЬИМИ ЛИЦАМИ, ЛИБО СБОИ ПРОГРАММЫ ПРИ ВЗАИМОДЕЙСТВИИ С ДРУГИМ ПРОГРАММНЫМ
+ОБЕСПЕЧЕНИЕМ), В ТОМ ЧИСЛЕ И В СЛУЧАЯХ, КОГДА ПРАВООБЛАДАТЕЛЬ ИЛИ ТРЕТЬЕ ЛИЦО
+ПРЕДУПРЕЖДЕНЫ О ВОЗМОЖНОСТИ ПРИЧИНЕНИЯ ТАКИХ УБЫТКОВ.
+17. Толкование разделов 15 и 16
+Если отказ от гарантии и ограничение ответственности, представленные выше, по
+закону не могут быть применены в соответствии с их условиями, суды,
+рассматривающие спор, должны применить действующий закон, который в наибольшей
+степени предусматривает абсолютный отказ от всей гражданской ответственности в
+связи с Программой, за исключением случаев, когда гарантия или принятие на себя
+ответственности за копию программы предоставляется за плату.
+КОНЕЦ ОПРЕДЕЛЕНИЙ И УСЛОВИЙ
+Порядок применения условий Лицензии к Вашим программам
+Если Вы разрабатываете новую программу и хотите, чтобы ее использование принесло
+максимальную пользу обществу, наилучший способ достичь этого -- сделать ее
+свободной, чтобы все могли распространять и изменять ее на условиях настоящей
+Лицензии.
+Для этого сделайте так, чтобы программа содержала в себе описанные ниже
+уведомления. Самым надежным способом это сделать является включение их в начало
+каждого файла исходного текста, чтобы наиболее эффективным образом сообщить об
+отсутствии гарантий; каждый файл должен иметь по меньшей мере одну строку с
+оповещением об авторских правах и указанием на то, где находится полный текст
+уведомлений.
+<Строка с названием Программы и информацией о ее назначении.> Copyright © <год
+выпуска программы в свет> <имя автора>
+Эта программа является свободным программным обеспечением: Вы можете
+распространять ее и (или) изменять, соблюдая условия Генеральной публичной
+лицензии GNU Affero, опубликованной Фондом свободного программного обеспечения;
+либо редакции 3 Лицензии, либо (на Ваше усмотрение) любой редакции, выпущенной
+позже.
+Эта программа распространяется в расчете на то, что она окажется полезной, но
+БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, включая подразумеваемую гарантию КАЧЕСТВА либо
+ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ.
+Ознакомьтесь с Генеральной публичной лицензией GNU Affero для получения более
+подробной информации.
+Вы должны были получить копию Генеральной публичной лицензии GNU Affero вместе с
+этой программой. Если Вы ее не получили, то перейдите по адресу:
+<http://www.gnu.org/licenses/>.
+Также добавьте информацию о том, как связаться с Вами посредством электронной
+или обычной почты.
+Если Ваша программа может взаимодействовать с пользователями удаленно через
+компьютерную сеть, Вы также должны убедиться, что обеспечили ее пользователям
+возможность получить ее исходные тексты. Например, если Ваша программа является
+веб-приложением, ее интерфейс может отображать ссылку "Источник", которая
+указывает на архив с текстом. Существует много способов, которыми Вы можете
+распространять исходные тексты, для разных программ подходят разные решения;
+ознакомьтесь с разделом 13 для того, чтобы узнать конкретные требования.
+Вы также должны получить от своего работодателя (если Вы работаете
+программистом) или, при необходимости, учебного заведения, письменный отказ от
+исключительных прав на Программу, если это необходимо. Для получения
+дополнительной информации об этом, а также о применении и соблюдении условий GNU
+AGPL, см <http://www.gnu.org/licenses/>. 

+ 4 - 0
models/__init__.py

@@ -0,0 +1,4 @@
+from tickets.models.attachment import Attachment
+from tickets.models.comment import Comment
+from tickets.models.ticket_list import TicketList
+from tickets.models.ticket import Ticket

+ 33 - 0
models/attachment.py

@@ -0,0 +1,33 @@
+import os
+
+from django.db import models
+from django.conf import settings
+
+from tickets.models.ticket import Ticket
+
+
+def get_attachment_upload_dir(instance, filename):
+    """Determine upload dir for ticket attachment files."""
+
+    return "/".join(["attachments", str(instance.ticket.id), filename])
+
+
+class Attachment(models.Model):
+    """
+    Defines a generic file attachment for use in M2M relation with ticket.
+    """
+
+    ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE)
+    added_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
+    timestamp = models.DateTimeField(auto_now_add=True)
+    file = models.FileField(upload_to=get_attachment_upload_dir, max_length=255)
+
+    def filename(self):
+        return os.path.basename(self.file.name)
+
+    def extension(self):
+        name, extension = os.path.splitext(self.file.name)
+        return extension
+
+    def __str__(self):
+        return f"{self.ticket.id} - {self.file.name}"

+ 37 - 0
models/comment.py

@@ -0,0 +1,37 @@
+from django.db import models
+from django.conf import settings
+
+from tickets.models.ticket import Ticket
+
+
+class Comment(models.Model):
+    author = models.ForeignKey(
+        settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, null=True,
+        related_name="tickets_comments"
+    )
+    ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE)
+    date = models.DateTimeField(auto_now_add=True)
+    email_from = models.CharField(max_length=320, blank=True, null=True)
+    email_message_id = models.CharField(max_length=255, blank=True, null=True)
+
+    body = models.TextField(blank=True)
+
+    class Meta:
+        unique_together = ("ticket", "email_message_id")
+
+    @property
+    def author_text(self):
+        if self.author is not None:
+            return str(self.author)
+
+        assert self.email_message_id is not None
+        return str(self.email_from)
+
+    @property
+    def snippet(self):
+        body_snippet = textwrap.shorten(self.body, width=35, placeholder="...")
+        # Define here rather than in __str__ so we can use it in the admin list_display
+        return "{author} - {snippet}...".format(author=self.author_text, snippet=body_snippet)
+
+    def __str__(self):
+        return self.snippet

+ 72 - 0
models/ticket.py

@@ -0,0 +1,72 @@
+from django.db import models
+from django.conf import settings
+from django.urls import reverse
+from django.core.exceptions import ValidationError
+
+from tickets.models.ticket_list import TicketList
+
+
+class Ticket(models.Model):
+    TICKET_TYPES = (
+        (
+            "111-121-149-159,110-121-149-159,121-131-149-159,131-141-149,141-151-110,149-151-110,159,151",
+            "ST_REQUEST"
+        ),
+        (
+            "210-211-251,211-212-220-238-249,212-221-229-238-249,221-222-238-249,220-211-238-249,229-211-251,222-231-238-249,231-241-238-249,238-231-239-211-212-221-220-222-249,239-231-239-211-212-221-220-222-249,241-251,249-251,251",
+            "SERVICE_REQUEST"
+        ),
+        (
+            "320-321-359,321,359",
+            "ACCESS_REQUEST"
+        ),
+        (
+            "420-421-459,421,459",
+            "NEG_REQUEST"
+        )
+    )
+    
+    title = models.CharField(max_length=128)
+    ticket_list = models.ForeignKey(TicketList, on_delete=models.CASCADE)
+    ticket_type = models.CharField(max_length=1024, choices=TICKET_TYPES)
+    status = models.PositiveSmallIntegerField(null=True)
+    created_at = models.DateTimeField(auto_now_add=True, editable=False)
+    updated_at = models.DateTimeField(auto_now=True)
+    due_date = models.DateField()
+    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, related_name="created_by", editable=False)
+    assigned_to = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, blank=True, related_name="assigned_to")
+    note = models.TextField(blank=True, null=True)
+    priority = models.PositiveSmallIntegerField(default=0)
+
+    def __str__(self):
+        return self.title
+
+    def _get_statuses(self) -> list:
+        ticket_life_cycle = self.ticket_type
+        ticket_life_cycle = ticket_life_cycle.split(",")
+        return [part.split("-") for part in ticket_life_cycle]
+
+    def get_available_statuses(self) -> list:
+        for status_scenario in self._get_statuses():
+            if int(status_scenario[0]) == self.status:
+                return status_scenario[1:] if len(status_scenario) > 1 else None
+
+    def set_next_successful_status(self):
+        available_statuses = self.get_available_statuses()
+        if available_statuses:
+            self.status = available_statuses[0]
+            self.save()
+        else:
+            raise ObjectDoesNotExist("Ticket closed")
+
+    def save(self, *args, **kwargs):
+        if not self.status:
+            self.status = self._get_statuses()[0][0]
+        
+        super(Ticket, self).save(*args, **kwargs)
+
+    def get_absolute_url(self):
+        return reverse("tickets:ticket_detail", kwargs={"ticket_id": self.id})
+
+    class Meta:
+        ordering = ["-priority", "created_at"]

+ 14 - 0
models/ticket_list.py

@@ -0,0 +1,14 @@
+from django.contrib.auth.models import Group
+from django.db import models
+
+
+class TicketList(models.Model):
+    name = models.CharField(max_length=128)
+    group = models.ForeignKey(Group, on_delete=models.CASCADE)
+
+    def __str__(self):
+        return self.name
+
+    class Meta:
+        ordering = ["group__name", "name"]
+        unique_together = ("group", "name")

+ 6 - 0
requirements.txt

@@ -0,0 +1,6 @@
+Django
+sqlparse
+bleach
+six
+webencodings
+html2text

+ 7955 - 0
static/tickets/assets/fontawesome/css/all.css

@@ -0,0 +1,7955 @@
+/*!
+ * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2023 Fonticons, Inc.
+ */
+.fa {
+  font-family: var(--fa-style-family, "Font Awesome 6 Free");
+  font-weight: var(--fa-style, 900); }
+
+.fa,
+.fa-classic,
+.fa-sharp,
+.fas,
+.fa-solid,
+.far,
+.fa-regular,
+.fab,
+.fa-brands {
+  -moz-osx-font-smoothing: grayscale;
+  -webkit-font-smoothing: antialiased;
+  display: var(--fa-display, inline-block);
+  font-style: normal;
+  font-variant: normal;
+  line-height: 1;
+  text-rendering: auto; }
+
+.fas,
+.fa-classic,
+.fa-solid,
+.far,
+.fa-regular {
+  font-family: 'Font Awesome 6 Free'; }
+
+.fab,
+.fa-brands {
+  font-family: 'Font Awesome 6 Brands'; }
+
+.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-2xs {
+  font-size: 0.625em;
+  line-height: 0.1em;
+  vertical-align: 0.225em; }
+
+.fa-xs {
+  font-size: 0.75em;
+  line-height: 0.08333em;
+  vertical-align: 0.125em; }
+
+.fa-sm {
+  font-size: 0.875em;
+  line-height: 0.07143em;
+  vertical-align: 0.05357em; }
+
+.fa-lg {
+  font-size: 1.25em;
+  line-height: 0.05em;
+  vertical-align: -0.075em; }
+
+.fa-xl {
+  font-size: 1.5em;
+  line-height: 0.04167em;
+  vertical-align: -0.125em; }
+
+.fa-2xl {
+  font-size: 2em;
+  line-height: 0.03125em;
+  vertical-align: -0.1875em; }
+
+.fa-fw {
+  text-align: center;
+  width: 1.25em; }
+
+.fa-ul {
+  list-style-type: none;
+  margin-left: var(--fa-li-margin, 2.5em);
+  padding-left: 0; }
+  .fa-ul > li {
+    position: relative; }
+
+.fa-li {
+  left: calc(var(--fa-li-width, 2em) * -1);
+  position: absolute;
+  text-align: center;
+  width: var(--fa-li-width, 2em);
+  line-height: inherit; }
+
+.fa-border {
+  border-color: var(--fa-border-color, #eee);
+  border-radius: var(--fa-border-radius, 0.1em);
+  border-style: var(--fa-border-style, solid);
+  border-width: var(--fa-border-width, 0.08em);
+  padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); }
+
+.fa-pull-left {
+  float: left;
+  margin-right: var(--fa-pull-margin, 0.3em); }
+
+.fa-pull-right {
+  float: right;
+  margin-left: var(--fa-pull-margin, 0.3em); }
+
+.fa-beat {
+  -webkit-animation-name: fa-beat;
+          animation-name: fa-beat;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
+          animation-timing-function: var(--fa-animation-timing, ease-in-out); }
+
+.fa-bounce {
+  -webkit-animation-name: fa-bounce;
+          animation-name: fa-bounce;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));
+          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); }
+
+.fa-fade {
+  -webkit-animation-name: fa-fade;
+          animation-name: fa-fade;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
+          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
+
+.fa-beat-fade {
+  -webkit-animation-name: fa-beat-fade;
+          animation-name: fa-beat-fade;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
+          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
+
+.fa-flip {
+  -webkit-animation-name: fa-flip;
+          animation-name: fa-flip;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
+          animation-timing-function: var(--fa-animation-timing, ease-in-out); }
+
+.fa-shake {
+  -webkit-animation-name: fa-shake;
+          animation-name: fa-shake;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, linear);
+          animation-timing-function: var(--fa-animation-timing, linear); }
+
+.fa-spin {
+  -webkit-animation-name: fa-spin;
+          animation-name: fa-spin;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 2s);
+          animation-duration: var(--fa-animation-duration, 2s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, linear);
+          animation-timing-function: var(--fa-animation-timing, linear); }
+
+.fa-spin-reverse {
+  --fa-animation-direction: reverse; }
+
+.fa-pulse,
+.fa-spin-pulse {
+  -webkit-animation-name: fa-spin;
+          animation-name: fa-spin;
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, steps(8));
+          animation-timing-function: var(--fa-animation-timing, steps(8)); }
+
+@media (prefers-reduced-motion: reduce) {
+  .fa-beat,
+  .fa-bounce,
+  .fa-fade,
+  .fa-beat-fade,
+  .fa-flip,
+  .fa-pulse,
+  .fa-shake,
+  .fa-spin,
+  .fa-spin-pulse {
+    -webkit-animation-delay: -1ms;
+            animation-delay: -1ms;
+    -webkit-animation-duration: 1ms;
+            animation-duration: 1ms;
+    -webkit-animation-iteration-count: 1;
+            animation-iteration-count: 1;
+    -webkit-transition-delay: 0s;
+            transition-delay: 0s;
+    -webkit-transition-duration: 0s;
+            transition-duration: 0s; } }
+
+@-webkit-keyframes fa-beat {
+  0%, 90% {
+    -webkit-transform: scale(1);
+            transform: scale(1); }
+  45% {
+    -webkit-transform: scale(var(--fa-beat-scale, 1.25));
+            transform: scale(var(--fa-beat-scale, 1.25)); } }
+
+@keyframes fa-beat {
+  0%, 90% {
+    -webkit-transform: scale(1);
+            transform: scale(1); }
+  45% {
+    -webkit-transform: scale(var(--fa-beat-scale, 1.25));
+            transform: scale(var(--fa-beat-scale, 1.25)); } }
+
+@-webkit-keyframes fa-bounce {
+  0% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); }
+  10% {
+    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
+            transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
+  30% {
+    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
+            transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
+  50% {
+    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
+            transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
+  57% {
+    -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
+            transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
+  64% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); }
+  100% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); } }
+
+@keyframes fa-bounce {
+  0% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); }
+  10% {
+    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
+            transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
+  30% {
+    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
+            transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
+  50% {
+    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
+            transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
+  57% {
+    -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
+            transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
+  64% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); }
+  100% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); } }
+
+@-webkit-keyframes fa-fade {
+  50% {
+    opacity: var(--fa-fade-opacity, 0.4); } }
+
+@keyframes fa-fade {
+  50% {
+    opacity: var(--fa-fade-opacity, 0.4); } }
+
+@-webkit-keyframes fa-beat-fade {
+  0%, 100% {
+    opacity: var(--fa-beat-fade-opacity, 0.4);
+    -webkit-transform: scale(1);
+            transform: scale(1); }
+  50% {
+    opacity: 1;
+    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
+            transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
+
+@keyframes fa-beat-fade {
+  0%, 100% {
+    opacity: var(--fa-beat-fade-opacity, 0.4);
+    -webkit-transform: scale(1);
+            transform: scale(1); }
+  50% {
+    opacity: 1;
+    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
+            transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
+
+@-webkit-keyframes fa-flip {
+  50% {
+    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
+            transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
+
+@keyframes fa-flip {
+  50% {
+    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
+            transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
+
+@-webkit-keyframes fa-shake {
+  0% {
+    -webkit-transform: rotate(-15deg);
+            transform: rotate(-15deg); }
+  4% {
+    -webkit-transform: rotate(15deg);
+            transform: rotate(15deg); }
+  8%, 24% {
+    -webkit-transform: rotate(-18deg);
+            transform: rotate(-18deg); }
+  12%, 28% {
+    -webkit-transform: rotate(18deg);
+            transform: rotate(18deg); }
+  16% {
+    -webkit-transform: rotate(-22deg);
+            transform: rotate(-22deg); }
+  20% {
+    -webkit-transform: rotate(22deg);
+            transform: rotate(22deg); }
+  32% {
+    -webkit-transform: rotate(-12deg);
+            transform: rotate(-12deg); }
+  36% {
+    -webkit-transform: rotate(12deg);
+            transform: rotate(12deg); }
+  40%, 100% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg); } }
+
+@keyframes fa-shake {
+  0% {
+    -webkit-transform: rotate(-15deg);
+            transform: rotate(-15deg); }
+  4% {
+    -webkit-transform: rotate(15deg);
+            transform: rotate(15deg); }
+  8%, 24% {
+    -webkit-transform: rotate(-18deg);
+            transform: rotate(-18deg); }
+  12%, 28% {
+    -webkit-transform: rotate(18deg);
+            transform: rotate(18deg); }
+  16% {
+    -webkit-transform: rotate(-22deg);
+            transform: rotate(-22deg); }
+  20% {
+    -webkit-transform: rotate(22deg);
+            transform: rotate(22deg); }
+  32% {
+    -webkit-transform: rotate(-12deg);
+            transform: rotate(-12deg); }
+  36% {
+    -webkit-transform: rotate(12deg);
+            transform: rotate(12deg); }
+  40%, 100% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg); } }
+
+@-webkit-keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg); }
+  100% {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg); } }
+
+@keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg); }
+  100% {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg); } }
+
+.fa-rotate-90 {
+  -webkit-transform: rotate(90deg);
+          transform: rotate(90deg); }
+
+.fa-rotate-180 {
+  -webkit-transform: rotate(180deg);
+          transform: rotate(180deg); }
+
+.fa-rotate-270 {
+  -webkit-transform: rotate(270deg);
+          transform: rotate(270deg); }
+
+.fa-flip-horizontal {
+  -webkit-transform: scale(-1, 1);
+          transform: scale(-1, 1); }
+
+.fa-flip-vertical {
+  -webkit-transform: scale(1, -1);
+          transform: scale(1, -1); }
+
+.fa-flip-both,
+.fa-flip-horizontal.fa-flip-vertical {
+  -webkit-transform: scale(-1, -1);
+          transform: scale(-1, -1); }
+
+.fa-rotate-by {
+  -webkit-transform: rotate(var(--fa-rotate-angle, none));
+          transform: rotate(var(--fa-rotate-angle, 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%;
+  z-index: var(--fa-stack-z-index, auto); }
+
+.fa-stack-1x {
+  line-height: inherit; }
+
+.fa-stack-2x {
+  font-size: 2em; }
+
+.fa-inverse {
+  color: var(--fa-inverse, #fff); }
+
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+readers do not read off random characters that represent icons */
+
+.fa-0::before {
+  content: "\30"; }
+
+.fa-1::before {
+  content: "\31"; }
+
+.fa-2::before {
+  content: "\32"; }
+
+.fa-3::before {
+  content: "\33"; }
+
+.fa-4::before {
+  content: "\34"; }
+
+.fa-5::before {
+  content: "\35"; }
+
+.fa-6::before {
+  content: "\36"; }
+
+.fa-7::before {
+  content: "\37"; }
+
+.fa-8::before {
+  content: "\38"; }
+
+.fa-9::before {
+  content: "\39"; }
+
+.fa-fill-drip::before {
+  content: "\f576"; }
+
+.fa-arrows-to-circle::before {
+  content: "\e4bd"; }
+
+.fa-circle-chevron-right::before {
+  content: "\f138"; }
+
+.fa-chevron-circle-right::before {
+  content: "\f138"; }
+
+.fa-at::before {
+  content: "\40"; }
+
+.fa-trash-can::before {
+  content: "\f2ed"; }
+
+.fa-trash-alt::before {
+  content: "\f2ed"; }
+
+.fa-text-height::before {
+  content: "\f034"; }
+
+.fa-user-xmark::before {
+  content: "\f235"; }
+
+.fa-user-times::before {
+  content: "\f235"; }
+
+.fa-stethoscope::before {
+  content: "\f0f1"; }
+
+.fa-message::before {
+  content: "\f27a"; }
+
+.fa-comment-alt::before {
+  content: "\f27a"; }
+
+.fa-info::before {
+  content: "\f129"; }
+
+.fa-down-left-and-up-right-to-center::before {
+  content: "\f422"; }
+
+.fa-compress-alt::before {
+  content: "\f422"; }
+
+.fa-explosion::before {
+  content: "\e4e9"; }
+
+.fa-file-lines::before {
+  content: "\f15c"; }
+
+.fa-file-alt::before {
+  content: "\f15c"; }
+
+.fa-file-text::before {
+  content: "\f15c"; }
+
+.fa-wave-square::before {
+  content: "\f83e"; }
+
+.fa-ring::before {
+  content: "\f70b"; }
+
+.fa-building-un::before {
+  content: "\e4d9"; }
+
+.fa-dice-three::before {
+  content: "\f527"; }
+
+.fa-calendar-days::before {
+  content: "\f073"; }
+
+.fa-calendar-alt::before {
+  content: "\f073"; }
+
+.fa-anchor-circle-check::before {
+  content: "\e4aa"; }
+
+.fa-building-circle-arrow-right::before {
+  content: "\e4d1"; }
+
+.fa-volleyball::before {
+  content: "\f45f"; }
+
+.fa-volleyball-ball::before {
+  content: "\f45f"; }
+
+.fa-arrows-up-to-line::before {
+  content: "\e4c2"; }
+
+.fa-sort-down::before {
+  content: "\f0dd"; }
+
+.fa-sort-desc::before {
+  content: "\f0dd"; }
+
+.fa-circle-minus::before {
+  content: "\f056"; }
+
+.fa-minus-circle::before {
+  content: "\f056"; }
+
+.fa-door-open::before {
+  content: "\f52b"; }
+
+.fa-right-from-bracket::before {
+  content: "\f2f5"; }
+
+.fa-sign-out-alt::before {
+  content: "\f2f5"; }
+
+.fa-atom::before {
+  content: "\f5d2"; }
+
+.fa-soap::before {
+  content: "\e06e"; }
+
+.fa-icons::before {
+  content: "\f86d"; }
+
+.fa-heart-music-camera-bolt::before {
+  content: "\f86d"; }
+
+.fa-microphone-lines-slash::before {
+  content: "\f539"; }
+
+.fa-microphone-alt-slash::before {
+  content: "\f539"; }
+
+.fa-bridge-circle-check::before {
+  content: "\e4c9"; }
+
+.fa-pump-medical::before {
+  content: "\e06a"; }
+
+.fa-fingerprint::before {
+  content: "\f577"; }
+
+.fa-hand-point-right::before {
+  content: "\f0a4"; }
+
+.fa-magnifying-glass-location::before {
+  content: "\f689"; }
+
+.fa-search-location::before {
+  content: "\f689"; }
+
+.fa-forward-step::before {
+  content: "\f051"; }
+
+.fa-step-forward::before {
+  content: "\f051"; }
+
+.fa-face-smile-beam::before {
+  content: "\f5b8"; }
+
+.fa-smile-beam::before {
+  content: "\f5b8"; }
+
+.fa-flag-checkered::before {
+  content: "\f11e"; }
+
+.fa-football::before {
+  content: "\f44e"; }
+
+.fa-football-ball::before {
+  content: "\f44e"; }
+
+.fa-school-circle-exclamation::before {
+  content: "\e56c"; }
+
+.fa-crop::before {
+  content: "\f125"; }
+
+.fa-angles-down::before {
+  content: "\f103"; }
+
+.fa-angle-double-down::before {
+  content: "\f103"; }
+
+.fa-users-rectangle::before {
+  content: "\e594"; }
+
+.fa-people-roof::before {
+  content: "\e537"; }
+
+.fa-people-line::before {
+  content: "\e534"; }
+
+.fa-beer-mug-empty::before {
+  content: "\f0fc"; }
+
+.fa-beer::before {
+  content: "\f0fc"; }
+
+.fa-diagram-predecessor::before {
+  content: "\e477"; }
+
+.fa-arrow-up-long::before {
+  content: "\f176"; }
+
+.fa-long-arrow-up::before {
+  content: "\f176"; }
+
+.fa-fire-flame-simple::before {
+  content: "\f46a"; }
+
+.fa-burn::before {
+  content: "\f46a"; }
+
+.fa-person::before {
+  content: "\f183"; }
+
+.fa-male::before {
+  content: "\f183"; }
+
+.fa-laptop::before {
+  content: "\f109"; }
+
+.fa-file-csv::before {
+  content: "\f6dd"; }
+
+.fa-menorah::before {
+  content: "\f676"; }
+
+.fa-truck-plane::before {
+  content: "\e58f"; }
+
+.fa-record-vinyl::before {
+  content: "\f8d9"; }
+
+.fa-face-grin-stars::before {
+  content: "\f587"; }
+
+.fa-grin-stars::before {
+  content: "\f587"; }
+
+.fa-bong::before {
+  content: "\f55c"; }
+
+.fa-spaghetti-monster-flying::before {
+  content: "\f67b"; }
+
+.fa-pastafarianism::before {
+  content: "\f67b"; }
+
+.fa-arrow-down-up-across-line::before {
+  content: "\e4af"; }
+
+.fa-spoon::before {
+  content: "\f2e5"; }
+
+.fa-utensil-spoon::before {
+  content: "\f2e5"; }
+
+.fa-jar-wheat::before {
+  content: "\e517"; }
+
+.fa-envelopes-bulk::before {
+  content: "\f674"; }
+
+.fa-mail-bulk::before {
+  content: "\f674"; }
+
+.fa-file-circle-exclamation::before {
+  content: "\e4eb"; }
+
+.fa-circle-h::before {
+  content: "\f47e"; }
+
+.fa-hospital-symbol::before {
+  content: "\f47e"; }
+
+.fa-pager::before {
+  content: "\f815"; }
+
+.fa-address-book::before {
+  content: "\f2b9"; }
+
+.fa-contact-book::before {
+  content: "\f2b9"; }
+
+.fa-strikethrough::before {
+  content: "\f0cc"; }
+
+.fa-k::before {
+  content: "\4b"; }
+
+.fa-landmark-flag::before {
+  content: "\e51c"; }
+
+.fa-pencil::before {
+  content: "\f303"; }
+
+.fa-pencil-alt::before {
+  content: "\f303"; }
+
+.fa-backward::before {
+  content: "\f04a"; }
+
+.fa-caret-right::before {
+  content: "\f0da"; }
+
+.fa-comments::before {
+  content: "\f086"; }
+
+.fa-paste::before {
+  content: "\f0ea"; }
+
+.fa-file-clipboard::before {
+  content: "\f0ea"; }
+
+.fa-code-pull-request::before {
+  content: "\e13c"; }
+
+.fa-clipboard-list::before {
+  content: "\f46d"; }
+
+.fa-truck-ramp-box::before {
+  content: "\f4de"; }
+
+.fa-truck-loading::before {
+  content: "\f4de"; }
+
+.fa-user-check::before {
+  content: "\f4fc"; }
+
+.fa-vial-virus::before {
+  content: "\e597"; }
+
+.fa-sheet-plastic::before {
+  content: "\e571"; }
+
+.fa-blog::before {
+  content: "\f781"; }
+
+.fa-user-ninja::before {
+  content: "\f504"; }
+
+.fa-person-arrow-up-from-line::before {
+  content: "\e539"; }
+
+.fa-scroll-torah::before {
+  content: "\f6a0"; }
+
+.fa-torah::before {
+  content: "\f6a0"; }
+
+.fa-broom-ball::before {
+  content: "\f458"; }
+
+.fa-quidditch::before {
+  content: "\f458"; }
+
+.fa-quidditch-broom-ball::before {
+  content: "\f458"; }
+
+.fa-toggle-off::before {
+  content: "\f204"; }
+
+.fa-box-archive::before {
+  content: "\f187"; }
+
+.fa-archive::before {
+  content: "\f187"; }
+
+.fa-person-drowning::before {
+  content: "\e545"; }
+
+.fa-arrow-down-9-1::before {
+  content: "\f886"; }
+
+.fa-sort-numeric-desc::before {
+  content: "\f886"; }
+
+.fa-sort-numeric-down-alt::before {
+  content: "\f886"; }
+
+.fa-face-grin-tongue-squint::before {
+  content: "\f58a"; }
+
+.fa-grin-tongue-squint::before {
+  content: "\f58a"; }
+
+.fa-spray-can::before {
+  content: "\f5bd"; }
+
+.fa-truck-monster::before {
+  content: "\f63b"; }
+
+.fa-w::before {
+  content: "\57"; }
+
+.fa-earth-africa::before {
+  content: "\f57c"; }
+
+.fa-globe-africa::before {
+  content: "\f57c"; }
+
+.fa-rainbow::before {
+  content: "\f75b"; }
+
+.fa-circle-notch::before {
+  content: "\f1ce"; }
+
+.fa-tablet-screen-button::before {
+  content: "\f3fa"; }
+
+.fa-tablet-alt::before {
+  content: "\f3fa"; }
+
+.fa-paw::before {
+  content: "\f1b0"; }
+
+.fa-cloud::before {
+  content: "\f0c2"; }
+
+.fa-trowel-bricks::before {
+  content: "\e58a"; }
+
+.fa-face-flushed::before {
+  content: "\f579"; }
+
+.fa-flushed::before {
+  content: "\f579"; }
+
+.fa-hospital-user::before {
+  content: "\f80d"; }
+
+.fa-tent-arrow-left-right::before {
+  content: "\e57f"; }
+
+.fa-gavel::before {
+  content: "\f0e3"; }
+
+.fa-legal::before {
+  content: "\f0e3"; }
+
+.fa-binoculars::before {
+  content: "\f1e5"; }
+
+.fa-microphone-slash::before {
+  content: "\f131"; }
+
+.fa-box-tissue::before {
+  content: "\e05b"; }
+
+.fa-motorcycle::before {
+  content: "\f21c"; }
+
+.fa-bell-concierge::before {
+  content: "\f562"; }
+
+.fa-concierge-bell::before {
+  content: "\f562"; }
+
+.fa-pen-ruler::before {
+  content: "\f5ae"; }
+
+.fa-pencil-ruler::before {
+  content: "\f5ae"; }
+
+.fa-people-arrows::before {
+  content: "\e068"; }
+
+.fa-people-arrows-left-right::before {
+  content: "\e068"; }
+
+.fa-mars-and-venus-burst::before {
+  content: "\e523"; }
+
+.fa-square-caret-right::before {
+  content: "\f152"; }
+
+.fa-caret-square-right::before {
+  content: "\f152"; }
+
+.fa-scissors::before {
+  content: "\f0c4"; }
+
+.fa-cut::before {
+  content: "\f0c4"; }
+
+.fa-sun-plant-wilt::before {
+  content: "\e57a"; }
+
+.fa-toilets-portable::before {
+  content: "\e584"; }
+
+.fa-hockey-puck::before {
+  content: "\f453"; }
+
+.fa-table::before {
+  content: "\f0ce"; }
+
+.fa-magnifying-glass-arrow-right::before {
+  content: "\e521"; }
+
+.fa-tachograph-digital::before {
+  content: "\f566"; }
+
+.fa-digital-tachograph::before {
+  content: "\f566"; }
+
+.fa-users-slash::before {
+  content: "\e073"; }
+
+.fa-clover::before {
+  content: "\e139"; }
+
+.fa-reply::before {
+  content: "\f3e5"; }
+
+.fa-mail-reply::before {
+  content: "\f3e5"; }
+
+.fa-star-and-crescent::before {
+  content: "\f699"; }
+
+.fa-house-fire::before {
+  content: "\e50c"; }
+
+.fa-square-minus::before {
+  content: "\f146"; }
+
+.fa-minus-square::before {
+  content: "\f146"; }
+
+.fa-helicopter::before {
+  content: "\f533"; }
+
+.fa-compass::before {
+  content: "\f14e"; }
+
+.fa-square-caret-down::before {
+  content: "\f150"; }
+
+.fa-caret-square-down::before {
+  content: "\f150"; }
+
+.fa-file-circle-question::before {
+  content: "\e4ef"; }
+
+.fa-laptop-code::before {
+  content: "\f5fc"; }
+
+.fa-swatchbook::before {
+  content: "\f5c3"; }
+
+.fa-prescription-bottle::before {
+  content: "\f485"; }
+
+.fa-bars::before {
+  content: "\f0c9"; }
+
+.fa-navicon::before {
+  content: "\f0c9"; }
+
+.fa-people-group::before {
+  content: "\e533"; }
+
+.fa-hourglass-end::before {
+  content: "\f253"; }
+
+.fa-hourglass-3::before {
+  content: "\f253"; }
+
+.fa-heart-crack::before {
+  content: "\f7a9"; }
+
+.fa-heart-broken::before {
+  content: "\f7a9"; }
+
+.fa-square-up-right::before {
+  content: "\f360"; }
+
+.fa-external-link-square-alt::before {
+  content: "\f360"; }
+
+.fa-face-kiss-beam::before {
+  content: "\f597"; }
+
+.fa-kiss-beam::before {
+  content: "\f597"; }
+
+.fa-film::before {
+  content: "\f008"; }
+
+.fa-ruler-horizontal::before {
+  content: "\f547"; }
+
+.fa-people-robbery::before {
+  content: "\e536"; }
+
+.fa-lightbulb::before {
+  content: "\f0eb"; }
+
+.fa-caret-left::before {
+  content: "\f0d9"; }
+
+.fa-circle-exclamation::before {
+  content: "\f06a"; }
+
+.fa-exclamation-circle::before {
+  content: "\f06a"; }
+
+.fa-school-circle-xmark::before {
+  content: "\e56d"; }
+
+.fa-arrow-right-from-bracket::before {
+  content: "\f08b"; }
+
+.fa-sign-out::before {
+  content: "\f08b"; }
+
+.fa-circle-chevron-down::before {
+  content: "\f13a"; }
+
+.fa-chevron-circle-down::before {
+  content: "\f13a"; }
+
+.fa-unlock-keyhole::before {
+  content: "\f13e"; }
+
+.fa-unlock-alt::before {
+  content: "\f13e"; }
+
+.fa-cloud-showers-heavy::before {
+  content: "\f740"; }
+
+.fa-headphones-simple::before {
+  content: "\f58f"; }
+
+.fa-headphones-alt::before {
+  content: "\f58f"; }
+
+.fa-sitemap::before {
+  content: "\f0e8"; }
+
+.fa-circle-dollar-to-slot::before {
+  content: "\f4b9"; }
+
+.fa-donate::before {
+  content: "\f4b9"; }
+
+.fa-memory::before {
+  content: "\f538"; }
+
+.fa-road-spikes::before {
+  content: "\e568"; }
+
+.fa-fire-burner::before {
+  content: "\e4f1"; }
+
+.fa-flag::before {
+  content: "\f024"; }
+
+.fa-hanukiah::before {
+  content: "\f6e6"; }
+
+.fa-feather::before {
+  content: "\f52d"; }
+
+.fa-volume-low::before {
+  content: "\f027"; }
+
+.fa-volume-down::before {
+  content: "\f027"; }
+
+.fa-comment-slash::before {
+  content: "\f4b3"; }
+
+.fa-cloud-sun-rain::before {
+  content: "\f743"; }
+
+.fa-compress::before {
+  content: "\f066"; }
+
+.fa-wheat-awn::before {
+  content: "\e2cd"; }
+
+.fa-wheat-alt::before {
+  content: "\e2cd"; }
+
+.fa-ankh::before {
+  content: "\f644"; }
+
+.fa-hands-holding-child::before {
+  content: "\e4fa"; }
+
+.fa-asterisk::before {
+  content: "\2a"; }
+
+.fa-square-check::before {
+  content: "\f14a"; }
+
+.fa-check-square::before {
+  content: "\f14a"; }
+
+.fa-peseta-sign::before {
+  content: "\e221"; }
+
+.fa-heading::before {
+  content: "\f1dc"; }
+
+.fa-header::before {
+  content: "\f1dc"; }
+
+.fa-ghost::before {
+  content: "\f6e2"; }
+
+.fa-list::before {
+  content: "\f03a"; }
+
+.fa-list-squares::before {
+  content: "\f03a"; }
+
+.fa-square-phone-flip::before {
+  content: "\f87b"; }
+
+.fa-phone-square-alt::before {
+  content: "\f87b"; }
+
+.fa-cart-plus::before {
+  content: "\f217"; }
+
+.fa-gamepad::before {
+  content: "\f11b"; }
+
+.fa-circle-dot::before {
+  content: "\f192"; }
+
+.fa-dot-circle::before {
+  content: "\f192"; }
+
+.fa-face-dizzy::before {
+  content: "\f567"; }
+
+.fa-dizzy::before {
+  content: "\f567"; }
+
+.fa-egg::before {
+  content: "\f7fb"; }
+
+.fa-house-medical-circle-xmark::before {
+  content: "\e513"; }
+
+.fa-campground::before {
+  content: "\f6bb"; }
+
+.fa-folder-plus::before {
+  content: "\f65e"; }
+
+.fa-futbol::before {
+  content: "\f1e3"; }
+
+.fa-futbol-ball::before {
+  content: "\f1e3"; }
+
+.fa-soccer-ball::before {
+  content: "\f1e3"; }
+
+.fa-paintbrush::before {
+  content: "\f1fc"; }
+
+.fa-paint-brush::before {
+  content: "\f1fc"; }
+
+.fa-lock::before {
+  content: "\f023"; }
+
+.fa-gas-pump::before {
+  content: "\f52f"; }
+
+.fa-hot-tub-person::before {
+  content: "\f593"; }
+
+.fa-hot-tub::before {
+  content: "\f593"; }
+
+.fa-map-location::before {
+  content: "\f59f"; }
+
+.fa-map-marked::before {
+  content: "\f59f"; }
+
+.fa-house-flood-water::before {
+  content: "\e50e"; }
+
+.fa-tree::before {
+  content: "\f1bb"; }
+
+.fa-bridge-lock::before {
+  content: "\e4cc"; }
+
+.fa-sack-dollar::before {
+  content: "\f81d"; }
+
+.fa-pen-to-square::before {
+  content: "\f044"; }
+
+.fa-edit::before {
+  content: "\f044"; }
+
+.fa-car-side::before {
+  content: "\f5e4"; }
+
+.fa-share-nodes::before {
+  content: "\f1e0"; }
+
+.fa-share-alt::before {
+  content: "\f1e0"; }
+
+.fa-heart-circle-minus::before {
+  content: "\e4ff"; }
+
+.fa-hourglass-half::before {
+  content: "\f252"; }
+
+.fa-hourglass-2::before {
+  content: "\f252"; }
+
+.fa-microscope::before {
+  content: "\f610"; }
+
+.fa-sink::before {
+  content: "\e06d"; }
+
+.fa-bag-shopping::before {
+  content: "\f290"; }
+
+.fa-shopping-bag::before {
+  content: "\f290"; }
+
+.fa-arrow-down-z-a::before {
+  content: "\f881"; }
+
+.fa-sort-alpha-desc::before {
+  content: "\f881"; }
+
+.fa-sort-alpha-down-alt::before {
+  content: "\f881"; }
+
+.fa-mitten::before {
+  content: "\f7b5"; }
+
+.fa-person-rays::before {
+  content: "\e54d"; }
+
+.fa-users::before {
+  content: "\f0c0"; }
+
+.fa-eye-slash::before {
+  content: "\f070"; }
+
+.fa-flask-vial::before {
+  content: "\e4f3"; }
+
+.fa-hand::before {
+  content: "\f256"; }
+
+.fa-hand-paper::before {
+  content: "\f256"; }
+
+.fa-om::before {
+  content: "\f679"; }
+
+.fa-worm::before {
+  content: "\e599"; }
+
+.fa-house-circle-xmark::before {
+  content: "\e50b"; }
+
+.fa-plug::before {
+  content: "\f1e6"; }
+
+.fa-chevron-up::before {
+  content: "\f077"; }
+
+.fa-hand-spock::before {
+  content: "\f259"; }
+
+.fa-stopwatch::before {
+  content: "\f2f2"; }
+
+.fa-face-kiss::before {
+  content: "\f596"; }
+
+.fa-kiss::before {
+  content: "\f596"; }
+
+.fa-bridge-circle-xmark::before {
+  content: "\e4cb"; }
+
+.fa-face-grin-tongue::before {
+  content: "\f589"; }
+
+.fa-grin-tongue::before {
+  content: "\f589"; }
+
+.fa-chess-bishop::before {
+  content: "\f43a"; }
+
+.fa-face-grin-wink::before {
+  content: "\f58c"; }
+
+.fa-grin-wink::before {
+  content: "\f58c"; }
+
+.fa-ear-deaf::before {
+  content: "\f2a4"; }
+
+.fa-deaf::before {
+  content: "\f2a4"; }
+
+.fa-deafness::before {
+  content: "\f2a4"; }
+
+.fa-hard-of-hearing::before {
+  content: "\f2a4"; }
+
+.fa-road-circle-check::before {
+  content: "\e564"; }
+
+.fa-dice-five::before {
+  content: "\f523"; }
+
+.fa-square-rss::before {
+  content: "\f143"; }
+
+.fa-rss-square::before {
+  content: "\f143"; }
+
+.fa-land-mine-on::before {
+  content: "\e51b"; }
+
+.fa-i-cursor::before {
+  content: "\f246"; }
+
+.fa-stamp::before {
+  content: "\f5bf"; }
+
+.fa-stairs::before {
+  content: "\e289"; }
+
+.fa-i::before {
+  content: "\49"; }
+
+.fa-hryvnia-sign::before {
+  content: "\f6f2"; }
+
+.fa-hryvnia::before {
+  content: "\f6f2"; }
+
+.fa-pills::before {
+  content: "\f484"; }
+
+.fa-face-grin-wide::before {
+  content: "\f581"; }
+
+.fa-grin-alt::before {
+  content: "\f581"; }
+
+.fa-tooth::before {
+  content: "\f5c9"; }
+
+.fa-v::before {
+  content: "\56"; }
+
+.fa-bangladeshi-taka-sign::before {
+  content: "\e2e6"; }
+
+.fa-bicycle::before {
+  content: "\f206"; }
+
+.fa-staff-snake::before {
+  content: "\e579"; }
+
+.fa-rod-asclepius::before {
+  content: "\e579"; }
+
+.fa-rod-snake::before {
+  content: "\e579"; }
+
+.fa-staff-aesculapius::before {
+  content: "\e579"; }
+
+.fa-head-side-cough-slash::before {
+  content: "\e062"; }
+
+.fa-truck-medical::before {
+  content: "\f0f9"; }
+
+.fa-ambulance::before {
+  content: "\f0f9"; }
+
+.fa-wheat-awn-circle-exclamation::before {
+  content: "\e598"; }
+
+.fa-snowman::before {
+  content: "\f7d0"; }
+
+.fa-mortar-pestle::before {
+  content: "\f5a7"; }
+
+.fa-road-barrier::before {
+  content: "\e562"; }
+
+.fa-school::before {
+  content: "\f549"; }
+
+.fa-igloo::before {
+  content: "\f7ae"; }
+
+.fa-joint::before {
+  content: "\f595"; }
+
+.fa-angle-right::before {
+  content: "\f105"; }
+
+.fa-horse::before {
+  content: "\f6f0"; }
+
+.fa-q::before {
+  content: "\51"; }
+
+.fa-g::before {
+  content: "\47"; }
+
+.fa-notes-medical::before {
+  content: "\f481"; }
+
+.fa-temperature-half::before {
+  content: "\f2c9"; }
+
+.fa-temperature-2::before {
+  content: "\f2c9"; }
+
+.fa-thermometer-2::before {
+  content: "\f2c9"; }
+
+.fa-thermometer-half::before {
+  content: "\f2c9"; }
+
+.fa-dong-sign::before {
+  content: "\e169"; }
+
+.fa-capsules::before {
+  content: "\f46b"; }
+
+.fa-poo-storm::before {
+  content: "\f75a"; }
+
+.fa-poo-bolt::before {
+  content: "\f75a"; }
+
+.fa-face-frown-open::before {
+  content: "\f57a"; }
+
+.fa-frown-open::before {
+  content: "\f57a"; }
+
+.fa-hand-point-up::before {
+  content: "\f0a6"; }
+
+.fa-money-bill::before {
+  content: "\f0d6"; }
+
+.fa-bookmark::before {
+  content: "\f02e"; }
+
+.fa-align-justify::before {
+  content: "\f039"; }
+
+.fa-umbrella-beach::before {
+  content: "\f5ca"; }
+
+.fa-helmet-un::before {
+  content: "\e503"; }
+
+.fa-bullseye::before {
+  content: "\f140"; }
+
+.fa-bacon::before {
+  content: "\f7e5"; }
+
+.fa-hand-point-down::before {
+  content: "\f0a7"; }
+
+.fa-arrow-up-from-bracket::before {
+  content: "\e09a"; }
+
+.fa-folder::before {
+  content: "\f07b"; }
+
+.fa-folder-blank::before {
+  content: "\f07b"; }
+
+.fa-file-waveform::before {
+  content: "\f478"; }
+
+.fa-file-medical-alt::before {
+  content: "\f478"; }
+
+.fa-radiation::before {
+  content: "\f7b9"; }
+
+.fa-chart-simple::before {
+  content: "\e473"; }
+
+.fa-mars-stroke::before {
+  content: "\f229"; }
+
+.fa-vial::before {
+  content: "\f492"; }
+
+.fa-gauge::before {
+  content: "\f624"; }
+
+.fa-dashboard::before {
+  content: "\f624"; }
+
+.fa-gauge-med::before {
+  content: "\f624"; }
+
+.fa-tachometer-alt-average::before {
+  content: "\f624"; }
+
+.fa-wand-magic-sparkles::before {
+  content: "\e2ca"; }
+
+.fa-magic-wand-sparkles::before {
+  content: "\e2ca"; }
+
+.fa-e::before {
+  content: "\45"; }
+
+.fa-pen-clip::before {
+  content: "\f305"; }
+
+.fa-pen-alt::before {
+  content: "\f305"; }
+
+.fa-bridge-circle-exclamation::before {
+  content: "\e4ca"; }
+
+.fa-user::before {
+  content: "\f007"; }
+
+.fa-school-circle-check::before {
+  content: "\e56b"; }
+
+.fa-dumpster::before {
+  content: "\f793"; }
+
+.fa-van-shuttle::before {
+  content: "\f5b6"; }
+
+.fa-shuttle-van::before {
+  content: "\f5b6"; }
+
+.fa-building-user::before {
+  content: "\e4da"; }
+
+.fa-square-caret-left::before {
+  content: "\f191"; }
+
+.fa-caret-square-left::before {
+  content: "\f191"; }
+
+.fa-highlighter::before {
+  content: "\f591"; }
+
+.fa-key::before {
+  content: "\f084"; }
+
+.fa-bullhorn::before {
+  content: "\f0a1"; }
+
+.fa-globe::before {
+  content: "\f0ac"; }
+
+.fa-synagogue::before {
+  content: "\f69b"; }
+
+.fa-person-half-dress::before {
+  content: "\e548"; }
+
+.fa-road-bridge::before {
+  content: "\e563"; }
+
+.fa-location-arrow::before {
+  content: "\f124"; }
+
+.fa-c::before {
+  content: "\43"; }
+
+.fa-tablet-button::before {
+  content: "\f10a"; }
+
+.fa-building-lock::before {
+  content: "\e4d6"; }
+
+.fa-pizza-slice::before {
+  content: "\f818"; }
+
+.fa-money-bill-wave::before {
+  content: "\f53a"; }
+
+.fa-chart-area::before {
+  content: "\f1fe"; }
+
+.fa-area-chart::before {
+  content: "\f1fe"; }
+
+.fa-house-flag::before {
+  content: "\e50d"; }
+
+.fa-person-circle-minus::before {
+  content: "\e540"; }
+
+.fa-ban::before {
+  content: "\f05e"; }
+
+.fa-cancel::before {
+  content: "\f05e"; }
+
+.fa-camera-rotate::before {
+  content: "\e0d8"; }
+
+.fa-spray-can-sparkles::before {
+  content: "\f5d0"; }
+
+.fa-air-freshener::before {
+  content: "\f5d0"; }
+
+.fa-star::before {
+  content: "\f005"; }
+
+.fa-repeat::before {
+  content: "\f363"; }
+
+.fa-cross::before {
+  content: "\f654"; }
+
+.fa-box::before {
+  content: "\f466"; }
+
+.fa-venus-mars::before {
+  content: "\f228"; }
+
+.fa-arrow-pointer::before {
+  content: "\f245"; }
+
+.fa-mouse-pointer::before {
+  content: "\f245"; }
+
+.fa-maximize::before {
+  content: "\f31e"; }
+
+.fa-expand-arrows-alt::before {
+  content: "\f31e"; }
+
+.fa-charging-station::before {
+  content: "\f5e7"; }
+
+.fa-shapes::before {
+  content: "\f61f"; }
+
+.fa-triangle-circle-square::before {
+  content: "\f61f"; }
+
+.fa-shuffle::before {
+  content: "\f074"; }
+
+.fa-random::before {
+  content: "\f074"; }
+
+.fa-person-running::before {
+  content: "\f70c"; }
+
+.fa-running::before {
+  content: "\f70c"; }
+
+.fa-mobile-retro::before {
+  content: "\e527"; }
+
+.fa-grip-lines-vertical::before {
+  content: "\f7a5"; }
+
+.fa-spider::before {
+  content: "\f717"; }
+
+.fa-hands-bound::before {
+  content: "\e4f9"; }
+
+.fa-file-invoice-dollar::before {
+  content: "\f571"; }
+
+.fa-plane-circle-exclamation::before {
+  content: "\e556"; }
+
+.fa-x-ray::before {
+  content: "\f497"; }
+
+.fa-spell-check::before {
+  content: "\f891"; }
+
+.fa-slash::before {
+  content: "\f715"; }
+
+.fa-computer-mouse::before {
+  content: "\f8cc"; }
+
+.fa-mouse::before {
+  content: "\f8cc"; }
+
+.fa-arrow-right-to-bracket::before {
+  content: "\f090"; }
+
+.fa-sign-in::before {
+  content: "\f090"; }
+
+.fa-shop-slash::before {
+  content: "\e070"; }
+
+.fa-store-alt-slash::before {
+  content: "\e070"; }
+
+.fa-server::before {
+  content: "\f233"; }
+
+.fa-virus-covid-slash::before {
+  content: "\e4a9"; }
+
+.fa-shop-lock::before {
+  content: "\e4a5"; }
+
+.fa-hourglass-start::before {
+  content: "\f251"; }
+
+.fa-hourglass-1::before {
+  content: "\f251"; }
+
+.fa-blender-phone::before {
+  content: "\f6b6"; }
+
+.fa-building-wheat::before {
+  content: "\e4db"; }
+
+.fa-person-breastfeeding::before {
+  content: "\e53a"; }
+
+.fa-right-to-bracket::before {
+  content: "\f2f6"; }
+
+.fa-sign-in-alt::before {
+  content: "\f2f6"; }
+
+.fa-venus::before {
+  content: "\f221"; }
+
+.fa-passport::before {
+  content: "\f5ab"; }
+
+.fa-heart-pulse::before {
+  content: "\f21e"; }
+
+.fa-heartbeat::before {
+  content: "\f21e"; }
+
+.fa-people-carry-box::before {
+  content: "\f4ce"; }
+
+.fa-people-carry::before {
+  content: "\f4ce"; }
+
+.fa-temperature-high::before {
+  content: "\f769"; }
+
+.fa-microchip::before {
+  content: "\f2db"; }
+
+.fa-crown::before {
+  content: "\f521"; }
+
+.fa-weight-hanging::before {
+  content: "\f5cd"; }
+
+.fa-xmarks-lines::before {
+  content: "\e59a"; }
+
+.fa-file-prescription::before {
+  content: "\f572"; }
+
+.fa-weight-scale::before {
+  content: "\f496"; }
+
+.fa-weight::before {
+  content: "\f496"; }
+
+.fa-user-group::before {
+  content: "\f500"; }
+
+.fa-user-friends::before {
+  content: "\f500"; }
+
+.fa-arrow-up-a-z::before {
+  content: "\f15e"; }
+
+.fa-sort-alpha-up::before {
+  content: "\f15e"; }
+
+.fa-chess-knight::before {
+  content: "\f441"; }
+
+.fa-face-laugh-squint::before {
+  content: "\f59b"; }
+
+.fa-laugh-squint::before {
+  content: "\f59b"; }
+
+.fa-wheelchair::before {
+  content: "\f193"; }
+
+.fa-circle-arrow-up::before {
+  content: "\f0aa"; }
+
+.fa-arrow-circle-up::before {
+  content: "\f0aa"; }
+
+.fa-toggle-on::before {
+  content: "\f205"; }
+
+.fa-person-walking::before {
+  content: "\f554"; }
+
+.fa-walking::before {
+  content: "\f554"; }
+
+.fa-l::before {
+  content: "\4c"; }
+
+.fa-fire::before {
+  content: "\f06d"; }
+
+.fa-bed-pulse::before {
+  content: "\f487"; }
+
+.fa-procedures::before {
+  content: "\f487"; }
+
+.fa-shuttle-space::before {
+  content: "\f197"; }
+
+.fa-space-shuttle::before {
+  content: "\f197"; }
+
+.fa-face-laugh::before {
+  content: "\f599"; }
+
+.fa-laugh::before {
+  content: "\f599"; }
+
+.fa-folder-open::before {
+  content: "\f07c"; }
+
+.fa-heart-circle-plus::before {
+  content: "\e500"; }
+
+.fa-code-fork::before {
+  content: "\e13b"; }
+
+.fa-city::before {
+  content: "\f64f"; }
+
+.fa-microphone-lines::before {
+  content: "\f3c9"; }
+
+.fa-microphone-alt::before {
+  content: "\f3c9"; }
+
+.fa-pepper-hot::before {
+  content: "\f816"; }
+
+.fa-unlock::before {
+  content: "\f09c"; }
+
+.fa-colon-sign::before {
+  content: "\e140"; }
+
+.fa-headset::before {
+  content: "\f590"; }
+
+.fa-store-slash::before {
+  content: "\e071"; }
+
+.fa-road-circle-xmark::before {
+  content: "\e566"; }
+
+.fa-user-minus::before {
+  content: "\f503"; }
+
+.fa-mars-stroke-up::before {
+  content: "\f22a"; }
+
+.fa-mars-stroke-v::before {
+  content: "\f22a"; }
+
+.fa-champagne-glasses::before {
+  content: "\f79f"; }
+
+.fa-glass-cheers::before {
+  content: "\f79f"; }
+
+.fa-clipboard::before {
+  content: "\f328"; }
+
+.fa-house-circle-exclamation::before {
+  content: "\e50a"; }
+
+.fa-file-arrow-up::before {
+  content: "\f574"; }
+
+.fa-file-upload::before {
+  content: "\f574"; }
+
+.fa-wifi::before {
+  content: "\f1eb"; }
+
+.fa-wifi-3::before {
+  content: "\f1eb"; }
+
+.fa-wifi-strong::before {
+  content: "\f1eb"; }
+
+.fa-bath::before {
+  content: "\f2cd"; }
+
+.fa-bathtub::before {
+  content: "\f2cd"; }
+
+.fa-underline::before {
+  content: "\f0cd"; }
+
+.fa-user-pen::before {
+  content: "\f4ff"; }
+
+.fa-user-edit::before {
+  content: "\f4ff"; }
+
+.fa-signature::before {
+  content: "\f5b7"; }
+
+.fa-stroopwafel::before {
+  content: "\f551"; }
+
+.fa-bold::before {
+  content: "\f032"; }
+
+.fa-anchor-lock::before {
+  content: "\e4ad"; }
+
+.fa-building-ngo::before {
+  content: "\e4d7"; }
+
+.fa-manat-sign::before {
+  content: "\e1d5"; }
+
+.fa-not-equal::before {
+  content: "\f53e"; }
+
+.fa-border-top-left::before {
+  content: "\f853"; }
+
+.fa-border-style::before {
+  content: "\f853"; }
+
+.fa-map-location-dot::before {
+  content: "\f5a0"; }
+
+.fa-map-marked-alt::before {
+  content: "\f5a0"; }
+
+.fa-jedi::before {
+  content: "\f669"; }
+
+.fa-square-poll-vertical::before {
+  content: "\f681"; }
+
+.fa-poll::before {
+  content: "\f681"; }
+
+.fa-mug-hot::before {
+  content: "\f7b6"; }
+
+.fa-car-battery::before {
+  content: "\f5df"; }
+
+.fa-battery-car::before {
+  content: "\f5df"; }
+
+.fa-gift::before {
+  content: "\f06b"; }
+
+.fa-dice-two::before {
+  content: "\f528"; }
+
+.fa-chess-queen::before {
+  content: "\f445"; }
+
+.fa-glasses::before {
+  content: "\f530"; }
+
+.fa-chess-board::before {
+  content: "\f43c"; }
+
+.fa-building-circle-check::before {
+  content: "\e4d2"; }
+
+.fa-person-chalkboard::before {
+  content: "\e53d"; }
+
+.fa-mars-stroke-right::before {
+  content: "\f22b"; }
+
+.fa-mars-stroke-h::before {
+  content: "\f22b"; }
+
+.fa-hand-back-fist::before {
+  content: "\f255"; }
+
+.fa-hand-rock::before {
+  content: "\f255"; }
+
+.fa-square-caret-up::before {
+  content: "\f151"; }
+
+.fa-caret-square-up::before {
+  content: "\f151"; }
+
+.fa-cloud-showers-water::before {
+  content: "\e4e4"; }
+
+.fa-chart-bar::before {
+  content: "\f080"; }
+
+.fa-bar-chart::before {
+  content: "\f080"; }
+
+.fa-hands-bubbles::before {
+  content: "\e05e"; }
+
+.fa-hands-wash::before {
+  content: "\e05e"; }
+
+.fa-less-than-equal::before {
+  content: "\f537"; }
+
+.fa-train::before {
+  content: "\f238"; }
+
+.fa-eye-low-vision::before {
+  content: "\f2a8"; }
+
+.fa-low-vision::before {
+  content: "\f2a8"; }
+
+.fa-crow::before {
+  content: "\f520"; }
+
+.fa-sailboat::before {
+  content: "\e445"; }
+
+.fa-window-restore::before {
+  content: "\f2d2"; }
+
+.fa-square-plus::before {
+  content: "\f0fe"; }
+
+.fa-plus-square::before {
+  content: "\f0fe"; }
+
+.fa-torii-gate::before {
+  content: "\f6a1"; }
+
+.fa-frog::before {
+  content: "\f52e"; }
+
+.fa-bucket::before {
+  content: "\e4cf"; }
+
+.fa-image::before {
+  content: "\f03e"; }
+
+.fa-microphone::before {
+  content: "\f130"; }
+
+.fa-cow::before {
+  content: "\f6c8"; }
+
+.fa-caret-up::before {
+  content: "\f0d8"; }
+
+.fa-screwdriver::before {
+  content: "\f54a"; }
+
+.fa-folder-closed::before {
+  content: "\e185"; }
+
+.fa-house-tsunami::before {
+  content: "\e515"; }
+
+.fa-square-nfi::before {
+  content: "\e576"; }
+
+.fa-arrow-up-from-ground-water::before {
+  content: "\e4b5"; }
+
+.fa-martini-glass::before {
+  content: "\f57b"; }
+
+.fa-glass-martini-alt::before {
+  content: "\f57b"; }
+
+.fa-rotate-left::before {
+  content: "\f2ea"; }
+
+.fa-rotate-back::before {
+  content: "\f2ea"; }
+
+.fa-rotate-backward::before {
+  content: "\f2ea"; }
+
+.fa-undo-alt::before {
+  content: "\f2ea"; }
+
+.fa-table-columns::before {
+  content: "\f0db"; }
+
+.fa-columns::before {
+  content: "\f0db"; }
+
+.fa-lemon::before {
+  content: "\f094"; }
+
+.fa-head-side-mask::before {
+  content: "\e063"; }
+
+.fa-handshake::before {
+  content: "\f2b5"; }
+
+.fa-gem::before {
+  content: "\f3a5"; }
+
+.fa-dolly::before {
+  content: "\f472"; }
+
+.fa-dolly-box::before {
+  content: "\f472"; }
+
+.fa-smoking::before {
+  content: "\f48d"; }
+
+.fa-minimize::before {
+  content: "\f78c"; }
+
+.fa-compress-arrows-alt::before {
+  content: "\f78c"; }
+
+.fa-monument::before {
+  content: "\f5a6"; }
+
+.fa-snowplow::before {
+  content: "\f7d2"; }
+
+.fa-angles-right::before {
+  content: "\f101"; }
+
+.fa-angle-double-right::before {
+  content: "\f101"; }
+
+.fa-cannabis::before {
+  content: "\f55f"; }
+
+.fa-circle-play::before {
+  content: "\f144"; }
+
+.fa-play-circle::before {
+  content: "\f144"; }
+
+.fa-tablets::before {
+  content: "\f490"; }
+
+.fa-ethernet::before {
+  content: "\f796"; }
+
+.fa-euro-sign::before {
+  content: "\f153"; }
+
+.fa-eur::before {
+  content: "\f153"; }
+
+.fa-euro::before {
+  content: "\f153"; }
+
+.fa-chair::before {
+  content: "\f6c0"; }
+
+.fa-circle-check::before {
+  content: "\f058"; }
+
+.fa-check-circle::before {
+  content: "\f058"; }
+
+.fa-circle-stop::before {
+  content: "\f28d"; }
+
+.fa-stop-circle::before {
+  content: "\f28d"; }
+
+.fa-compass-drafting::before {
+  content: "\f568"; }
+
+.fa-drafting-compass::before {
+  content: "\f568"; }
+
+.fa-plate-wheat::before {
+  content: "\e55a"; }
+
+.fa-icicles::before {
+  content: "\f7ad"; }
+
+.fa-person-shelter::before {
+  content: "\e54f"; }
+
+.fa-neuter::before {
+  content: "\f22c"; }
+
+.fa-id-badge::before {
+  content: "\f2c1"; }
+
+.fa-marker::before {
+  content: "\f5a1"; }
+
+.fa-face-laugh-beam::before {
+  content: "\f59a"; }
+
+.fa-laugh-beam::before {
+  content: "\f59a"; }
+
+.fa-helicopter-symbol::before {
+  content: "\e502"; }
+
+.fa-universal-access::before {
+  content: "\f29a"; }
+
+.fa-circle-chevron-up::before {
+  content: "\f139"; }
+
+.fa-chevron-circle-up::before {
+  content: "\f139"; }
+
+.fa-lari-sign::before {
+  content: "\e1c8"; }
+
+.fa-volcano::before {
+  content: "\f770"; }
+
+.fa-person-walking-dashed-line-arrow-right::before {
+  content: "\e553"; }
+
+.fa-sterling-sign::before {
+  content: "\f154"; }
+
+.fa-gbp::before {
+  content: "\f154"; }
+
+.fa-pound-sign::before {
+  content: "\f154"; }
+
+.fa-viruses::before {
+  content: "\e076"; }
+
+.fa-square-person-confined::before {
+  content: "\e577"; }
+
+.fa-user-tie::before {
+  content: "\f508"; }
+
+.fa-arrow-down-long::before {
+  content: "\f175"; }
+
+.fa-long-arrow-down::before {
+  content: "\f175"; }
+
+.fa-tent-arrow-down-to-line::before {
+  content: "\e57e"; }
+
+.fa-certificate::before {
+  content: "\f0a3"; }
+
+.fa-reply-all::before {
+  content: "\f122"; }
+
+.fa-mail-reply-all::before {
+  content: "\f122"; }
+
+.fa-suitcase::before {
+  content: "\f0f2"; }
+
+.fa-person-skating::before {
+  content: "\f7c5"; }
+
+.fa-skating::before {
+  content: "\f7c5"; }
+
+.fa-filter-circle-dollar::before {
+  content: "\f662"; }
+
+.fa-funnel-dollar::before {
+  content: "\f662"; }
+
+.fa-camera-retro::before {
+  content: "\f083"; }
+
+.fa-circle-arrow-down::before {
+  content: "\f0ab"; }
+
+.fa-arrow-circle-down::before {
+  content: "\f0ab"; }
+
+.fa-file-import::before {
+  content: "\f56f"; }
+
+.fa-arrow-right-to-file::before {
+  content: "\f56f"; }
+
+.fa-square-arrow-up-right::before {
+  content: "\f14c"; }
+
+.fa-external-link-square::before {
+  content: "\f14c"; }
+
+.fa-box-open::before {
+  content: "\f49e"; }
+
+.fa-scroll::before {
+  content: "\f70e"; }
+
+.fa-spa::before {
+  content: "\f5bb"; }
+
+.fa-location-pin-lock::before {
+  content: "\e51f"; }
+
+.fa-pause::before {
+  content: "\f04c"; }
+
+.fa-hill-avalanche::before {
+  content: "\e507"; }
+
+.fa-temperature-empty::before {
+  content: "\f2cb"; }
+
+.fa-temperature-0::before {
+  content: "\f2cb"; }
+
+.fa-thermometer-0::before {
+  content: "\f2cb"; }
+
+.fa-thermometer-empty::before {
+  content: "\f2cb"; }
+
+.fa-bomb::before {
+  content: "\f1e2"; }
+
+.fa-registered::before {
+  content: "\f25d"; }
+
+.fa-address-card::before {
+  content: "\f2bb"; }
+
+.fa-contact-card::before {
+  content: "\f2bb"; }
+
+.fa-vcard::before {
+  content: "\f2bb"; }
+
+.fa-scale-unbalanced-flip::before {
+  content: "\f516"; }
+
+.fa-balance-scale-right::before {
+  content: "\f516"; }
+
+.fa-subscript::before {
+  content: "\f12c"; }
+
+.fa-diamond-turn-right::before {
+  content: "\f5eb"; }
+
+.fa-directions::before {
+  content: "\f5eb"; }
+
+.fa-burst::before {
+  content: "\e4dc"; }
+
+.fa-house-laptop::before {
+  content: "\e066"; }
+
+.fa-laptop-house::before {
+  content: "\e066"; }
+
+.fa-face-tired::before {
+  content: "\f5c8"; }
+
+.fa-tired::before {
+  content: "\f5c8"; }
+
+.fa-money-bills::before {
+  content: "\e1f3"; }
+
+.fa-smog::before {
+  content: "\f75f"; }
+
+.fa-crutch::before {
+  content: "\f7f7"; }
+
+.fa-cloud-arrow-up::before {
+  content: "\f0ee"; }
+
+.fa-cloud-upload::before {
+  content: "\f0ee"; }
+
+.fa-cloud-upload-alt::before {
+  content: "\f0ee"; }
+
+.fa-palette::before {
+  content: "\f53f"; }
+
+.fa-arrows-turn-right::before {
+  content: "\e4c0"; }
+
+.fa-vest::before {
+  content: "\e085"; }
+
+.fa-ferry::before {
+  content: "\e4ea"; }
+
+.fa-arrows-down-to-people::before {
+  content: "\e4b9"; }
+
+.fa-seedling::before {
+  content: "\f4d8"; }
+
+.fa-sprout::before {
+  content: "\f4d8"; }
+
+.fa-left-right::before {
+  content: "\f337"; }
+
+.fa-arrows-alt-h::before {
+  content: "\f337"; }
+
+.fa-boxes-packing::before {
+  content: "\e4c7"; }
+
+.fa-circle-arrow-left::before {
+  content: "\f0a8"; }
+
+.fa-arrow-circle-left::before {
+  content: "\f0a8"; }
+
+.fa-group-arrows-rotate::before {
+  content: "\e4f6"; }
+
+.fa-bowl-food::before {
+  content: "\e4c6"; }
+
+.fa-candy-cane::before {
+  content: "\f786"; }
+
+.fa-arrow-down-wide-short::before {
+  content: "\f160"; }
+
+.fa-sort-amount-asc::before {
+  content: "\f160"; }
+
+.fa-sort-amount-down::before {
+  content: "\f160"; }
+
+.fa-cloud-bolt::before {
+  content: "\f76c"; }
+
+.fa-thunderstorm::before {
+  content: "\f76c"; }
+
+.fa-text-slash::before {
+  content: "\f87d"; }
+
+.fa-remove-format::before {
+  content: "\f87d"; }
+
+.fa-face-smile-wink::before {
+  content: "\f4da"; }
+
+.fa-smile-wink::before {
+  content: "\f4da"; }
+
+.fa-file-word::before {
+  content: "\f1c2"; }
+
+.fa-file-powerpoint::before {
+  content: "\f1c4"; }
+
+.fa-arrows-left-right::before {
+  content: "\f07e"; }
+
+.fa-arrows-h::before {
+  content: "\f07e"; }
+
+.fa-house-lock::before {
+  content: "\e510"; }
+
+.fa-cloud-arrow-down::before {
+  content: "\f0ed"; }
+
+.fa-cloud-download::before {
+  content: "\f0ed"; }
+
+.fa-cloud-download-alt::before {
+  content: "\f0ed"; }
+
+.fa-children::before {
+  content: "\e4e1"; }
+
+.fa-chalkboard::before {
+  content: "\f51b"; }
+
+.fa-blackboard::before {
+  content: "\f51b"; }
+
+.fa-user-large-slash::before {
+  content: "\f4fa"; }
+
+.fa-user-alt-slash::before {
+  content: "\f4fa"; }
+
+.fa-envelope-open::before {
+  content: "\f2b6"; }
+
+.fa-handshake-simple-slash::before {
+  content: "\e05f"; }
+
+.fa-handshake-alt-slash::before {
+  content: "\e05f"; }
+
+.fa-mattress-pillow::before {
+  content: "\e525"; }
+
+.fa-guarani-sign::before {
+  content: "\e19a"; }
+
+.fa-arrows-rotate::before {
+  content: "\f021"; }
+
+.fa-refresh::before {
+  content: "\f021"; }
+
+.fa-sync::before {
+  content: "\f021"; }
+
+.fa-fire-extinguisher::before {
+  content: "\f134"; }
+
+.fa-cruzeiro-sign::before {
+  content: "\e152"; }
+
+.fa-greater-than-equal::before {
+  content: "\f532"; }
+
+.fa-shield-halved::before {
+  content: "\f3ed"; }
+
+.fa-shield-alt::before {
+  content: "\f3ed"; }
+
+.fa-book-atlas::before {
+  content: "\f558"; }
+
+.fa-atlas::before {
+  content: "\f558"; }
+
+.fa-virus::before {
+  content: "\e074"; }
+
+.fa-envelope-circle-check::before {
+  content: "\e4e8"; }
+
+.fa-layer-group::before {
+  content: "\f5fd"; }
+
+.fa-arrows-to-dot::before {
+  content: "\e4be"; }
+
+.fa-archway::before {
+  content: "\f557"; }
+
+.fa-heart-circle-check::before {
+  content: "\e4fd"; }
+
+.fa-house-chimney-crack::before {
+  content: "\f6f1"; }
+
+.fa-house-damage::before {
+  content: "\f6f1"; }
+
+.fa-file-zipper::before {
+  content: "\f1c6"; }
+
+.fa-file-archive::before {
+  content: "\f1c6"; }
+
+.fa-square::before {
+  content: "\f0c8"; }
+
+.fa-martini-glass-empty::before {
+  content: "\f000"; }
+
+.fa-glass-martini::before {
+  content: "\f000"; }
+
+.fa-couch::before {
+  content: "\f4b8"; }
+
+.fa-cedi-sign::before {
+  content: "\e0df"; }
+
+.fa-italic::before {
+  content: "\f033"; }
+
+.fa-church::before {
+  content: "\f51d"; }
+
+.fa-comments-dollar::before {
+  content: "\f653"; }
+
+.fa-democrat::before {
+  content: "\f747"; }
+
+.fa-z::before {
+  content: "\5a"; }
+
+.fa-person-skiing::before {
+  content: "\f7c9"; }
+
+.fa-skiing::before {
+  content: "\f7c9"; }
+
+.fa-road-lock::before {
+  content: "\e567"; }
+
+.fa-a::before {
+  content: "\41"; }
+
+.fa-temperature-arrow-down::before {
+  content: "\e03f"; }
+
+.fa-temperature-down::before {
+  content: "\e03f"; }
+
+.fa-feather-pointed::before {
+  content: "\f56b"; }
+
+.fa-feather-alt::before {
+  content: "\f56b"; }
+
+.fa-p::before {
+  content: "\50"; }
+
+.fa-snowflake::before {
+  content: "\f2dc"; }
+
+.fa-newspaper::before {
+  content: "\f1ea"; }
+
+.fa-rectangle-ad::before {
+  content: "\f641"; }
+
+.fa-ad::before {
+  content: "\f641"; }
+
+.fa-circle-arrow-right::before {
+  content: "\f0a9"; }
+
+.fa-arrow-circle-right::before {
+  content: "\f0a9"; }
+
+.fa-filter-circle-xmark::before {
+  content: "\e17b"; }
+
+.fa-locust::before {
+  content: "\e520"; }
+
+.fa-sort::before {
+  content: "\f0dc"; }
+
+.fa-unsorted::before {
+  content: "\f0dc"; }
+
+.fa-list-ol::before {
+  content: "\f0cb"; }
+
+.fa-list-1-2::before {
+  content: "\f0cb"; }
+
+.fa-list-numeric::before {
+  content: "\f0cb"; }
+
+.fa-person-dress-burst::before {
+  content: "\e544"; }
+
+.fa-money-check-dollar::before {
+  content: "\f53d"; }
+
+.fa-money-check-alt::before {
+  content: "\f53d"; }
+
+.fa-vector-square::before {
+  content: "\f5cb"; }
+
+.fa-bread-slice::before {
+  content: "\f7ec"; }
+
+.fa-language::before {
+  content: "\f1ab"; }
+
+.fa-face-kiss-wink-heart::before {
+  content: "\f598"; }
+
+.fa-kiss-wink-heart::before {
+  content: "\f598"; }
+
+.fa-filter::before {
+  content: "\f0b0"; }
+
+.fa-question::before {
+  content: "\3f"; }
+
+.fa-file-signature::before {
+  content: "\f573"; }
+
+.fa-up-down-left-right::before {
+  content: "\f0b2"; }
+
+.fa-arrows-alt::before {
+  content: "\f0b2"; }
+
+.fa-house-chimney-user::before {
+  content: "\e065"; }
+
+.fa-hand-holding-heart::before {
+  content: "\f4be"; }
+
+.fa-puzzle-piece::before {
+  content: "\f12e"; }
+
+.fa-money-check::before {
+  content: "\f53c"; }
+
+.fa-star-half-stroke::before {
+  content: "\f5c0"; }
+
+.fa-star-half-alt::before {
+  content: "\f5c0"; }
+
+.fa-code::before {
+  content: "\f121"; }
+
+.fa-whiskey-glass::before {
+  content: "\f7a0"; }
+
+.fa-glass-whiskey::before {
+  content: "\f7a0"; }
+
+.fa-building-circle-exclamation::before {
+  content: "\e4d3"; }
+
+.fa-magnifying-glass-chart::before {
+  content: "\e522"; }
+
+.fa-arrow-up-right-from-square::before {
+  content: "\f08e"; }
+
+.fa-external-link::before {
+  content: "\f08e"; }
+
+.fa-cubes-stacked::before {
+  content: "\e4e6"; }
+
+.fa-won-sign::before {
+  content: "\f159"; }
+
+.fa-krw::before {
+  content: "\f159"; }
+
+.fa-won::before {
+  content: "\f159"; }
+
+.fa-virus-covid::before {
+  content: "\e4a8"; }
+
+.fa-austral-sign::before {
+  content: "\e0a9"; }
+
+.fa-f::before {
+  content: "\46"; }
+
+.fa-leaf::before {
+  content: "\f06c"; }
+
+.fa-road::before {
+  content: "\f018"; }
+
+.fa-taxi::before {
+  content: "\f1ba"; }
+
+.fa-cab::before {
+  content: "\f1ba"; }
+
+.fa-person-circle-plus::before {
+  content: "\e541"; }
+
+.fa-chart-pie::before {
+  content: "\f200"; }
+
+.fa-pie-chart::before {
+  content: "\f200"; }
+
+.fa-bolt-lightning::before {
+  content: "\e0b7"; }
+
+.fa-sack-xmark::before {
+  content: "\e56a"; }
+
+.fa-file-excel::before {
+  content: "\f1c3"; }
+
+.fa-file-contract::before {
+  content: "\f56c"; }
+
+.fa-fish-fins::before {
+  content: "\e4f2"; }
+
+.fa-building-flag::before {
+  content: "\e4d5"; }
+
+.fa-face-grin-beam::before {
+  content: "\f582"; }
+
+.fa-grin-beam::before {
+  content: "\f582"; }
+
+.fa-object-ungroup::before {
+  content: "\f248"; }
+
+.fa-poop::before {
+  content: "\f619"; }
+
+.fa-location-pin::before {
+  content: "\f041"; }
+
+.fa-map-marker::before {
+  content: "\f041"; }
+
+.fa-kaaba::before {
+  content: "\f66b"; }
+
+.fa-toilet-paper::before {
+  content: "\f71e"; }
+
+.fa-helmet-safety::before {
+  content: "\f807"; }
+
+.fa-hard-hat::before {
+  content: "\f807"; }
+
+.fa-hat-hard::before {
+  content: "\f807"; }
+
+.fa-eject::before {
+  content: "\f052"; }
+
+.fa-circle-right::before {
+  content: "\f35a"; }
+
+.fa-arrow-alt-circle-right::before {
+  content: "\f35a"; }
+
+.fa-plane-circle-check::before {
+  content: "\e555"; }
+
+.fa-face-rolling-eyes::before {
+  content: "\f5a5"; }
+
+.fa-meh-rolling-eyes::before {
+  content: "\f5a5"; }
+
+.fa-object-group::before {
+  content: "\f247"; }
+
+.fa-chart-line::before {
+  content: "\f201"; }
+
+.fa-line-chart::before {
+  content: "\f201"; }
+
+.fa-mask-ventilator::before {
+  content: "\e524"; }
+
+.fa-arrow-right::before {
+  content: "\f061"; }
+
+.fa-signs-post::before {
+  content: "\f277"; }
+
+.fa-map-signs::before {
+  content: "\f277"; }
+
+.fa-cash-register::before {
+  content: "\f788"; }
+
+.fa-person-circle-question::before {
+  content: "\e542"; }
+
+.fa-h::before {
+  content: "\48"; }
+
+.fa-tarp::before {
+  content: "\e57b"; }
+
+.fa-screwdriver-wrench::before {
+  content: "\f7d9"; }
+
+.fa-tools::before {
+  content: "\f7d9"; }
+
+.fa-arrows-to-eye::before {
+  content: "\e4bf"; }
+
+.fa-plug-circle-bolt::before {
+  content: "\e55b"; }
+
+.fa-heart::before {
+  content: "\f004"; }
+
+.fa-mars-and-venus::before {
+  content: "\f224"; }
+
+.fa-house-user::before {
+  content: "\e1b0"; }
+
+.fa-home-user::before {
+  content: "\e1b0"; }
+
+.fa-dumpster-fire::before {
+  content: "\f794"; }
+
+.fa-house-crack::before {
+  content: "\e3b1"; }
+
+.fa-martini-glass-citrus::before {
+  content: "\f561"; }
+
+.fa-cocktail::before {
+  content: "\f561"; }
+
+.fa-face-surprise::before {
+  content: "\f5c2"; }
+
+.fa-surprise::before {
+  content: "\f5c2"; }
+
+.fa-bottle-water::before {
+  content: "\e4c5"; }
+
+.fa-circle-pause::before {
+  content: "\f28b"; }
+
+.fa-pause-circle::before {
+  content: "\f28b"; }
+
+.fa-toilet-paper-slash::before {
+  content: "\e072"; }
+
+.fa-apple-whole::before {
+  content: "\f5d1"; }
+
+.fa-apple-alt::before {
+  content: "\f5d1"; }
+
+.fa-kitchen-set::before {
+  content: "\e51a"; }
+
+.fa-r::before {
+  content: "\52"; }
+
+.fa-temperature-quarter::before {
+  content: "\f2ca"; }
+
+.fa-temperature-1::before {
+  content: "\f2ca"; }
+
+.fa-thermometer-1::before {
+  content: "\f2ca"; }
+
+.fa-thermometer-quarter::before {
+  content: "\f2ca"; }
+
+.fa-cube::before {
+  content: "\f1b2"; }
+
+.fa-bitcoin-sign::before {
+  content: "\e0b4"; }
+
+.fa-shield-dog::before {
+  content: "\e573"; }
+
+.fa-solar-panel::before {
+  content: "\f5ba"; }
+
+.fa-lock-open::before {
+  content: "\f3c1"; }
+
+.fa-elevator::before {
+  content: "\e16d"; }
+
+.fa-money-bill-transfer::before {
+  content: "\e528"; }
+
+.fa-money-bill-trend-up::before {
+  content: "\e529"; }
+
+.fa-house-flood-water-circle-arrow-right::before {
+  content: "\e50f"; }
+
+.fa-square-poll-horizontal::before {
+  content: "\f682"; }
+
+.fa-poll-h::before {
+  content: "\f682"; }
+
+.fa-circle::before {
+  content: "\f111"; }
+
+.fa-backward-fast::before {
+  content: "\f049"; }
+
+.fa-fast-backward::before {
+  content: "\f049"; }
+
+.fa-recycle::before {
+  content: "\f1b8"; }
+
+.fa-user-astronaut::before {
+  content: "\f4fb"; }
+
+.fa-plane-slash::before {
+  content: "\e069"; }
+
+.fa-trademark::before {
+  content: "\f25c"; }
+
+.fa-basketball::before {
+  content: "\f434"; }
+
+.fa-basketball-ball::before {
+  content: "\f434"; }
+
+.fa-satellite-dish::before {
+  content: "\f7c0"; }
+
+.fa-circle-up::before {
+  content: "\f35b"; }
+
+.fa-arrow-alt-circle-up::before {
+  content: "\f35b"; }
+
+.fa-mobile-screen-button::before {
+  content: "\f3cd"; }
+
+.fa-mobile-alt::before {
+  content: "\f3cd"; }
+
+.fa-volume-high::before {
+  content: "\f028"; }
+
+.fa-volume-up::before {
+  content: "\f028"; }
+
+.fa-users-rays::before {
+  content: "\e593"; }
+
+.fa-wallet::before {
+  content: "\f555"; }
+
+.fa-clipboard-check::before {
+  content: "\f46c"; }
+
+.fa-file-audio::before {
+  content: "\f1c7"; }
+
+.fa-burger::before {
+  content: "\f805"; }
+
+.fa-hamburger::before {
+  content: "\f805"; }
+
+.fa-wrench::before {
+  content: "\f0ad"; }
+
+.fa-bugs::before {
+  content: "\e4d0"; }
+
+.fa-rupee-sign::before {
+  content: "\f156"; }
+
+.fa-rupee::before {
+  content: "\f156"; }
+
+.fa-file-image::before {
+  content: "\f1c5"; }
+
+.fa-circle-question::before {
+  content: "\f059"; }
+
+.fa-question-circle::before {
+  content: "\f059"; }
+
+.fa-plane-departure::before {
+  content: "\f5b0"; }
+
+.fa-handshake-slash::before {
+  content: "\e060"; }
+
+.fa-book-bookmark::before {
+  content: "\e0bb"; }
+
+.fa-code-branch::before {
+  content: "\f126"; }
+
+.fa-hat-cowboy::before {
+  content: "\f8c0"; }
+
+.fa-bridge::before {
+  content: "\e4c8"; }
+
+.fa-phone-flip::before {
+  content: "\f879"; }
+
+.fa-phone-alt::before {
+  content: "\f879"; }
+
+.fa-truck-front::before {
+  content: "\e2b7"; }
+
+.fa-cat::before {
+  content: "\f6be"; }
+
+.fa-anchor-circle-exclamation::before {
+  content: "\e4ab"; }
+
+.fa-truck-field::before {
+  content: "\e58d"; }
+
+.fa-route::before {
+  content: "\f4d7"; }
+
+.fa-clipboard-question::before {
+  content: "\e4e3"; }
+
+.fa-panorama::before {
+  content: "\e209"; }
+
+.fa-comment-medical::before {
+  content: "\f7f5"; }
+
+.fa-teeth-open::before {
+  content: "\f62f"; }
+
+.fa-file-circle-minus::before {
+  content: "\e4ed"; }
+
+.fa-tags::before {
+  content: "\f02c"; }
+
+.fa-wine-glass::before {
+  content: "\f4e3"; }
+
+.fa-forward-fast::before {
+  content: "\f050"; }
+
+.fa-fast-forward::before {
+  content: "\f050"; }
+
+.fa-face-meh-blank::before {
+  content: "\f5a4"; }
+
+.fa-meh-blank::before {
+  content: "\f5a4"; }
+
+.fa-square-parking::before {
+  content: "\f540"; }
+
+.fa-parking::before {
+  content: "\f540"; }
+
+.fa-house-signal::before {
+  content: "\e012"; }
+
+.fa-bars-progress::before {
+  content: "\f828"; }
+
+.fa-tasks-alt::before {
+  content: "\f828"; }
+
+.fa-faucet-drip::before {
+  content: "\e006"; }
+
+.fa-cart-flatbed::before {
+  content: "\f474"; }
+
+.fa-dolly-flatbed::before {
+  content: "\f474"; }
+
+.fa-ban-smoking::before {
+  content: "\f54d"; }
+
+.fa-smoking-ban::before {
+  content: "\f54d"; }
+
+.fa-terminal::before {
+  content: "\f120"; }
+
+.fa-mobile-button::before {
+  content: "\f10b"; }
+
+.fa-house-medical-flag::before {
+  content: "\e514"; }
+
+.fa-basket-shopping::before {
+  content: "\f291"; }
+
+.fa-shopping-basket::before {
+  content: "\f291"; }
+
+.fa-tape::before {
+  content: "\f4db"; }
+
+.fa-bus-simple::before {
+  content: "\f55e"; }
+
+.fa-bus-alt::before {
+  content: "\f55e"; }
+
+.fa-eye::before {
+  content: "\f06e"; }
+
+.fa-face-sad-cry::before {
+  content: "\f5b3"; }
+
+.fa-sad-cry::before {
+  content: "\f5b3"; }
+
+.fa-audio-description::before {
+  content: "\f29e"; }
+
+.fa-person-military-to-person::before {
+  content: "\e54c"; }
+
+.fa-file-shield::before {
+  content: "\e4f0"; }
+
+.fa-user-slash::before {
+  content: "\f506"; }
+
+.fa-pen::before {
+  content: "\f304"; }
+
+.fa-tower-observation::before {
+  content: "\e586"; }
+
+.fa-file-code::before {
+  content: "\f1c9"; }
+
+.fa-signal::before {
+  content: "\f012"; }
+
+.fa-signal-5::before {
+  content: "\f012"; }
+
+.fa-signal-perfect::before {
+  content: "\f012"; }
+
+.fa-bus::before {
+  content: "\f207"; }
+
+.fa-heart-circle-xmark::before {
+  content: "\e501"; }
+
+.fa-house-chimney::before {
+  content: "\e3af"; }
+
+.fa-home-lg::before {
+  content: "\e3af"; }
+
+.fa-window-maximize::before {
+  content: "\f2d0"; }
+
+.fa-face-frown::before {
+  content: "\f119"; }
+
+.fa-frown::before {
+  content: "\f119"; }
+
+.fa-prescription::before {
+  content: "\f5b1"; }
+
+.fa-shop::before {
+  content: "\f54f"; }
+
+.fa-store-alt::before {
+  content: "\f54f"; }
+
+.fa-floppy-disk::before {
+  content: "\f0c7"; }
+
+.fa-save::before {
+  content: "\f0c7"; }
+
+.fa-vihara::before {
+  content: "\f6a7"; }
+
+.fa-scale-unbalanced::before {
+  content: "\f515"; }
+
+.fa-balance-scale-left::before {
+  content: "\f515"; }
+
+.fa-sort-up::before {
+  content: "\f0de"; }
+
+.fa-sort-asc::before {
+  content: "\f0de"; }
+
+.fa-comment-dots::before {
+  content: "\f4ad"; }
+
+.fa-commenting::before {
+  content: "\f4ad"; }
+
+.fa-plant-wilt::before {
+  content: "\e5aa"; }
+
+.fa-diamond::before {
+  content: "\f219"; }
+
+.fa-face-grin-squint::before {
+  content: "\f585"; }
+
+.fa-grin-squint::before {
+  content: "\f585"; }
+
+.fa-hand-holding-dollar::before {
+  content: "\f4c0"; }
+
+.fa-hand-holding-usd::before {
+  content: "\f4c0"; }
+
+.fa-bacterium::before {
+  content: "\e05a"; }
+
+.fa-hand-pointer::before {
+  content: "\f25a"; }
+
+.fa-drum-steelpan::before {
+  content: "\f56a"; }
+
+.fa-hand-scissors::before {
+  content: "\f257"; }
+
+.fa-hands-praying::before {
+  content: "\f684"; }
+
+.fa-praying-hands::before {
+  content: "\f684"; }
+
+.fa-arrow-rotate-right::before {
+  content: "\f01e"; }
+
+.fa-arrow-right-rotate::before {
+  content: "\f01e"; }
+
+.fa-arrow-rotate-forward::before {
+  content: "\f01e"; }
+
+.fa-redo::before {
+  content: "\f01e"; }
+
+.fa-biohazard::before {
+  content: "\f780"; }
+
+.fa-location-crosshairs::before {
+  content: "\f601"; }
+
+.fa-location::before {
+  content: "\f601"; }
+
+.fa-mars-double::before {
+  content: "\f227"; }
+
+.fa-child-dress::before {
+  content: "\e59c"; }
+
+.fa-users-between-lines::before {
+  content: "\e591"; }
+
+.fa-lungs-virus::before {
+  content: "\e067"; }
+
+.fa-face-grin-tears::before {
+  content: "\f588"; }
+
+.fa-grin-tears::before {
+  content: "\f588"; }
+
+.fa-phone::before {
+  content: "\f095"; }
+
+.fa-calendar-xmark::before {
+  content: "\f273"; }
+
+.fa-calendar-times::before {
+  content: "\f273"; }
+
+.fa-child-reaching::before {
+  content: "\e59d"; }
+
+.fa-head-side-virus::before {
+  content: "\e064"; }
+
+.fa-user-gear::before {
+  content: "\f4fe"; }
+
+.fa-user-cog::before {
+  content: "\f4fe"; }
+
+.fa-arrow-up-1-9::before {
+  content: "\f163"; }
+
+.fa-sort-numeric-up::before {
+  content: "\f163"; }
+
+.fa-door-closed::before {
+  content: "\f52a"; }
+
+.fa-shield-virus::before {
+  content: "\e06c"; }
+
+.fa-dice-six::before {
+  content: "\f526"; }
+
+.fa-mosquito-net::before {
+  content: "\e52c"; }
+
+.fa-bridge-water::before {
+  content: "\e4ce"; }
+
+.fa-person-booth::before {
+  content: "\f756"; }
+
+.fa-text-width::before {
+  content: "\f035"; }
+
+.fa-hat-wizard::before {
+  content: "\f6e8"; }
+
+.fa-pen-fancy::before {
+  content: "\f5ac"; }
+
+.fa-person-digging::before {
+  content: "\f85e"; }
+
+.fa-digging::before {
+  content: "\f85e"; }
+
+.fa-trash::before {
+  content: "\f1f8"; }
+
+.fa-gauge-simple::before {
+  content: "\f629"; }
+
+.fa-gauge-simple-med::before {
+  content: "\f629"; }
+
+.fa-tachometer-average::before {
+  content: "\f629"; }
+
+.fa-book-medical::before {
+  content: "\f7e6"; }
+
+.fa-poo::before {
+  content: "\f2fe"; }
+
+.fa-quote-right::before {
+  content: "\f10e"; }
+
+.fa-quote-right-alt::before {
+  content: "\f10e"; }
+
+.fa-shirt::before {
+  content: "\f553"; }
+
+.fa-t-shirt::before {
+  content: "\f553"; }
+
+.fa-tshirt::before {
+  content: "\f553"; }
+
+.fa-cubes::before {
+  content: "\f1b3"; }
+
+.fa-divide::before {
+  content: "\f529"; }
+
+.fa-tenge-sign::before {
+  content: "\f7d7"; }
+
+.fa-tenge::before {
+  content: "\f7d7"; }
+
+.fa-headphones::before {
+  content: "\f025"; }
+
+.fa-hands-holding::before {
+  content: "\f4c2"; }
+
+.fa-hands-clapping::before {
+  content: "\e1a8"; }
+
+.fa-republican::before {
+  content: "\f75e"; }
+
+.fa-arrow-left::before {
+  content: "\f060"; }
+
+.fa-person-circle-xmark::before {
+  content: "\e543"; }
+
+.fa-ruler::before {
+  content: "\f545"; }
+
+.fa-align-left::before {
+  content: "\f036"; }
+
+.fa-dice-d6::before {
+  content: "\f6d1"; }
+
+.fa-restroom::before {
+  content: "\f7bd"; }
+
+.fa-j::before {
+  content: "\4a"; }
+
+.fa-users-viewfinder::before {
+  content: "\e595"; }
+
+.fa-file-video::before {
+  content: "\f1c8"; }
+
+.fa-up-right-from-square::before {
+  content: "\f35d"; }
+
+.fa-external-link-alt::before {
+  content: "\f35d"; }
+
+.fa-table-cells::before {
+  content: "\f00a"; }
+
+.fa-th::before {
+  content: "\f00a"; }
+
+.fa-file-pdf::before {
+  content: "\f1c1"; }
+
+.fa-book-bible::before {
+  content: "\f647"; }
+
+.fa-bible::before {
+  content: "\f647"; }
+
+.fa-o::before {
+  content: "\4f"; }
+
+.fa-suitcase-medical::before {
+  content: "\f0fa"; }
+
+.fa-medkit::before {
+  content: "\f0fa"; }
+
+.fa-user-secret::before {
+  content: "\f21b"; }
+
+.fa-otter::before {
+  content: "\f700"; }
+
+.fa-person-dress::before {
+  content: "\f182"; }
+
+.fa-female::before {
+  content: "\f182"; }
+
+.fa-comment-dollar::before {
+  content: "\f651"; }
+
+.fa-business-time::before {
+  content: "\f64a"; }
+
+.fa-briefcase-clock::before {
+  content: "\f64a"; }
+
+.fa-table-cells-large::before {
+  content: "\f009"; }
+
+.fa-th-large::before {
+  content: "\f009"; }
+
+.fa-book-tanakh::before {
+  content: "\f827"; }
+
+.fa-tanakh::before {
+  content: "\f827"; }
+
+.fa-phone-volume::before {
+  content: "\f2a0"; }
+
+.fa-volume-control-phone::before {
+  content: "\f2a0"; }
+
+.fa-hat-cowboy-side::before {
+  content: "\f8c1"; }
+
+.fa-clipboard-user::before {
+  content: "\f7f3"; }
+
+.fa-child::before {
+  content: "\f1ae"; }
+
+.fa-lira-sign::before {
+  content: "\f195"; }
+
+.fa-satellite::before {
+  content: "\f7bf"; }
+
+.fa-plane-lock::before {
+  content: "\e558"; }
+
+.fa-tag::before {
+  content: "\f02b"; }
+
+.fa-comment::before {
+  content: "\f075"; }
+
+.fa-cake-candles::before {
+  content: "\f1fd"; }
+
+.fa-birthday-cake::before {
+  content: "\f1fd"; }
+
+.fa-cake::before {
+  content: "\f1fd"; }
+
+.fa-envelope::before {
+  content: "\f0e0"; }
+
+.fa-angles-up::before {
+  content: "\f102"; }
+
+.fa-angle-double-up::before {
+  content: "\f102"; }
+
+.fa-paperclip::before {
+  content: "\f0c6"; }
+
+.fa-arrow-right-to-city::before {
+  content: "\e4b3"; }
+
+.fa-ribbon::before {
+  content: "\f4d6"; }
+
+.fa-lungs::before {
+  content: "\f604"; }
+
+.fa-arrow-up-9-1::before {
+  content: "\f887"; }
+
+.fa-sort-numeric-up-alt::before {
+  content: "\f887"; }
+
+.fa-litecoin-sign::before {
+  content: "\e1d3"; }
+
+.fa-border-none::before {
+  content: "\f850"; }
+
+.fa-circle-nodes::before {
+  content: "\e4e2"; }
+
+.fa-parachute-box::before {
+  content: "\f4cd"; }
+
+.fa-indent::before {
+  content: "\f03c"; }
+
+.fa-truck-field-un::before {
+  content: "\e58e"; }
+
+.fa-hourglass::before {
+  content: "\f254"; }
+
+.fa-hourglass-empty::before {
+  content: "\f254"; }
+
+.fa-mountain::before {
+  content: "\f6fc"; }
+
+.fa-user-doctor::before {
+  content: "\f0f0"; }
+
+.fa-user-md::before {
+  content: "\f0f0"; }
+
+.fa-circle-info::before {
+  content: "\f05a"; }
+
+.fa-info-circle::before {
+  content: "\f05a"; }
+
+.fa-cloud-meatball::before {
+  content: "\f73b"; }
+
+.fa-camera::before {
+  content: "\f030"; }
+
+.fa-camera-alt::before {
+  content: "\f030"; }
+
+.fa-square-virus::before {
+  content: "\e578"; }
+
+.fa-meteor::before {
+  content: "\f753"; }
+
+.fa-car-on::before {
+  content: "\e4dd"; }
+
+.fa-sleigh::before {
+  content: "\f7cc"; }
+
+.fa-arrow-down-1-9::before {
+  content: "\f162"; }
+
+.fa-sort-numeric-asc::before {
+  content: "\f162"; }
+
+.fa-sort-numeric-down::before {
+  content: "\f162"; }
+
+.fa-hand-holding-droplet::before {
+  content: "\f4c1"; }
+
+.fa-hand-holding-water::before {
+  content: "\f4c1"; }
+
+.fa-water::before {
+  content: "\f773"; }
+
+.fa-calendar-check::before {
+  content: "\f274"; }
+
+.fa-braille::before {
+  content: "\f2a1"; }
+
+.fa-prescription-bottle-medical::before {
+  content: "\f486"; }
+
+.fa-prescription-bottle-alt::before {
+  content: "\f486"; }
+
+.fa-landmark::before {
+  content: "\f66f"; }
+
+.fa-truck::before {
+  content: "\f0d1"; }
+
+.fa-crosshairs::before {
+  content: "\f05b"; }
+
+.fa-person-cane::before {
+  content: "\e53c"; }
+
+.fa-tent::before {
+  content: "\e57d"; }
+
+.fa-vest-patches::before {
+  content: "\e086"; }
+
+.fa-check-double::before {
+  content: "\f560"; }
+
+.fa-arrow-down-a-z::before {
+  content: "\f15d"; }
+
+.fa-sort-alpha-asc::before {
+  content: "\f15d"; }
+
+.fa-sort-alpha-down::before {
+  content: "\f15d"; }
+
+.fa-money-bill-wheat::before {
+  content: "\e52a"; }
+
+.fa-cookie::before {
+  content: "\f563"; }
+
+.fa-arrow-rotate-left::before {
+  content: "\f0e2"; }
+
+.fa-arrow-left-rotate::before {
+  content: "\f0e2"; }
+
+.fa-arrow-rotate-back::before {
+  content: "\f0e2"; }
+
+.fa-arrow-rotate-backward::before {
+  content: "\f0e2"; }
+
+.fa-undo::before {
+  content: "\f0e2"; }
+
+.fa-hard-drive::before {
+  content: "\f0a0"; }
+
+.fa-hdd::before {
+  content: "\f0a0"; }
+
+.fa-face-grin-squint-tears::before {
+  content: "\f586"; }
+
+.fa-grin-squint-tears::before {
+  content: "\f586"; }
+
+.fa-dumbbell::before {
+  content: "\f44b"; }
+
+.fa-rectangle-list::before {
+  content: "\f022"; }
+
+.fa-list-alt::before {
+  content: "\f022"; }
+
+.fa-tarp-droplet::before {
+  content: "\e57c"; }
+
+.fa-house-medical-circle-check::before {
+  content: "\e511"; }
+
+.fa-person-skiing-nordic::before {
+  content: "\f7ca"; }
+
+.fa-skiing-nordic::before {
+  content: "\f7ca"; }
+
+.fa-calendar-plus::before {
+  content: "\f271"; }
+
+.fa-plane-arrival::before {
+  content: "\f5af"; }
+
+.fa-circle-left::before {
+  content: "\f359"; }
+
+.fa-arrow-alt-circle-left::before {
+  content: "\f359"; }
+
+.fa-train-subway::before {
+  content: "\f239"; }
+
+.fa-subway::before {
+  content: "\f239"; }
+
+.fa-chart-gantt::before {
+  content: "\e0e4"; }
+
+.fa-indian-rupee-sign::before {
+  content: "\e1bc"; }
+
+.fa-indian-rupee::before {
+  content: "\e1bc"; }
+
+.fa-inr::before {
+  content: "\e1bc"; }
+
+.fa-crop-simple::before {
+  content: "\f565"; }
+
+.fa-crop-alt::before {
+  content: "\f565"; }
+
+.fa-money-bill-1::before {
+  content: "\f3d1"; }
+
+.fa-money-bill-alt::before {
+  content: "\f3d1"; }
+
+.fa-left-long::before {
+  content: "\f30a"; }
+
+.fa-long-arrow-alt-left::before {
+  content: "\f30a"; }
+
+.fa-dna::before {
+  content: "\f471"; }
+
+.fa-virus-slash::before {
+  content: "\e075"; }
+
+.fa-minus::before {
+  content: "\f068"; }
+
+.fa-subtract::before {
+  content: "\f068"; }
+
+.fa-chess::before {
+  content: "\f439"; }
+
+.fa-arrow-left-long::before {
+  content: "\f177"; }
+
+.fa-long-arrow-left::before {
+  content: "\f177"; }
+
+.fa-plug-circle-check::before {
+  content: "\e55c"; }
+
+.fa-street-view::before {
+  content: "\f21d"; }
+
+.fa-franc-sign::before {
+  content: "\e18f"; }
+
+.fa-volume-off::before {
+  content: "\f026"; }
+
+.fa-hands-asl-interpreting::before {
+  content: "\f2a3"; }
+
+.fa-american-sign-language-interpreting::before {
+  content: "\f2a3"; }
+
+.fa-asl-interpreting::before {
+  content: "\f2a3"; }
+
+.fa-hands-american-sign-language-interpreting::before {
+  content: "\f2a3"; }
+
+.fa-gear::before {
+  content: "\f013"; }
+
+.fa-cog::before {
+  content: "\f013"; }
+
+.fa-droplet-slash::before {
+  content: "\f5c7"; }
+
+.fa-tint-slash::before {
+  content: "\f5c7"; }
+
+.fa-mosque::before {
+  content: "\f678"; }
+
+.fa-mosquito::before {
+  content: "\e52b"; }
+
+.fa-star-of-david::before {
+  content: "\f69a"; }
+
+.fa-person-military-rifle::before {
+  content: "\e54b"; }
+
+.fa-cart-shopping::before {
+  content: "\f07a"; }
+
+.fa-shopping-cart::before {
+  content: "\f07a"; }
+
+.fa-vials::before {
+  content: "\f493"; }
+
+.fa-plug-circle-plus::before {
+  content: "\e55f"; }
+
+.fa-place-of-worship::before {
+  content: "\f67f"; }
+
+.fa-grip-vertical::before {
+  content: "\f58e"; }
+
+.fa-arrow-turn-up::before {
+  content: "\f148"; }
+
+.fa-level-up::before {
+  content: "\f148"; }
+
+.fa-u::before {
+  content: "\55"; }
+
+.fa-square-root-variable::before {
+  content: "\f698"; }
+
+.fa-square-root-alt::before {
+  content: "\f698"; }
+
+.fa-clock::before {
+  content: "\f017"; }
+
+.fa-clock-four::before {
+  content: "\f017"; }
+
+.fa-backward-step::before {
+  content: "\f048"; }
+
+.fa-step-backward::before {
+  content: "\f048"; }
+
+.fa-pallet::before {
+  content: "\f482"; }
+
+.fa-faucet::before {
+  content: "\e005"; }
+
+.fa-baseball-bat-ball::before {
+  content: "\f432"; }
+
+.fa-s::before {
+  content: "\53"; }
+
+.fa-timeline::before {
+  content: "\e29c"; }
+
+.fa-keyboard::before {
+  content: "\f11c"; }
+
+.fa-caret-down::before {
+  content: "\f0d7"; }
+
+.fa-house-chimney-medical::before {
+  content: "\f7f2"; }
+
+.fa-clinic-medical::before {
+  content: "\f7f2"; }
+
+.fa-temperature-three-quarters::before {
+  content: "\f2c8"; }
+
+.fa-temperature-3::before {
+  content: "\f2c8"; }
+
+.fa-thermometer-3::before {
+  content: "\f2c8"; }
+
+.fa-thermometer-three-quarters::before {
+  content: "\f2c8"; }
+
+.fa-mobile-screen::before {
+  content: "\f3cf"; }
+
+.fa-mobile-android-alt::before {
+  content: "\f3cf"; }
+
+.fa-plane-up::before {
+  content: "\e22d"; }
+
+.fa-piggy-bank::before {
+  content: "\f4d3"; }
+
+.fa-battery-half::before {
+  content: "\f242"; }
+
+.fa-battery-3::before {
+  content: "\f242"; }
+
+.fa-mountain-city::before {
+  content: "\e52e"; }
+
+.fa-coins::before {
+  content: "\f51e"; }
+
+.fa-khanda::before {
+  content: "\f66d"; }
+
+.fa-sliders::before {
+  content: "\f1de"; }
+
+.fa-sliders-h::before {
+  content: "\f1de"; }
+
+.fa-folder-tree::before {
+  content: "\f802"; }
+
+.fa-network-wired::before {
+  content: "\f6ff"; }
+
+.fa-map-pin::before {
+  content: "\f276"; }
+
+.fa-hamsa::before {
+  content: "\f665"; }
+
+.fa-cent-sign::before {
+  content: "\e3f5"; }
+
+.fa-flask::before {
+  content: "\f0c3"; }
+
+.fa-person-pregnant::before {
+  content: "\e31e"; }
+
+.fa-wand-sparkles::before {
+  content: "\f72b"; }
+
+.fa-ellipsis-vertical::before {
+  content: "\f142"; }
+
+.fa-ellipsis-v::before {
+  content: "\f142"; }
+
+.fa-ticket::before {
+  content: "\f145"; }
+
+.fa-power-off::before {
+  content: "\f011"; }
+
+.fa-right-long::before {
+  content: "\f30b"; }
+
+.fa-long-arrow-alt-right::before {
+  content: "\f30b"; }
+
+.fa-flag-usa::before {
+  content: "\f74d"; }
+
+.fa-laptop-file::before {
+  content: "\e51d"; }
+
+.fa-tty::before {
+  content: "\f1e4"; }
+
+.fa-teletype::before {
+  content: "\f1e4"; }
+
+.fa-diagram-next::before {
+  content: "\e476"; }
+
+.fa-person-rifle::before {
+  content: "\e54e"; }
+
+.fa-house-medical-circle-exclamation::before {
+  content: "\e512"; }
+
+.fa-closed-captioning::before {
+  content: "\f20a"; }
+
+.fa-person-hiking::before {
+  content: "\f6ec"; }
+
+.fa-hiking::before {
+  content: "\f6ec"; }
+
+.fa-venus-double::before {
+  content: "\f226"; }
+
+.fa-images::before {
+  content: "\f302"; }
+
+.fa-calculator::before {
+  content: "\f1ec"; }
+
+.fa-people-pulling::before {
+  content: "\e535"; }
+
+.fa-n::before {
+  content: "\4e"; }
+
+.fa-cable-car::before {
+  content: "\f7da"; }
+
+.fa-tram::before {
+  content: "\f7da"; }
+
+.fa-cloud-rain::before {
+  content: "\f73d"; }
+
+.fa-building-circle-xmark::before {
+  content: "\e4d4"; }
+
+.fa-ship::before {
+  content: "\f21a"; }
+
+.fa-arrows-down-to-line::before {
+  content: "\e4b8"; }
+
+.fa-download::before {
+  content: "\f019"; }
+
+.fa-face-grin::before {
+  content: "\f580"; }
+
+.fa-grin::before {
+  content: "\f580"; }
+
+.fa-delete-left::before {
+  content: "\f55a"; }
+
+.fa-backspace::before {
+  content: "\f55a"; }
+
+.fa-eye-dropper::before {
+  content: "\f1fb"; }
+
+.fa-eye-dropper-empty::before {
+  content: "\f1fb"; }
+
+.fa-eyedropper::before {
+  content: "\f1fb"; }
+
+.fa-file-circle-check::before {
+  content: "\e5a0"; }
+
+.fa-forward::before {
+  content: "\f04e"; }
+
+.fa-mobile::before {
+  content: "\f3ce"; }
+
+.fa-mobile-android::before {
+  content: "\f3ce"; }
+
+.fa-mobile-phone::before {
+  content: "\f3ce"; }
+
+.fa-face-meh::before {
+  content: "\f11a"; }
+
+.fa-meh::before {
+  content: "\f11a"; }
+
+.fa-align-center::before {
+  content: "\f037"; }
+
+.fa-book-skull::before {
+  content: "\f6b7"; }
+
+.fa-book-dead::before {
+  content: "\f6b7"; }
+
+.fa-id-card::before {
+  content: "\f2c2"; }
+
+.fa-drivers-license::before {
+  content: "\f2c2"; }
+
+.fa-outdent::before {
+  content: "\f03b"; }
+
+.fa-dedent::before {
+  content: "\f03b"; }
+
+.fa-heart-circle-exclamation::before {
+  content: "\e4fe"; }
+
+.fa-house::before {
+  content: "\f015"; }
+
+.fa-home::before {
+  content: "\f015"; }
+
+.fa-home-alt::before {
+  content: "\f015"; }
+
+.fa-home-lg-alt::before {
+  content: "\f015"; }
+
+.fa-calendar-week::before {
+  content: "\f784"; }
+
+.fa-laptop-medical::before {
+  content: "\f812"; }
+
+.fa-b::before {
+  content: "\42"; }
+
+.fa-file-medical::before {
+  content: "\f477"; }
+
+.fa-dice-one::before {
+  content: "\f525"; }
+
+.fa-kiwi-bird::before {
+  content: "\f535"; }
+
+.fa-arrow-right-arrow-left::before {
+  content: "\f0ec"; }
+
+.fa-exchange::before {
+  content: "\f0ec"; }
+
+.fa-rotate-right::before {
+  content: "\f2f9"; }
+
+.fa-redo-alt::before {
+  content: "\f2f9"; }
+
+.fa-rotate-forward::before {
+  content: "\f2f9"; }
+
+.fa-utensils::before {
+  content: "\f2e7"; }
+
+.fa-cutlery::before {
+  content: "\f2e7"; }
+
+.fa-arrow-up-wide-short::before {
+  content: "\f161"; }
+
+.fa-sort-amount-up::before {
+  content: "\f161"; }
+
+.fa-mill-sign::before {
+  content: "\e1ed"; }
+
+.fa-bowl-rice::before {
+  content: "\e2eb"; }
+
+.fa-skull::before {
+  content: "\f54c"; }
+
+.fa-tower-broadcast::before {
+  content: "\f519"; }
+
+.fa-broadcast-tower::before {
+  content: "\f519"; }
+
+.fa-truck-pickup::before {
+  content: "\f63c"; }
+
+.fa-up-long::before {
+  content: "\f30c"; }
+
+.fa-long-arrow-alt-up::before {
+  content: "\f30c"; }
+
+.fa-stop::before {
+  content: "\f04d"; }
+
+.fa-code-merge::before {
+  content: "\f387"; }
+
+.fa-upload::before {
+  content: "\f093"; }
+
+.fa-hurricane::before {
+  content: "\f751"; }
+
+.fa-mound::before {
+  content: "\e52d"; }
+
+.fa-toilet-portable::before {
+  content: "\e583"; }
+
+.fa-compact-disc::before {
+  content: "\f51f"; }
+
+.fa-file-arrow-down::before {
+  content: "\f56d"; }
+
+.fa-file-download::before {
+  content: "\f56d"; }
+
+.fa-caravan::before {
+  content: "\f8ff"; }
+
+.fa-shield-cat::before {
+  content: "\e572"; }
+
+.fa-bolt::before {
+  content: "\f0e7"; }
+
+.fa-zap::before {
+  content: "\f0e7"; }
+
+.fa-glass-water::before {
+  content: "\e4f4"; }
+
+.fa-oil-well::before {
+  content: "\e532"; }
+
+.fa-vault::before {
+  content: "\e2c5"; }
+
+.fa-mars::before {
+  content: "\f222"; }
+
+.fa-toilet::before {
+  content: "\f7d8"; }
+
+.fa-plane-circle-xmark::before {
+  content: "\e557"; }
+
+.fa-yen-sign::before {
+  content: "\f157"; }
+
+.fa-cny::before {
+  content: "\f157"; }
+
+.fa-jpy::before {
+  content: "\f157"; }
+
+.fa-rmb::before {
+  content: "\f157"; }
+
+.fa-yen::before {
+  content: "\f157"; }
+
+.fa-ruble-sign::before {
+  content: "\f158"; }
+
+.fa-rouble::before {
+  content: "\f158"; }
+
+.fa-rub::before {
+  content: "\f158"; }
+
+.fa-ruble::before {
+  content: "\f158"; }
+
+.fa-sun::before {
+  content: "\f185"; }
+
+.fa-guitar::before {
+  content: "\f7a6"; }
+
+.fa-face-laugh-wink::before {
+  content: "\f59c"; }
+
+.fa-laugh-wink::before {
+  content: "\f59c"; }
+
+.fa-horse-head::before {
+  content: "\f7ab"; }
+
+.fa-bore-hole::before {
+  content: "\e4c3"; }
+
+.fa-industry::before {
+  content: "\f275"; }
+
+.fa-circle-down::before {
+  content: "\f358"; }
+
+.fa-arrow-alt-circle-down::before {
+  content: "\f358"; }
+
+.fa-arrows-turn-to-dots::before {
+  content: "\e4c1"; }
+
+.fa-florin-sign::before {
+  content: "\e184"; }
+
+.fa-arrow-down-short-wide::before {
+  content: "\f884"; }
+
+.fa-sort-amount-desc::before {
+  content: "\f884"; }
+
+.fa-sort-amount-down-alt::before {
+  content: "\f884"; }
+
+.fa-less-than::before {
+  content: "\3c"; }
+
+.fa-angle-down::before {
+  content: "\f107"; }
+
+.fa-car-tunnel::before {
+  content: "\e4de"; }
+
+.fa-head-side-cough::before {
+  content: "\e061"; }
+
+.fa-grip-lines::before {
+  content: "\f7a4"; }
+
+.fa-thumbs-down::before {
+  content: "\f165"; }
+
+.fa-user-lock::before {
+  content: "\f502"; }
+
+.fa-arrow-right-long::before {
+  content: "\f178"; }
+
+.fa-long-arrow-right::before {
+  content: "\f178"; }
+
+.fa-anchor-circle-xmark::before {
+  content: "\e4ac"; }
+
+.fa-ellipsis::before {
+  content: "\f141"; }
+
+.fa-ellipsis-h::before {
+  content: "\f141"; }
+
+.fa-chess-pawn::before {
+  content: "\f443"; }
+
+.fa-kit-medical::before {
+  content: "\f479"; }
+
+.fa-first-aid::before {
+  content: "\f479"; }
+
+.fa-person-through-window::before {
+  content: "\e5a9"; }
+
+.fa-toolbox::before {
+  content: "\f552"; }
+
+.fa-hands-holding-circle::before {
+  content: "\e4fb"; }
+
+.fa-bug::before {
+  content: "\f188"; }
+
+.fa-credit-card::before {
+  content: "\f09d"; }
+
+.fa-credit-card-alt::before {
+  content: "\f09d"; }
+
+.fa-car::before {
+  content: "\f1b9"; }
+
+.fa-automobile::before {
+  content: "\f1b9"; }
+
+.fa-hand-holding-hand::before {
+  content: "\e4f7"; }
+
+.fa-book-open-reader::before {
+  content: "\f5da"; }
+
+.fa-book-reader::before {
+  content: "\f5da"; }
+
+.fa-mountain-sun::before {
+  content: "\e52f"; }
+
+.fa-arrows-left-right-to-line::before {
+  content: "\e4ba"; }
+
+.fa-dice-d20::before {
+  content: "\f6cf"; }
+
+.fa-truck-droplet::before {
+  content: "\e58c"; }
+
+.fa-file-circle-xmark::before {
+  content: "\e5a1"; }
+
+.fa-temperature-arrow-up::before {
+  content: "\e040"; }
+
+.fa-temperature-up::before {
+  content: "\e040"; }
+
+.fa-medal::before {
+  content: "\f5a2"; }
+
+.fa-bed::before {
+  content: "\f236"; }
+
+.fa-square-h::before {
+  content: "\f0fd"; }
+
+.fa-h-square::before {
+  content: "\f0fd"; }
+
+.fa-podcast::before {
+  content: "\f2ce"; }
+
+.fa-temperature-full::before {
+  content: "\f2c7"; }
+
+.fa-temperature-4::before {
+  content: "\f2c7"; }
+
+.fa-thermometer-4::before {
+  content: "\f2c7"; }
+
+.fa-thermometer-full::before {
+  content: "\f2c7"; }
+
+.fa-bell::before {
+  content: "\f0f3"; }
+
+.fa-superscript::before {
+  content: "\f12b"; }
+
+.fa-plug-circle-xmark::before {
+  content: "\e560"; }
+
+.fa-star-of-life::before {
+  content: "\f621"; }
+
+.fa-phone-slash::before {
+  content: "\f3dd"; }
+
+.fa-paint-roller::before {
+  content: "\f5aa"; }
+
+.fa-handshake-angle::before {
+  content: "\f4c4"; }
+
+.fa-hands-helping::before {
+  content: "\f4c4"; }
+
+.fa-location-dot::before {
+  content: "\f3c5"; }
+
+.fa-map-marker-alt::before {
+  content: "\f3c5"; }
+
+.fa-file::before {
+  content: "\f15b"; }
+
+.fa-greater-than::before {
+  content: "\3e"; }
+
+.fa-person-swimming::before {
+  content: "\f5c4"; }
+
+.fa-swimmer::before {
+  content: "\f5c4"; }
+
+.fa-arrow-down::before {
+  content: "\f063"; }
+
+.fa-droplet::before {
+  content: "\f043"; }
+
+.fa-tint::before {
+  content: "\f043"; }
+
+.fa-eraser::before {
+  content: "\f12d"; }
+
+.fa-earth-americas::before {
+  content: "\f57d"; }
+
+.fa-earth::before {
+  content: "\f57d"; }
+
+.fa-earth-america::before {
+  content: "\f57d"; }
+
+.fa-globe-americas::before {
+  content: "\f57d"; }
+
+.fa-person-burst::before {
+  content: "\e53b"; }
+
+.fa-dove::before {
+  content: "\f4ba"; }
+
+.fa-battery-empty::before {
+  content: "\f244"; }
+
+.fa-battery-0::before {
+  content: "\f244"; }
+
+.fa-socks::before {
+  content: "\f696"; }
+
+.fa-inbox::before {
+  content: "\f01c"; }
+
+.fa-section::before {
+  content: "\e447"; }
+
+.fa-gauge-high::before {
+  content: "\f625"; }
+
+.fa-tachometer-alt::before {
+  content: "\f625"; }
+
+.fa-tachometer-alt-fast::before {
+  content: "\f625"; }
+
+.fa-envelope-open-text::before {
+  content: "\f658"; }
+
+.fa-hospital::before {
+  content: "\f0f8"; }
+
+.fa-hospital-alt::before {
+  content: "\f0f8"; }
+
+.fa-hospital-wide::before {
+  content: "\f0f8"; }
+
+.fa-wine-bottle::before {
+  content: "\f72f"; }
+
+.fa-chess-rook::before {
+  content: "\f447"; }
+
+.fa-bars-staggered::before {
+  content: "\f550"; }
+
+.fa-reorder::before {
+  content: "\f550"; }
+
+.fa-stream::before {
+  content: "\f550"; }
+
+.fa-dharmachakra::before {
+  content: "\f655"; }
+
+.fa-hotdog::before {
+  content: "\f80f"; }
+
+.fa-person-walking-with-cane::before {
+  content: "\f29d"; }
+
+.fa-blind::before {
+  content: "\f29d"; }
+
+.fa-drum::before {
+  content: "\f569"; }
+
+.fa-ice-cream::before {
+  content: "\f810"; }
+
+.fa-heart-circle-bolt::before {
+  content: "\e4fc"; }
+
+.fa-fax::before {
+  content: "\f1ac"; }
+
+.fa-paragraph::before {
+  content: "\f1dd"; }
+
+.fa-check-to-slot::before {
+  content: "\f772"; }
+
+.fa-vote-yea::before {
+  content: "\f772"; }
+
+.fa-star-half::before {
+  content: "\f089"; }
+
+.fa-boxes-stacked::before {
+  content: "\f468"; }
+
+.fa-boxes::before {
+  content: "\f468"; }
+
+.fa-boxes-alt::before {
+  content: "\f468"; }
+
+.fa-link::before {
+  content: "\f0c1"; }
+
+.fa-chain::before {
+  content: "\f0c1"; }
+
+.fa-ear-listen::before {
+  content: "\f2a2"; }
+
+.fa-assistive-listening-systems::before {
+  content: "\f2a2"; }
+
+.fa-tree-city::before {
+  content: "\e587"; }
+
+.fa-play::before {
+  content: "\f04b"; }
+
+.fa-font::before {
+  content: "\f031"; }
+
+.fa-rupiah-sign::before {
+  content: "\e23d"; }
+
+.fa-magnifying-glass::before {
+  content: "\f002"; }
+
+.fa-search::before {
+  content: "\f002"; }
+
+.fa-table-tennis-paddle-ball::before {
+  content: "\f45d"; }
+
+.fa-ping-pong-paddle-ball::before {
+  content: "\f45d"; }
+
+.fa-table-tennis::before {
+  content: "\f45d"; }
+
+.fa-person-dots-from-line::before {
+  content: "\f470"; }
+
+.fa-diagnoses::before {
+  content: "\f470"; }
+
+.fa-trash-can-arrow-up::before {
+  content: "\f82a"; }
+
+.fa-trash-restore-alt::before {
+  content: "\f82a"; }
+
+.fa-naira-sign::before {
+  content: "\e1f6"; }
+
+.fa-cart-arrow-down::before {
+  content: "\f218"; }
+
+.fa-walkie-talkie::before {
+  content: "\f8ef"; }
+
+.fa-file-pen::before {
+  content: "\f31c"; }
+
+.fa-file-edit::before {
+  content: "\f31c"; }
+
+.fa-receipt::before {
+  content: "\f543"; }
+
+.fa-square-pen::before {
+  content: "\f14b"; }
+
+.fa-pen-square::before {
+  content: "\f14b"; }
+
+.fa-pencil-square::before {
+  content: "\f14b"; }
+
+.fa-suitcase-rolling::before {
+  content: "\f5c1"; }
+
+.fa-person-circle-exclamation::before {
+  content: "\e53f"; }
+
+.fa-chevron-down::before {
+  content: "\f078"; }
+
+.fa-battery-full::before {
+  content: "\f240"; }
+
+.fa-battery::before {
+  content: "\f240"; }
+
+.fa-battery-5::before {
+  content: "\f240"; }
+
+.fa-skull-crossbones::before {
+  content: "\f714"; }
+
+.fa-code-compare::before {
+  content: "\e13a"; }
+
+.fa-list-ul::before {
+  content: "\f0ca"; }
+
+.fa-list-dots::before {
+  content: "\f0ca"; }
+
+.fa-school-lock::before {
+  content: "\e56f"; }
+
+.fa-tower-cell::before {
+  content: "\e585"; }
+
+.fa-down-long::before {
+  content: "\f309"; }
+
+.fa-long-arrow-alt-down::before {
+  content: "\f309"; }
+
+.fa-ranking-star::before {
+  content: "\e561"; }
+
+.fa-chess-king::before {
+  content: "\f43f"; }
+
+.fa-person-harassing::before {
+  content: "\e549"; }
+
+.fa-brazilian-real-sign::before {
+  content: "\e46c"; }
+
+.fa-landmark-dome::before {
+  content: "\f752"; }
+
+.fa-landmark-alt::before {
+  content: "\f752"; }
+
+.fa-arrow-up::before {
+  content: "\f062"; }
+
+.fa-tv::before {
+  content: "\f26c"; }
+
+.fa-television::before {
+  content: "\f26c"; }
+
+.fa-tv-alt::before {
+  content: "\f26c"; }
+
+.fa-shrimp::before {
+  content: "\e448"; }
+
+.fa-list-check::before {
+  content: "\f0ae"; }
+
+.fa-tasks::before {
+  content: "\f0ae"; }
+
+.fa-jug-detergent::before {
+  content: "\e519"; }
+
+.fa-circle-user::before {
+  content: "\f2bd"; }
+
+.fa-user-circle::before {
+  content: "\f2bd"; }
+
+.fa-user-shield::before {
+  content: "\f505"; }
+
+.fa-wind::before {
+  content: "\f72e"; }
+
+.fa-car-burst::before {
+  content: "\f5e1"; }
+
+.fa-car-crash::before {
+  content: "\f5e1"; }
+
+.fa-y::before {
+  content: "\59"; }
+
+.fa-person-snowboarding::before {
+  content: "\f7ce"; }
+
+.fa-snowboarding::before {
+  content: "\f7ce"; }
+
+.fa-truck-fast::before {
+  content: "\f48b"; }
+
+.fa-shipping-fast::before {
+  content: "\f48b"; }
+
+.fa-fish::before {
+  content: "\f578"; }
+
+.fa-user-graduate::before {
+  content: "\f501"; }
+
+.fa-circle-half-stroke::before {
+  content: "\f042"; }
+
+.fa-adjust::before {
+  content: "\f042"; }
+
+.fa-clapperboard::before {
+  content: "\e131"; }
+
+.fa-circle-radiation::before {
+  content: "\f7ba"; }
+
+.fa-radiation-alt::before {
+  content: "\f7ba"; }
+
+.fa-baseball::before {
+  content: "\f433"; }
+
+.fa-baseball-ball::before {
+  content: "\f433"; }
+
+.fa-jet-fighter-up::before {
+  content: "\e518"; }
+
+.fa-diagram-project::before {
+  content: "\f542"; }
+
+.fa-project-diagram::before {
+  content: "\f542"; }
+
+.fa-copy::before {
+  content: "\f0c5"; }
+
+.fa-volume-xmark::before {
+  content: "\f6a9"; }
+
+.fa-volume-mute::before {
+  content: "\f6a9"; }
+
+.fa-volume-times::before {
+  content: "\f6a9"; }
+
+.fa-hand-sparkles::before {
+  content: "\e05d"; }
+
+.fa-grip::before {
+  content: "\f58d"; }
+
+.fa-grip-horizontal::before {
+  content: "\f58d"; }
+
+.fa-share-from-square::before {
+  content: "\f14d"; }
+
+.fa-share-square::before {
+  content: "\f14d"; }
+
+.fa-child-combatant::before {
+  content: "\e4e0"; }
+
+.fa-child-rifle::before {
+  content: "\e4e0"; }
+
+.fa-gun::before {
+  content: "\e19b"; }
+
+.fa-square-phone::before {
+  content: "\f098"; }
+
+.fa-phone-square::before {
+  content: "\f098"; }
+
+.fa-plus::before {
+  content: "\2b"; }
+
+.fa-add::before {
+  content: "\2b"; }
+
+.fa-expand::before {
+  content: "\f065"; }
+
+.fa-computer::before {
+  content: "\e4e5"; }
+
+.fa-xmark::before {
+  content: "\f00d"; }
+
+.fa-close::before {
+  content: "\f00d"; }
+
+.fa-multiply::before {
+  content: "\f00d"; }
+
+.fa-remove::before {
+  content: "\f00d"; }
+
+.fa-times::before {
+  content: "\f00d"; }
+
+.fa-arrows-up-down-left-right::before {
+  content: "\f047"; }
+
+.fa-arrows::before {
+  content: "\f047"; }
+
+.fa-chalkboard-user::before {
+  content: "\f51c"; }
+
+.fa-chalkboard-teacher::before {
+  content: "\f51c"; }
+
+.fa-peso-sign::before {
+  content: "\e222"; }
+
+.fa-building-shield::before {
+  content: "\e4d8"; }
+
+.fa-baby::before {
+  content: "\f77c"; }
+
+.fa-users-line::before {
+  content: "\e592"; }
+
+.fa-quote-left::before {
+  content: "\f10d"; }
+
+.fa-quote-left-alt::before {
+  content: "\f10d"; }
+
+.fa-tractor::before {
+  content: "\f722"; }
+
+.fa-trash-arrow-up::before {
+  content: "\f829"; }
+
+.fa-trash-restore::before {
+  content: "\f829"; }
+
+.fa-arrow-down-up-lock::before {
+  content: "\e4b0"; }
+
+.fa-lines-leaning::before {
+  content: "\e51e"; }
+
+.fa-ruler-combined::before {
+  content: "\f546"; }
+
+.fa-copyright::before {
+  content: "\f1f9"; }
+
+.fa-equals::before {
+  content: "\3d"; }
+
+.fa-blender::before {
+  content: "\f517"; }
+
+.fa-teeth::before {
+  content: "\f62e"; }
+
+.fa-shekel-sign::before {
+  content: "\f20b"; }
+
+.fa-ils::before {
+  content: "\f20b"; }
+
+.fa-shekel::before {
+  content: "\f20b"; }
+
+.fa-sheqel::before {
+  content: "\f20b"; }
+
+.fa-sheqel-sign::before {
+  content: "\f20b"; }
+
+.fa-map::before {
+  content: "\f279"; }
+
+.fa-rocket::before {
+  content: "\f135"; }
+
+.fa-photo-film::before {
+  content: "\f87c"; }
+
+.fa-photo-video::before {
+  content: "\f87c"; }
+
+.fa-folder-minus::before {
+  content: "\f65d"; }
+
+.fa-store::before {
+  content: "\f54e"; }
+
+.fa-arrow-trend-up::before {
+  content: "\e098"; }
+
+.fa-plug-circle-minus::before {
+  content: "\e55e"; }
+
+.fa-sign-hanging::before {
+  content: "\f4d9"; }
+
+.fa-sign::before {
+  content: "\f4d9"; }
+
+.fa-bezier-curve::before {
+  content: "\f55b"; }
+
+.fa-bell-slash::before {
+  content: "\f1f6"; }
+
+.fa-tablet::before {
+  content: "\f3fb"; }
+
+.fa-tablet-android::before {
+  content: "\f3fb"; }
+
+.fa-school-flag::before {
+  content: "\e56e"; }
+
+.fa-fill::before {
+  content: "\f575"; }
+
+.fa-angle-up::before {
+  content: "\f106"; }
+
+.fa-drumstick-bite::before {
+  content: "\f6d7"; }
+
+.fa-holly-berry::before {
+  content: "\f7aa"; }
+
+.fa-chevron-left::before {
+  content: "\f053"; }
+
+.fa-bacteria::before {
+  content: "\e059"; }
+
+.fa-hand-lizard::before {
+  content: "\f258"; }
+
+.fa-notdef::before {
+  content: "\e1fe"; }
+
+.fa-disease::before {
+  content: "\f7fa"; }
+
+.fa-briefcase-medical::before {
+  content: "\f469"; }
+
+.fa-genderless::before {
+  content: "\f22d"; }
+
+.fa-chevron-right::before {
+  content: "\f054"; }
+
+.fa-retweet::before {
+  content: "\f079"; }
+
+.fa-car-rear::before {
+  content: "\f5de"; }
+
+.fa-car-alt::before {
+  content: "\f5de"; }
+
+.fa-pump-soap::before {
+  content: "\e06b"; }
+
+.fa-video-slash::before {
+  content: "\f4e2"; }
+
+.fa-battery-quarter::before {
+  content: "\f243"; }
+
+.fa-battery-2::before {
+  content: "\f243"; }
+
+.fa-radio::before {
+  content: "\f8d7"; }
+
+.fa-baby-carriage::before {
+  content: "\f77d"; }
+
+.fa-carriage-baby::before {
+  content: "\f77d"; }
+
+.fa-traffic-light::before {
+  content: "\f637"; }
+
+.fa-thermometer::before {
+  content: "\f491"; }
+
+.fa-vr-cardboard::before {
+  content: "\f729"; }
+
+.fa-hand-middle-finger::before {
+  content: "\f806"; }
+
+.fa-percent::before {
+  content: "\25"; }
+
+.fa-percentage::before {
+  content: "\25"; }
+
+.fa-truck-moving::before {
+  content: "\f4df"; }
+
+.fa-glass-water-droplet::before {
+  content: "\e4f5"; }
+
+.fa-display::before {
+  content: "\e163"; }
+
+.fa-face-smile::before {
+  content: "\f118"; }
+
+.fa-smile::before {
+  content: "\f118"; }
+
+.fa-thumbtack::before {
+  content: "\f08d"; }
+
+.fa-thumb-tack::before {
+  content: "\f08d"; }
+
+.fa-trophy::before {
+  content: "\f091"; }
+
+.fa-person-praying::before {
+  content: "\f683"; }
+
+.fa-pray::before {
+  content: "\f683"; }
+
+.fa-hammer::before {
+  content: "\f6e3"; }
+
+.fa-hand-peace::before {
+  content: "\f25b"; }
+
+.fa-rotate::before {
+  content: "\f2f1"; }
+
+.fa-sync-alt::before {
+  content: "\f2f1"; }
+
+.fa-spinner::before {
+  content: "\f110"; }
+
+.fa-robot::before {
+  content: "\f544"; }
+
+.fa-peace::before {
+  content: "\f67c"; }
+
+.fa-gears::before {
+  content: "\f085"; }
+
+.fa-cogs::before {
+  content: "\f085"; }
+
+.fa-warehouse::before {
+  content: "\f494"; }
+
+.fa-arrow-up-right-dots::before {
+  content: "\e4b7"; }
+
+.fa-splotch::before {
+  content: "\f5bc"; }
+
+.fa-face-grin-hearts::before {
+  content: "\f584"; }
+
+.fa-grin-hearts::before {
+  content: "\f584"; }
+
+.fa-dice-four::before {
+  content: "\f524"; }
+
+.fa-sim-card::before {
+  content: "\f7c4"; }
+
+.fa-transgender::before {
+  content: "\f225"; }
+
+.fa-transgender-alt::before {
+  content: "\f225"; }
+
+.fa-mercury::before {
+  content: "\f223"; }
+
+.fa-arrow-turn-down::before {
+  content: "\f149"; }
+
+.fa-level-down::before {
+  content: "\f149"; }
+
+.fa-person-falling-burst::before {
+  content: "\e547"; }
+
+.fa-award::before {
+  content: "\f559"; }
+
+.fa-ticket-simple::before {
+  content: "\f3ff"; }
+
+.fa-ticket-alt::before {
+  content: "\f3ff"; }
+
+.fa-building::before {
+  content: "\f1ad"; }
+
+.fa-angles-left::before {
+  content: "\f100"; }
+
+.fa-angle-double-left::before {
+  content: "\f100"; }
+
+.fa-qrcode::before {
+  content: "\f029"; }
+
+.fa-clock-rotate-left::before {
+  content: "\f1da"; }
+
+.fa-history::before {
+  content: "\f1da"; }
+
+.fa-face-grin-beam-sweat::before {
+  content: "\f583"; }
+
+.fa-grin-beam-sweat::before {
+  content: "\f583"; }
+
+.fa-file-export::before {
+  content: "\f56e"; }
+
+.fa-arrow-right-from-file::before {
+  content: "\f56e"; }
+
+.fa-shield::before {
+  content: "\f132"; }
+
+.fa-shield-blank::before {
+  content: "\f132"; }
+
+.fa-arrow-up-short-wide::before {
+  content: "\f885"; }
+
+.fa-sort-amount-up-alt::before {
+  content: "\f885"; }
+
+.fa-house-medical::before {
+  content: "\e3b2"; }
+
+.fa-golf-ball-tee::before {
+  content: "\f450"; }
+
+.fa-golf-ball::before {
+  content: "\f450"; }
+
+.fa-circle-chevron-left::before {
+  content: "\f137"; }
+
+.fa-chevron-circle-left::before {
+  content: "\f137"; }
+
+.fa-house-chimney-window::before {
+  content: "\e00d"; }
+
+.fa-pen-nib::before {
+  content: "\f5ad"; }
+
+.fa-tent-arrow-turn-left::before {
+  content: "\e580"; }
+
+.fa-tents::before {
+  content: "\e582"; }
+
+.fa-wand-magic::before {
+  content: "\f0d0"; }
+
+.fa-magic::before {
+  content: "\f0d0"; }
+
+.fa-dog::before {
+  content: "\f6d3"; }
+
+.fa-carrot::before {
+  content: "\f787"; }
+
+.fa-moon::before {
+  content: "\f186"; }
+
+.fa-wine-glass-empty::before {
+  content: "\f5ce"; }
+
+.fa-wine-glass-alt::before {
+  content: "\f5ce"; }
+
+.fa-cheese::before {
+  content: "\f7ef"; }
+
+.fa-yin-yang::before {
+  content: "\f6ad"; }
+
+.fa-music::before {
+  content: "\f001"; }
+
+.fa-code-commit::before {
+  content: "\f386"; }
+
+.fa-temperature-low::before {
+  content: "\f76b"; }
+
+.fa-person-biking::before {
+  content: "\f84a"; }
+
+.fa-biking::before {
+  content: "\f84a"; }
+
+.fa-broom::before {
+  content: "\f51a"; }
+
+.fa-shield-heart::before {
+  content: "\e574"; }
+
+.fa-gopuram::before {
+  content: "\f664"; }
+
+.fa-earth-oceania::before {
+  content: "\e47b"; }
+
+.fa-globe-oceania::before {
+  content: "\e47b"; }
+
+.fa-square-xmark::before {
+  content: "\f2d3"; }
+
+.fa-times-square::before {
+  content: "\f2d3"; }
+
+.fa-xmark-square::before {
+  content: "\f2d3"; }
+
+.fa-hashtag::before {
+  content: "\23"; }
+
+.fa-up-right-and-down-left-from-center::before {
+  content: "\f424"; }
+
+.fa-expand-alt::before {
+  content: "\f424"; }
+
+.fa-oil-can::before {
+  content: "\f613"; }
+
+.fa-t::before {
+  content: "\54"; }
+
+.fa-hippo::before {
+  content: "\f6ed"; }
+
+.fa-chart-column::before {
+  content: "\e0e3"; }
+
+.fa-infinity::before {
+  content: "\f534"; }
+
+.fa-vial-circle-check::before {
+  content: "\e596"; }
+
+.fa-person-arrow-down-to-line::before {
+  content: "\e538"; }
+
+.fa-voicemail::before {
+  content: "\f897"; }
+
+.fa-fan::before {
+  content: "\f863"; }
+
+.fa-person-walking-luggage::before {
+  content: "\e554"; }
+
+.fa-up-down::before {
+  content: "\f338"; }
+
+.fa-arrows-alt-v::before {
+  content: "\f338"; }
+
+.fa-cloud-moon-rain::before {
+  content: "\f73c"; }
+
+.fa-calendar::before {
+  content: "\f133"; }
+
+.fa-trailer::before {
+  content: "\e041"; }
+
+.fa-bahai::before {
+  content: "\f666"; }
+
+.fa-haykal::before {
+  content: "\f666"; }
+
+.fa-sd-card::before {
+  content: "\f7c2"; }
+
+.fa-dragon::before {
+  content: "\f6d5"; }
+
+.fa-shoe-prints::before {
+  content: "\f54b"; }
+
+.fa-circle-plus::before {
+  content: "\f055"; }
+
+.fa-plus-circle::before {
+  content: "\f055"; }
+
+.fa-face-grin-tongue-wink::before {
+  content: "\f58b"; }
+
+.fa-grin-tongue-wink::before {
+  content: "\f58b"; }
+
+.fa-hand-holding::before {
+  content: "\f4bd"; }
+
+.fa-plug-circle-exclamation::before {
+  content: "\e55d"; }
+
+.fa-link-slash::before {
+  content: "\f127"; }
+
+.fa-chain-broken::before {
+  content: "\f127"; }
+
+.fa-chain-slash::before {
+  content: "\f127"; }
+
+.fa-unlink::before {
+  content: "\f127"; }
+
+.fa-clone::before {
+  content: "\f24d"; }
+
+.fa-person-walking-arrow-loop-left::before {
+  content: "\e551"; }
+
+.fa-arrow-up-z-a::before {
+  content: "\f882"; }
+
+.fa-sort-alpha-up-alt::before {
+  content: "\f882"; }
+
+.fa-fire-flame-curved::before {
+  content: "\f7e4"; }
+
+.fa-fire-alt::before {
+  content: "\f7e4"; }
+
+.fa-tornado::before {
+  content: "\f76f"; }
+
+.fa-file-circle-plus::before {
+  content: "\e494"; }
+
+.fa-book-quran::before {
+  content: "\f687"; }
+
+.fa-quran::before {
+  content: "\f687"; }
+
+.fa-anchor::before {
+  content: "\f13d"; }
+
+.fa-border-all::before {
+  content: "\f84c"; }
+
+.fa-face-angry::before {
+  content: "\f556"; }
+
+.fa-angry::before {
+  content: "\f556"; }
+
+.fa-cookie-bite::before {
+  content: "\f564"; }
+
+.fa-arrow-trend-down::before {
+  content: "\e097"; }
+
+.fa-rss::before {
+  content: "\f09e"; }
+
+.fa-feed::before {
+  content: "\f09e"; }
+
+.fa-draw-polygon::before {
+  content: "\f5ee"; }
+
+.fa-scale-balanced::before {
+  content: "\f24e"; }
+
+.fa-balance-scale::before {
+  content: "\f24e"; }
+
+.fa-gauge-simple-high::before {
+  content: "\f62a"; }
+
+.fa-tachometer::before {
+  content: "\f62a"; }
+
+.fa-tachometer-fast::before {
+  content: "\f62a"; }
+
+.fa-shower::before {
+  content: "\f2cc"; }
+
+.fa-desktop::before {
+  content: "\f390"; }
+
+.fa-desktop-alt::before {
+  content: "\f390"; }
+
+.fa-m::before {
+  content: "\4d"; }
+
+.fa-table-list::before {
+  content: "\f00b"; }
+
+.fa-th-list::before {
+  content: "\f00b"; }
+
+.fa-comment-sms::before {
+  content: "\f7cd"; }
+
+.fa-sms::before {
+  content: "\f7cd"; }
+
+.fa-book::before {
+  content: "\f02d"; }
+
+.fa-user-plus::before {
+  content: "\f234"; }
+
+.fa-check::before {
+  content: "\f00c"; }
+
+.fa-battery-three-quarters::before {
+  content: "\f241"; }
+
+.fa-battery-4::before {
+  content: "\f241"; }
+
+.fa-house-circle-check::before {
+  content: "\e509"; }
+
+.fa-angle-left::before {
+  content: "\f104"; }
+
+.fa-diagram-successor::before {
+  content: "\e47a"; }
+
+.fa-truck-arrow-right::before {
+  content: "\e58b"; }
+
+.fa-arrows-split-up-and-left::before {
+  content: "\e4bc"; }
+
+.fa-hand-fist::before {
+  content: "\f6de"; }
+
+.fa-fist-raised::before {
+  content: "\f6de"; }
+
+.fa-cloud-moon::before {
+  content: "\f6c3"; }
+
+.fa-briefcase::before {
+  content: "\f0b1"; }
+
+.fa-person-falling::before {
+  content: "\e546"; }
+
+.fa-image-portrait::before {
+  content: "\f3e0"; }
+
+.fa-portrait::before {
+  content: "\f3e0"; }
+
+.fa-user-tag::before {
+  content: "\f507"; }
+
+.fa-rug::before {
+  content: "\e569"; }
+
+.fa-earth-europe::before {
+  content: "\f7a2"; }
+
+.fa-globe-europe::before {
+  content: "\f7a2"; }
+
+.fa-cart-flatbed-suitcase::before {
+  content: "\f59d"; }
+
+.fa-luggage-cart::before {
+  content: "\f59d"; }
+
+.fa-rectangle-xmark::before {
+  content: "\f410"; }
+
+.fa-rectangle-times::before {
+  content: "\f410"; }
+
+.fa-times-rectangle::before {
+  content: "\f410"; }
+
+.fa-window-close::before {
+  content: "\f410"; }
+
+.fa-baht-sign::before {
+  content: "\e0ac"; }
+
+.fa-book-open::before {
+  content: "\f518"; }
+
+.fa-book-journal-whills::before {
+  content: "\f66a"; }
+
+.fa-journal-whills::before {
+  content: "\f66a"; }
+
+.fa-handcuffs::before {
+  content: "\e4f8"; }
+
+.fa-triangle-exclamation::before {
+  content: "\f071"; }
+
+.fa-exclamation-triangle::before {
+  content: "\f071"; }
+
+.fa-warning::before {
+  content: "\f071"; }
+
+.fa-database::before {
+  content: "\f1c0"; }
+
+.fa-share::before {
+  content: "\f064"; }
+
+.fa-arrow-turn-right::before {
+  content: "\f064"; }
+
+.fa-mail-forward::before {
+  content: "\f064"; }
+
+.fa-bottle-droplet::before {
+  content: "\e4c4"; }
+
+.fa-mask-face::before {
+  content: "\e1d7"; }
+
+.fa-hill-rockslide::before {
+  content: "\e508"; }
+
+.fa-right-left::before {
+  content: "\f362"; }
+
+.fa-exchange-alt::before {
+  content: "\f362"; }
+
+.fa-paper-plane::before {
+  content: "\f1d8"; }
+
+.fa-road-circle-exclamation::before {
+  content: "\e565"; }
+
+.fa-dungeon::before {
+  content: "\f6d9"; }
+
+.fa-align-right::before {
+  content: "\f038"; }
+
+.fa-money-bill-1-wave::before {
+  content: "\f53b"; }
+
+.fa-money-bill-wave-alt::before {
+  content: "\f53b"; }
+
+.fa-life-ring::before {
+  content: "\f1cd"; }
+
+.fa-hands::before {
+  content: "\f2a7"; }
+
+.fa-sign-language::before {
+  content: "\f2a7"; }
+
+.fa-signing::before {
+  content: "\f2a7"; }
+
+.fa-calendar-day::before {
+  content: "\f783"; }
+
+.fa-water-ladder::before {
+  content: "\f5c5"; }
+
+.fa-ladder-water::before {
+  content: "\f5c5"; }
+
+.fa-swimming-pool::before {
+  content: "\f5c5"; }
+
+.fa-arrows-up-down::before {
+  content: "\f07d"; }
+
+.fa-arrows-v::before {
+  content: "\f07d"; }
+
+.fa-face-grimace::before {
+  content: "\f57f"; }
+
+.fa-grimace::before {
+  content: "\f57f"; }
+
+.fa-wheelchair-move::before {
+  content: "\e2ce"; }
+
+.fa-wheelchair-alt::before {
+  content: "\e2ce"; }
+
+.fa-turn-down::before {
+  content: "\f3be"; }
+
+.fa-level-down-alt::before {
+  content: "\f3be"; }
+
+.fa-person-walking-arrow-right::before {
+  content: "\e552"; }
+
+.fa-square-envelope::before {
+  content: "\f199"; }
+
+.fa-envelope-square::before {
+  content: "\f199"; }
+
+.fa-dice::before {
+  content: "\f522"; }
+
+.fa-bowling-ball::before {
+  content: "\f436"; }
+
+.fa-brain::before {
+  content: "\f5dc"; }
+
+.fa-bandage::before {
+  content: "\f462"; }
+
+.fa-band-aid::before {
+  content: "\f462"; }
+
+.fa-calendar-minus::before {
+  content: "\f272"; }
+
+.fa-circle-xmark::before {
+  content: "\f057"; }
+
+.fa-times-circle::before {
+  content: "\f057"; }
+
+.fa-xmark-circle::before {
+  content: "\f057"; }
+
+.fa-gifts::before {
+  content: "\f79c"; }
+
+.fa-hotel::before {
+  content: "\f594"; }
+
+.fa-earth-asia::before {
+  content: "\f57e"; }
+
+.fa-globe-asia::before {
+  content: "\f57e"; }
+
+.fa-id-card-clip::before {
+  content: "\f47f"; }
+
+.fa-id-card-alt::before {
+  content: "\f47f"; }
+
+.fa-magnifying-glass-plus::before {
+  content: "\f00e"; }
+
+.fa-search-plus::before {
+  content: "\f00e"; }
+
+.fa-thumbs-up::before {
+  content: "\f164"; }
+
+.fa-user-clock::before {
+  content: "\f4fd"; }
+
+.fa-hand-dots::before {
+  content: "\f461"; }
+
+.fa-allergies::before {
+  content: "\f461"; }
+
+.fa-file-invoice::before {
+  content: "\f570"; }
+
+.fa-window-minimize::before {
+  content: "\f2d1"; }
+
+.fa-mug-saucer::before {
+  content: "\f0f4"; }
+
+.fa-coffee::before {
+  content: "\f0f4"; }
+
+.fa-brush::before {
+  content: "\f55d"; }
+
+.fa-mask::before {
+  content: "\f6fa"; }
+
+.fa-magnifying-glass-minus::before {
+  content: "\f010"; }
+
+.fa-search-minus::before {
+  content: "\f010"; }
+
+.fa-ruler-vertical::before {
+  content: "\f548"; }
+
+.fa-user-large::before {
+  content: "\f406"; }
+
+.fa-user-alt::before {
+  content: "\f406"; }
+
+.fa-train-tram::before {
+  content: "\e5b4"; }
+
+.fa-user-nurse::before {
+  content: "\f82f"; }
+
+.fa-syringe::before {
+  content: "\f48e"; }
+
+.fa-cloud-sun::before {
+  content: "\f6c4"; }
+
+.fa-stopwatch-20::before {
+  content: "\e06f"; }
+
+.fa-square-full::before {
+  content: "\f45c"; }
+
+.fa-magnet::before {
+  content: "\f076"; }
+
+.fa-jar::before {
+  content: "\e516"; }
+
+.fa-note-sticky::before {
+  content: "\f249"; }
+
+.fa-sticky-note::before {
+  content: "\f249"; }
+
+.fa-bug-slash::before {
+  content: "\e490"; }
+
+.fa-arrow-up-from-water-pump::before {
+  content: "\e4b6"; }
+
+.fa-bone::before {
+  content: "\f5d7"; }
+
+.fa-user-injured::before {
+  content: "\f728"; }
+
+.fa-face-sad-tear::before {
+  content: "\f5b4"; }
+
+.fa-sad-tear::before {
+  content: "\f5b4"; }
+
+.fa-plane::before {
+  content: "\f072"; }
+
+.fa-tent-arrows-down::before {
+  content: "\e581"; }
+
+.fa-exclamation::before {
+  content: "\21"; }
+
+.fa-arrows-spin::before {
+  content: "\e4bb"; }
+
+.fa-print::before {
+  content: "\f02f"; }
+
+.fa-turkish-lira-sign::before {
+  content: "\e2bb"; }
+
+.fa-try::before {
+  content: "\e2bb"; }
+
+.fa-turkish-lira::before {
+  content: "\e2bb"; }
+
+.fa-dollar-sign::before {
+  content: "\24"; }
+
+.fa-dollar::before {
+  content: "\24"; }
+
+.fa-usd::before {
+  content: "\24"; }
+
+.fa-x::before {
+  content: "\58"; }
+
+.fa-magnifying-glass-dollar::before {
+  content: "\f688"; }
+
+.fa-search-dollar::before {
+  content: "\f688"; }
+
+.fa-users-gear::before {
+  content: "\f509"; }
+
+.fa-users-cog::before {
+  content: "\f509"; }
+
+.fa-person-military-pointing::before {
+  content: "\e54a"; }
+
+.fa-building-columns::before {
+  content: "\f19c"; }
+
+.fa-bank::before {
+  content: "\f19c"; }
+
+.fa-institution::before {
+  content: "\f19c"; }
+
+.fa-museum::before {
+  content: "\f19c"; }
+
+.fa-university::before {
+  content: "\f19c"; }
+
+.fa-umbrella::before {
+  content: "\f0e9"; }
+
+.fa-trowel::before {
+  content: "\e589"; }
+
+.fa-d::before {
+  content: "\44"; }
+
+.fa-stapler::before {
+  content: "\e5af"; }
+
+.fa-masks-theater::before {
+  content: "\f630"; }
+
+.fa-theater-masks::before {
+  content: "\f630"; }
+
+.fa-kip-sign::before {
+  content: "\e1c4"; }
+
+.fa-hand-point-left::before {
+  content: "\f0a5"; }
+
+.fa-handshake-simple::before {
+  content: "\f4c6"; }
+
+.fa-handshake-alt::before {
+  content: "\f4c6"; }
+
+.fa-jet-fighter::before {
+  content: "\f0fb"; }
+
+.fa-fighter-jet::before {
+  content: "\f0fb"; }
+
+.fa-square-share-nodes::before {
+  content: "\f1e1"; }
+
+.fa-share-alt-square::before {
+  content: "\f1e1"; }
+
+.fa-barcode::before {
+  content: "\f02a"; }
+
+.fa-plus-minus::before {
+  content: "\e43c"; }
+
+.fa-video::before {
+  content: "\f03d"; }
+
+.fa-video-camera::before {
+  content: "\f03d"; }
+
+.fa-graduation-cap::before {
+  content: "\f19d"; }
+
+.fa-mortar-board::before {
+  content: "\f19d"; }
+
+.fa-hand-holding-medical::before {
+  content: "\e05c"; }
+
+.fa-person-circle-check::before {
+  content: "\e53e"; }
+
+.fa-turn-up::before {
+  content: "\f3bf"; }
+
+.fa-level-up-alt::before {
+  content: "\f3bf"; }
+
+.sr-only,
+.fa-sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  white-space: nowrap;
+  border-width: 0; }
+
+.sr-only-focusable:not(:focus),
+.fa-sr-only-focusable:not(:focus) {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  white-space: nowrap;
+  border-width: 0; }
+:root, :host {
+  --fa-style-family-brands: 'Font Awesome 6 Brands';
+  --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; }
+
+@font-face {
+  font-family: 'Font Awesome 6 Brands';
+  font-style: normal;
+  font-weight: 400;
+  font-display: block;
+  src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
+
+.fab,
+.fa-brands {
+  font-weight: 400; }
+
+.fa-monero:before {
+  content: "\f3d0"; }
+
+.fa-hooli:before {
+  content: "\f427"; }
+
+.fa-yelp:before {
+  content: "\f1e9"; }
+
+.fa-cc-visa:before {
+  content: "\f1f0"; }
+
+.fa-lastfm:before {
+  content: "\f202"; }
+
+.fa-shopware:before {
+  content: "\f5b5"; }
+
+.fa-creative-commons-nc:before {
+  content: "\f4e8"; }
+
+.fa-aws:before {
+  content: "\f375"; }
+
+.fa-redhat:before {
+  content: "\f7bc"; }
+
+.fa-yoast:before {
+  content: "\f2b1"; }
+
+.fa-cloudflare:before {
+  content: "\e07d"; }
+
+.fa-ups:before {
+  content: "\f7e0"; }
+
+.fa-wpexplorer:before {
+  content: "\f2de"; }
+
+.fa-dyalog:before {
+  content: "\f399"; }
+
+.fa-bity:before {
+  content: "\f37a"; }
+
+.fa-stackpath:before {
+  content: "\f842"; }
+
+.fa-buysellads:before {
+  content: "\f20d"; }
+
+.fa-first-order:before {
+  content: "\f2b0"; }
+
+.fa-modx:before {
+  content: "\f285"; }
+
+.fa-guilded:before {
+  content: "\e07e"; }
+
+.fa-vnv:before {
+  content: "\f40b"; }
+
+.fa-square-js:before {
+  content: "\f3b9"; }
+
+.fa-js-square:before {
+  content: "\f3b9"; }
+
+.fa-microsoft:before {
+  content: "\f3ca"; }
+
+.fa-qq:before {
+  content: "\f1d6"; }
+
+.fa-orcid:before {
+  content: "\f8d2"; }
+
+.fa-java:before {
+  content: "\f4e4"; }
+
+.fa-invision:before {
+  content: "\f7b0"; }
+
+.fa-creative-commons-pd-alt:before {
+  content: "\f4ed"; }
+
+.fa-centercode:before {
+  content: "\f380"; }
+
+.fa-glide-g:before {
+  content: "\f2a6"; }
+
+.fa-drupal:before {
+  content: "\f1a9"; }
+
+.fa-hire-a-helper:before {
+  content: "\f3b0"; }
+
+.fa-creative-commons-by:before {
+  content: "\f4e7"; }
+
+.fa-unity:before {
+  content: "\e049"; }
+
+.fa-whmcs:before {
+  content: "\f40d"; }
+
+.fa-rocketchat:before {
+  content: "\f3e8"; }
+
+.fa-vk:before {
+  content: "\f189"; }
+
+.fa-untappd:before {
+  content: "\f405"; }
+
+.fa-mailchimp:before {
+  content: "\f59e"; }
+
+.fa-css3-alt:before {
+  content: "\f38b"; }
+
+.fa-square-reddit:before {
+  content: "\f1a2"; }
+
+.fa-reddit-square:before {
+  content: "\f1a2"; }
+
+.fa-vimeo-v:before {
+  content: "\f27d"; }
+
+.fa-contao:before {
+  content: "\f26d"; }
+
+.fa-square-font-awesome:before {
+  content: "\e5ad"; }
+
+.fa-deskpro:before {
+  content: "\f38f"; }
+
+.fa-sistrix:before {
+  content: "\f3ee"; }
+
+.fa-square-instagram:before {
+  content: "\e055"; }
+
+.fa-instagram-square:before {
+  content: "\e055"; }
+
+.fa-battle-net:before {
+  content: "\f835"; }
+
+.fa-the-red-yeti:before {
+  content: "\f69d"; }
+
+.fa-square-hacker-news:before {
+  content: "\f3af"; }
+
+.fa-hacker-news-square:before {
+  content: "\f3af"; }
+
+.fa-edge:before {
+  content: "\f282"; }
+
+.fa-napster:before {
+  content: "\f3d2"; }
+
+.fa-square-snapchat:before {
+  content: "\f2ad"; }
+
+.fa-snapchat-square:before {
+  content: "\f2ad"; }
+
+.fa-google-plus-g:before {
+  content: "\f0d5"; }
+
+.fa-artstation:before {
+  content: "\f77a"; }
+
+.fa-markdown:before {
+  content: "\f60f"; }
+
+.fa-sourcetree:before {
+  content: "\f7d3"; }
+
+.fa-google-plus:before {
+  content: "\f2b3"; }
+
+.fa-diaspora:before {
+  content: "\f791"; }
+
+.fa-foursquare:before {
+  content: "\f180"; }
+
+.fa-stack-overflow:before {
+  content: "\f16c"; }
+
+.fa-github-alt:before {
+  content: "\f113"; }
+
+.fa-phoenix-squadron:before {
+  content: "\f511"; }
+
+.fa-pagelines:before {
+  content: "\f18c"; }
+
+.fa-algolia:before {
+  content: "\f36c"; }
+
+.fa-red-river:before {
+  content: "\f3e3"; }
+
+.fa-creative-commons-sa:before {
+  content: "\f4ef"; }
+
+.fa-safari:before {
+  content: "\f267"; }
+
+.fa-google:before {
+  content: "\f1a0"; }
+
+.fa-square-font-awesome-stroke:before {
+  content: "\f35c"; }
+
+.fa-font-awesome-alt:before {
+  content: "\f35c"; }
+
+.fa-atlassian:before {
+  content: "\f77b"; }
+
+.fa-linkedin-in:before {
+  content: "\f0e1"; }
+
+.fa-digital-ocean:before {
+  content: "\f391"; }
+
+.fa-nimblr:before {
+  content: "\f5a8"; }
+
+.fa-chromecast:before {
+  content: "\f838"; }
+
+.fa-evernote:before {
+  content: "\f839"; }
+
+.fa-hacker-news:before {
+  content: "\f1d4"; }
+
+.fa-creative-commons-sampling:before {
+  content: "\f4f0"; }
+
+.fa-adversal:before {
+  content: "\f36a"; }
+
+.fa-creative-commons:before {
+  content: "\f25e"; }
+
+.fa-watchman-monitoring:before {
+  content: "\e087"; }
+
+.fa-fonticons:before {
+  content: "\f280"; }
+
+.fa-weixin:before {
+  content: "\f1d7"; }
+
+.fa-shirtsinbulk:before {
+  content: "\f214"; }
+
+.fa-codepen:before {
+  content: "\f1cb"; }
+
+.fa-git-alt:before {
+  content: "\f841"; }
+
+.fa-lyft:before {
+  content: "\f3c3"; }
+
+.fa-rev:before {
+  content: "\f5b2"; }
+
+.fa-windows:before {
+  content: "\f17a"; }
+
+.fa-wizards-of-the-coast:before {
+  content: "\f730"; }
+
+.fa-square-viadeo:before {
+  content: "\f2aa"; }
+
+.fa-viadeo-square:before {
+  content: "\f2aa"; }
+
+.fa-meetup:before {
+  content: "\f2e0"; }
+
+.fa-centos:before {
+  content: "\f789"; }
+
+.fa-adn:before {
+  content: "\f170"; }
+
+.fa-cloudsmith:before {
+  content: "\f384"; }
+
+.fa-pied-piper-alt:before {
+  content: "\f1a8"; }
+
+.fa-square-dribbble:before {
+  content: "\f397"; }
+
+.fa-dribbble-square:before {
+  content: "\f397"; }
+
+.fa-codiepie:before {
+  content: "\f284"; }
+
+.fa-node:before {
+  content: "\f419"; }
+
+.fa-mix:before {
+  content: "\f3cb"; }
+
+.fa-steam:before {
+  content: "\f1b6"; }
+
+.fa-cc-apple-pay:before {
+  content: "\f416"; }
+
+.fa-scribd:before {
+  content: "\f28a"; }
+
+.fa-openid:before {
+  content: "\f19b"; }
+
+.fa-instalod:before {
+  content: "\e081"; }
+
+.fa-expeditedssl:before {
+  content: "\f23e"; }
+
+.fa-sellcast:before {
+  content: "\f2da"; }
+
+.fa-square-twitter:before {
+  content: "\f081"; }
+
+.fa-twitter-square:before {
+  content: "\f081"; }
+
+.fa-r-project:before {
+  content: "\f4f7"; }
+
+.fa-delicious:before {
+  content: "\f1a5"; }
+
+.fa-freebsd:before {
+  content: "\f3a4"; }
+
+.fa-vuejs:before {
+  content: "\f41f"; }
+
+.fa-accusoft:before {
+  content: "\f369"; }
+
+.fa-ioxhost:before {
+  content: "\f208"; }
+
+.fa-fonticons-fi:before {
+  content: "\f3a2"; }
+
+.fa-app-store:before {
+  content: "\f36f"; }
+
+.fa-cc-mastercard:before {
+  content: "\f1f1"; }
+
+.fa-itunes-note:before {
+  content: "\f3b5"; }
+
+.fa-golang:before {
+  content: "\e40f"; }
+
+.fa-kickstarter:before {
+  content: "\f3bb"; }
+
+.fa-grav:before {
+  content: "\f2d6"; }
+
+.fa-weibo:before {
+  content: "\f18a"; }
+
+.fa-uncharted:before {
+  content: "\e084"; }
+
+.fa-firstdraft:before {
+  content: "\f3a1"; }
+
+.fa-square-youtube:before {
+  content: "\f431"; }
+
+.fa-youtube-square:before {
+  content: "\f431"; }
+
+.fa-wikipedia-w:before {
+  content: "\f266"; }
+
+.fa-wpressr:before {
+  content: "\f3e4"; }
+
+.fa-rendact:before {
+  content: "\f3e4"; }
+
+.fa-angellist:before {
+  content: "\f209"; }
+
+.fa-galactic-republic:before {
+  content: "\f50c"; }
+
+.fa-nfc-directional:before {
+  content: "\e530"; }
+
+.fa-skype:before {
+  content: "\f17e"; }
+
+.fa-joget:before {
+  content: "\f3b7"; }
+
+.fa-fedora:before {
+  content: "\f798"; }
+
+.fa-stripe-s:before {
+  content: "\f42a"; }
+
+.fa-meta:before {
+  content: "\e49b"; }
+
+.fa-laravel:before {
+  content: "\f3bd"; }
+
+.fa-hotjar:before {
+  content: "\f3b1"; }
+
+.fa-bluetooth-b:before {
+  content: "\f294"; }
+
+.fa-sticker-mule:before {
+  content: "\f3f7"; }
+
+.fa-creative-commons-zero:before {
+  content: "\f4f3"; }
+
+.fa-hips:before {
+  content: "\f452"; }
+
+.fa-behance:before {
+  content: "\f1b4"; }
+
+.fa-reddit:before {
+  content: "\f1a1"; }
+
+.fa-discord:before {
+  content: "\f392"; }
+
+.fa-chrome:before {
+  content: "\f268"; }
+
+.fa-app-store-ios:before {
+  content: "\f370"; }
+
+.fa-cc-discover:before {
+  content: "\f1f2"; }
+
+.fa-wpbeginner:before {
+  content: "\f297"; }
+
+.fa-confluence:before {
+  content: "\f78d"; }
+
+.fa-mdb:before {
+  content: "\f8ca"; }
+
+.fa-dochub:before {
+  content: "\f394"; }
+
+.fa-accessible-icon:before {
+  content: "\f368"; }
+
+.fa-ebay:before {
+  content: "\f4f4"; }
+
+.fa-amazon:before {
+  content: "\f270"; }
+
+.fa-unsplash:before {
+  content: "\e07c"; }
+
+.fa-yarn:before {
+  content: "\f7e3"; }
+
+.fa-square-steam:before {
+  content: "\f1b7"; }
+
+.fa-steam-square:before {
+  content: "\f1b7"; }
+
+.fa-500px:before {
+  content: "\f26e"; }
+
+.fa-square-vimeo:before {
+  content: "\f194"; }
+
+.fa-vimeo-square:before {
+  content: "\f194"; }
+
+.fa-asymmetrik:before {
+  content: "\f372"; }
+
+.fa-font-awesome:before {
+  content: "\f2b4"; }
+
+.fa-font-awesome-flag:before {
+  content: "\f2b4"; }
+
+.fa-font-awesome-logo-full:before {
+  content: "\f2b4"; }
+
+.fa-gratipay:before {
+  content: "\f184"; }
+
+.fa-apple:before {
+  content: "\f179"; }
+
+.fa-hive:before {
+  content: "\e07f"; }
+
+.fa-gitkraken:before {
+  content: "\f3a6"; }
+
+.fa-keybase:before {
+  content: "\f4f5"; }
+
+.fa-apple-pay:before {
+  content: "\f415"; }
+
+.fa-padlet:before {
+  content: "\e4a0"; }
+
+.fa-amazon-pay:before {
+  content: "\f42c"; }
+
+.fa-square-github:before {
+  content: "\f092"; }
+
+.fa-github-square:before {
+  content: "\f092"; }
+
+.fa-stumbleupon:before {
+  content: "\f1a4"; }
+
+.fa-fedex:before {
+  content: "\f797"; }
+
+.fa-phoenix-framework:before {
+  content: "\f3dc"; }
+
+.fa-shopify:before {
+  content: "\e057"; }
+
+.fa-neos:before {
+  content: "\f612"; }
+
+.fa-hackerrank:before {
+  content: "\f5f7"; }
+
+.fa-researchgate:before {
+  content: "\f4f8"; }
+
+.fa-swift:before {
+  content: "\f8e1"; }
+
+.fa-angular:before {
+  content: "\f420"; }
+
+.fa-speakap:before {
+  content: "\f3f3"; }
+
+.fa-angrycreative:before {
+  content: "\f36e"; }
+
+.fa-y-combinator:before {
+  content: "\f23b"; }
+
+.fa-empire:before {
+  content: "\f1d1"; }
+
+.fa-envira:before {
+  content: "\f299"; }
+
+.fa-square-gitlab:before {
+  content: "\e5ae"; }
+
+.fa-gitlab-square:before {
+  content: "\e5ae"; }
+
+.fa-studiovinari:before {
+  content: "\f3f8"; }
+
+.fa-pied-piper:before {
+  content: "\f2ae"; }
+
+.fa-wordpress:before {
+  content: "\f19a"; }
+
+.fa-product-hunt:before {
+  content: "\f288"; }
+
+.fa-firefox:before {
+  content: "\f269"; }
+
+.fa-linode:before {
+  content: "\f2b8"; }
+
+.fa-goodreads:before {
+  content: "\f3a8"; }
+
+.fa-square-odnoklassniki:before {
+  content: "\f264"; }
+
+.fa-odnoklassniki-square:before {
+  content: "\f264"; }
+
+.fa-jsfiddle:before {
+  content: "\f1cc"; }
+
+.fa-sith:before {
+  content: "\f512"; }
+
+.fa-themeisle:before {
+  content: "\f2b2"; }
+
+.fa-page4:before {
+  content: "\f3d7"; }
+
+.fa-hashnode:before {
+  content: "\e499"; }
+
+.fa-react:before {
+  content: "\f41b"; }
+
+.fa-cc-paypal:before {
+  content: "\f1f4"; }
+
+.fa-squarespace:before {
+  content: "\f5be"; }
+
+.fa-cc-stripe:before {
+  content: "\f1f5"; }
+
+.fa-creative-commons-share:before {
+  content: "\f4f2"; }
+
+.fa-bitcoin:before {
+  content: "\f379"; }
+
+.fa-keycdn:before {
+  content: "\f3ba"; }
+
+.fa-opera:before {
+  content: "\f26a"; }
+
+.fa-itch-io:before {
+  content: "\f83a"; }
+
+.fa-umbraco:before {
+  content: "\f8e8"; }
+
+.fa-galactic-senate:before {
+  content: "\f50d"; }
+
+.fa-ubuntu:before {
+  content: "\f7df"; }
+
+.fa-draft2digital:before {
+  content: "\f396"; }
+
+.fa-stripe:before {
+  content: "\f429"; }
+
+.fa-houzz:before {
+  content: "\f27c"; }
+
+.fa-gg:before {
+  content: "\f260"; }
+
+.fa-dhl:before {
+  content: "\f790"; }
+
+.fa-square-pinterest:before {
+  content: "\f0d3"; }
+
+.fa-pinterest-square:before {
+  content: "\f0d3"; }
+
+.fa-xing:before {
+  content: "\f168"; }
+
+.fa-blackberry:before {
+  content: "\f37b"; }
+
+.fa-creative-commons-pd:before {
+  content: "\f4ec"; }
+
+.fa-playstation:before {
+  content: "\f3df"; }
+
+.fa-quinscape:before {
+  content: "\f459"; }
+
+.fa-less:before {
+  content: "\f41d"; }
+
+.fa-blogger-b:before {
+  content: "\f37d"; }
+
+.fa-opencart:before {
+  content: "\f23d"; }
+
+.fa-vine:before {
+  content: "\f1ca"; }
+
+.fa-paypal:before {
+  content: "\f1ed"; }
+
+.fa-gitlab:before {
+  content: "\f296"; }
+
+.fa-typo3:before {
+  content: "\f42b"; }
+
+.fa-reddit-alien:before {
+  content: "\f281"; }
+
+.fa-yahoo:before {
+  content: "\f19e"; }
+
+.fa-dailymotion:before {
+  content: "\e052"; }
+
+.fa-affiliatetheme:before {
+  content: "\f36b"; }
+
+.fa-pied-piper-pp:before {
+  content: "\f1a7"; }
+
+.fa-bootstrap:before {
+  content: "\f836"; }
+
+.fa-odnoklassniki:before {
+  content: "\f263"; }
+
+.fa-nfc-symbol:before {
+  content: "\e531"; }
+
+.fa-ethereum:before {
+  content: "\f42e"; }
+
+.fa-speaker-deck:before {
+  content: "\f83c"; }
+
+.fa-creative-commons-nc-eu:before {
+  content: "\f4e9"; }
+
+.fa-patreon:before {
+  content: "\f3d9"; }
+
+.fa-avianex:before {
+  content: "\f374"; }
+
+.fa-ello:before {
+  content: "\f5f1"; }
+
+.fa-gofore:before {
+  content: "\f3a7"; }
+
+.fa-bimobject:before {
+  content: "\f378"; }
+
+.fa-facebook-f:before {
+  content: "\f39e"; }
+
+.fa-square-google-plus:before {
+  content: "\f0d4"; }
+
+.fa-google-plus-square:before {
+  content: "\f0d4"; }
+
+.fa-mandalorian:before {
+  content: "\f50f"; }
+
+.fa-first-order-alt:before {
+  content: "\f50a"; }
+
+.fa-osi:before {
+  content: "\f41a"; }
+
+.fa-google-wallet:before {
+  content: "\f1ee"; }
+
+.fa-d-and-d-beyond:before {
+  content: "\f6ca"; }
+
+.fa-periscope:before {
+  content: "\f3da"; }
+
+.fa-fulcrum:before {
+  content: "\f50b"; }
+
+.fa-cloudscale:before {
+  content: "\f383"; }
+
+.fa-forumbee:before {
+  content: "\f211"; }
+
+.fa-mizuni:before {
+  content: "\f3cc"; }
+
+.fa-schlix:before {
+  content: "\f3ea"; }
+
+.fa-square-xing:before {
+  content: "\f169"; }
+
+.fa-xing-square:before {
+  content: "\f169"; }
+
+.fa-bandcamp:before {
+  content: "\f2d5"; }
+
+.fa-wpforms:before {
+  content: "\f298"; }
+
+.fa-cloudversify:before {
+  content: "\f385"; }
+
+.fa-usps:before {
+  content: "\f7e1"; }
+
+.fa-megaport:before {
+  content: "\f5a3"; }
+
+.fa-magento:before {
+  content: "\f3c4"; }
+
+.fa-spotify:before {
+  content: "\f1bc"; }
+
+.fa-optin-monster:before {
+  content: "\f23c"; }
+
+.fa-fly:before {
+  content: "\f417"; }
+
+.fa-aviato:before {
+  content: "\f421"; }
+
+.fa-itunes:before {
+  content: "\f3b4"; }
+
+.fa-cuttlefish:before {
+  content: "\f38c"; }
+
+.fa-blogger:before {
+  content: "\f37c"; }
+
+.fa-flickr:before {
+  content: "\f16e"; }
+
+.fa-viber:before {
+  content: "\f409"; }
+
+.fa-soundcloud:before {
+  content: "\f1be"; }
+
+.fa-digg:before {
+  content: "\f1a6"; }
+
+.fa-tencent-weibo:before {
+  content: "\f1d5"; }
+
+.fa-symfony:before {
+  content: "\f83d"; }
+
+.fa-maxcdn:before {
+  content: "\f136"; }
+
+.fa-etsy:before {
+  content: "\f2d7"; }
+
+.fa-facebook-messenger:before {
+  content: "\f39f"; }
+
+.fa-audible:before {
+  content: "\f373"; }
+
+.fa-think-peaks:before {
+  content: "\f731"; }
+
+.fa-bilibili:before {
+  content: "\e3d9"; }
+
+.fa-erlang:before {
+  content: "\f39d"; }
+
+.fa-cotton-bureau:before {
+  content: "\f89e"; }
+
+.fa-dashcube:before {
+  content: "\f210"; }
+
+.fa-42-group:before {
+  content: "\e080"; }
+
+.fa-innosoft:before {
+  content: "\e080"; }
+
+.fa-stack-exchange:before {
+  content: "\f18d"; }
+
+.fa-elementor:before {
+  content: "\f430"; }
+
+.fa-square-pied-piper:before {
+  content: "\e01e"; }
+
+.fa-pied-piper-square:before {
+  content: "\e01e"; }
+
+.fa-creative-commons-nd:before {
+  content: "\f4eb"; }
+
+.fa-palfed:before {
+  content: "\f3d8"; }
+
+.fa-superpowers:before {
+  content: "\f2dd"; }
+
+.fa-resolving:before {
+  content: "\f3e7"; }
+
+.fa-xbox:before {
+  content: "\f412"; }
+
+.fa-searchengin:before {
+  content: "\f3eb"; }
+
+.fa-tiktok:before {
+  content: "\e07b"; }
+
+.fa-square-facebook:before {
+  content: "\f082"; }
+
+.fa-facebook-square:before {
+  content: "\f082"; }
+
+.fa-renren:before {
+  content: "\f18b"; }
+
+.fa-linux:before {
+  content: "\f17c"; }
+
+.fa-glide:before {
+  content: "\f2a5"; }
+
+.fa-linkedin:before {
+  content: "\f08c"; }
+
+.fa-hubspot:before {
+  content: "\f3b2"; }
+
+.fa-deploydog:before {
+  content: "\f38e"; }
+
+.fa-twitch:before {
+  content: "\f1e8"; }
+
+.fa-ravelry:before {
+  content: "\f2d9"; }
+
+.fa-mixer:before {
+  content: "\e056"; }
+
+.fa-square-lastfm:before {
+  content: "\f203"; }
+
+.fa-lastfm-square:before {
+  content: "\f203"; }
+
+.fa-vimeo:before {
+  content: "\f40a"; }
+
+.fa-mendeley:before {
+  content: "\f7b3"; }
+
+.fa-uniregistry:before {
+  content: "\f404"; }
+
+.fa-figma:before {
+  content: "\f799"; }
+
+.fa-creative-commons-remix:before {
+  content: "\f4ee"; }
+
+.fa-cc-amazon-pay:before {
+  content: "\f42d"; }
+
+.fa-dropbox:before {
+  content: "\f16b"; }
+
+.fa-instagram:before {
+  content: "\f16d"; }
+
+.fa-cmplid:before {
+  content: "\e360"; }
+
+.fa-facebook:before {
+  content: "\f09a"; }
+
+.fa-gripfire:before {
+  content: "\f3ac"; }
+
+.fa-jedi-order:before {
+  content: "\f50e"; }
+
+.fa-uikit:before {
+  content: "\f403"; }
+
+.fa-fort-awesome-alt:before {
+  content: "\f3a3"; }
+
+.fa-phabricator:before {
+  content: "\f3db"; }
+
+.fa-ussunnah:before {
+  content: "\f407"; }
+
+.fa-earlybirds:before {
+  content: "\f39a"; }
+
+.fa-trade-federation:before {
+  content: "\f513"; }
+
+.fa-autoprefixer:before {
+  content: "\f41c"; }
+
+.fa-whatsapp:before {
+  content: "\f232"; }
+
+.fa-slideshare:before {
+  content: "\f1e7"; }
+
+.fa-google-play:before {
+  content: "\f3ab"; }
+
+.fa-viadeo:before {
+  content: "\f2a9"; }
+
+.fa-line:before {
+  content: "\f3c0"; }
+
+.fa-google-drive:before {
+  content: "\f3aa"; }
+
+.fa-servicestack:before {
+  content: "\f3ec"; }
+
+.fa-simplybuilt:before {
+  content: "\f215"; }
+
+.fa-bitbucket:before {
+  content: "\f171"; }
+
+.fa-imdb:before {
+  content: "\f2d8"; }
+
+.fa-deezer:before {
+  content: "\e077"; }
+
+.fa-raspberry-pi:before {
+  content: "\f7bb"; }
+
+.fa-jira:before {
+  content: "\f7b1"; }
+
+.fa-docker:before {
+  content: "\f395"; }
+
+.fa-screenpal:before {
+  content: "\e570"; }
+
+.fa-bluetooth:before {
+  content: "\f293"; }
+
+.fa-gitter:before {
+  content: "\f426"; }
+
+.fa-d-and-d:before {
+  content: "\f38d"; }
+
+.fa-microblog:before {
+  content: "\e01a"; }
+
+.fa-cc-diners-club:before {
+  content: "\f24c"; }
+
+.fa-gg-circle:before {
+  content: "\f261"; }
+
+.fa-pied-piper-hat:before {
+  content: "\f4e5"; }
+
+.fa-kickstarter-k:before {
+  content: "\f3bc"; }
+
+.fa-yandex:before {
+  content: "\f413"; }
+
+.fa-readme:before {
+  content: "\f4d5"; }
+
+.fa-html5:before {
+  content: "\f13b"; }
+
+.fa-sellsy:before {
+  content: "\f213"; }
+
+.fa-sass:before {
+  content: "\f41e"; }
+
+.fa-wirsindhandwerk:before {
+  content: "\e2d0"; }
+
+.fa-wsh:before {
+  content: "\e2d0"; }
+
+.fa-buromobelexperte:before {
+  content: "\f37f"; }
+
+.fa-salesforce:before {
+  content: "\f83b"; }
+
+.fa-octopus-deploy:before {
+  content: "\e082"; }
+
+.fa-medapps:before {
+  content: "\f3c6"; }
+
+.fa-ns8:before {
+  content: "\f3d5"; }
+
+.fa-pinterest-p:before {
+  content: "\f231"; }
+
+.fa-apper:before {
+  content: "\f371"; }
+
+.fa-fort-awesome:before {
+  content: "\f286"; }
+
+.fa-waze:before {
+  content: "\f83f"; }
+
+.fa-cc-jcb:before {
+  content: "\f24b"; }
+
+.fa-snapchat:before {
+  content: "\f2ab"; }
+
+.fa-snapchat-ghost:before {
+  content: "\f2ab"; }
+
+.fa-fantasy-flight-games:before {
+  content: "\f6dc"; }
+
+.fa-rust:before {
+  content: "\e07a"; }
+
+.fa-wix:before {
+  content: "\f5cf"; }
+
+.fa-square-behance:before {
+  content: "\f1b5"; }
+
+.fa-behance-square:before {
+  content: "\f1b5"; }
+
+.fa-supple:before {
+  content: "\f3f9"; }
+
+.fa-rebel:before {
+  content: "\f1d0"; }
+
+.fa-css3:before {
+  content: "\f13c"; }
+
+.fa-staylinked:before {
+  content: "\f3f5"; }
+
+.fa-kaggle:before {
+  content: "\f5fa"; }
+
+.fa-space-awesome:before {
+  content: "\e5ac"; }
+
+.fa-deviantart:before {
+  content: "\f1bd"; }
+
+.fa-cpanel:before {
+  content: "\f388"; }
+
+.fa-goodreads-g:before {
+  content: "\f3a9"; }
+
+.fa-square-git:before {
+  content: "\f1d2"; }
+
+.fa-git-square:before {
+  content: "\f1d2"; }
+
+.fa-square-tumblr:before {
+  content: "\f174"; }
+
+.fa-tumblr-square:before {
+  content: "\f174"; }
+
+.fa-trello:before {
+  content: "\f181"; }
+
+.fa-creative-commons-nc-jp:before {
+  content: "\f4ea"; }
+
+.fa-get-pocket:before {
+  content: "\f265"; }
+
+.fa-perbyte:before {
+  content: "\e083"; }
+
+.fa-grunt:before {
+  content: "\f3ad"; }
+
+.fa-weebly:before {
+  content: "\f5cc"; }
+
+.fa-connectdevelop:before {
+  content: "\f20e"; }
+
+.fa-leanpub:before {
+  content: "\f212"; }
+
+.fa-black-tie:before {
+  content: "\f27e"; }
+
+.fa-themeco:before {
+  content: "\f5c6"; }
+
+.fa-python:before {
+  content: "\f3e2"; }
+
+.fa-android:before {
+  content: "\f17b"; }
+
+.fa-bots:before {
+  content: "\e340"; }
+
+.fa-free-code-camp:before {
+  content: "\f2c5"; }
+
+.fa-hornbill:before {
+  content: "\f592"; }
+
+.fa-js:before {
+  content: "\f3b8"; }
+
+.fa-ideal:before {
+  content: "\e013"; }
+
+.fa-git:before {
+  content: "\f1d3"; }
+
+.fa-dev:before {
+  content: "\f6cc"; }
+
+.fa-sketch:before {
+  content: "\f7c6"; }
+
+.fa-yandex-international:before {
+  content: "\f414"; }
+
+.fa-cc-amex:before {
+  content: "\f1f3"; }
+
+.fa-uber:before {
+  content: "\f402"; }
+
+.fa-github:before {
+  content: "\f09b"; }
+
+.fa-php:before {
+  content: "\f457"; }
+
+.fa-alipay:before {
+  content: "\f642"; }
+
+.fa-youtube:before {
+  content: "\f167"; }
+
+.fa-skyatlas:before {
+  content: "\f216"; }
+
+.fa-firefox-browser:before {
+  content: "\e007"; }
+
+.fa-replyd:before {
+  content: "\f3e6"; }
+
+.fa-suse:before {
+  content: "\f7d6"; }
+
+.fa-jenkins:before {
+  content: "\f3b6"; }
+
+.fa-twitter:before {
+  content: "\f099"; }
+
+.fa-rockrms:before {
+  content: "\f3e9"; }
+
+.fa-pinterest:before {
+  content: "\f0d2"; }
+
+.fa-buffer:before {
+  content: "\f837"; }
+
+.fa-npm:before {
+  content: "\f3d4"; }
+
+.fa-yammer:before {
+  content: "\f840"; }
+
+.fa-btc:before {
+  content: "\f15a"; }
+
+.fa-dribbble:before {
+  content: "\f17d"; }
+
+.fa-stumbleupon-circle:before {
+  content: "\f1a3"; }
+
+.fa-internet-explorer:before {
+  content: "\f26b"; }
+
+.fa-stubber:before {
+  content: "\e5c7"; }
+
+.fa-telegram:before {
+  content: "\f2c6"; }
+
+.fa-telegram-plane:before {
+  content: "\f2c6"; }
+
+.fa-old-republic:before {
+  content: "\f510"; }
+
+.fa-odysee:before {
+  content: "\e5c6"; }
+
+.fa-square-whatsapp:before {
+  content: "\f40c"; }
+
+.fa-whatsapp-square:before {
+  content: "\f40c"; }
+
+.fa-node-js:before {
+  content: "\f3d3"; }
+
+.fa-edge-legacy:before {
+  content: "\e078"; }
+
+.fa-slack:before {
+  content: "\f198"; }
+
+.fa-slack-hash:before {
+  content: "\f198"; }
+
+.fa-medrt:before {
+  content: "\f3c8"; }
+
+.fa-usb:before {
+  content: "\f287"; }
+
+.fa-tumblr:before {
+  content: "\f173"; }
+
+.fa-vaadin:before {
+  content: "\f408"; }
+
+.fa-quora:before {
+  content: "\f2c4"; }
+
+.fa-reacteurope:before {
+  content: "\f75d"; }
+
+.fa-medium:before {
+  content: "\f23a"; }
+
+.fa-medium-m:before {
+  content: "\f23a"; }
+
+.fa-amilia:before {
+  content: "\f36d"; }
+
+.fa-mixcloud:before {
+  content: "\f289"; }
+
+.fa-flipboard:before {
+  content: "\f44d"; }
+
+.fa-viacoin:before {
+  content: "\f237"; }
+
+.fa-critical-role:before {
+  content: "\f6c9"; }
+
+.fa-sitrox:before {
+  content: "\e44a"; }
+
+.fa-discourse:before {
+  content: "\f393"; }
+
+.fa-joomla:before {
+  content: "\f1aa"; }
+
+.fa-mastodon:before {
+  content: "\f4f6"; }
+
+.fa-airbnb:before {
+  content: "\f834"; }
+
+.fa-wolf-pack-battalion:before {
+  content: "\f514"; }
+
+.fa-buy-n-large:before {
+  content: "\f8a6"; }
+
+.fa-gulp:before {
+  content: "\f3ae"; }
+
+.fa-creative-commons-sampling-plus:before {
+  content: "\f4f1"; }
+
+.fa-strava:before {
+  content: "\f428"; }
+
+.fa-ember:before {
+  content: "\f423"; }
+
+.fa-canadian-maple-leaf:before {
+  content: "\f785"; }
+
+.fa-teamspeak:before {
+  content: "\f4f9"; }
+
+.fa-pushed:before {
+  content: "\f3e1"; }
+
+.fa-wordpress-simple:before {
+  content: "\f411"; }
+
+.fa-nutritionix:before {
+  content: "\f3d6"; }
+
+.fa-wodu:before {
+  content: "\e088"; }
+
+.fa-google-pay:before {
+  content: "\e079"; }
+
+.fa-intercom:before {
+  content: "\f7af"; }
+
+.fa-zhihu:before {
+  content: "\f63f"; }
+
+.fa-korvue:before {
+  content: "\f42f"; }
+
+.fa-pix:before {
+  content: "\e43a"; }
+
+.fa-steam-symbol:before {
+  content: "\f3f6"; }
+:root, :host {
+  --fa-style-family-classic: 'Font Awesome 6 Free';
+  --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; }
+
+@font-face {
+  font-family: 'Font Awesome 6 Free';
+  font-style: normal;
+  font-weight: 400;
+  font-display: block;
+  src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
+
+.far,
+.fa-regular {
+  font-weight: 400; }
+:root, :host {
+  --fa-style-family-classic: 'Font Awesome 6 Free';
+  --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; }
+
+@font-face {
+  font-family: 'Font Awesome 6 Free';
+  font-style: normal;
+  font-weight: 900;
+  font-display: block;
+  src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
+
+.fas,
+.fa-solid {
+  font-weight: 900; }
+@font-face {
+  font-family: 'Font Awesome 5 Brands';
+  font-display: block;
+  font-weight: 400;
+  src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
+
+@font-face {
+  font-family: 'Font Awesome 5 Free';
+  font-display: block;
+  font-weight: 900;
+  src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
+
+@font-face {
+  font-family: 'Font Awesome 5 Free';
+  font-display: block;
+  font-weight: 400;
+  src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
+@font-face {
+  font-family: 'FontAwesome';
+  font-display: block;
+  src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
+
+@font-face {
+  font-family: 'FontAwesome';
+  font-display: block;
+  src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
+
+@font-face {
+  font-family: 'FontAwesome';
+  font-display: block;
+  src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype");
+  unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; }
+
+@font-face {
+  font-family: 'FontAwesome';
+  font-display: block;
+  src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype");
+  unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; }

文件差异内容过多而无法显示
+ 5 - 0
static/tickets/assets/fontawesome/css/all.min.css


+ 1522 - 0
static/tickets/assets/fontawesome/css/brands.css

@@ -0,0 +1,1522 @@
+/*!
+ * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2023 Fonticons, Inc.
+ */
+:root, :host {
+  --fa-style-family-brands: 'Font Awesome 6 Brands';
+  --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; }
+
+@font-face {
+  font-family: 'Font Awesome 6 Brands';
+  font-style: normal;
+  font-weight: 400;
+  font-display: block;
+  src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
+
+.fab,
+.fa-brands {
+  font-weight: 400; }
+
+.fa-monero:before {
+  content: "\f3d0"; }
+
+.fa-hooli:before {
+  content: "\f427"; }
+
+.fa-yelp:before {
+  content: "\f1e9"; }
+
+.fa-cc-visa:before {
+  content: "\f1f0"; }
+
+.fa-lastfm:before {
+  content: "\f202"; }
+
+.fa-shopware:before {
+  content: "\f5b5"; }
+
+.fa-creative-commons-nc:before {
+  content: "\f4e8"; }
+
+.fa-aws:before {
+  content: "\f375"; }
+
+.fa-redhat:before {
+  content: "\f7bc"; }
+
+.fa-yoast:before {
+  content: "\f2b1"; }
+
+.fa-cloudflare:before {
+  content: "\e07d"; }
+
+.fa-ups:before {
+  content: "\f7e0"; }
+
+.fa-wpexplorer:before {
+  content: "\f2de"; }
+
+.fa-dyalog:before {
+  content: "\f399"; }
+
+.fa-bity:before {
+  content: "\f37a"; }
+
+.fa-stackpath:before {
+  content: "\f842"; }
+
+.fa-buysellads:before {
+  content: "\f20d"; }
+
+.fa-first-order:before {
+  content: "\f2b0"; }
+
+.fa-modx:before {
+  content: "\f285"; }
+
+.fa-guilded:before {
+  content: "\e07e"; }
+
+.fa-vnv:before {
+  content: "\f40b"; }
+
+.fa-square-js:before {
+  content: "\f3b9"; }
+
+.fa-js-square:before {
+  content: "\f3b9"; }
+
+.fa-microsoft:before {
+  content: "\f3ca"; }
+
+.fa-qq:before {
+  content: "\f1d6"; }
+
+.fa-orcid:before {
+  content: "\f8d2"; }
+
+.fa-java:before {
+  content: "\f4e4"; }
+
+.fa-invision:before {
+  content: "\f7b0"; }
+
+.fa-creative-commons-pd-alt:before {
+  content: "\f4ed"; }
+
+.fa-centercode:before {
+  content: "\f380"; }
+
+.fa-glide-g:before {
+  content: "\f2a6"; }
+
+.fa-drupal:before {
+  content: "\f1a9"; }
+
+.fa-hire-a-helper:before {
+  content: "\f3b0"; }
+
+.fa-creative-commons-by:before {
+  content: "\f4e7"; }
+
+.fa-unity:before {
+  content: "\e049"; }
+
+.fa-whmcs:before {
+  content: "\f40d"; }
+
+.fa-rocketchat:before {
+  content: "\f3e8"; }
+
+.fa-vk:before {
+  content: "\f189"; }
+
+.fa-untappd:before {
+  content: "\f405"; }
+
+.fa-mailchimp:before {
+  content: "\f59e"; }
+
+.fa-css3-alt:before {
+  content: "\f38b"; }
+
+.fa-square-reddit:before {
+  content: "\f1a2"; }
+
+.fa-reddit-square:before {
+  content: "\f1a2"; }
+
+.fa-vimeo-v:before {
+  content: "\f27d"; }
+
+.fa-contao:before {
+  content: "\f26d"; }
+
+.fa-square-font-awesome:before {
+  content: "\e5ad"; }
+
+.fa-deskpro:before {
+  content: "\f38f"; }
+
+.fa-sistrix:before {
+  content: "\f3ee"; }
+
+.fa-square-instagram:before {
+  content: "\e055"; }
+
+.fa-instagram-square:before {
+  content: "\e055"; }
+
+.fa-battle-net:before {
+  content: "\f835"; }
+
+.fa-the-red-yeti:before {
+  content: "\f69d"; }
+
+.fa-square-hacker-news:before {
+  content: "\f3af"; }
+
+.fa-hacker-news-square:before {
+  content: "\f3af"; }
+
+.fa-edge:before {
+  content: "\f282"; }
+
+.fa-napster:before {
+  content: "\f3d2"; }
+
+.fa-square-snapchat:before {
+  content: "\f2ad"; }
+
+.fa-snapchat-square:before {
+  content: "\f2ad"; }
+
+.fa-google-plus-g:before {
+  content: "\f0d5"; }
+
+.fa-artstation:before {
+  content: "\f77a"; }
+
+.fa-markdown:before {
+  content: "\f60f"; }
+
+.fa-sourcetree:before {
+  content: "\f7d3"; }
+
+.fa-google-plus:before {
+  content: "\f2b3"; }
+
+.fa-diaspora:before {
+  content: "\f791"; }
+
+.fa-foursquare:before {
+  content: "\f180"; }
+
+.fa-stack-overflow:before {
+  content: "\f16c"; }
+
+.fa-github-alt:before {
+  content: "\f113"; }
+
+.fa-phoenix-squadron:before {
+  content: "\f511"; }
+
+.fa-pagelines:before {
+  content: "\f18c"; }
+
+.fa-algolia:before {
+  content: "\f36c"; }
+
+.fa-red-river:before {
+  content: "\f3e3"; }
+
+.fa-creative-commons-sa:before {
+  content: "\f4ef"; }
+
+.fa-safari:before {
+  content: "\f267"; }
+
+.fa-google:before {
+  content: "\f1a0"; }
+
+.fa-square-font-awesome-stroke:before {
+  content: "\f35c"; }
+
+.fa-font-awesome-alt:before {
+  content: "\f35c"; }
+
+.fa-atlassian:before {
+  content: "\f77b"; }
+
+.fa-linkedin-in:before {
+  content: "\f0e1"; }
+
+.fa-digital-ocean:before {
+  content: "\f391"; }
+
+.fa-nimblr:before {
+  content: "\f5a8"; }
+
+.fa-chromecast:before {
+  content: "\f838"; }
+
+.fa-evernote:before {
+  content: "\f839"; }
+
+.fa-hacker-news:before {
+  content: "\f1d4"; }
+
+.fa-creative-commons-sampling:before {
+  content: "\f4f0"; }
+
+.fa-adversal:before {
+  content: "\f36a"; }
+
+.fa-creative-commons:before {
+  content: "\f25e"; }
+
+.fa-watchman-monitoring:before {
+  content: "\e087"; }
+
+.fa-fonticons:before {
+  content: "\f280"; }
+
+.fa-weixin:before {
+  content: "\f1d7"; }
+
+.fa-shirtsinbulk:before {
+  content: "\f214"; }
+
+.fa-codepen:before {
+  content: "\f1cb"; }
+
+.fa-git-alt:before {
+  content: "\f841"; }
+
+.fa-lyft:before {
+  content: "\f3c3"; }
+
+.fa-rev:before {
+  content: "\f5b2"; }
+
+.fa-windows:before {
+  content: "\f17a"; }
+
+.fa-wizards-of-the-coast:before {
+  content: "\f730"; }
+
+.fa-square-viadeo:before {
+  content: "\f2aa"; }
+
+.fa-viadeo-square:before {
+  content: "\f2aa"; }
+
+.fa-meetup:before {
+  content: "\f2e0"; }
+
+.fa-centos:before {
+  content: "\f789"; }
+
+.fa-adn:before {
+  content: "\f170"; }
+
+.fa-cloudsmith:before {
+  content: "\f384"; }
+
+.fa-pied-piper-alt:before {
+  content: "\f1a8"; }
+
+.fa-square-dribbble:before {
+  content: "\f397"; }
+
+.fa-dribbble-square:before {
+  content: "\f397"; }
+
+.fa-codiepie:before {
+  content: "\f284"; }
+
+.fa-node:before {
+  content: "\f419"; }
+
+.fa-mix:before {
+  content: "\f3cb"; }
+
+.fa-steam:before {
+  content: "\f1b6"; }
+
+.fa-cc-apple-pay:before {
+  content: "\f416"; }
+
+.fa-scribd:before {
+  content: "\f28a"; }
+
+.fa-openid:before {
+  content: "\f19b"; }
+
+.fa-instalod:before {
+  content: "\e081"; }
+
+.fa-expeditedssl:before {
+  content: "\f23e"; }
+
+.fa-sellcast:before {
+  content: "\f2da"; }
+
+.fa-square-twitter:before {
+  content: "\f081"; }
+
+.fa-twitter-square:before {
+  content: "\f081"; }
+
+.fa-r-project:before {
+  content: "\f4f7"; }
+
+.fa-delicious:before {
+  content: "\f1a5"; }
+
+.fa-freebsd:before {
+  content: "\f3a4"; }
+
+.fa-vuejs:before {
+  content: "\f41f"; }
+
+.fa-accusoft:before {
+  content: "\f369"; }
+
+.fa-ioxhost:before {
+  content: "\f208"; }
+
+.fa-fonticons-fi:before {
+  content: "\f3a2"; }
+
+.fa-app-store:before {
+  content: "\f36f"; }
+
+.fa-cc-mastercard:before {
+  content: "\f1f1"; }
+
+.fa-itunes-note:before {
+  content: "\f3b5"; }
+
+.fa-golang:before {
+  content: "\e40f"; }
+
+.fa-kickstarter:before {
+  content: "\f3bb"; }
+
+.fa-grav:before {
+  content: "\f2d6"; }
+
+.fa-weibo:before {
+  content: "\f18a"; }
+
+.fa-uncharted:before {
+  content: "\e084"; }
+
+.fa-firstdraft:before {
+  content: "\f3a1"; }
+
+.fa-square-youtube:before {
+  content: "\f431"; }
+
+.fa-youtube-square:before {
+  content: "\f431"; }
+
+.fa-wikipedia-w:before {
+  content: "\f266"; }
+
+.fa-wpressr:before {
+  content: "\f3e4"; }
+
+.fa-rendact:before {
+  content: "\f3e4"; }
+
+.fa-angellist:before {
+  content: "\f209"; }
+
+.fa-galactic-republic:before {
+  content: "\f50c"; }
+
+.fa-nfc-directional:before {
+  content: "\e530"; }
+
+.fa-skype:before {
+  content: "\f17e"; }
+
+.fa-joget:before {
+  content: "\f3b7"; }
+
+.fa-fedora:before {
+  content: "\f798"; }
+
+.fa-stripe-s:before {
+  content: "\f42a"; }
+
+.fa-meta:before {
+  content: "\e49b"; }
+
+.fa-laravel:before {
+  content: "\f3bd"; }
+
+.fa-hotjar:before {
+  content: "\f3b1"; }
+
+.fa-bluetooth-b:before {
+  content: "\f294"; }
+
+.fa-sticker-mule:before {
+  content: "\f3f7"; }
+
+.fa-creative-commons-zero:before {
+  content: "\f4f3"; }
+
+.fa-hips:before {
+  content: "\f452"; }
+
+.fa-behance:before {
+  content: "\f1b4"; }
+
+.fa-reddit:before {
+  content: "\f1a1"; }
+
+.fa-discord:before {
+  content: "\f392"; }
+
+.fa-chrome:before {
+  content: "\f268"; }
+
+.fa-app-store-ios:before {
+  content: "\f370"; }
+
+.fa-cc-discover:before {
+  content: "\f1f2"; }
+
+.fa-wpbeginner:before {
+  content: "\f297"; }
+
+.fa-confluence:before {
+  content: "\f78d"; }
+
+.fa-mdb:before {
+  content: "\f8ca"; }
+
+.fa-dochub:before {
+  content: "\f394"; }
+
+.fa-accessible-icon:before {
+  content: "\f368"; }
+
+.fa-ebay:before {
+  content: "\f4f4"; }
+
+.fa-amazon:before {
+  content: "\f270"; }
+
+.fa-unsplash:before {
+  content: "\e07c"; }
+
+.fa-yarn:before {
+  content: "\f7e3"; }
+
+.fa-square-steam:before {
+  content: "\f1b7"; }
+
+.fa-steam-square:before {
+  content: "\f1b7"; }
+
+.fa-500px:before {
+  content: "\f26e"; }
+
+.fa-square-vimeo:before {
+  content: "\f194"; }
+
+.fa-vimeo-square:before {
+  content: "\f194"; }
+
+.fa-asymmetrik:before {
+  content: "\f372"; }
+
+.fa-font-awesome:before {
+  content: "\f2b4"; }
+
+.fa-font-awesome-flag:before {
+  content: "\f2b4"; }
+
+.fa-font-awesome-logo-full:before {
+  content: "\f2b4"; }
+
+.fa-gratipay:before {
+  content: "\f184"; }
+
+.fa-apple:before {
+  content: "\f179"; }
+
+.fa-hive:before {
+  content: "\e07f"; }
+
+.fa-gitkraken:before {
+  content: "\f3a6"; }
+
+.fa-keybase:before {
+  content: "\f4f5"; }
+
+.fa-apple-pay:before {
+  content: "\f415"; }
+
+.fa-padlet:before {
+  content: "\e4a0"; }
+
+.fa-amazon-pay:before {
+  content: "\f42c"; }
+
+.fa-square-github:before {
+  content: "\f092"; }
+
+.fa-github-square:before {
+  content: "\f092"; }
+
+.fa-stumbleupon:before {
+  content: "\f1a4"; }
+
+.fa-fedex:before {
+  content: "\f797"; }
+
+.fa-phoenix-framework:before {
+  content: "\f3dc"; }
+
+.fa-shopify:before {
+  content: "\e057"; }
+
+.fa-neos:before {
+  content: "\f612"; }
+
+.fa-hackerrank:before {
+  content: "\f5f7"; }
+
+.fa-researchgate:before {
+  content: "\f4f8"; }
+
+.fa-swift:before {
+  content: "\f8e1"; }
+
+.fa-angular:before {
+  content: "\f420"; }
+
+.fa-speakap:before {
+  content: "\f3f3"; }
+
+.fa-angrycreative:before {
+  content: "\f36e"; }
+
+.fa-y-combinator:before {
+  content: "\f23b"; }
+
+.fa-empire:before {
+  content: "\f1d1"; }
+
+.fa-envira:before {
+  content: "\f299"; }
+
+.fa-square-gitlab:before {
+  content: "\e5ae"; }
+
+.fa-gitlab-square:before {
+  content: "\e5ae"; }
+
+.fa-studiovinari:before {
+  content: "\f3f8"; }
+
+.fa-pied-piper:before {
+  content: "\f2ae"; }
+
+.fa-wordpress:before {
+  content: "\f19a"; }
+
+.fa-product-hunt:before {
+  content: "\f288"; }
+
+.fa-firefox:before {
+  content: "\f269"; }
+
+.fa-linode:before {
+  content: "\f2b8"; }
+
+.fa-goodreads:before {
+  content: "\f3a8"; }
+
+.fa-square-odnoklassniki:before {
+  content: "\f264"; }
+
+.fa-odnoklassniki-square:before {
+  content: "\f264"; }
+
+.fa-jsfiddle:before {
+  content: "\f1cc"; }
+
+.fa-sith:before {
+  content: "\f512"; }
+
+.fa-themeisle:before {
+  content: "\f2b2"; }
+
+.fa-page4:before {
+  content: "\f3d7"; }
+
+.fa-hashnode:before {
+  content: "\e499"; }
+
+.fa-react:before {
+  content: "\f41b"; }
+
+.fa-cc-paypal:before {
+  content: "\f1f4"; }
+
+.fa-squarespace:before {
+  content: "\f5be"; }
+
+.fa-cc-stripe:before {
+  content: "\f1f5"; }
+
+.fa-creative-commons-share:before {
+  content: "\f4f2"; }
+
+.fa-bitcoin:before {
+  content: "\f379"; }
+
+.fa-keycdn:before {
+  content: "\f3ba"; }
+
+.fa-opera:before {
+  content: "\f26a"; }
+
+.fa-itch-io:before {
+  content: "\f83a"; }
+
+.fa-umbraco:before {
+  content: "\f8e8"; }
+
+.fa-galactic-senate:before {
+  content: "\f50d"; }
+
+.fa-ubuntu:before {
+  content: "\f7df"; }
+
+.fa-draft2digital:before {
+  content: "\f396"; }
+
+.fa-stripe:before {
+  content: "\f429"; }
+
+.fa-houzz:before {
+  content: "\f27c"; }
+
+.fa-gg:before {
+  content: "\f260"; }
+
+.fa-dhl:before {
+  content: "\f790"; }
+
+.fa-square-pinterest:before {
+  content: "\f0d3"; }
+
+.fa-pinterest-square:before {
+  content: "\f0d3"; }
+
+.fa-xing:before {
+  content: "\f168"; }
+
+.fa-blackberry:before {
+  content: "\f37b"; }
+
+.fa-creative-commons-pd:before {
+  content: "\f4ec"; }
+
+.fa-playstation:before {
+  content: "\f3df"; }
+
+.fa-quinscape:before {
+  content: "\f459"; }
+
+.fa-less:before {
+  content: "\f41d"; }
+
+.fa-blogger-b:before {
+  content: "\f37d"; }
+
+.fa-opencart:before {
+  content: "\f23d"; }
+
+.fa-vine:before {
+  content: "\f1ca"; }
+
+.fa-paypal:before {
+  content: "\f1ed"; }
+
+.fa-gitlab:before {
+  content: "\f296"; }
+
+.fa-typo3:before {
+  content: "\f42b"; }
+
+.fa-reddit-alien:before {
+  content: "\f281"; }
+
+.fa-yahoo:before {
+  content: "\f19e"; }
+
+.fa-dailymotion:before {
+  content: "\e052"; }
+
+.fa-affiliatetheme:before {
+  content: "\f36b"; }
+
+.fa-pied-piper-pp:before {
+  content: "\f1a7"; }
+
+.fa-bootstrap:before {
+  content: "\f836"; }
+
+.fa-odnoklassniki:before {
+  content: "\f263"; }
+
+.fa-nfc-symbol:before {
+  content: "\e531"; }
+
+.fa-ethereum:before {
+  content: "\f42e"; }
+
+.fa-speaker-deck:before {
+  content: "\f83c"; }
+
+.fa-creative-commons-nc-eu:before {
+  content: "\f4e9"; }
+
+.fa-patreon:before {
+  content: "\f3d9"; }
+
+.fa-avianex:before {
+  content: "\f374"; }
+
+.fa-ello:before {
+  content: "\f5f1"; }
+
+.fa-gofore:before {
+  content: "\f3a7"; }
+
+.fa-bimobject:before {
+  content: "\f378"; }
+
+.fa-facebook-f:before {
+  content: "\f39e"; }
+
+.fa-square-google-plus:before {
+  content: "\f0d4"; }
+
+.fa-google-plus-square:before {
+  content: "\f0d4"; }
+
+.fa-mandalorian:before {
+  content: "\f50f"; }
+
+.fa-first-order-alt:before {
+  content: "\f50a"; }
+
+.fa-osi:before {
+  content: "\f41a"; }
+
+.fa-google-wallet:before {
+  content: "\f1ee"; }
+
+.fa-d-and-d-beyond:before {
+  content: "\f6ca"; }
+
+.fa-periscope:before {
+  content: "\f3da"; }
+
+.fa-fulcrum:before {
+  content: "\f50b"; }
+
+.fa-cloudscale:before {
+  content: "\f383"; }
+
+.fa-forumbee:before {
+  content: "\f211"; }
+
+.fa-mizuni:before {
+  content: "\f3cc"; }
+
+.fa-schlix:before {
+  content: "\f3ea"; }
+
+.fa-square-xing:before {
+  content: "\f169"; }
+
+.fa-xing-square:before {
+  content: "\f169"; }
+
+.fa-bandcamp:before {
+  content: "\f2d5"; }
+
+.fa-wpforms:before {
+  content: "\f298"; }
+
+.fa-cloudversify:before {
+  content: "\f385"; }
+
+.fa-usps:before {
+  content: "\f7e1"; }
+
+.fa-megaport:before {
+  content: "\f5a3"; }
+
+.fa-magento:before {
+  content: "\f3c4"; }
+
+.fa-spotify:before {
+  content: "\f1bc"; }
+
+.fa-optin-monster:before {
+  content: "\f23c"; }
+
+.fa-fly:before {
+  content: "\f417"; }
+
+.fa-aviato:before {
+  content: "\f421"; }
+
+.fa-itunes:before {
+  content: "\f3b4"; }
+
+.fa-cuttlefish:before {
+  content: "\f38c"; }
+
+.fa-blogger:before {
+  content: "\f37c"; }
+
+.fa-flickr:before {
+  content: "\f16e"; }
+
+.fa-viber:before {
+  content: "\f409"; }
+
+.fa-soundcloud:before {
+  content: "\f1be"; }
+
+.fa-digg:before {
+  content: "\f1a6"; }
+
+.fa-tencent-weibo:before {
+  content: "\f1d5"; }
+
+.fa-symfony:before {
+  content: "\f83d"; }
+
+.fa-maxcdn:before {
+  content: "\f136"; }
+
+.fa-etsy:before {
+  content: "\f2d7"; }
+
+.fa-facebook-messenger:before {
+  content: "\f39f"; }
+
+.fa-audible:before {
+  content: "\f373"; }
+
+.fa-think-peaks:before {
+  content: "\f731"; }
+
+.fa-bilibili:before {
+  content: "\e3d9"; }
+
+.fa-erlang:before {
+  content: "\f39d"; }
+
+.fa-cotton-bureau:before {
+  content: "\f89e"; }
+
+.fa-dashcube:before {
+  content: "\f210"; }
+
+.fa-42-group:before {
+  content: "\e080"; }
+
+.fa-innosoft:before {
+  content: "\e080"; }
+
+.fa-stack-exchange:before {
+  content: "\f18d"; }
+
+.fa-elementor:before {
+  content: "\f430"; }
+
+.fa-square-pied-piper:before {
+  content: "\e01e"; }
+
+.fa-pied-piper-square:before {
+  content: "\e01e"; }
+
+.fa-creative-commons-nd:before {
+  content: "\f4eb"; }
+
+.fa-palfed:before {
+  content: "\f3d8"; }
+
+.fa-superpowers:before {
+  content: "\f2dd"; }
+
+.fa-resolving:before {
+  content: "\f3e7"; }
+
+.fa-xbox:before {
+  content: "\f412"; }
+
+.fa-searchengin:before {
+  content: "\f3eb"; }
+
+.fa-tiktok:before {
+  content: "\e07b"; }
+
+.fa-square-facebook:before {
+  content: "\f082"; }
+
+.fa-facebook-square:before {
+  content: "\f082"; }
+
+.fa-renren:before {
+  content: "\f18b"; }
+
+.fa-linux:before {
+  content: "\f17c"; }
+
+.fa-glide:before {
+  content: "\f2a5"; }
+
+.fa-linkedin:before {
+  content: "\f08c"; }
+
+.fa-hubspot:before {
+  content: "\f3b2"; }
+
+.fa-deploydog:before {
+  content: "\f38e"; }
+
+.fa-twitch:before {
+  content: "\f1e8"; }
+
+.fa-ravelry:before {
+  content: "\f2d9"; }
+
+.fa-mixer:before {
+  content: "\e056"; }
+
+.fa-square-lastfm:before {
+  content: "\f203"; }
+
+.fa-lastfm-square:before {
+  content: "\f203"; }
+
+.fa-vimeo:before {
+  content: "\f40a"; }
+
+.fa-mendeley:before {
+  content: "\f7b3"; }
+
+.fa-uniregistry:before {
+  content: "\f404"; }
+
+.fa-figma:before {
+  content: "\f799"; }
+
+.fa-creative-commons-remix:before {
+  content: "\f4ee"; }
+
+.fa-cc-amazon-pay:before {
+  content: "\f42d"; }
+
+.fa-dropbox:before {
+  content: "\f16b"; }
+
+.fa-instagram:before {
+  content: "\f16d"; }
+
+.fa-cmplid:before {
+  content: "\e360"; }
+
+.fa-facebook:before {
+  content: "\f09a"; }
+
+.fa-gripfire:before {
+  content: "\f3ac"; }
+
+.fa-jedi-order:before {
+  content: "\f50e"; }
+
+.fa-uikit:before {
+  content: "\f403"; }
+
+.fa-fort-awesome-alt:before {
+  content: "\f3a3"; }
+
+.fa-phabricator:before {
+  content: "\f3db"; }
+
+.fa-ussunnah:before {
+  content: "\f407"; }
+
+.fa-earlybirds:before {
+  content: "\f39a"; }
+
+.fa-trade-federation:before {
+  content: "\f513"; }
+
+.fa-autoprefixer:before {
+  content: "\f41c"; }
+
+.fa-whatsapp:before {
+  content: "\f232"; }
+
+.fa-slideshare:before {
+  content: "\f1e7"; }
+
+.fa-google-play:before {
+  content: "\f3ab"; }
+
+.fa-viadeo:before {
+  content: "\f2a9"; }
+
+.fa-line:before {
+  content: "\f3c0"; }
+
+.fa-google-drive:before {
+  content: "\f3aa"; }
+
+.fa-servicestack:before {
+  content: "\f3ec"; }
+
+.fa-simplybuilt:before {
+  content: "\f215"; }
+
+.fa-bitbucket:before {
+  content: "\f171"; }
+
+.fa-imdb:before {
+  content: "\f2d8"; }
+
+.fa-deezer:before {
+  content: "\e077"; }
+
+.fa-raspberry-pi:before {
+  content: "\f7bb"; }
+
+.fa-jira:before {
+  content: "\f7b1"; }
+
+.fa-docker:before {
+  content: "\f395"; }
+
+.fa-screenpal:before {
+  content: "\e570"; }
+
+.fa-bluetooth:before {
+  content: "\f293"; }
+
+.fa-gitter:before {
+  content: "\f426"; }
+
+.fa-d-and-d:before {
+  content: "\f38d"; }
+
+.fa-microblog:before {
+  content: "\e01a"; }
+
+.fa-cc-diners-club:before {
+  content: "\f24c"; }
+
+.fa-gg-circle:before {
+  content: "\f261"; }
+
+.fa-pied-piper-hat:before {
+  content: "\f4e5"; }
+
+.fa-kickstarter-k:before {
+  content: "\f3bc"; }
+
+.fa-yandex:before {
+  content: "\f413"; }
+
+.fa-readme:before {
+  content: "\f4d5"; }
+
+.fa-html5:before {
+  content: "\f13b"; }
+
+.fa-sellsy:before {
+  content: "\f213"; }
+
+.fa-sass:before {
+  content: "\f41e"; }
+
+.fa-wirsindhandwerk:before {
+  content: "\e2d0"; }
+
+.fa-wsh:before {
+  content: "\e2d0"; }
+
+.fa-buromobelexperte:before {
+  content: "\f37f"; }
+
+.fa-salesforce:before {
+  content: "\f83b"; }
+
+.fa-octopus-deploy:before {
+  content: "\e082"; }
+
+.fa-medapps:before {
+  content: "\f3c6"; }
+
+.fa-ns8:before {
+  content: "\f3d5"; }
+
+.fa-pinterest-p:before {
+  content: "\f231"; }
+
+.fa-apper:before {
+  content: "\f371"; }
+
+.fa-fort-awesome:before {
+  content: "\f286"; }
+
+.fa-waze:before {
+  content: "\f83f"; }
+
+.fa-cc-jcb:before {
+  content: "\f24b"; }
+
+.fa-snapchat:before {
+  content: "\f2ab"; }
+
+.fa-snapchat-ghost:before {
+  content: "\f2ab"; }
+
+.fa-fantasy-flight-games:before {
+  content: "\f6dc"; }
+
+.fa-rust:before {
+  content: "\e07a"; }
+
+.fa-wix:before {
+  content: "\f5cf"; }
+
+.fa-square-behance:before {
+  content: "\f1b5"; }
+
+.fa-behance-square:before {
+  content: "\f1b5"; }
+
+.fa-supple:before {
+  content: "\f3f9"; }
+
+.fa-rebel:before {
+  content: "\f1d0"; }
+
+.fa-css3:before {
+  content: "\f13c"; }
+
+.fa-staylinked:before {
+  content: "\f3f5"; }
+
+.fa-kaggle:before {
+  content: "\f5fa"; }
+
+.fa-space-awesome:before {
+  content: "\e5ac"; }
+
+.fa-deviantart:before {
+  content: "\f1bd"; }
+
+.fa-cpanel:before {
+  content: "\f388"; }
+
+.fa-goodreads-g:before {
+  content: "\f3a9"; }
+
+.fa-square-git:before {
+  content: "\f1d2"; }
+
+.fa-git-square:before {
+  content: "\f1d2"; }
+
+.fa-square-tumblr:before {
+  content: "\f174"; }
+
+.fa-tumblr-square:before {
+  content: "\f174"; }
+
+.fa-trello:before {
+  content: "\f181"; }
+
+.fa-creative-commons-nc-jp:before {
+  content: "\f4ea"; }
+
+.fa-get-pocket:before {
+  content: "\f265"; }
+
+.fa-perbyte:before {
+  content: "\e083"; }
+
+.fa-grunt:before {
+  content: "\f3ad"; }
+
+.fa-weebly:before {
+  content: "\f5cc"; }
+
+.fa-connectdevelop:before {
+  content: "\f20e"; }
+
+.fa-leanpub:before {
+  content: "\f212"; }
+
+.fa-black-tie:before {
+  content: "\f27e"; }
+
+.fa-themeco:before {
+  content: "\f5c6"; }
+
+.fa-python:before {
+  content: "\f3e2"; }
+
+.fa-android:before {
+  content: "\f17b"; }
+
+.fa-bots:before {
+  content: "\e340"; }
+
+.fa-free-code-camp:before {
+  content: "\f2c5"; }
+
+.fa-hornbill:before {
+  content: "\f592"; }
+
+.fa-js:before {
+  content: "\f3b8"; }
+
+.fa-ideal:before {
+  content: "\e013"; }
+
+.fa-git:before {
+  content: "\f1d3"; }
+
+.fa-dev:before {
+  content: "\f6cc"; }
+
+.fa-sketch:before {
+  content: "\f7c6"; }
+
+.fa-yandex-international:before {
+  content: "\f414"; }
+
+.fa-cc-amex:before {
+  content: "\f1f3"; }
+
+.fa-uber:before {
+  content: "\f402"; }
+
+.fa-github:before {
+  content: "\f09b"; }
+
+.fa-php:before {
+  content: "\f457"; }
+
+.fa-alipay:before {
+  content: "\f642"; }
+
+.fa-youtube:before {
+  content: "\f167"; }
+
+.fa-skyatlas:before {
+  content: "\f216"; }
+
+.fa-firefox-browser:before {
+  content: "\e007"; }
+
+.fa-replyd:before {
+  content: "\f3e6"; }
+
+.fa-suse:before {
+  content: "\f7d6"; }
+
+.fa-jenkins:before {
+  content: "\f3b6"; }
+
+.fa-twitter:before {
+  content: "\f099"; }
+
+.fa-rockrms:before {
+  content: "\f3e9"; }
+
+.fa-pinterest:before {
+  content: "\f0d2"; }
+
+.fa-buffer:before {
+  content: "\f837"; }
+
+.fa-npm:before {
+  content: "\f3d4"; }
+
+.fa-yammer:before {
+  content: "\f840"; }
+
+.fa-btc:before {
+  content: "\f15a"; }
+
+.fa-dribbble:before {
+  content: "\f17d"; }
+
+.fa-stumbleupon-circle:before {
+  content: "\f1a3"; }
+
+.fa-internet-explorer:before {
+  content: "\f26b"; }
+
+.fa-stubber:before {
+  content: "\e5c7"; }
+
+.fa-telegram:before {
+  content: "\f2c6"; }
+
+.fa-telegram-plane:before {
+  content: "\f2c6"; }
+
+.fa-old-republic:before {
+  content: "\f510"; }
+
+.fa-odysee:before {
+  content: "\e5c6"; }
+
+.fa-square-whatsapp:before {
+  content: "\f40c"; }
+
+.fa-whatsapp-square:before {
+  content: "\f40c"; }
+
+.fa-node-js:before {
+  content: "\f3d3"; }
+
+.fa-edge-legacy:before {
+  content: "\e078"; }
+
+.fa-slack:before {
+  content: "\f198"; }
+
+.fa-slack-hash:before {
+  content: "\f198"; }
+
+.fa-medrt:before {
+  content: "\f3c8"; }
+
+.fa-usb:before {
+  content: "\f287"; }
+
+.fa-tumblr:before {
+  content: "\f173"; }
+
+.fa-vaadin:before {
+  content: "\f408"; }
+
+.fa-quora:before {
+  content: "\f2c4"; }
+
+.fa-reacteurope:before {
+  content: "\f75d"; }
+
+.fa-medium:before {
+  content: "\f23a"; }
+
+.fa-medium-m:before {
+  content: "\f23a"; }
+
+.fa-amilia:before {
+  content: "\f36d"; }
+
+.fa-mixcloud:before {
+  content: "\f289"; }
+
+.fa-flipboard:before {
+  content: "\f44d"; }
+
+.fa-viacoin:before {
+  content: "\f237"; }
+
+.fa-critical-role:before {
+  content: "\f6c9"; }
+
+.fa-sitrox:before {
+  content: "\e44a"; }
+
+.fa-discourse:before {
+  content: "\f393"; }
+
+.fa-joomla:before {
+  content: "\f1aa"; }
+
+.fa-mastodon:before {
+  content: "\f4f6"; }
+
+.fa-airbnb:before {
+  content: "\f834"; }
+
+.fa-wolf-pack-battalion:before {
+  content: "\f514"; }
+
+.fa-buy-n-large:before {
+  content: "\f8a6"; }
+
+.fa-gulp:before {
+  content: "\f3ae"; }
+
+.fa-creative-commons-sampling-plus:before {
+  content: "\f4f1"; }
+
+.fa-strava:before {
+  content: "\f428"; }
+
+.fa-ember:before {
+  content: "\f423"; }
+
+.fa-canadian-maple-leaf:before {
+  content: "\f785"; }
+
+.fa-teamspeak:before {
+  content: "\f4f9"; }
+
+.fa-pushed:before {
+  content: "\f3e1"; }
+
+.fa-wordpress-simple:before {
+  content: "\f411"; }
+
+.fa-nutritionix:before {
+  content: "\f3d6"; }
+
+.fa-wodu:before {
+  content: "\e088"; }
+
+.fa-google-pay:before {
+  content: "\e079"; }
+
+.fa-intercom:before {
+  content: "\f7af"; }
+
+.fa-zhihu:before {
+  content: "\f63f"; }
+
+.fa-korvue:before {
+  content: "\f42f"; }
+
+.fa-pix:before {
+  content: "\e43a"; }
+
+.fa-steam-symbol:before {
+  content: "\f3f6"; }

文件差异内容过多而无法显示
+ 5 - 0
static/tickets/assets/fontawesome/css/brands.min.css


+ 6372 - 0
static/tickets/assets/fontawesome/css/fontawesome.css

@@ -0,0 +1,6372 @@
+/*!
+ * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2023 Fonticons, Inc.
+ */
+.fa {
+  font-family: var(--fa-style-family, "Font Awesome 6 Free");
+  font-weight: var(--fa-style, 900); }
+
+.fa,
+.fa-classic,
+.fa-sharp,
+.fas,
+.fa-solid,
+.far,
+.fa-regular,
+.fab,
+.fa-brands {
+  -moz-osx-font-smoothing: grayscale;
+  -webkit-font-smoothing: antialiased;
+  display: var(--fa-display, inline-block);
+  font-style: normal;
+  font-variant: normal;
+  line-height: 1;
+  text-rendering: auto; }
+
+.fas,
+.fa-classic,
+.fa-solid,
+.far,
+.fa-regular {
+  font-family: 'Font Awesome 6 Free'; }
+
+.fab,
+.fa-brands {
+  font-family: 'Font Awesome 6 Brands'; }
+
+.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-2xs {
+  font-size: 0.625em;
+  line-height: 0.1em;
+  vertical-align: 0.225em; }
+
+.fa-xs {
+  font-size: 0.75em;
+  line-height: 0.08333em;
+  vertical-align: 0.125em; }
+
+.fa-sm {
+  font-size: 0.875em;
+  line-height: 0.07143em;
+  vertical-align: 0.05357em; }
+
+.fa-lg {
+  font-size: 1.25em;
+  line-height: 0.05em;
+  vertical-align: -0.075em; }
+
+.fa-xl {
+  font-size: 1.5em;
+  line-height: 0.04167em;
+  vertical-align: -0.125em; }
+
+.fa-2xl {
+  font-size: 2em;
+  line-height: 0.03125em;
+  vertical-align: -0.1875em; }
+
+.fa-fw {
+  text-align: center;
+  width: 1.25em; }
+
+.fa-ul {
+  list-style-type: none;
+  margin-left: var(--fa-li-margin, 2.5em);
+  padding-left: 0; }
+  .fa-ul > li {
+    position: relative; }
+
+.fa-li {
+  left: calc(var(--fa-li-width, 2em) * -1);
+  position: absolute;
+  text-align: center;
+  width: var(--fa-li-width, 2em);
+  line-height: inherit; }
+
+.fa-border {
+  border-color: var(--fa-border-color, #eee);
+  border-radius: var(--fa-border-radius, 0.1em);
+  border-style: var(--fa-border-style, solid);
+  border-width: var(--fa-border-width, 0.08em);
+  padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); }
+
+.fa-pull-left {
+  float: left;
+  margin-right: var(--fa-pull-margin, 0.3em); }
+
+.fa-pull-right {
+  float: right;
+  margin-left: var(--fa-pull-margin, 0.3em); }
+
+.fa-beat {
+  -webkit-animation-name: fa-beat;
+          animation-name: fa-beat;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
+          animation-timing-function: var(--fa-animation-timing, ease-in-out); }
+
+.fa-bounce {
+  -webkit-animation-name: fa-bounce;
+          animation-name: fa-bounce;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));
+          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); }
+
+.fa-fade {
+  -webkit-animation-name: fa-fade;
+          animation-name: fa-fade;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
+          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
+
+.fa-beat-fade {
+  -webkit-animation-name: fa-beat-fade;
+          animation-name: fa-beat-fade;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
+          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
+
+.fa-flip {
+  -webkit-animation-name: fa-flip;
+          animation-name: fa-flip;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
+          animation-timing-function: var(--fa-animation-timing, ease-in-out); }
+
+.fa-shake {
+  -webkit-animation-name: fa-shake;
+          animation-name: fa-shake;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, linear);
+          animation-timing-function: var(--fa-animation-timing, linear); }
+
+.fa-spin {
+  -webkit-animation-name: fa-spin;
+          animation-name: fa-spin;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 2s);
+          animation-duration: var(--fa-animation-duration, 2s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, linear);
+          animation-timing-function: var(--fa-animation-timing, linear); }
+
+.fa-spin-reverse {
+  --fa-animation-direction: reverse; }
+
+.fa-pulse,
+.fa-spin-pulse {
+  -webkit-animation-name: fa-spin;
+          animation-name: fa-spin;
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, steps(8));
+          animation-timing-function: var(--fa-animation-timing, steps(8)); }
+
+@media (prefers-reduced-motion: reduce) {
+  .fa-beat,
+  .fa-bounce,
+  .fa-fade,
+  .fa-beat-fade,
+  .fa-flip,
+  .fa-pulse,
+  .fa-shake,
+  .fa-spin,
+  .fa-spin-pulse {
+    -webkit-animation-delay: -1ms;
+            animation-delay: -1ms;
+    -webkit-animation-duration: 1ms;
+            animation-duration: 1ms;
+    -webkit-animation-iteration-count: 1;
+            animation-iteration-count: 1;
+    -webkit-transition-delay: 0s;
+            transition-delay: 0s;
+    -webkit-transition-duration: 0s;
+            transition-duration: 0s; } }
+
+@-webkit-keyframes fa-beat {
+  0%, 90% {
+    -webkit-transform: scale(1);
+            transform: scale(1); }
+  45% {
+    -webkit-transform: scale(var(--fa-beat-scale, 1.25));
+            transform: scale(var(--fa-beat-scale, 1.25)); } }
+
+@keyframes fa-beat {
+  0%, 90% {
+    -webkit-transform: scale(1);
+            transform: scale(1); }
+  45% {
+    -webkit-transform: scale(var(--fa-beat-scale, 1.25));
+            transform: scale(var(--fa-beat-scale, 1.25)); } }
+
+@-webkit-keyframes fa-bounce {
+  0% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); }
+  10% {
+    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
+            transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
+  30% {
+    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
+            transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
+  50% {
+    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
+            transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
+  57% {
+    -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
+            transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
+  64% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); }
+  100% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); } }
+
+@keyframes fa-bounce {
+  0% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); }
+  10% {
+    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
+            transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
+  30% {
+    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
+            transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
+  50% {
+    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
+            transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
+  57% {
+    -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
+            transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
+  64% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); }
+  100% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); } }
+
+@-webkit-keyframes fa-fade {
+  50% {
+    opacity: var(--fa-fade-opacity, 0.4); } }
+
+@keyframes fa-fade {
+  50% {
+    opacity: var(--fa-fade-opacity, 0.4); } }
+
+@-webkit-keyframes fa-beat-fade {
+  0%, 100% {
+    opacity: var(--fa-beat-fade-opacity, 0.4);
+    -webkit-transform: scale(1);
+            transform: scale(1); }
+  50% {
+    opacity: 1;
+    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
+            transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
+
+@keyframes fa-beat-fade {
+  0%, 100% {
+    opacity: var(--fa-beat-fade-opacity, 0.4);
+    -webkit-transform: scale(1);
+            transform: scale(1); }
+  50% {
+    opacity: 1;
+    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
+            transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
+
+@-webkit-keyframes fa-flip {
+  50% {
+    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
+            transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
+
+@keyframes fa-flip {
+  50% {
+    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
+            transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
+
+@-webkit-keyframes fa-shake {
+  0% {
+    -webkit-transform: rotate(-15deg);
+            transform: rotate(-15deg); }
+  4% {
+    -webkit-transform: rotate(15deg);
+            transform: rotate(15deg); }
+  8%, 24% {
+    -webkit-transform: rotate(-18deg);
+            transform: rotate(-18deg); }
+  12%, 28% {
+    -webkit-transform: rotate(18deg);
+            transform: rotate(18deg); }
+  16% {
+    -webkit-transform: rotate(-22deg);
+            transform: rotate(-22deg); }
+  20% {
+    -webkit-transform: rotate(22deg);
+            transform: rotate(22deg); }
+  32% {
+    -webkit-transform: rotate(-12deg);
+            transform: rotate(-12deg); }
+  36% {
+    -webkit-transform: rotate(12deg);
+            transform: rotate(12deg); }
+  40%, 100% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg); } }
+
+@keyframes fa-shake {
+  0% {
+    -webkit-transform: rotate(-15deg);
+            transform: rotate(-15deg); }
+  4% {
+    -webkit-transform: rotate(15deg);
+            transform: rotate(15deg); }
+  8%, 24% {
+    -webkit-transform: rotate(-18deg);
+            transform: rotate(-18deg); }
+  12%, 28% {
+    -webkit-transform: rotate(18deg);
+            transform: rotate(18deg); }
+  16% {
+    -webkit-transform: rotate(-22deg);
+            transform: rotate(-22deg); }
+  20% {
+    -webkit-transform: rotate(22deg);
+            transform: rotate(22deg); }
+  32% {
+    -webkit-transform: rotate(-12deg);
+            transform: rotate(-12deg); }
+  36% {
+    -webkit-transform: rotate(12deg);
+            transform: rotate(12deg); }
+  40%, 100% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg); } }
+
+@-webkit-keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg); }
+  100% {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg); } }
+
+@keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg); }
+  100% {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg); } }
+
+.fa-rotate-90 {
+  -webkit-transform: rotate(90deg);
+          transform: rotate(90deg); }
+
+.fa-rotate-180 {
+  -webkit-transform: rotate(180deg);
+          transform: rotate(180deg); }
+
+.fa-rotate-270 {
+  -webkit-transform: rotate(270deg);
+          transform: rotate(270deg); }
+
+.fa-flip-horizontal {
+  -webkit-transform: scale(-1, 1);
+          transform: scale(-1, 1); }
+
+.fa-flip-vertical {
+  -webkit-transform: scale(1, -1);
+          transform: scale(1, -1); }
+
+.fa-flip-both,
+.fa-flip-horizontal.fa-flip-vertical {
+  -webkit-transform: scale(-1, -1);
+          transform: scale(-1, -1); }
+
+.fa-rotate-by {
+  -webkit-transform: rotate(var(--fa-rotate-angle, none));
+          transform: rotate(var(--fa-rotate-angle, 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%;
+  z-index: var(--fa-stack-z-index, auto); }
+
+.fa-stack-1x {
+  line-height: inherit; }
+
+.fa-stack-2x {
+  font-size: 2em; }
+
+.fa-inverse {
+  color: var(--fa-inverse, #fff); }
+
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+readers do not read off random characters that represent icons */
+
+.fa-0::before {
+  content: "\30"; }
+
+.fa-1::before {
+  content: "\31"; }
+
+.fa-2::before {
+  content: "\32"; }
+
+.fa-3::before {
+  content: "\33"; }
+
+.fa-4::before {
+  content: "\34"; }
+
+.fa-5::before {
+  content: "\35"; }
+
+.fa-6::before {
+  content: "\36"; }
+
+.fa-7::before {
+  content: "\37"; }
+
+.fa-8::before {
+  content: "\38"; }
+
+.fa-9::before {
+  content: "\39"; }
+
+.fa-fill-drip::before {
+  content: "\f576"; }
+
+.fa-arrows-to-circle::before {
+  content: "\e4bd"; }
+
+.fa-circle-chevron-right::before {
+  content: "\f138"; }
+
+.fa-chevron-circle-right::before {
+  content: "\f138"; }
+
+.fa-at::before {
+  content: "\40"; }
+
+.fa-trash-can::before {
+  content: "\f2ed"; }
+
+.fa-trash-alt::before {
+  content: "\f2ed"; }
+
+.fa-text-height::before {
+  content: "\f034"; }
+
+.fa-user-xmark::before {
+  content: "\f235"; }
+
+.fa-user-times::before {
+  content: "\f235"; }
+
+.fa-stethoscope::before {
+  content: "\f0f1"; }
+
+.fa-message::before {
+  content: "\f27a"; }
+
+.fa-comment-alt::before {
+  content: "\f27a"; }
+
+.fa-info::before {
+  content: "\f129"; }
+
+.fa-down-left-and-up-right-to-center::before {
+  content: "\f422"; }
+
+.fa-compress-alt::before {
+  content: "\f422"; }
+
+.fa-explosion::before {
+  content: "\e4e9"; }
+
+.fa-file-lines::before {
+  content: "\f15c"; }
+
+.fa-file-alt::before {
+  content: "\f15c"; }
+
+.fa-file-text::before {
+  content: "\f15c"; }
+
+.fa-wave-square::before {
+  content: "\f83e"; }
+
+.fa-ring::before {
+  content: "\f70b"; }
+
+.fa-building-un::before {
+  content: "\e4d9"; }
+
+.fa-dice-three::before {
+  content: "\f527"; }
+
+.fa-calendar-days::before {
+  content: "\f073"; }
+
+.fa-calendar-alt::before {
+  content: "\f073"; }
+
+.fa-anchor-circle-check::before {
+  content: "\e4aa"; }
+
+.fa-building-circle-arrow-right::before {
+  content: "\e4d1"; }
+
+.fa-volleyball::before {
+  content: "\f45f"; }
+
+.fa-volleyball-ball::before {
+  content: "\f45f"; }
+
+.fa-arrows-up-to-line::before {
+  content: "\e4c2"; }
+
+.fa-sort-down::before {
+  content: "\f0dd"; }
+
+.fa-sort-desc::before {
+  content: "\f0dd"; }
+
+.fa-circle-minus::before {
+  content: "\f056"; }
+
+.fa-minus-circle::before {
+  content: "\f056"; }
+
+.fa-door-open::before {
+  content: "\f52b"; }
+
+.fa-right-from-bracket::before {
+  content: "\f2f5"; }
+
+.fa-sign-out-alt::before {
+  content: "\f2f5"; }
+
+.fa-atom::before {
+  content: "\f5d2"; }
+
+.fa-soap::before {
+  content: "\e06e"; }
+
+.fa-icons::before {
+  content: "\f86d"; }
+
+.fa-heart-music-camera-bolt::before {
+  content: "\f86d"; }
+
+.fa-microphone-lines-slash::before {
+  content: "\f539"; }
+
+.fa-microphone-alt-slash::before {
+  content: "\f539"; }
+
+.fa-bridge-circle-check::before {
+  content: "\e4c9"; }
+
+.fa-pump-medical::before {
+  content: "\e06a"; }
+
+.fa-fingerprint::before {
+  content: "\f577"; }
+
+.fa-hand-point-right::before {
+  content: "\f0a4"; }
+
+.fa-magnifying-glass-location::before {
+  content: "\f689"; }
+
+.fa-search-location::before {
+  content: "\f689"; }
+
+.fa-forward-step::before {
+  content: "\f051"; }
+
+.fa-step-forward::before {
+  content: "\f051"; }
+
+.fa-face-smile-beam::before {
+  content: "\f5b8"; }
+
+.fa-smile-beam::before {
+  content: "\f5b8"; }
+
+.fa-flag-checkered::before {
+  content: "\f11e"; }
+
+.fa-football::before {
+  content: "\f44e"; }
+
+.fa-football-ball::before {
+  content: "\f44e"; }
+
+.fa-school-circle-exclamation::before {
+  content: "\e56c"; }
+
+.fa-crop::before {
+  content: "\f125"; }
+
+.fa-angles-down::before {
+  content: "\f103"; }
+
+.fa-angle-double-down::before {
+  content: "\f103"; }
+
+.fa-users-rectangle::before {
+  content: "\e594"; }
+
+.fa-people-roof::before {
+  content: "\e537"; }
+
+.fa-people-line::before {
+  content: "\e534"; }
+
+.fa-beer-mug-empty::before {
+  content: "\f0fc"; }
+
+.fa-beer::before {
+  content: "\f0fc"; }
+
+.fa-diagram-predecessor::before {
+  content: "\e477"; }
+
+.fa-arrow-up-long::before {
+  content: "\f176"; }
+
+.fa-long-arrow-up::before {
+  content: "\f176"; }
+
+.fa-fire-flame-simple::before {
+  content: "\f46a"; }
+
+.fa-burn::before {
+  content: "\f46a"; }
+
+.fa-person::before {
+  content: "\f183"; }
+
+.fa-male::before {
+  content: "\f183"; }
+
+.fa-laptop::before {
+  content: "\f109"; }
+
+.fa-file-csv::before {
+  content: "\f6dd"; }
+
+.fa-menorah::before {
+  content: "\f676"; }
+
+.fa-truck-plane::before {
+  content: "\e58f"; }
+
+.fa-record-vinyl::before {
+  content: "\f8d9"; }
+
+.fa-face-grin-stars::before {
+  content: "\f587"; }
+
+.fa-grin-stars::before {
+  content: "\f587"; }
+
+.fa-bong::before {
+  content: "\f55c"; }
+
+.fa-spaghetti-monster-flying::before {
+  content: "\f67b"; }
+
+.fa-pastafarianism::before {
+  content: "\f67b"; }
+
+.fa-arrow-down-up-across-line::before {
+  content: "\e4af"; }
+
+.fa-spoon::before {
+  content: "\f2e5"; }
+
+.fa-utensil-spoon::before {
+  content: "\f2e5"; }
+
+.fa-jar-wheat::before {
+  content: "\e517"; }
+
+.fa-envelopes-bulk::before {
+  content: "\f674"; }
+
+.fa-mail-bulk::before {
+  content: "\f674"; }
+
+.fa-file-circle-exclamation::before {
+  content: "\e4eb"; }
+
+.fa-circle-h::before {
+  content: "\f47e"; }
+
+.fa-hospital-symbol::before {
+  content: "\f47e"; }
+
+.fa-pager::before {
+  content: "\f815"; }
+
+.fa-address-book::before {
+  content: "\f2b9"; }
+
+.fa-contact-book::before {
+  content: "\f2b9"; }
+
+.fa-strikethrough::before {
+  content: "\f0cc"; }
+
+.fa-k::before {
+  content: "\4b"; }
+
+.fa-landmark-flag::before {
+  content: "\e51c"; }
+
+.fa-pencil::before {
+  content: "\f303"; }
+
+.fa-pencil-alt::before {
+  content: "\f303"; }
+
+.fa-backward::before {
+  content: "\f04a"; }
+
+.fa-caret-right::before {
+  content: "\f0da"; }
+
+.fa-comments::before {
+  content: "\f086"; }
+
+.fa-paste::before {
+  content: "\f0ea"; }
+
+.fa-file-clipboard::before {
+  content: "\f0ea"; }
+
+.fa-code-pull-request::before {
+  content: "\e13c"; }
+
+.fa-clipboard-list::before {
+  content: "\f46d"; }
+
+.fa-truck-ramp-box::before {
+  content: "\f4de"; }
+
+.fa-truck-loading::before {
+  content: "\f4de"; }
+
+.fa-user-check::before {
+  content: "\f4fc"; }
+
+.fa-vial-virus::before {
+  content: "\e597"; }
+
+.fa-sheet-plastic::before {
+  content: "\e571"; }
+
+.fa-blog::before {
+  content: "\f781"; }
+
+.fa-user-ninja::before {
+  content: "\f504"; }
+
+.fa-person-arrow-up-from-line::before {
+  content: "\e539"; }
+
+.fa-scroll-torah::before {
+  content: "\f6a0"; }
+
+.fa-torah::before {
+  content: "\f6a0"; }
+
+.fa-broom-ball::before {
+  content: "\f458"; }
+
+.fa-quidditch::before {
+  content: "\f458"; }
+
+.fa-quidditch-broom-ball::before {
+  content: "\f458"; }
+
+.fa-toggle-off::before {
+  content: "\f204"; }
+
+.fa-box-archive::before {
+  content: "\f187"; }
+
+.fa-archive::before {
+  content: "\f187"; }
+
+.fa-person-drowning::before {
+  content: "\e545"; }
+
+.fa-arrow-down-9-1::before {
+  content: "\f886"; }
+
+.fa-sort-numeric-desc::before {
+  content: "\f886"; }
+
+.fa-sort-numeric-down-alt::before {
+  content: "\f886"; }
+
+.fa-face-grin-tongue-squint::before {
+  content: "\f58a"; }
+
+.fa-grin-tongue-squint::before {
+  content: "\f58a"; }
+
+.fa-spray-can::before {
+  content: "\f5bd"; }
+
+.fa-truck-monster::before {
+  content: "\f63b"; }
+
+.fa-w::before {
+  content: "\57"; }
+
+.fa-earth-africa::before {
+  content: "\f57c"; }
+
+.fa-globe-africa::before {
+  content: "\f57c"; }
+
+.fa-rainbow::before {
+  content: "\f75b"; }
+
+.fa-circle-notch::before {
+  content: "\f1ce"; }
+
+.fa-tablet-screen-button::before {
+  content: "\f3fa"; }
+
+.fa-tablet-alt::before {
+  content: "\f3fa"; }
+
+.fa-paw::before {
+  content: "\f1b0"; }
+
+.fa-cloud::before {
+  content: "\f0c2"; }
+
+.fa-trowel-bricks::before {
+  content: "\e58a"; }
+
+.fa-face-flushed::before {
+  content: "\f579"; }
+
+.fa-flushed::before {
+  content: "\f579"; }
+
+.fa-hospital-user::before {
+  content: "\f80d"; }
+
+.fa-tent-arrow-left-right::before {
+  content: "\e57f"; }
+
+.fa-gavel::before {
+  content: "\f0e3"; }
+
+.fa-legal::before {
+  content: "\f0e3"; }
+
+.fa-binoculars::before {
+  content: "\f1e5"; }
+
+.fa-microphone-slash::before {
+  content: "\f131"; }
+
+.fa-box-tissue::before {
+  content: "\e05b"; }
+
+.fa-motorcycle::before {
+  content: "\f21c"; }
+
+.fa-bell-concierge::before {
+  content: "\f562"; }
+
+.fa-concierge-bell::before {
+  content: "\f562"; }
+
+.fa-pen-ruler::before {
+  content: "\f5ae"; }
+
+.fa-pencil-ruler::before {
+  content: "\f5ae"; }
+
+.fa-people-arrows::before {
+  content: "\e068"; }
+
+.fa-people-arrows-left-right::before {
+  content: "\e068"; }
+
+.fa-mars-and-venus-burst::before {
+  content: "\e523"; }
+
+.fa-square-caret-right::before {
+  content: "\f152"; }
+
+.fa-caret-square-right::before {
+  content: "\f152"; }
+
+.fa-scissors::before {
+  content: "\f0c4"; }
+
+.fa-cut::before {
+  content: "\f0c4"; }
+
+.fa-sun-plant-wilt::before {
+  content: "\e57a"; }
+
+.fa-toilets-portable::before {
+  content: "\e584"; }
+
+.fa-hockey-puck::before {
+  content: "\f453"; }
+
+.fa-table::before {
+  content: "\f0ce"; }
+
+.fa-magnifying-glass-arrow-right::before {
+  content: "\e521"; }
+
+.fa-tachograph-digital::before {
+  content: "\f566"; }
+
+.fa-digital-tachograph::before {
+  content: "\f566"; }
+
+.fa-users-slash::before {
+  content: "\e073"; }
+
+.fa-clover::before {
+  content: "\e139"; }
+
+.fa-reply::before {
+  content: "\f3e5"; }
+
+.fa-mail-reply::before {
+  content: "\f3e5"; }
+
+.fa-star-and-crescent::before {
+  content: "\f699"; }
+
+.fa-house-fire::before {
+  content: "\e50c"; }
+
+.fa-square-minus::before {
+  content: "\f146"; }
+
+.fa-minus-square::before {
+  content: "\f146"; }
+
+.fa-helicopter::before {
+  content: "\f533"; }
+
+.fa-compass::before {
+  content: "\f14e"; }
+
+.fa-square-caret-down::before {
+  content: "\f150"; }
+
+.fa-caret-square-down::before {
+  content: "\f150"; }
+
+.fa-file-circle-question::before {
+  content: "\e4ef"; }
+
+.fa-laptop-code::before {
+  content: "\f5fc"; }
+
+.fa-swatchbook::before {
+  content: "\f5c3"; }
+
+.fa-prescription-bottle::before {
+  content: "\f485"; }
+
+.fa-bars::before {
+  content: "\f0c9"; }
+
+.fa-navicon::before {
+  content: "\f0c9"; }
+
+.fa-people-group::before {
+  content: "\e533"; }
+
+.fa-hourglass-end::before {
+  content: "\f253"; }
+
+.fa-hourglass-3::before {
+  content: "\f253"; }
+
+.fa-heart-crack::before {
+  content: "\f7a9"; }
+
+.fa-heart-broken::before {
+  content: "\f7a9"; }
+
+.fa-square-up-right::before {
+  content: "\f360"; }
+
+.fa-external-link-square-alt::before {
+  content: "\f360"; }
+
+.fa-face-kiss-beam::before {
+  content: "\f597"; }
+
+.fa-kiss-beam::before {
+  content: "\f597"; }
+
+.fa-film::before {
+  content: "\f008"; }
+
+.fa-ruler-horizontal::before {
+  content: "\f547"; }
+
+.fa-people-robbery::before {
+  content: "\e536"; }
+
+.fa-lightbulb::before {
+  content: "\f0eb"; }
+
+.fa-caret-left::before {
+  content: "\f0d9"; }
+
+.fa-circle-exclamation::before {
+  content: "\f06a"; }
+
+.fa-exclamation-circle::before {
+  content: "\f06a"; }
+
+.fa-school-circle-xmark::before {
+  content: "\e56d"; }
+
+.fa-arrow-right-from-bracket::before {
+  content: "\f08b"; }
+
+.fa-sign-out::before {
+  content: "\f08b"; }
+
+.fa-circle-chevron-down::before {
+  content: "\f13a"; }
+
+.fa-chevron-circle-down::before {
+  content: "\f13a"; }
+
+.fa-unlock-keyhole::before {
+  content: "\f13e"; }
+
+.fa-unlock-alt::before {
+  content: "\f13e"; }
+
+.fa-cloud-showers-heavy::before {
+  content: "\f740"; }
+
+.fa-headphones-simple::before {
+  content: "\f58f"; }
+
+.fa-headphones-alt::before {
+  content: "\f58f"; }
+
+.fa-sitemap::before {
+  content: "\f0e8"; }
+
+.fa-circle-dollar-to-slot::before {
+  content: "\f4b9"; }
+
+.fa-donate::before {
+  content: "\f4b9"; }
+
+.fa-memory::before {
+  content: "\f538"; }
+
+.fa-road-spikes::before {
+  content: "\e568"; }
+
+.fa-fire-burner::before {
+  content: "\e4f1"; }
+
+.fa-flag::before {
+  content: "\f024"; }
+
+.fa-hanukiah::before {
+  content: "\f6e6"; }
+
+.fa-feather::before {
+  content: "\f52d"; }
+
+.fa-volume-low::before {
+  content: "\f027"; }
+
+.fa-volume-down::before {
+  content: "\f027"; }
+
+.fa-comment-slash::before {
+  content: "\f4b3"; }
+
+.fa-cloud-sun-rain::before {
+  content: "\f743"; }
+
+.fa-compress::before {
+  content: "\f066"; }
+
+.fa-wheat-awn::before {
+  content: "\e2cd"; }
+
+.fa-wheat-alt::before {
+  content: "\e2cd"; }
+
+.fa-ankh::before {
+  content: "\f644"; }
+
+.fa-hands-holding-child::before {
+  content: "\e4fa"; }
+
+.fa-asterisk::before {
+  content: "\2a"; }
+
+.fa-square-check::before {
+  content: "\f14a"; }
+
+.fa-check-square::before {
+  content: "\f14a"; }
+
+.fa-peseta-sign::before {
+  content: "\e221"; }
+
+.fa-heading::before {
+  content: "\f1dc"; }
+
+.fa-header::before {
+  content: "\f1dc"; }
+
+.fa-ghost::before {
+  content: "\f6e2"; }
+
+.fa-list::before {
+  content: "\f03a"; }
+
+.fa-list-squares::before {
+  content: "\f03a"; }
+
+.fa-square-phone-flip::before {
+  content: "\f87b"; }
+
+.fa-phone-square-alt::before {
+  content: "\f87b"; }
+
+.fa-cart-plus::before {
+  content: "\f217"; }
+
+.fa-gamepad::before {
+  content: "\f11b"; }
+
+.fa-circle-dot::before {
+  content: "\f192"; }
+
+.fa-dot-circle::before {
+  content: "\f192"; }
+
+.fa-face-dizzy::before {
+  content: "\f567"; }
+
+.fa-dizzy::before {
+  content: "\f567"; }
+
+.fa-egg::before {
+  content: "\f7fb"; }
+
+.fa-house-medical-circle-xmark::before {
+  content: "\e513"; }
+
+.fa-campground::before {
+  content: "\f6bb"; }
+
+.fa-folder-plus::before {
+  content: "\f65e"; }
+
+.fa-futbol::before {
+  content: "\f1e3"; }
+
+.fa-futbol-ball::before {
+  content: "\f1e3"; }
+
+.fa-soccer-ball::before {
+  content: "\f1e3"; }
+
+.fa-paintbrush::before {
+  content: "\f1fc"; }
+
+.fa-paint-brush::before {
+  content: "\f1fc"; }
+
+.fa-lock::before {
+  content: "\f023"; }
+
+.fa-gas-pump::before {
+  content: "\f52f"; }
+
+.fa-hot-tub-person::before {
+  content: "\f593"; }
+
+.fa-hot-tub::before {
+  content: "\f593"; }
+
+.fa-map-location::before {
+  content: "\f59f"; }
+
+.fa-map-marked::before {
+  content: "\f59f"; }
+
+.fa-house-flood-water::before {
+  content: "\e50e"; }
+
+.fa-tree::before {
+  content: "\f1bb"; }
+
+.fa-bridge-lock::before {
+  content: "\e4cc"; }
+
+.fa-sack-dollar::before {
+  content: "\f81d"; }
+
+.fa-pen-to-square::before {
+  content: "\f044"; }
+
+.fa-edit::before {
+  content: "\f044"; }
+
+.fa-car-side::before {
+  content: "\f5e4"; }
+
+.fa-share-nodes::before {
+  content: "\f1e0"; }
+
+.fa-share-alt::before {
+  content: "\f1e0"; }
+
+.fa-heart-circle-minus::before {
+  content: "\e4ff"; }
+
+.fa-hourglass-half::before {
+  content: "\f252"; }
+
+.fa-hourglass-2::before {
+  content: "\f252"; }
+
+.fa-microscope::before {
+  content: "\f610"; }
+
+.fa-sink::before {
+  content: "\e06d"; }
+
+.fa-bag-shopping::before {
+  content: "\f290"; }
+
+.fa-shopping-bag::before {
+  content: "\f290"; }
+
+.fa-arrow-down-z-a::before {
+  content: "\f881"; }
+
+.fa-sort-alpha-desc::before {
+  content: "\f881"; }
+
+.fa-sort-alpha-down-alt::before {
+  content: "\f881"; }
+
+.fa-mitten::before {
+  content: "\f7b5"; }
+
+.fa-person-rays::before {
+  content: "\e54d"; }
+
+.fa-users::before {
+  content: "\f0c0"; }
+
+.fa-eye-slash::before {
+  content: "\f070"; }
+
+.fa-flask-vial::before {
+  content: "\e4f3"; }
+
+.fa-hand::before {
+  content: "\f256"; }
+
+.fa-hand-paper::before {
+  content: "\f256"; }
+
+.fa-om::before {
+  content: "\f679"; }
+
+.fa-worm::before {
+  content: "\e599"; }
+
+.fa-house-circle-xmark::before {
+  content: "\e50b"; }
+
+.fa-plug::before {
+  content: "\f1e6"; }
+
+.fa-chevron-up::before {
+  content: "\f077"; }
+
+.fa-hand-spock::before {
+  content: "\f259"; }
+
+.fa-stopwatch::before {
+  content: "\f2f2"; }
+
+.fa-face-kiss::before {
+  content: "\f596"; }
+
+.fa-kiss::before {
+  content: "\f596"; }
+
+.fa-bridge-circle-xmark::before {
+  content: "\e4cb"; }
+
+.fa-face-grin-tongue::before {
+  content: "\f589"; }
+
+.fa-grin-tongue::before {
+  content: "\f589"; }
+
+.fa-chess-bishop::before {
+  content: "\f43a"; }
+
+.fa-face-grin-wink::before {
+  content: "\f58c"; }
+
+.fa-grin-wink::before {
+  content: "\f58c"; }
+
+.fa-ear-deaf::before {
+  content: "\f2a4"; }
+
+.fa-deaf::before {
+  content: "\f2a4"; }
+
+.fa-deafness::before {
+  content: "\f2a4"; }
+
+.fa-hard-of-hearing::before {
+  content: "\f2a4"; }
+
+.fa-road-circle-check::before {
+  content: "\e564"; }
+
+.fa-dice-five::before {
+  content: "\f523"; }
+
+.fa-square-rss::before {
+  content: "\f143"; }
+
+.fa-rss-square::before {
+  content: "\f143"; }
+
+.fa-land-mine-on::before {
+  content: "\e51b"; }
+
+.fa-i-cursor::before {
+  content: "\f246"; }
+
+.fa-stamp::before {
+  content: "\f5bf"; }
+
+.fa-stairs::before {
+  content: "\e289"; }
+
+.fa-i::before {
+  content: "\49"; }
+
+.fa-hryvnia-sign::before {
+  content: "\f6f2"; }
+
+.fa-hryvnia::before {
+  content: "\f6f2"; }
+
+.fa-pills::before {
+  content: "\f484"; }
+
+.fa-face-grin-wide::before {
+  content: "\f581"; }
+
+.fa-grin-alt::before {
+  content: "\f581"; }
+
+.fa-tooth::before {
+  content: "\f5c9"; }
+
+.fa-v::before {
+  content: "\56"; }
+
+.fa-bangladeshi-taka-sign::before {
+  content: "\e2e6"; }
+
+.fa-bicycle::before {
+  content: "\f206"; }
+
+.fa-staff-snake::before {
+  content: "\e579"; }
+
+.fa-rod-asclepius::before {
+  content: "\e579"; }
+
+.fa-rod-snake::before {
+  content: "\e579"; }
+
+.fa-staff-aesculapius::before {
+  content: "\e579"; }
+
+.fa-head-side-cough-slash::before {
+  content: "\e062"; }
+
+.fa-truck-medical::before {
+  content: "\f0f9"; }
+
+.fa-ambulance::before {
+  content: "\f0f9"; }
+
+.fa-wheat-awn-circle-exclamation::before {
+  content: "\e598"; }
+
+.fa-snowman::before {
+  content: "\f7d0"; }
+
+.fa-mortar-pestle::before {
+  content: "\f5a7"; }
+
+.fa-road-barrier::before {
+  content: "\e562"; }
+
+.fa-school::before {
+  content: "\f549"; }
+
+.fa-igloo::before {
+  content: "\f7ae"; }
+
+.fa-joint::before {
+  content: "\f595"; }
+
+.fa-angle-right::before {
+  content: "\f105"; }
+
+.fa-horse::before {
+  content: "\f6f0"; }
+
+.fa-q::before {
+  content: "\51"; }
+
+.fa-g::before {
+  content: "\47"; }
+
+.fa-notes-medical::before {
+  content: "\f481"; }
+
+.fa-temperature-half::before {
+  content: "\f2c9"; }
+
+.fa-temperature-2::before {
+  content: "\f2c9"; }
+
+.fa-thermometer-2::before {
+  content: "\f2c9"; }
+
+.fa-thermometer-half::before {
+  content: "\f2c9"; }
+
+.fa-dong-sign::before {
+  content: "\e169"; }
+
+.fa-capsules::before {
+  content: "\f46b"; }
+
+.fa-poo-storm::before {
+  content: "\f75a"; }
+
+.fa-poo-bolt::before {
+  content: "\f75a"; }
+
+.fa-face-frown-open::before {
+  content: "\f57a"; }
+
+.fa-frown-open::before {
+  content: "\f57a"; }
+
+.fa-hand-point-up::before {
+  content: "\f0a6"; }
+
+.fa-money-bill::before {
+  content: "\f0d6"; }
+
+.fa-bookmark::before {
+  content: "\f02e"; }
+
+.fa-align-justify::before {
+  content: "\f039"; }
+
+.fa-umbrella-beach::before {
+  content: "\f5ca"; }
+
+.fa-helmet-un::before {
+  content: "\e503"; }
+
+.fa-bullseye::before {
+  content: "\f140"; }
+
+.fa-bacon::before {
+  content: "\f7e5"; }
+
+.fa-hand-point-down::before {
+  content: "\f0a7"; }
+
+.fa-arrow-up-from-bracket::before {
+  content: "\e09a"; }
+
+.fa-folder::before {
+  content: "\f07b"; }
+
+.fa-folder-blank::before {
+  content: "\f07b"; }
+
+.fa-file-waveform::before {
+  content: "\f478"; }
+
+.fa-file-medical-alt::before {
+  content: "\f478"; }
+
+.fa-radiation::before {
+  content: "\f7b9"; }
+
+.fa-chart-simple::before {
+  content: "\e473"; }
+
+.fa-mars-stroke::before {
+  content: "\f229"; }
+
+.fa-vial::before {
+  content: "\f492"; }
+
+.fa-gauge::before {
+  content: "\f624"; }
+
+.fa-dashboard::before {
+  content: "\f624"; }
+
+.fa-gauge-med::before {
+  content: "\f624"; }
+
+.fa-tachometer-alt-average::before {
+  content: "\f624"; }
+
+.fa-wand-magic-sparkles::before {
+  content: "\e2ca"; }
+
+.fa-magic-wand-sparkles::before {
+  content: "\e2ca"; }
+
+.fa-e::before {
+  content: "\45"; }
+
+.fa-pen-clip::before {
+  content: "\f305"; }
+
+.fa-pen-alt::before {
+  content: "\f305"; }
+
+.fa-bridge-circle-exclamation::before {
+  content: "\e4ca"; }
+
+.fa-user::before {
+  content: "\f007"; }
+
+.fa-school-circle-check::before {
+  content: "\e56b"; }
+
+.fa-dumpster::before {
+  content: "\f793"; }
+
+.fa-van-shuttle::before {
+  content: "\f5b6"; }
+
+.fa-shuttle-van::before {
+  content: "\f5b6"; }
+
+.fa-building-user::before {
+  content: "\e4da"; }
+
+.fa-square-caret-left::before {
+  content: "\f191"; }
+
+.fa-caret-square-left::before {
+  content: "\f191"; }
+
+.fa-highlighter::before {
+  content: "\f591"; }
+
+.fa-key::before {
+  content: "\f084"; }
+
+.fa-bullhorn::before {
+  content: "\f0a1"; }
+
+.fa-globe::before {
+  content: "\f0ac"; }
+
+.fa-synagogue::before {
+  content: "\f69b"; }
+
+.fa-person-half-dress::before {
+  content: "\e548"; }
+
+.fa-road-bridge::before {
+  content: "\e563"; }
+
+.fa-location-arrow::before {
+  content: "\f124"; }
+
+.fa-c::before {
+  content: "\43"; }
+
+.fa-tablet-button::before {
+  content: "\f10a"; }
+
+.fa-building-lock::before {
+  content: "\e4d6"; }
+
+.fa-pizza-slice::before {
+  content: "\f818"; }
+
+.fa-money-bill-wave::before {
+  content: "\f53a"; }
+
+.fa-chart-area::before {
+  content: "\f1fe"; }
+
+.fa-area-chart::before {
+  content: "\f1fe"; }
+
+.fa-house-flag::before {
+  content: "\e50d"; }
+
+.fa-person-circle-minus::before {
+  content: "\e540"; }
+
+.fa-ban::before {
+  content: "\f05e"; }
+
+.fa-cancel::before {
+  content: "\f05e"; }
+
+.fa-camera-rotate::before {
+  content: "\e0d8"; }
+
+.fa-spray-can-sparkles::before {
+  content: "\f5d0"; }
+
+.fa-air-freshener::before {
+  content: "\f5d0"; }
+
+.fa-star::before {
+  content: "\f005"; }
+
+.fa-repeat::before {
+  content: "\f363"; }
+
+.fa-cross::before {
+  content: "\f654"; }
+
+.fa-box::before {
+  content: "\f466"; }
+
+.fa-venus-mars::before {
+  content: "\f228"; }
+
+.fa-arrow-pointer::before {
+  content: "\f245"; }
+
+.fa-mouse-pointer::before {
+  content: "\f245"; }
+
+.fa-maximize::before {
+  content: "\f31e"; }
+
+.fa-expand-arrows-alt::before {
+  content: "\f31e"; }
+
+.fa-charging-station::before {
+  content: "\f5e7"; }
+
+.fa-shapes::before {
+  content: "\f61f"; }
+
+.fa-triangle-circle-square::before {
+  content: "\f61f"; }
+
+.fa-shuffle::before {
+  content: "\f074"; }
+
+.fa-random::before {
+  content: "\f074"; }
+
+.fa-person-running::before {
+  content: "\f70c"; }
+
+.fa-running::before {
+  content: "\f70c"; }
+
+.fa-mobile-retro::before {
+  content: "\e527"; }
+
+.fa-grip-lines-vertical::before {
+  content: "\f7a5"; }
+
+.fa-spider::before {
+  content: "\f717"; }
+
+.fa-hands-bound::before {
+  content: "\e4f9"; }
+
+.fa-file-invoice-dollar::before {
+  content: "\f571"; }
+
+.fa-plane-circle-exclamation::before {
+  content: "\e556"; }
+
+.fa-x-ray::before {
+  content: "\f497"; }
+
+.fa-spell-check::before {
+  content: "\f891"; }
+
+.fa-slash::before {
+  content: "\f715"; }
+
+.fa-computer-mouse::before {
+  content: "\f8cc"; }
+
+.fa-mouse::before {
+  content: "\f8cc"; }
+
+.fa-arrow-right-to-bracket::before {
+  content: "\f090"; }
+
+.fa-sign-in::before {
+  content: "\f090"; }
+
+.fa-shop-slash::before {
+  content: "\e070"; }
+
+.fa-store-alt-slash::before {
+  content: "\e070"; }
+
+.fa-server::before {
+  content: "\f233"; }
+
+.fa-virus-covid-slash::before {
+  content: "\e4a9"; }
+
+.fa-shop-lock::before {
+  content: "\e4a5"; }
+
+.fa-hourglass-start::before {
+  content: "\f251"; }
+
+.fa-hourglass-1::before {
+  content: "\f251"; }
+
+.fa-blender-phone::before {
+  content: "\f6b6"; }
+
+.fa-building-wheat::before {
+  content: "\e4db"; }
+
+.fa-person-breastfeeding::before {
+  content: "\e53a"; }
+
+.fa-right-to-bracket::before {
+  content: "\f2f6"; }
+
+.fa-sign-in-alt::before {
+  content: "\f2f6"; }
+
+.fa-venus::before {
+  content: "\f221"; }
+
+.fa-passport::before {
+  content: "\f5ab"; }
+
+.fa-heart-pulse::before {
+  content: "\f21e"; }
+
+.fa-heartbeat::before {
+  content: "\f21e"; }
+
+.fa-people-carry-box::before {
+  content: "\f4ce"; }
+
+.fa-people-carry::before {
+  content: "\f4ce"; }
+
+.fa-temperature-high::before {
+  content: "\f769"; }
+
+.fa-microchip::before {
+  content: "\f2db"; }
+
+.fa-crown::before {
+  content: "\f521"; }
+
+.fa-weight-hanging::before {
+  content: "\f5cd"; }
+
+.fa-xmarks-lines::before {
+  content: "\e59a"; }
+
+.fa-file-prescription::before {
+  content: "\f572"; }
+
+.fa-weight-scale::before {
+  content: "\f496"; }
+
+.fa-weight::before {
+  content: "\f496"; }
+
+.fa-user-group::before {
+  content: "\f500"; }
+
+.fa-user-friends::before {
+  content: "\f500"; }
+
+.fa-arrow-up-a-z::before {
+  content: "\f15e"; }
+
+.fa-sort-alpha-up::before {
+  content: "\f15e"; }
+
+.fa-chess-knight::before {
+  content: "\f441"; }
+
+.fa-face-laugh-squint::before {
+  content: "\f59b"; }
+
+.fa-laugh-squint::before {
+  content: "\f59b"; }
+
+.fa-wheelchair::before {
+  content: "\f193"; }
+
+.fa-circle-arrow-up::before {
+  content: "\f0aa"; }
+
+.fa-arrow-circle-up::before {
+  content: "\f0aa"; }
+
+.fa-toggle-on::before {
+  content: "\f205"; }
+
+.fa-person-walking::before {
+  content: "\f554"; }
+
+.fa-walking::before {
+  content: "\f554"; }
+
+.fa-l::before {
+  content: "\4c"; }
+
+.fa-fire::before {
+  content: "\f06d"; }
+
+.fa-bed-pulse::before {
+  content: "\f487"; }
+
+.fa-procedures::before {
+  content: "\f487"; }
+
+.fa-shuttle-space::before {
+  content: "\f197"; }
+
+.fa-space-shuttle::before {
+  content: "\f197"; }
+
+.fa-face-laugh::before {
+  content: "\f599"; }
+
+.fa-laugh::before {
+  content: "\f599"; }
+
+.fa-folder-open::before {
+  content: "\f07c"; }
+
+.fa-heart-circle-plus::before {
+  content: "\e500"; }
+
+.fa-code-fork::before {
+  content: "\e13b"; }
+
+.fa-city::before {
+  content: "\f64f"; }
+
+.fa-microphone-lines::before {
+  content: "\f3c9"; }
+
+.fa-microphone-alt::before {
+  content: "\f3c9"; }
+
+.fa-pepper-hot::before {
+  content: "\f816"; }
+
+.fa-unlock::before {
+  content: "\f09c"; }
+
+.fa-colon-sign::before {
+  content: "\e140"; }
+
+.fa-headset::before {
+  content: "\f590"; }
+
+.fa-store-slash::before {
+  content: "\e071"; }
+
+.fa-road-circle-xmark::before {
+  content: "\e566"; }
+
+.fa-user-minus::before {
+  content: "\f503"; }
+
+.fa-mars-stroke-up::before {
+  content: "\f22a"; }
+
+.fa-mars-stroke-v::before {
+  content: "\f22a"; }
+
+.fa-champagne-glasses::before {
+  content: "\f79f"; }
+
+.fa-glass-cheers::before {
+  content: "\f79f"; }
+
+.fa-clipboard::before {
+  content: "\f328"; }
+
+.fa-house-circle-exclamation::before {
+  content: "\e50a"; }
+
+.fa-file-arrow-up::before {
+  content: "\f574"; }
+
+.fa-file-upload::before {
+  content: "\f574"; }
+
+.fa-wifi::before {
+  content: "\f1eb"; }
+
+.fa-wifi-3::before {
+  content: "\f1eb"; }
+
+.fa-wifi-strong::before {
+  content: "\f1eb"; }
+
+.fa-bath::before {
+  content: "\f2cd"; }
+
+.fa-bathtub::before {
+  content: "\f2cd"; }
+
+.fa-underline::before {
+  content: "\f0cd"; }
+
+.fa-user-pen::before {
+  content: "\f4ff"; }
+
+.fa-user-edit::before {
+  content: "\f4ff"; }
+
+.fa-signature::before {
+  content: "\f5b7"; }
+
+.fa-stroopwafel::before {
+  content: "\f551"; }
+
+.fa-bold::before {
+  content: "\f032"; }
+
+.fa-anchor-lock::before {
+  content: "\e4ad"; }
+
+.fa-building-ngo::before {
+  content: "\e4d7"; }
+
+.fa-manat-sign::before {
+  content: "\e1d5"; }
+
+.fa-not-equal::before {
+  content: "\f53e"; }
+
+.fa-border-top-left::before {
+  content: "\f853"; }
+
+.fa-border-style::before {
+  content: "\f853"; }
+
+.fa-map-location-dot::before {
+  content: "\f5a0"; }
+
+.fa-map-marked-alt::before {
+  content: "\f5a0"; }
+
+.fa-jedi::before {
+  content: "\f669"; }
+
+.fa-square-poll-vertical::before {
+  content: "\f681"; }
+
+.fa-poll::before {
+  content: "\f681"; }
+
+.fa-mug-hot::before {
+  content: "\f7b6"; }
+
+.fa-car-battery::before {
+  content: "\f5df"; }
+
+.fa-battery-car::before {
+  content: "\f5df"; }
+
+.fa-gift::before {
+  content: "\f06b"; }
+
+.fa-dice-two::before {
+  content: "\f528"; }
+
+.fa-chess-queen::before {
+  content: "\f445"; }
+
+.fa-glasses::before {
+  content: "\f530"; }
+
+.fa-chess-board::before {
+  content: "\f43c"; }
+
+.fa-building-circle-check::before {
+  content: "\e4d2"; }
+
+.fa-person-chalkboard::before {
+  content: "\e53d"; }
+
+.fa-mars-stroke-right::before {
+  content: "\f22b"; }
+
+.fa-mars-stroke-h::before {
+  content: "\f22b"; }
+
+.fa-hand-back-fist::before {
+  content: "\f255"; }
+
+.fa-hand-rock::before {
+  content: "\f255"; }
+
+.fa-square-caret-up::before {
+  content: "\f151"; }
+
+.fa-caret-square-up::before {
+  content: "\f151"; }
+
+.fa-cloud-showers-water::before {
+  content: "\e4e4"; }
+
+.fa-chart-bar::before {
+  content: "\f080"; }
+
+.fa-bar-chart::before {
+  content: "\f080"; }
+
+.fa-hands-bubbles::before {
+  content: "\e05e"; }
+
+.fa-hands-wash::before {
+  content: "\e05e"; }
+
+.fa-less-than-equal::before {
+  content: "\f537"; }
+
+.fa-train::before {
+  content: "\f238"; }
+
+.fa-eye-low-vision::before {
+  content: "\f2a8"; }
+
+.fa-low-vision::before {
+  content: "\f2a8"; }
+
+.fa-crow::before {
+  content: "\f520"; }
+
+.fa-sailboat::before {
+  content: "\e445"; }
+
+.fa-window-restore::before {
+  content: "\f2d2"; }
+
+.fa-square-plus::before {
+  content: "\f0fe"; }
+
+.fa-plus-square::before {
+  content: "\f0fe"; }
+
+.fa-torii-gate::before {
+  content: "\f6a1"; }
+
+.fa-frog::before {
+  content: "\f52e"; }
+
+.fa-bucket::before {
+  content: "\e4cf"; }
+
+.fa-image::before {
+  content: "\f03e"; }
+
+.fa-microphone::before {
+  content: "\f130"; }
+
+.fa-cow::before {
+  content: "\f6c8"; }
+
+.fa-caret-up::before {
+  content: "\f0d8"; }
+
+.fa-screwdriver::before {
+  content: "\f54a"; }
+
+.fa-folder-closed::before {
+  content: "\e185"; }
+
+.fa-house-tsunami::before {
+  content: "\e515"; }
+
+.fa-square-nfi::before {
+  content: "\e576"; }
+
+.fa-arrow-up-from-ground-water::before {
+  content: "\e4b5"; }
+
+.fa-martini-glass::before {
+  content: "\f57b"; }
+
+.fa-glass-martini-alt::before {
+  content: "\f57b"; }
+
+.fa-rotate-left::before {
+  content: "\f2ea"; }
+
+.fa-rotate-back::before {
+  content: "\f2ea"; }
+
+.fa-rotate-backward::before {
+  content: "\f2ea"; }
+
+.fa-undo-alt::before {
+  content: "\f2ea"; }
+
+.fa-table-columns::before {
+  content: "\f0db"; }
+
+.fa-columns::before {
+  content: "\f0db"; }
+
+.fa-lemon::before {
+  content: "\f094"; }
+
+.fa-head-side-mask::before {
+  content: "\e063"; }
+
+.fa-handshake::before {
+  content: "\f2b5"; }
+
+.fa-gem::before {
+  content: "\f3a5"; }
+
+.fa-dolly::before {
+  content: "\f472"; }
+
+.fa-dolly-box::before {
+  content: "\f472"; }
+
+.fa-smoking::before {
+  content: "\f48d"; }
+
+.fa-minimize::before {
+  content: "\f78c"; }
+
+.fa-compress-arrows-alt::before {
+  content: "\f78c"; }
+
+.fa-monument::before {
+  content: "\f5a6"; }
+
+.fa-snowplow::before {
+  content: "\f7d2"; }
+
+.fa-angles-right::before {
+  content: "\f101"; }
+
+.fa-angle-double-right::before {
+  content: "\f101"; }
+
+.fa-cannabis::before {
+  content: "\f55f"; }
+
+.fa-circle-play::before {
+  content: "\f144"; }
+
+.fa-play-circle::before {
+  content: "\f144"; }
+
+.fa-tablets::before {
+  content: "\f490"; }
+
+.fa-ethernet::before {
+  content: "\f796"; }
+
+.fa-euro-sign::before {
+  content: "\f153"; }
+
+.fa-eur::before {
+  content: "\f153"; }
+
+.fa-euro::before {
+  content: "\f153"; }
+
+.fa-chair::before {
+  content: "\f6c0"; }
+
+.fa-circle-check::before {
+  content: "\f058"; }
+
+.fa-check-circle::before {
+  content: "\f058"; }
+
+.fa-circle-stop::before {
+  content: "\f28d"; }
+
+.fa-stop-circle::before {
+  content: "\f28d"; }
+
+.fa-compass-drafting::before {
+  content: "\f568"; }
+
+.fa-drafting-compass::before {
+  content: "\f568"; }
+
+.fa-plate-wheat::before {
+  content: "\e55a"; }
+
+.fa-icicles::before {
+  content: "\f7ad"; }
+
+.fa-person-shelter::before {
+  content: "\e54f"; }
+
+.fa-neuter::before {
+  content: "\f22c"; }
+
+.fa-id-badge::before {
+  content: "\f2c1"; }
+
+.fa-marker::before {
+  content: "\f5a1"; }
+
+.fa-face-laugh-beam::before {
+  content: "\f59a"; }
+
+.fa-laugh-beam::before {
+  content: "\f59a"; }
+
+.fa-helicopter-symbol::before {
+  content: "\e502"; }
+
+.fa-universal-access::before {
+  content: "\f29a"; }
+
+.fa-circle-chevron-up::before {
+  content: "\f139"; }
+
+.fa-chevron-circle-up::before {
+  content: "\f139"; }
+
+.fa-lari-sign::before {
+  content: "\e1c8"; }
+
+.fa-volcano::before {
+  content: "\f770"; }
+
+.fa-person-walking-dashed-line-arrow-right::before {
+  content: "\e553"; }
+
+.fa-sterling-sign::before {
+  content: "\f154"; }
+
+.fa-gbp::before {
+  content: "\f154"; }
+
+.fa-pound-sign::before {
+  content: "\f154"; }
+
+.fa-viruses::before {
+  content: "\e076"; }
+
+.fa-square-person-confined::before {
+  content: "\e577"; }
+
+.fa-user-tie::before {
+  content: "\f508"; }
+
+.fa-arrow-down-long::before {
+  content: "\f175"; }
+
+.fa-long-arrow-down::before {
+  content: "\f175"; }
+
+.fa-tent-arrow-down-to-line::before {
+  content: "\e57e"; }
+
+.fa-certificate::before {
+  content: "\f0a3"; }
+
+.fa-reply-all::before {
+  content: "\f122"; }
+
+.fa-mail-reply-all::before {
+  content: "\f122"; }
+
+.fa-suitcase::before {
+  content: "\f0f2"; }
+
+.fa-person-skating::before {
+  content: "\f7c5"; }
+
+.fa-skating::before {
+  content: "\f7c5"; }
+
+.fa-filter-circle-dollar::before {
+  content: "\f662"; }
+
+.fa-funnel-dollar::before {
+  content: "\f662"; }
+
+.fa-camera-retro::before {
+  content: "\f083"; }
+
+.fa-circle-arrow-down::before {
+  content: "\f0ab"; }
+
+.fa-arrow-circle-down::before {
+  content: "\f0ab"; }
+
+.fa-file-import::before {
+  content: "\f56f"; }
+
+.fa-arrow-right-to-file::before {
+  content: "\f56f"; }
+
+.fa-square-arrow-up-right::before {
+  content: "\f14c"; }
+
+.fa-external-link-square::before {
+  content: "\f14c"; }
+
+.fa-box-open::before {
+  content: "\f49e"; }
+
+.fa-scroll::before {
+  content: "\f70e"; }
+
+.fa-spa::before {
+  content: "\f5bb"; }
+
+.fa-location-pin-lock::before {
+  content: "\e51f"; }
+
+.fa-pause::before {
+  content: "\f04c"; }
+
+.fa-hill-avalanche::before {
+  content: "\e507"; }
+
+.fa-temperature-empty::before {
+  content: "\f2cb"; }
+
+.fa-temperature-0::before {
+  content: "\f2cb"; }
+
+.fa-thermometer-0::before {
+  content: "\f2cb"; }
+
+.fa-thermometer-empty::before {
+  content: "\f2cb"; }
+
+.fa-bomb::before {
+  content: "\f1e2"; }
+
+.fa-registered::before {
+  content: "\f25d"; }
+
+.fa-address-card::before {
+  content: "\f2bb"; }
+
+.fa-contact-card::before {
+  content: "\f2bb"; }
+
+.fa-vcard::before {
+  content: "\f2bb"; }
+
+.fa-scale-unbalanced-flip::before {
+  content: "\f516"; }
+
+.fa-balance-scale-right::before {
+  content: "\f516"; }
+
+.fa-subscript::before {
+  content: "\f12c"; }
+
+.fa-diamond-turn-right::before {
+  content: "\f5eb"; }
+
+.fa-directions::before {
+  content: "\f5eb"; }
+
+.fa-burst::before {
+  content: "\e4dc"; }
+
+.fa-house-laptop::before {
+  content: "\e066"; }
+
+.fa-laptop-house::before {
+  content: "\e066"; }
+
+.fa-face-tired::before {
+  content: "\f5c8"; }
+
+.fa-tired::before {
+  content: "\f5c8"; }
+
+.fa-money-bills::before {
+  content: "\e1f3"; }
+
+.fa-smog::before {
+  content: "\f75f"; }
+
+.fa-crutch::before {
+  content: "\f7f7"; }
+
+.fa-cloud-arrow-up::before {
+  content: "\f0ee"; }
+
+.fa-cloud-upload::before {
+  content: "\f0ee"; }
+
+.fa-cloud-upload-alt::before {
+  content: "\f0ee"; }
+
+.fa-palette::before {
+  content: "\f53f"; }
+
+.fa-arrows-turn-right::before {
+  content: "\e4c0"; }
+
+.fa-vest::before {
+  content: "\e085"; }
+
+.fa-ferry::before {
+  content: "\e4ea"; }
+
+.fa-arrows-down-to-people::before {
+  content: "\e4b9"; }
+
+.fa-seedling::before {
+  content: "\f4d8"; }
+
+.fa-sprout::before {
+  content: "\f4d8"; }
+
+.fa-left-right::before {
+  content: "\f337"; }
+
+.fa-arrows-alt-h::before {
+  content: "\f337"; }
+
+.fa-boxes-packing::before {
+  content: "\e4c7"; }
+
+.fa-circle-arrow-left::before {
+  content: "\f0a8"; }
+
+.fa-arrow-circle-left::before {
+  content: "\f0a8"; }
+
+.fa-group-arrows-rotate::before {
+  content: "\e4f6"; }
+
+.fa-bowl-food::before {
+  content: "\e4c6"; }
+
+.fa-candy-cane::before {
+  content: "\f786"; }
+
+.fa-arrow-down-wide-short::before {
+  content: "\f160"; }
+
+.fa-sort-amount-asc::before {
+  content: "\f160"; }
+
+.fa-sort-amount-down::before {
+  content: "\f160"; }
+
+.fa-cloud-bolt::before {
+  content: "\f76c"; }
+
+.fa-thunderstorm::before {
+  content: "\f76c"; }
+
+.fa-text-slash::before {
+  content: "\f87d"; }
+
+.fa-remove-format::before {
+  content: "\f87d"; }
+
+.fa-face-smile-wink::before {
+  content: "\f4da"; }
+
+.fa-smile-wink::before {
+  content: "\f4da"; }
+
+.fa-file-word::before {
+  content: "\f1c2"; }
+
+.fa-file-powerpoint::before {
+  content: "\f1c4"; }
+
+.fa-arrows-left-right::before {
+  content: "\f07e"; }
+
+.fa-arrows-h::before {
+  content: "\f07e"; }
+
+.fa-house-lock::before {
+  content: "\e510"; }
+
+.fa-cloud-arrow-down::before {
+  content: "\f0ed"; }
+
+.fa-cloud-download::before {
+  content: "\f0ed"; }
+
+.fa-cloud-download-alt::before {
+  content: "\f0ed"; }
+
+.fa-children::before {
+  content: "\e4e1"; }
+
+.fa-chalkboard::before {
+  content: "\f51b"; }
+
+.fa-blackboard::before {
+  content: "\f51b"; }
+
+.fa-user-large-slash::before {
+  content: "\f4fa"; }
+
+.fa-user-alt-slash::before {
+  content: "\f4fa"; }
+
+.fa-envelope-open::before {
+  content: "\f2b6"; }
+
+.fa-handshake-simple-slash::before {
+  content: "\e05f"; }
+
+.fa-handshake-alt-slash::before {
+  content: "\e05f"; }
+
+.fa-mattress-pillow::before {
+  content: "\e525"; }
+
+.fa-guarani-sign::before {
+  content: "\e19a"; }
+
+.fa-arrows-rotate::before {
+  content: "\f021"; }
+
+.fa-refresh::before {
+  content: "\f021"; }
+
+.fa-sync::before {
+  content: "\f021"; }
+
+.fa-fire-extinguisher::before {
+  content: "\f134"; }
+
+.fa-cruzeiro-sign::before {
+  content: "\e152"; }
+
+.fa-greater-than-equal::before {
+  content: "\f532"; }
+
+.fa-shield-halved::before {
+  content: "\f3ed"; }
+
+.fa-shield-alt::before {
+  content: "\f3ed"; }
+
+.fa-book-atlas::before {
+  content: "\f558"; }
+
+.fa-atlas::before {
+  content: "\f558"; }
+
+.fa-virus::before {
+  content: "\e074"; }
+
+.fa-envelope-circle-check::before {
+  content: "\e4e8"; }
+
+.fa-layer-group::before {
+  content: "\f5fd"; }
+
+.fa-arrows-to-dot::before {
+  content: "\e4be"; }
+
+.fa-archway::before {
+  content: "\f557"; }
+
+.fa-heart-circle-check::before {
+  content: "\e4fd"; }
+
+.fa-house-chimney-crack::before {
+  content: "\f6f1"; }
+
+.fa-house-damage::before {
+  content: "\f6f1"; }
+
+.fa-file-zipper::before {
+  content: "\f1c6"; }
+
+.fa-file-archive::before {
+  content: "\f1c6"; }
+
+.fa-square::before {
+  content: "\f0c8"; }
+
+.fa-martini-glass-empty::before {
+  content: "\f000"; }
+
+.fa-glass-martini::before {
+  content: "\f000"; }
+
+.fa-couch::before {
+  content: "\f4b8"; }
+
+.fa-cedi-sign::before {
+  content: "\e0df"; }
+
+.fa-italic::before {
+  content: "\f033"; }
+
+.fa-church::before {
+  content: "\f51d"; }
+
+.fa-comments-dollar::before {
+  content: "\f653"; }
+
+.fa-democrat::before {
+  content: "\f747"; }
+
+.fa-z::before {
+  content: "\5a"; }
+
+.fa-person-skiing::before {
+  content: "\f7c9"; }
+
+.fa-skiing::before {
+  content: "\f7c9"; }
+
+.fa-road-lock::before {
+  content: "\e567"; }
+
+.fa-a::before {
+  content: "\41"; }
+
+.fa-temperature-arrow-down::before {
+  content: "\e03f"; }
+
+.fa-temperature-down::before {
+  content: "\e03f"; }
+
+.fa-feather-pointed::before {
+  content: "\f56b"; }
+
+.fa-feather-alt::before {
+  content: "\f56b"; }
+
+.fa-p::before {
+  content: "\50"; }
+
+.fa-snowflake::before {
+  content: "\f2dc"; }
+
+.fa-newspaper::before {
+  content: "\f1ea"; }
+
+.fa-rectangle-ad::before {
+  content: "\f641"; }
+
+.fa-ad::before {
+  content: "\f641"; }
+
+.fa-circle-arrow-right::before {
+  content: "\f0a9"; }
+
+.fa-arrow-circle-right::before {
+  content: "\f0a9"; }
+
+.fa-filter-circle-xmark::before {
+  content: "\e17b"; }
+
+.fa-locust::before {
+  content: "\e520"; }
+
+.fa-sort::before {
+  content: "\f0dc"; }
+
+.fa-unsorted::before {
+  content: "\f0dc"; }
+
+.fa-list-ol::before {
+  content: "\f0cb"; }
+
+.fa-list-1-2::before {
+  content: "\f0cb"; }
+
+.fa-list-numeric::before {
+  content: "\f0cb"; }
+
+.fa-person-dress-burst::before {
+  content: "\e544"; }
+
+.fa-money-check-dollar::before {
+  content: "\f53d"; }
+
+.fa-money-check-alt::before {
+  content: "\f53d"; }
+
+.fa-vector-square::before {
+  content: "\f5cb"; }
+
+.fa-bread-slice::before {
+  content: "\f7ec"; }
+
+.fa-language::before {
+  content: "\f1ab"; }
+
+.fa-face-kiss-wink-heart::before {
+  content: "\f598"; }
+
+.fa-kiss-wink-heart::before {
+  content: "\f598"; }
+
+.fa-filter::before {
+  content: "\f0b0"; }
+
+.fa-question::before {
+  content: "\3f"; }
+
+.fa-file-signature::before {
+  content: "\f573"; }
+
+.fa-up-down-left-right::before {
+  content: "\f0b2"; }
+
+.fa-arrows-alt::before {
+  content: "\f0b2"; }
+
+.fa-house-chimney-user::before {
+  content: "\e065"; }
+
+.fa-hand-holding-heart::before {
+  content: "\f4be"; }
+
+.fa-puzzle-piece::before {
+  content: "\f12e"; }
+
+.fa-money-check::before {
+  content: "\f53c"; }
+
+.fa-star-half-stroke::before {
+  content: "\f5c0"; }
+
+.fa-star-half-alt::before {
+  content: "\f5c0"; }
+
+.fa-code::before {
+  content: "\f121"; }
+
+.fa-whiskey-glass::before {
+  content: "\f7a0"; }
+
+.fa-glass-whiskey::before {
+  content: "\f7a0"; }
+
+.fa-building-circle-exclamation::before {
+  content: "\e4d3"; }
+
+.fa-magnifying-glass-chart::before {
+  content: "\e522"; }
+
+.fa-arrow-up-right-from-square::before {
+  content: "\f08e"; }
+
+.fa-external-link::before {
+  content: "\f08e"; }
+
+.fa-cubes-stacked::before {
+  content: "\e4e6"; }
+
+.fa-won-sign::before {
+  content: "\f159"; }
+
+.fa-krw::before {
+  content: "\f159"; }
+
+.fa-won::before {
+  content: "\f159"; }
+
+.fa-virus-covid::before {
+  content: "\e4a8"; }
+
+.fa-austral-sign::before {
+  content: "\e0a9"; }
+
+.fa-f::before {
+  content: "\46"; }
+
+.fa-leaf::before {
+  content: "\f06c"; }
+
+.fa-road::before {
+  content: "\f018"; }
+
+.fa-taxi::before {
+  content: "\f1ba"; }
+
+.fa-cab::before {
+  content: "\f1ba"; }
+
+.fa-person-circle-plus::before {
+  content: "\e541"; }
+
+.fa-chart-pie::before {
+  content: "\f200"; }
+
+.fa-pie-chart::before {
+  content: "\f200"; }
+
+.fa-bolt-lightning::before {
+  content: "\e0b7"; }
+
+.fa-sack-xmark::before {
+  content: "\e56a"; }
+
+.fa-file-excel::before {
+  content: "\f1c3"; }
+
+.fa-file-contract::before {
+  content: "\f56c"; }
+
+.fa-fish-fins::before {
+  content: "\e4f2"; }
+
+.fa-building-flag::before {
+  content: "\e4d5"; }
+
+.fa-face-grin-beam::before {
+  content: "\f582"; }
+
+.fa-grin-beam::before {
+  content: "\f582"; }
+
+.fa-object-ungroup::before {
+  content: "\f248"; }
+
+.fa-poop::before {
+  content: "\f619"; }
+
+.fa-location-pin::before {
+  content: "\f041"; }
+
+.fa-map-marker::before {
+  content: "\f041"; }
+
+.fa-kaaba::before {
+  content: "\f66b"; }
+
+.fa-toilet-paper::before {
+  content: "\f71e"; }
+
+.fa-helmet-safety::before {
+  content: "\f807"; }
+
+.fa-hard-hat::before {
+  content: "\f807"; }
+
+.fa-hat-hard::before {
+  content: "\f807"; }
+
+.fa-eject::before {
+  content: "\f052"; }
+
+.fa-circle-right::before {
+  content: "\f35a"; }
+
+.fa-arrow-alt-circle-right::before {
+  content: "\f35a"; }
+
+.fa-plane-circle-check::before {
+  content: "\e555"; }
+
+.fa-face-rolling-eyes::before {
+  content: "\f5a5"; }
+
+.fa-meh-rolling-eyes::before {
+  content: "\f5a5"; }
+
+.fa-object-group::before {
+  content: "\f247"; }
+
+.fa-chart-line::before {
+  content: "\f201"; }
+
+.fa-line-chart::before {
+  content: "\f201"; }
+
+.fa-mask-ventilator::before {
+  content: "\e524"; }
+
+.fa-arrow-right::before {
+  content: "\f061"; }
+
+.fa-signs-post::before {
+  content: "\f277"; }
+
+.fa-map-signs::before {
+  content: "\f277"; }
+
+.fa-cash-register::before {
+  content: "\f788"; }
+
+.fa-person-circle-question::before {
+  content: "\e542"; }
+
+.fa-h::before {
+  content: "\48"; }
+
+.fa-tarp::before {
+  content: "\e57b"; }
+
+.fa-screwdriver-wrench::before {
+  content: "\f7d9"; }
+
+.fa-tools::before {
+  content: "\f7d9"; }
+
+.fa-arrows-to-eye::before {
+  content: "\e4bf"; }
+
+.fa-plug-circle-bolt::before {
+  content: "\e55b"; }
+
+.fa-heart::before {
+  content: "\f004"; }
+
+.fa-mars-and-venus::before {
+  content: "\f224"; }
+
+.fa-house-user::before {
+  content: "\e1b0"; }
+
+.fa-home-user::before {
+  content: "\e1b0"; }
+
+.fa-dumpster-fire::before {
+  content: "\f794"; }
+
+.fa-house-crack::before {
+  content: "\e3b1"; }
+
+.fa-martini-glass-citrus::before {
+  content: "\f561"; }
+
+.fa-cocktail::before {
+  content: "\f561"; }
+
+.fa-face-surprise::before {
+  content: "\f5c2"; }
+
+.fa-surprise::before {
+  content: "\f5c2"; }
+
+.fa-bottle-water::before {
+  content: "\e4c5"; }
+
+.fa-circle-pause::before {
+  content: "\f28b"; }
+
+.fa-pause-circle::before {
+  content: "\f28b"; }
+
+.fa-toilet-paper-slash::before {
+  content: "\e072"; }
+
+.fa-apple-whole::before {
+  content: "\f5d1"; }
+
+.fa-apple-alt::before {
+  content: "\f5d1"; }
+
+.fa-kitchen-set::before {
+  content: "\e51a"; }
+
+.fa-r::before {
+  content: "\52"; }
+
+.fa-temperature-quarter::before {
+  content: "\f2ca"; }
+
+.fa-temperature-1::before {
+  content: "\f2ca"; }
+
+.fa-thermometer-1::before {
+  content: "\f2ca"; }
+
+.fa-thermometer-quarter::before {
+  content: "\f2ca"; }
+
+.fa-cube::before {
+  content: "\f1b2"; }
+
+.fa-bitcoin-sign::before {
+  content: "\e0b4"; }
+
+.fa-shield-dog::before {
+  content: "\e573"; }
+
+.fa-solar-panel::before {
+  content: "\f5ba"; }
+
+.fa-lock-open::before {
+  content: "\f3c1"; }
+
+.fa-elevator::before {
+  content: "\e16d"; }
+
+.fa-money-bill-transfer::before {
+  content: "\e528"; }
+
+.fa-money-bill-trend-up::before {
+  content: "\e529"; }
+
+.fa-house-flood-water-circle-arrow-right::before {
+  content: "\e50f"; }
+
+.fa-square-poll-horizontal::before {
+  content: "\f682"; }
+
+.fa-poll-h::before {
+  content: "\f682"; }
+
+.fa-circle::before {
+  content: "\f111"; }
+
+.fa-backward-fast::before {
+  content: "\f049"; }
+
+.fa-fast-backward::before {
+  content: "\f049"; }
+
+.fa-recycle::before {
+  content: "\f1b8"; }
+
+.fa-user-astronaut::before {
+  content: "\f4fb"; }
+
+.fa-plane-slash::before {
+  content: "\e069"; }
+
+.fa-trademark::before {
+  content: "\f25c"; }
+
+.fa-basketball::before {
+  content: "\f434"; }
+
+.fa-basketball-ball::before {
+  content: "\f434"; }
+
+.fa-satellite-dish::before {
+  content: "\f7c0"; }
+
+.fa-circle-up::before {
+  content: "\f35b"; }
+
+.fa-arrow-alt-circle-up::before {
+  content: "\f35b"; }
+
+.fa-mobile-screen-button::before {
+  content: "\f3cd"; }
+
+.fa-mobile-alt::before {
+  content: "\f3cd"; }
+
+.fa-volume-high::before {
+  content: "\f028"; }
+
+.fa-volume-up::before {
+  content: "\f028"; }
+
+.fa-users-rays::before {
+  content: "\e593"; }
+
+.fa-wallet::before {
+  content: "\f555"; }
+
+.fa-clipboard-check::before {
+  content: "\f46c"; }
+
+.fa-file-audio::before {
+  content: "\f1c7"; }
+
+.fa-burger::before {
+  content: "\f805"; }
+
+.fa-hamburger::before {
+  content: "\f805"; }
+
+.fa-wrench::before {
+  content: "\f0ad"; }
+
+.fa-bugs::before {
+  content: "\e4d0"; }
+
+.fa-rupee-sign::before {
+  content: "\f156"; }
+
+.fa-rupee::before {
+  content: "\f156"; }
+
+.fa-file-image::before {
+  content: "\f1c5"; }
+
+.fa-circle-question::before {
+  content: "\f059"; }
+
+.fa-question-circle::before {
+  content: "\f059"; }
+
+.fa-plane-departure::before {
+  content: "\f5b0"; }
+
+.fa-handshake-slash::before {
+  content: "\e060"; }
+
+.fa-book-bookmark::before {
+  content: "\e0bb"; }
+
+.fa-code-branch::before {
+  content: "\f126"; }
+
+.fa-hat-cowboy::before {
+  content: "\f8c0"; }
+
+.fa-bridge::before {
+  content: "\e4c8"; }
+
+.fa-phone-flip::before {
+  content: "\f879"; }
+
+.fa-phone-alt::before {
+  content: "\f879"; }
+
+.fa-truck-front::before {
+  content: "\e2b7"; }
+
+.fa-cat::before {
+  content: "\f6be"; }
+
+.fa-anchor-circle-exclamation::before {
+  content: "\e4ab"; }
+
+.fa-truck-field::before {
+  content: "\e58d"; }
+
+.fa-route::before {
+  content: "\f4d7"; }
+
+.fa-clipboard-question::before {
+  content: "\e4e3"; }
+
+.fa-panorama::before {
+  content: "\e209"; }
+
+.fa-comment-medical::before {
+  content: "\f7f5"; }
+
+.fa-teeth-open::before {
+  content: "\f62f"; }
+
+.fa-file-circle-minus::before {
+  content: "\e4ed"; }
+
+.fa-tags::before {
+  content: "\f02c"; }
+
+.fa-wine-glass::before {
+  content: "\f4e3"; }
+
+.fa-forward-fast::before {
+  content: "\f050"; }
+
+.fa-fast-forward::before {
+  content: "\f050"; }
+
+.fa-face-meh-blank::before {
+  content: "\f5a4"; }
+
+.fa-meh-blank::before {
+  content: "\f5a4"; }
+
+.fa-square-parking::before {
+  content: "\f540"; }
+
+.fa-parking::before {
+  content: "\f540"; }
+
+.fa-house-signal::before {
+  content: "\e012"; }
+
+.fa-bars-progress::before {
+  content: "\f828"; }
+
+.fa-tasks-alt::before {
+  content: "\f828"; }
+
+.fa-faucet-drip::before {
+  content: "\e006"; }
+
+.fa-cart-flatbed::before {
+  content: "\f474"; }
+
+.fa-dolly-flatbed::before {
+  content: "\f474"; }
+
+.fa-ban-smoking::before {
+  content: "\f54d"; }
+
+.fa-smoking-ban::before {
+  content: "\f54d"; }
+
+.fa-terminal::before {
+  content: "\f120"; }
+
+.fa-mobile-button::before {
+  content: "\f10b"; }
+
+.fa-house-medical-flag::before {
+  content: "\e514"; }
+
+.fa-basket-shopping::before {
+  content: "\f291"; }
+
+.fa-shopping-basket::before {
+  content: "\f291"; }
+
+.fa-tape::before {
+  content: "\f4db"; }
+
+.fa-bus-simple::before {
+  content: "\f55e"; }
+
+.fa-bus-alt::before {
+  content: "\f55e"; }
+
+.fa-eye::before {
+  content: "\f06e"; }
+
+.fa-face-sad-cry::before {
+  content: "\f5b3"; }
+
+.fa-sad-cry::before {
+  content: "\f5b3"; }
+
+.fa-audio-description::before {
+  content: "\f29e"; }
+
+.fa-person-military-to-person::before {
+  content: "\e54c"; }
+
+.fa-file-shield::before {
+  content: "\e4f0"; }
+
+.fa-user-slash::before {
+  content: "\f506"; }
+
+.fa-pen::before {
+  content: "\f304"; }
+
+.fa-tower-observation::before {
+  content: "\e586"; }
+
+.fa-file-code::before {
+  content: "\f1c9"; }
+
+.fa-signal::before {
+  content: "\f012"; }
+
+.fa-signal-5::before {
+  content: "\f012"; }
+
+.fa-signal-perfect::before {
+  content: "\f012"; }
+
+.fa-bus::before {
+  content: "\f207"; }
+
+.fa-heart-circle-xmark::before {
+  content: "\e501"; }
+
+.fa-house-chimney::before {
+  content: "\e3af"; }
+
+.fa-home-lg::before {
+  content: "\e3af"; }
+
+.fa-window-maximize::before {
+  content: "\f2d0"; }
+
+.fa-face-frown::before {
+  content: "\f119"; }
+
+.fa-frown::before {
+  content: "\f119"; }
+
+.fa-prescription::before {
+  content: "\f5b1"; }
+
+.fa-shop::before {
+  content: "\f54f"; }
+
+.fa-store-alt::before {
+  content: "\f54f"; }
+
+.fa-floppy-disk::before {
+  content: "\f0c7"; }
+
+.fa-save::before {
+  content: "\f0c7"; }
+
+.fa-vihara::before {
+  content: "\f6a7"; }
+
+.fa-scale-unbalanced::before {
+  content: "\f515"; }
+
+.fa-balance-scale-left::before {
+  content: "\f515"; }
+
+.fa-sort-up::before {
+  content: "\f0de"; }
+
+.fa-sort-asc::before {
+  content: "\f0de"; }
+
+.fa-comment-dots::before {
+  content: "\f4ad"; }
+
+.fa-commenting::before {
+  content: "\f4ad"; }
+
+.fa-plant-wilt::before {
+  content: "\e5aa"; }
+
+.fa-diamond::before {
+  content: "\f219"; }
+
+.fa-face-grin-squint::before {
+  content: "\f585"; }
+
+.fa-grin-squint::before {
+  content: "\f585"; }
+
+.fa-hand-holding-dollar::before {
+  content: "\f4c0"; }
+
+.fa-hand-holding-usd::before {
+  content: "\f4c0"; }
+
+.fa-bacterium::before {
+  content: "\e05a"; }
+
+.fa-hand-pointer::before {
+  content: "\f25a"; }
+
+.fa-drum-steelpan::before {
+  content: "\f56a"; }
+
+.fa-hand-scissors::before {
+  content: "\f257"; }
+
+.fa-hands-praying::before {
+  content: "\f684"; }
+
+.fa-praying-hands::before {
+  content: "\f684"; }
+
+.fa-arrow-rotate-right::before {
+  content: "\f01e"; }
+
+.fa-arrow-right-rotate::before {
+  content: "\f01e"; }
+
+.fa-arrow-rotate-forward::before {
+  content: "\f01e"; }
+
+.fa-redo::before {
+  content: "\f01e"; }
+
+.fa-biohazard::before {
+  content: "\f780"; }
+
+.fa-location-crosshairs::before {
+  content: "\f601"; }
+
+.fa-location::before {
+  content: "\f601"; }
+
+.fa-mars-double::before {
+  content: "\f227"; }
+
+.fa-child-dress::before {
+  content: "\e59c"; }
+
+.fa-users-between-lines::before {
+  content: "\e591"; }
+
+.fa-lungs-virus::before {
+  content: "\e067"; }
+
+.fa-face-grin-tears::before {
+  content: "\f588"; }
+
+.fa-grin-tears::before {
+  content: "\f588"; }
+
+.fa-phone::before {
+  content: "\f095"; }
+
+.fa-calendar-xmark::before {
+  content: "\f273"; }
+
+.fa-calendar-times::before {
+  content: "\f273"; }
+
+.fa-child-reaching::before {
+  content: "\e59d"; }
+
+.fa-head-side-virus::before {
+  content: "\e064"; }
+
+.fa-user-gear::before {
+  content: "\f4fe"; }
+
+.fa-user-cog::before {
+  content: "\f4fe"; }
+
+.fa-arrow-up-1-9::before {
+  content: "\f163"; }
+
+.fa-sort-numeric-up::before {
+  content: "\f163"; }
+
+.fa-door-closed::before {
+  content: "\f52a"; }
+
+.fa-shield-virus::before {
+  content: "\e06c"; }
+
+.fa-dice-six::before {
+  content: "\f526"; }
+
+.fa-mosquito-net::before {
+  content: "\e52c"; }
+
+.fa-bridge-water::before {
+  content: "\e4ce"; }
+
+.fa-person-booth::before {
+  content: "\f756"; }
+
+.fa-text-width::before {
+  content: "\f035"; }
+
+.fa-hat-wizard::before {
+  content: "\f6e8"; }
+
+.fa-pen-fancy::before {
+  content: "\f5ac"; }
+
+.fa-person-digging::before {
+  content: "\f85e"; }
+
+.fa-digging::before {
+  content: "\f85e"; }
+
+.fa-trash::before {
+  content: "\f1f8"; }
+
+.fa-gauge-simple::before {
+  content: "\f629"; }
+
+.fa-gauge-simple-med::before {
+  content: "\f629"; }
+
+.fa-tachometer-average::before {
+  content: "\f629"; }
+
+.fa-book-medical::before {
+  content: "\f7e6"; }
+
+.fa-poo::before {
+  content: "\f2fe"; }
+
+.fa-quote-right::before {
+  content: "\f10e"; }
+
+.fa-quote-right-alt::before {
+  content: "\f10e"; }
+
+.fa-shirt::before {
+  content: "\f553"; }
+
+.fa-t-shirt::before {
+  content: "\f553"; }
+
+.fa-tshirt::before {
+  content: "\f553"; }
+
+.fa-cubes::before {
+  content: "\f1b3"; }
+
+.fa-divide::before {
+  content: "\f529"; }
+
+.fa-tenge-sign::before {
+  content: "\f7d7"; }
+
+.fa-tenge::before {
+  content: "\f7d7"; }
+
+.fa-headphones::before {
+  content: "\f025"; }
+
+.fa-hands-holding::before {
+  content: "\f4c2"; }
+
+.fa-hands-clapping::before {
+  content: "\e1a8"; }
+
+.fa-republican::before {
+  content: "\f75e"; }
+
+.fa-arrow-left::before {
+  content: "\f060"; }
+
+.fa-person-circle-xmark::before {
+  content: "\e543"; }
+
+.fa-ruler::before {
+  content: "\f545"; }
+
+.fa-align-left::before {
+  content: "\f036"; }
+
+.fa-dice-d6::before {
+  content: "\f6d1"; }
+
+.fa-restroom::before {
+  content: "\f7bd"; }
+
+.fa-j::before {
+  content: "\4a"; }
+
+.fa-users-viewfinder::before {
+  content: "\e595"; }
+
+.fa-file-video::before {
+  content: "\f1c8"; }
+
+.fa-up-right-from-square::before {
+  content: "\f35d"; }
+
+.fa-external-link-alt::before {
+  content: "\f35d"; }
+
+.fa-table-cells::before {
+  content: "\f00a"; }
+
+.fa-th::before {
+  content: "\f00a"; }
+
+.fa-file-pdf::before {
+  content: "\f1c1"; }
+
+.fa-book-bible::before {
+  content: "\f647"; }
+
+.fa-bible::before {
+  content: "\f647"; }
+
+.fa-o::before {
+  content: "\4f"; }
+
+.fa-suitcase-medical::before {
+  content: "\f0fa"; }
+
+.fa-medkit::before {
+  content: "\f0fa"; }
+
+.fa-user-secret::before {
+  content: "\f21b"; }
+
+.fa-otter::before {
+  content: "\f700"; }
+
+.fa-person-dress::before {
+  content: "\f182"; }
+
+.fa-female::before {
+  content: "\f182"; }
+
+.fa-comment-dollar::before {
+  content: "\f651"; }
+
+.fa-business-time::before {
+  content: "\f64a"; }
+
+.fa-briefcase-clock::before {
+  content: "\f64a"; }
+
+.fa-table-cells-large::before {
+  content: "\f009"; }
+
+.fa-th-large::before {
+  content: "\f009"; }
+
+.fa-book-tanakh::before {
+  content: "\f827"; }
+
+.fa-tanakh::before {
+  content: "\f827"; }
+
+.fa-phone-volume::before {
+  content: "\f2a0"; }
+
+.fa-volume-control-phone::before {
+  content: "\f2a0"; }
+
+.fa-hat-cowboy-side::before {
+  content: "\f8c1"; }
+
+.fa-clipboard-user::before {
+  content: "\f7f3"; }
+
+.fa-child::before {
+  content: "\f1ae"; }
+
+.fa-lira-sign::before {
+  content: "\f195"; }
+
+.fa-satellite::before {
+  content: "\f7bf"; }
+
+.fa-plane-lock::before {
+  content: "\e558"; }
+
+.fa-tag::before {
+  content: "\f02b"; }
+
+.fa-comment::before {
+  content: "\f075"; }
+
+.fa-cake-candles::before {
+  content: "\f1fd"; }
+
+.fa-birthday-cake::before {
+  content: "\f1fd"; }
+
+.fa-cake::before {
+  content: "\f1fd"; }
+
+.fa-envelope::before {
+  content: "\f0e0"; }
+
+.fa-angles-up::before {
+  content: "\f102"; }
+
+.fa-angle-double-up::before {
+  content: "\f102"; }
+
+.fa-paperclip::before {
+  content: "\f0c6"; }
+
+.fa-arrow-right-to-city::before {
+  content: "\e4b3"; }
+
+.fa-ribbon::before {
+  content: "\f4d6"; }
+
+.fa-lungs::before {
+  content: "\f604"; }
+
+.fa-arrow-up-9-1::before {
+  content: "\f887"; }
+
+.fa-sort-numeric-up-alt::before {
+  content: "\f887"; }
+
+.fa-litecoin-sign::before {
+  content: "\e1d3"; }
+
+.fa-border-none::before {
+  content: "\f850"; }
+
+.fa-circle-nodes::before {
+  content: "\e4e2"; }
+
+.fa-parachute-box::before {
+  content: "\f4cd"; }
+
+.fa-indent::before {
+  content: "\f03c"; }
+
+.fa-truck-field-un::before {
+  content: "\e58e"; }
+
+.fa-hourglass::before {
+  content: "\f254"; }
+
+.fa-hourglass-empty::before {
+  content: "\f254"; }
+
+.fa-mountain::before {
+  content: "\f6fc"; }
+
+.fa-user-doctor::before {
+  content: "\f0f0"; }
+
+.fa-user-md::before {
+  content: "\f0f0"; }
+
+.fa-circle-info::before {
+  content: "\f05a"; }
+
+.fa-info-circle::before {
+  content: "\f05a"; }
+
+.fa-cloud-meatball::before {
+  content: "\f73b"; }
+
+.fa-camera::before {
+  content: "\f030"; }
+
+.fa-camera-alt::before {
+  content: "\f030"; }
+
+.fa-square-virus::before {
+  content: "\e578"; }
+
+.fa-meteor::before {
+  content: "\f753"; }
+
+.fa-car-on::before {
+  content: "\e4dd"; }
+
+.fa-sleigh::before {
+  content: "\f7cc"; }
+
+.fa-arrow-down-1-9::before {
+  content: "\f162"; }
+
+.fa-sort-numeric-asc::before {
+  content: "\f162"; }
+
+.fa-sort-numeric-down::before {
+  content: "\f162"; }
+
+.fa-hand-holding-droplet::before {
+  content: "\f4c1"; }
+
+.fa-hand-holding-water::before {
+  content: "\f4c1"; }
+
+.fa-water::before {
+  content: "\f773"; }
+
+.fa-calendar-check::before {
+  content: "\f274"; }
+
+.fa-braille::before {
+  content: "\f2a1"; }
+
+.fa-prescription-bottle-medical::before {
+  content: "\f486"; }
+
+.fa-prescription-bottle-alt::before {
+  content: "\f486"; }
+
+.fa-landmark::before {
+  content: "\f66f"; }
+
+.fa-truck::before {
+  content: "\f0d1"; }
+
+.fa-crosshairs::before {
+  content: "\f05b"; }
+
+.fa-person-cane::before {
+  content: "\e53c"; }
+
+.fa-tent::before {
+  content: "\e57d"; }
+
+.fa-vest-patches::before {
+  content: "\e086"; }
+
+.fa-check-double::before {
+  content: "\f560"; }
+
+.fa-arrow-down-a-z::before {
+  content: "\f15d"; }
+
+.fa-sort-alpha-asc::before {
+  content: "\f15d"; }
+
+.fa-sort-alpha-down::before {
+  content: "\f15d"; }
+
+.fa-money-bill-wheat::before {
+  content: "\e52a"; }
+
+.fa-cookie::before {
+  content: "\f563"; }
+
+.fa-arrow-rotate-left::before {
+  content: "\f0e2"; }
+
+.fa-arrow-left-rotate::before {
+  content: "\f0e2"; }
+
+.fa-arrow-rotate-back::before {
+  content: "\f0e2"; }
+
+.fa-arrow-rotate-backward::before {
+  content: "\f0e2"; }
+
+.fa-undo::before {
+  content: "\f0e2"; }
+
+.fa-hard-drive::before {
+  content: "\f0a0"; }
+
+.fa-hdd::before {
+  content: "\f0a0"; }
+
+.fa-face-grin-squint-tears::before {
+  content: "\f586"; }
+
+.fa-grin-squint-tears::before {
+  content: "\f586"; }
+
+.fa-dumbbell::before {
+  content: "\f44b"; }
+
+.fa-rectangle-list::before {
+  content: "\f022"; }
+
+.fa-list-alt::before {
+  content: "\f022"; }
+
+.fa-tarp-droplet::before {
+  content: "\e57c"; }
+
+.fa-house-medical-circle-check::before {
+  content: "\e511"; }
+
+.fa-person-skiing-nordic::before {
+  content: "\f7ca"; }
+
+.fa-skiing-nordic::before {
+  content: "\f7ca"; }
+
+.fa-calendar-plus::before {
+  content: "\f271"; }
+
+.fa-plane-arrival::before {
+  content: "\f5af"; }
+
+.fa-circle-left::before {
+  content: "\f359"; }
+
+.fa-arrow-alt-circle-left::before {
+  content: "\f359"; }
+
+.fa-train-subway::before {
+  content: "\f239"; }
+
+.fa-subway::before {
+  content: "\f239"; }
+
+.fa-chart-gantt::before {
+  content: "\e0e4"; }
+
+.fa-indian-rupee-sign::before {
+  content: "\e1bc"; }
+
+.fa-indian-rupee::before {
+  content: "\e1bc"; }
+
+.fa-inr::before {
+  content: "\e1bc"; }
+
+.fa-crop-simple::before {
+  content: "\f565"; }
+
+.fa-crop-alt::before {
+  content: "\f565"; }
+
+.fa-money-bill-1::before {
+  content: "\f3d1"; }
+
+.fa-money-bill-alt::before {
+  content: "\f3d1"; }
+
+.fa-left-long::before {
+  content: "\f30a"; }
+
+.fa-long-arrow-alt-left::before {
+  content: "\f30a"; }
+
+.fa-dna::before {
+  content: "\f471"; }
+
+.fa-virus-slash::before {
+  content: "\e075"; }
+
+.fa-minus::before {
+  content: "\f068"; }
+
+.fa-subtract::before {
+  content: "\f068"; }
+
+.fa-chess::before {
+  content: "\f439"; }
+
+.fa-arrow-left-long::before {
+  content: "\f177"; }
+
+.fa-long-arrow-left::before {
+  content: "\f177"; }
+
+.fa-plug-circle-check::before {
+  content: "\e55c"; }
+
+.fa-street-view::before {
+  content: "\f21d"; }
+
+.fa-franc-sign::before {
+  content: "\e18f"; }
+
+.fa-volume-off::before {
+  content: "\f026"; }
+
+.fa-hands-asl-interpreting::before {
+  content: "\f2a3"; }
+
+.fa-american-sign-language-interpreting::before {
+  content: "\f2a3"; }
+
+.fa-asl-interpreting::before {
+  content: "\f2a3"; }
+
+.fa-hands-american-sign-language-interpreting::before {
+  content: "\f2a3"; }
+
+.fa-gear::before {
+  content: "\f013"; }
+
+.fa-cog::before {
+  content: "\f013"; }
+
+.fa-droplet-slash::before {
+  content: "\f5c7"; }
+
+.fa-tint-slash::before {
+  content: "\f5c7"; }
+
+.fa-mosque::before {
+  content: "\f678"; }
+
+.fa-mosquito::before {
+  content: "\e52b"; }
+
+.fa-star-of-david::before {
+  content: "\f69a"; }
+
+.fa-person-military-rifle::before {
+  content: "\e54b"; }
+
+.fa-cart-shopping::before {
+  content: "\f07a"; }
+
+.fa-shopping-cart::before {
+  content: "\f07a"; }
+
+.fa-vials::before {
+  content: "\f493"; }
+
+.fa-plug-circle-plus::before {
+  content: "\e55f"; }
+
+.fa-place-of-worship::before {
+  content: "\f67f"; }
+
+.fa-grip-vertical::before {
+  content: "\f58e"; }
+
+.fa-arrow-turn-up::before {
+  content: "\f148"; }
+
+.fa-level-up::before {
+  content: "\f148"; }
+
+.fa-u::before {
+  content: "\55"; }
+
+.fa-square-root-variable::before {
+  content: "\f698"; }
+
+.fa-square-root-alt::before {
+  content: "\f698"; }
+
+.fa-clock::before {
+  content: "\f017"; }
+
+.fa-clock-four::before {
+  content: "\f017"; }
+
+.fa-backward-step::before {
+  content: "\f048"; }
+
+.fa-step-backward::before {
+  content: "\f048"; }
+
+.fa-pallet::before {
+  content: "\f482"; }
+
+.fa-faucet::before {
+  content: "\e005"; }
+
+.fa-baseball-bat-ball::before {
+  content: "\f432"; }
+
+.fa-s::before {
+  content: "\53"; }
+
+.fa-timeline::before {
+  content: "\e29c"; }
+
+.fa-keyboard::before {
+  content: "\f11c"; }
+
+.fa-caret-down::before {
+  content: "\f0d7"; }
+
+.fa-house-chimney-medical::before {
+  content: "\f7f2"; }
+
+.fa-clinic-medical::before {
+  content: "\f7f2"; }
+
+.fa-temperature-three-quarters::before {
+  content: "\f2c8"; }
+
+.fa-temperature-3::before {
+  content: "\f2c8"; }
+
+.fa-thermometer-3::before {
+  content: "\f2c8"; }
+
+.fa-thermometer-three-quarters::before {
+  content: "\f2c8"; }
+
+.fa-mobile-screen::before {
+  content: "\f3cf"; }
+
+.fa-mobile-android-alt::before {
+  content: "\f3cf"; }
+
+.fa-plane-up::before {
+  content: "\e22d"; }
+
+.fa-piggy-bank::before {
+  content: "\f4d3"; }
+
+.fa-battery-half::before {
+  content: "\f242"; }
+
+.fa-battery-3::before {
+  content: "\f242"; }
+
+.fa-mountain-city::before {
+  content: "\e52e"; }
+
+.fa-coins::before {
+  content: "\f51e"; }
+
+.fa-khanda::before {
+  content: "\f66d"; }
+
+.fa-sliders::before {
+  content: "\f1de"; }
+
+.fa-sliders-h::before {
+  content: "\f1de"; }
+
+.fa-folder-tree::before {
+  content: "\f802"; }
+
+.fa-network-wired::before {
+  content: "\f6ff"; }
+
+.fa-map-pin::before {
+  content: "\f276"; }
+
+.fa-hamsa::before {
+  content: "\f665"; }
+
+.fa-cent-sign::before {
+  content: "\e3f5"; }
+
+.fa-flask::before {
+  content: "\f0c3"; }
+
+.fa-person-pregnant::before {
+  content: "\e31e"; }
+
+.fa-wand-sparkles::before {
+  content: "\f72b"; }
+
+.fa-ellipsis-vertical::before {
+  content: "\f142"; }
+
+.fa-ellipsis-v::before {
+  content: "\f142"; }
+
+.fa-ticket::before {
+  content: "\f145"; }
+
+.fa-power-off::before {
+  content: "\f011"; }
+
+.fa-right-long::before {
+  content: "\f30b"; }
+
+.fa-long-arrow-alt-right::before {
+  content: "\f30b"; }
+
+.fa-flag-usa::before {
+  content: "\f74d"; }
+
+.fa-laptop-file::before {
+  content: "\e51d"; }
+
+.fa-tty::before {
+  content: "\f1e4"; }
+
+.fa-teletype::before {
+  content: "\f1e4"; }
+
+.fa-diagram-next::before {
+  content: "\e476"; }
+
+.fa-person-rifle::before {
+  content: "\e54e"; }
+
+.fa-house-medical-circle-exclamation::before {
+  content: "\e512"; }
+
+.fa-closed-captioning::before {
+  content: "\f20a"; }
+
+.fa-person-hiking::before {
+  content: "\f6ec"; }
+
+.fa-hiking::before {
+  content: "\f6ec"; }
+
+.fa-venus-double::before {
+  content: "\f226"; }
+
+.fa-images::before {
+  content: "\f302"; }
+
+.fa-calculator::before {
+  content: "\f1ec"; }
+
+.fa-people-pulling::before {
+  content: "\e535"; }
+
+.fa-n::before {
+  content: "\4e"; }
+
+.fa-cable-car::before {
+  content: "\f7da"; }
+
+.fa-tram::before {
+  content: "\f7da"; }
+
+.fa-cloud-rain::before {
+  content: "\f73d"; }
+
+.fa-building-circle-xmark::before {
+  content: "\e4d4"; }
+
+.fa-ship::before {
+  content: "\f21a"; }
+
+.fa-arrows-down-to-line::before {
+  content: "\e4b8"; }
+
+.fa-download::before {
+  content: "\f019"; }
+
+.fa-face-grin::before {
+  content: "\f580"; }
+
+.fa-grin::before {
+  content: "\f580"; }
+
+.fa-delete-left::before {
+  content: "\f55a"; }
+
+.fa-backspace::before {
+  content: "\f55a"; }
+
+.fa-eye-dropper::before {
+  content: "\f1fb"; }
+
+.fa-eye-dropper-empty::before {
+  content: "\f1fb"; }
+
+.fa-eyedropper::before {
+  content: "\f1fb"; }
+
+.fa-file-circle-check::before {
+  content: "\e5a0"; }
+
+.fa-forward::before {
+  content: "\f04e"; }
+
+.fa-mobile::before {
+  content: "\f3ce"; }
+
+.fa-mobile-android::before {
+  content: "\f3ce"; }
+
+.fa-mobile-phone::before {
+  content: "\f3ce"; }
+
+.fa-face-meh::before {
+  content: "\f11a"; }
+
+.fa-meh::before {
+  content: "\f11a"; }
+
+.fa-align-center::before {
+  content: "\f037"; }
+
+.fa-book-skull::before {
+  content: "\f6b7"; }
+
+.fa-book-dead::before {
+  content: "\f6b7"; }
+
+.fa-id-card::before {
+  content: "\f2c2"; }
+
+.fa-drivers-license::before {
+  content: "\f2c2"; }
+
+.fa-outdent::before {
+  content: "\f03b"; }
+
+.fa-dedent::before {
+  content: "\f03b"; }
+
+.fa-heart-circle-exclamation::before {
+  content: "\e4fe"; }
+
+.fa-house::before {
+  content: "\f015"; }
+
+.fa-home::before {
+  content: "\f015"; }
+
+.fa-home-alt::before {
+  content: "\f015"; }
+
+.fa-home-lg-alt::before {
+  content: "\f015"; }
+
+.fa-calendar-week::before {
+  content: "\f784"; }
+
+.fa-laptop-medical::before {
+  content: "\f812"; }
+
+.fa-b::before {
+  content: "\42"; }
+
+.fa-file-medical::before {
+  content: "\f477"; }
+
+.fa-dice-one::before {
+  content: "\f525"; }
+
+.fa-kiwi-bird::before {
+  content: "\f535"; }
+
+.fa-arrow-right-arrow-left::before {
+  content: "\f0ec"; }
+
+.fa-exchange::before {
+  content: "\f0ec"; }
+
+.fa-rotate-right::before {
+  content: "\f2f9"; }
+
+.fa-redo-alt::before {
+  content: "\f2f9"; }
+
+.fa-rotate-forward::before {
+  content: "\f2f9"; }
+
+.fa-utensils::before {
+  content: "\f2e7"; }
+
+.fa-cutlery::before {
+  content: "\f2e7"; }
+
+.fa-arrow-up-wide-short::before {
+  content: "\f161"; }
+
+.fa-sort-amount-up::before {
+  content: "\f161"; }
+
+.fa-mill-sign::before {
+  content: "\e1ed"; }
+
+.fa-bowl-rice::before {
+  content: "\e2eb"; }
+
+.fa-skull::before {
+  content: "\f54c"; }
+
+.fa-tower-broadcast::before {
+  content: "\f519"; }
+
+.fa-broadcast-tower::before {
+  content: "\f519"; }
+
+.fa-truck-pickup::before {
+  content: "\f63c"; }
+
+.fa-up-long::before {
+  content: "\f30c"; }
+
+.fa-long-arrow-alt-up::before {
+  content: "\f30c"; }
+
+.fa-stop::before {
+  content: "\f04d"; }
+
+.fa-code-merge::before {
+  content: "\f387"; }
+
+.fa-upload::before {
+  content: "\f093"; }
+
+.fa-hurricane::before {
+  content: "\f751"; }
+
+.fa-mound::before {
+  content: "\e52d"; }
+
+.fa-toilet-portable::before {
+  content: "\e583"; }
+
+.fa-compact-disc::before {
+  content: "\f51f"; }
+
+.fa-file-arrow-down::before {
+  content: "\f56d"; }
+
+.fa-file-download::before {
+  content: "\f56d"; }
+
+.fa-caravan::before {
+  content: "\f8ff"; }
+
+.fa-shield-cat::before {
+  content: "\e572"; }
+
+.fa-bolt::before {
+  content: "\f0e7"; }
+
+.fa-zap::before {
+  content: "\f0e7"; }
+
+.fa-glass-water::before {
+  content: "\e4f4"; }
+
+.fa-oil-well::before {
+  content: "\e532"; }
+
+.fa-vault::before {
+  content: "\e2c5"; }
+
+.fa-mars::before {
+  content: "\f222"; }
+
+.fa-toilet::before {
+  content: "\f7d8"; }
+
+.fa-plane-circle-xmark::before {
+  content: "\e557"; }
+
+.fa-yen-sign::before {
+  content: "\f157"; }
+
+.fa-cny::before {
+  content: "\f157"; }
+
+.fa-jpy::before {
+  content: "\f157"; }
+
+.fa-rmb::before {
+  content: "\f157"; }
+
+.fa-yen::before {
+  content: "\f157"; }
+
+.fa-ruble-sign::before {
+  content: "\f158"; }
+
+.fa-rouble::before {
+  content: "\f158"; }
+
+.fa-rub::before {
+  content: "\f158"; }
+
+.fa-ruble::before {
+  content: "\f158"; }
+
+.fa-sun::before {
+  content: "\f185"; }
+
+.fa-guitar::before {
+  content: "\f7a6"; }
+
+.fa-face-laugh-wink::before {
+  content: "\f59c"; }
+
+.fa-laugh-wink::before {
+  content: "\f59c"; }
+
+.fa-horse-head::before {
+  content: "\f7ab"; }
+
+.fa-bore-hole::before {
+  content: "\e4c3"; }
+
+.fa-industry::before {
+  content: "\f275"; }
+
+.fa-circle-down::before {
+  content: "\f358"; }
+
+.fa-arrow-alt-circle-down::before {
+  content: "\f358"; }
+
+.fa-arrows-turn-to-dots::before {
+  content: "\e4c1"; }
+
+.fa-florin-sign::before {
+  content: "\e184"; }
+
+.fa-arrow-down-short-wide::before {
+  content: "\f884"; }
+
+.fa-sort-amount-desc::before {
+  content: "\f884"; }
+
+.fa-sort-amount-down-alt::before {
+  content: "\f884"; }
+
+.fa-less-than::before {
+  content: "\3c"; }
+
+.fa-angle-down::before {
+  content: "\f107"; }
+
+.fa-car-tunnel::before {
+  content: "\e4de"; }
+
+.fa-head-side-cough::before {
+  content: "\e061"; }
+
+.fa-grip-lines::before {
+  content: "\f7a4"; }
+
+.fa-thumbs-down::before {
+  content: "\f165"; }
+
+.fa-user-lock::before {
+  content: "\f502"; }
+
+.fa-arrow-right-long::before {
+  content: "\f178"; }
+
+.fa-long-arrow-right::before {
+  content: "\f178"; }
+
+.fa-anchor-circle-xmark::before {
+  content: "\e4ac"; }
+
+.fa-ellipsis::before {
+  content: "\f141"; }
+
+.fa-ellipsis-h::before {
+  content: "\f141"; }
+
+.fa-chess-pawn::before {
+  content: "\f443"; }
+
+.fa-kit-medical::before {
+  content: "\f479"; }
+
+.fa-first-aid::before {
+  content: "\f479"; }
+
+.fa-person-through-window::before {
+  content: "\e5a9"; }
+
+.fa-toolbox::before {
+  content: "\f552"; }
+
+.fa-hands-holding-circle::before {
+  content: "\e4fb"; }
+
+.fa-bug::before {
+  content: "\f188"; }
+
+.fa-credit-card::before {
+  content: "\f09d"; }
+
+.fa-credit-card-alt::before {
+  content: "\f09d"; }
+
+.fa-car::before {
+  content: "\f1b9"; }
+
+.fa-automobile::before {
+  content: "\f1b9"; }
+
+.fa-hand-holding-hand::before {
+  content: "\e4f7"; }
+
+.fa-book-open-reader::before {
+  content: "\f5da"; }
+
+.fa-book-reader::before {
+  content: "\f5da"; }
+
+.fa-mountain-sun::before {
+  content: "\e52f"; }
+
+.fa-arrows-left-right-to-line::before {
+  content: "\e4ba"; }
+
+.fa-dice-d20::before {
+  content: "\f6cf"; }
+
+.fa-truck-droplet::before {
+  content: "\e58c"; }
+
+.fa-file-circle-xmark::before {
+  content: "\e5a1"; }
+
+.fa-temperature-arrow-up::before {
+  content: "\e040"; }
+
+.fa-temperature-up::before {
+  content: "\e040"; }
+
+.fa-medal::before {
+  content: "\f5a2"; }
+
+.fa-bed::before {
+  content: "\f236"; }
+
+.fa-square-h::before {
+  content: "\f0fd"; }
+
+.fa-h-square::before {
+  content: "\f0fd"; }
+
+.fa-podcast::before {
+  content: "\f2ce"; }
+
+.fa-temperature-full::before {
+  content: "\f2c7"; }
+
+.fa-temperature-4::before {
+  content: "\f2c7"; }
+
+.fa-thermometer-4::before {
+  content: "\f2c7"; }
+
+.fa-thermometer-full::before {
+  content: "\f2c7"; }
+
+.fa-bell::before {
+  content: "\f0f3"; }
+
+.fa-superscript::before {
+  content: "\f12b"; }
+
+.fa-plug-circle-xmark::before {
+  content: "\e560"; }
+
+.fa-star-of-life::before {
+  content: "\f621"; }
+
+.fa-phone-slash::before {
+  content: "\f3dd"; }
+
+.fa-paint-roller::before {
+  content: "\f5aa"; }
+
+.fa-handshake-angle::before {
+  content: "\f4c4"; }
+
+.fa-hands-helping::before {
+  content: "\f4c4"; }
+
+.fa-location-dot::before {
+  content: "\f3c5"; }
+
+.fa-map-marker-alt::before {
+  content: "\f3c5"; }
+
+.fa-file::before {
+  content: "\f15b"; }
+
+.fa-greater-than::before {
+  content: "\3e"; }
+
+.fa-person-swimming::before {
+  content: "\f5c4"; }
+
+.fa-swimmer::before {
+  content: "\f5c4"; }
+
+.fa-arrow-down::before {
+  content: "\f063"; }
+
+.fa-droplet::before {
+  content: "\f043"; }
+
+.fa-tint::before {
+  content: "\f043"; }
+
+.fa-eraser::before {
+  content: "\f12d"; }
+
+.fa-earth-americas::before {
+  content: "\f57d"; }
+
+.fa-earth::before {
+  content: "\f57d"; }
+
+.fa-earth-america::before {
+  content: "\f57d"; }
+
+.fa-globe-americas::before {
+  content: "\f57d"; }
+
+.fa-person-burst::before {
+  content: "\e53b"; }
+
+.fa-dove::before {
+  content: "\f4ba"; }
+
+.fa-battery-empty::before {
+  content: "\f244"; }
+
+.fa-battery-0::before {
+  content: "\f244"; }
+
+.fa-socks::before {
+  content: "\f696"; }
+
+.fa-inbox::before {
+  content: "\f01c"; }
+
+.fa-section::before {
+  content: "\e447"; }
+
+.fa-gauge-high::before {
+  content: "\f625"; }
+
+.fa-tachometer-alt::before {
+  content: "\f625"; }
+
+.fa-tachometer-alt-fast::before {
+  content: "\f625"; }
+
+.fa-envelope-open-text::before {
+  content: "\f658"; }
+
+.fa-hospital::before {
+  content: "\f0f8"; }
+
+.fa-hospital-alt::before {
+  content: "\f0f8"; }
+
+.fa-hospital-wide::before {
+  content: "\f0f8"; }
+
+.fa-wine-bottle::before {
+  content: "\f72f"; }
+
+.fa-chess-rook::before {
+  content: "\f447"; }
+
+.fa-bars-staggered::before {
+  content: "\f550"; }
+
+.fa-reorder::before {
+  content: "\f550"; }
+
+.fa-stream::before {
+  content: "\f550"; }
+
+.fa-dharmachakra::before {
+  content: "\f655"; }
+
+.fa-hotdog::before {
+  content: "\f80f"; }
+
+.fa-person-walking-with-cane::before {
+  content: "\f29d"; }
+
+.fa-blind::before {
+  content: "\f29d"; }
+
+.fa-drum::before {
+  content: "\f569"; }
+
+.fa-ice-cream::before {
+  content: "\f810"; }
+
+.fa-heart-circle-bolt::before {
+  content: "\e4fc"; }
+
+.fa-fax::before {
+  content: "\f1ac"; }
+
+.fa-paragraph::before {
+  content: "\f1dd"; }
+
+.fa-check-to-slot::before {
+  content: "\f772"; }
+
+.fa-vote-yea::before {
+  content: "\f772"; }
+
+.fa-star-half::before {
+  content: "\f089"; }
+
+.fa-boxes-stacked::before {
+  content: "\f468"; }
+
+.fa-boxes::before {
+  content: "\f468"; }
+
+.fa-boxes-alt::before {
+  content: "\f468"; }
+
+.fa-link::before {
+  content: "\f0c1"; }
+
+.fa-chain::before {
+  content: "\f0c1"; }
+
+.fa-ear-listen::before {
+  content: "\f2a2"; }
+
+.fa-assistive-listening-systems::before {
+  content: "\f2a2"; }
+
+.fa-tree-city::before {
+  content: "\e587"; }
+
+.fa-play::before {
+  content: "\f04b"; }
+
+.fa-font::before {
+  content: "\f031"; }
+
+.fa-rupiah-sign::before {
+  content: "\e23d"; }
+
+.fa-magnifying-glass::before {
+  content: "\f002"; }
+
+.fa-search::before {
+  content: "\f002"; }
+
+.fa-table-tennis-paddle-ball::before {
+  content: "\f45d"; }
+
+.fa-ping-pong-paddle-ball::before {
+  content: "\f45d"; }
+
+.fa-table-tennis::before {
+  content: "\f45d"; }
+
+.fa-person-dots-from-line::before {
+  content: "\f470"; }
+
+.fa-diagnoses::before {
+  content: "\f470"; }
+
+.fa-trash-can-arrow-up::before {
+  content: "\f82a"; }
+
+.fa-trash-restore-alt::before {
+  content: "\f82a"; }
+
+.fa-naira-sign::before {
+  content: "\e1f6"; }
+
+.fa-cart-arrow-down::before {
+  content: "\f218"; }
+
+.fa-walkie-talkie::before {
+  content: "\f8ef"; }
+
+.fa-file-pen::before {
+  content: "\f31c"; }
+
+.fa-file-edit::before {
+  content: "\f31c"; }
+
+.fa-receipt::before {
+  content: "\f543"; }
+
+.fa-square-pen::before {
+  content: "\f14b"; }
+
+.fa-pen-square::before {
+  content: "\f14b"; }
+
+.fa-pencil-square::before {
+  content: "\f14b"; }
+
+.fa-suitcase-rolling::before {
+  content: "\f5c1"; }
+
+.fa-person-circle-exclamation::before {
+  content: "\e53f"; }
+
+.fa-chevron-down::before {
+  content: "\f078"; }
+
+.fa-battery-full::before {
+  content: "\f240"; }
+
+.fa-battery::before {
+  content: "\f240"; }
+
+.fa-battery-5::before {
+  content: "\f240"; }
+
+.fa-skull-crossbones::before {
+  content: "\f714"; }
+
+.fa-code-compare::before {
+  content: "\e13a"; }
+
+.fa-list-ul::before {
+  content: "\f0ca"; }
+
+.fa-list-dots::before {
+  content: "\f0ca"; }
+
+.fa-school-lock::before {
+  content: "\e56f"; }
+
+.fa-tower-cell::before {
+  content: "\e585"; }
+
+.fa-down-long::before {
+  content: "\f309"; }
+
+.fa-long-arrow-alt-down::before {
+  content: "\f309"; }
+
+.fa-ranking-star::before {
+  content: "\e561"; }
+
+.fa-chess-king::before {
+  content: "\f43f"; }
+
+.fa-person-harassing::before {
+  content: "\e549"; }
+
+.fa-brazilian-real-sign::before {
+  content: "\e46c"; }
+
+.fa-landmark-dome::before {
+  content: "\f752"; }
+
+.fa-landmark-alt::before {
+  content: "\f752"; }
+
+.fa-arrow-up::before {
+  content: "\f062"; }
+
+.fa-tv::before {
+  content: "\f26c"; }
+
+.fa-television::before {
+  content: "\f26c"; }
+
+.fa-tv-alt::before {
+  content: "\f26c"; }
+
+.fa-shrimp::before {
+  content: "\e448"; }
+
+.fa-list-check::before {
+  content: "\f0ae"; }
+
+.fa-tasks::before {
+  content: "\f0ae"; }
+
+.fa-jug-detergent::before {
+  content: "\e519"; }
+
+.fa-circle-user::before {
+  content: "\f2bd"; }
+
+.fa-user-circle::before {
+  content: "\f2bd"; }
+
+.fa-user-shield::before {
+  content: "\f505"; }
+
+.fa-wind::before {
+  content: "\f72e"; }
+
+.fa-car-burst::before {
+  content: "\f5e1"; }
+
+.fa-car-crash::before {
+  content: "\f5e1"; }
+
+.fa-y::before {
+  content: "\59"; }
+
+.fa-person-snowboarding::before {
+  content: "\f7ce"; }
+
+.fa-snowboarding::before {
+  content: "\f7ce"; }
+
+.fa-truck-fast::before {
+  content: "\f48b"; }
+
+.fa-shipping-fast::before {
+  content: "\f48b"; }
+
+.fa-fish::before {
+  content: "\f578"; }
+
+.fa-user-graduate::before {
+  content: "\f501"; }
+
+.fa-circle-half-stroke::before {
+  content: "\f042"; }
+
+.fa-adjust::before {
+  content: "\f042"; }
+
+.fa-clapperboard::before {
+  content: "\e131"; }
+
+.fa-circle-radiation::before {
+  content: "\f7ba"; }
+
+.fa-radiation-alt::before {
+  content: "\f7ba"; }
+
+.fa-baseball::before {
+  content: "\f433"; }
+
+.fa-baseball-ball::before {
+  content: "\f433"; }
+
+.fa-jet-fighter-up::before {
+  content: "\e518"; }
+
+.fa-diagram-project::before {
+  content: "\f542"; }
+
+.fa-project-diagram::before {
+  content: "\f542"; }
+
+.fa-copy::before {
+  content: "\f0c5"; }
+
+.fa-volume-xmark::before {
+  content: "\f6a9"; }
+
+.fa-volume-mute::before {
+  content: "\f6a9"; }
+
+.fa-volume-times::before {
+  content: "\f6a9"; }
+
+.fa-hand-sparkles::before {
+  content: "\e05d"; }
+
+.fa-grip::before {
+  content: "\f58d"; }
+
+.fa-grip-horizontal::before {
+  content: "\f58d"; }
+
+.fa-share-from-square::before {
+  content: "\f14d"; }
+
+.fa-share-square::before {
+  content: "\f14d"; }
+
+.fa-child-combatant::before {
+  content: "\e4e0"; }
+
+.fa-child-rifle::before {
+  content: "\e4e0"; }
+
+.fa-gun::before {
+  content: "\e19b"; }
+
+.fa-square-phone::before {
+  content: "\f098"; }
+
+.fa-phone-square::before {
+  content: "\f098"; }
+
+.fa-plus::before {
+  content: "\2b"; }
+
+.fa-add::before {
+  content: "\2b"; }
+
+.fa-expand::before {
+  content: "\f065"; }
+
+.fa-computer::before {
+  content: "\e4e5"; }
+
+.fa-xmark::before {
+  content: "\f00d"; }
+
+.fa-close::before {
+  content: "\f00d"; }
+
+.fa-multiply::before {
+  content: "\f00d"; }
+
+.fa-remove::before {
+  content: "\f00d"; }
+
+.fa-times::before {
+  content: "\f00d"; }
+
+.fa-arrows-up-down-left-right::before {
+  content: "\f047"; }
+
+.fa-arrows::before {
+  content: "\f047"; }
+
+.fa-chalkboard-user::before {
+  content: "\f51c"; }
+
+.fa-chalkboard-teacher::before {
+  content: "\f51c"; }
+
+.fa-peso-sign::before {
+  content: "\e222"; }
+
+.fa-building-shield::before {
+  content: "\e4d8"; }
+
+.fa-baby::before {
+  content: "\f77c"; }
+
+.fa-users-line::before {
+  content: "\e592"; }
+
+.fa-quote-left::before {
+  content: "\f10d"; }
+
+.fa-quote-left-alt::before {
+  content: "\f10d"; }
+
+.fa-tractor::before {
+  content: "\f722"; }
+
+.fa-trash-arrow-up::before {
+  content: "\f829"; }
+
+.fa-trash-restore::before {
+  content: "\f829"; }
+
+.fa-arrow-down-up-lock::before {
+  content: "\e4b0"; }
+
+.fa-lines-leaning::before {
+  content: "\e51e"; }
+
+.fa-ruler-combined::before {
+  content: "\f546"; }
+
+.fa-copyright::before {
+  content: "\f1f9"; }
+
+.fa-equals::before {
+  content: "\3d"; }
+
+.fa-blender::before {
+  content: "\f517"; }
+
+.fa-teeth::before {
+  content: "\f62e"; }
+
+.fa-shekel-sign::before {
+  content: "\f20b"; }
+
+.fa-ils::before {
+  content: "\f20b"; }
+
+.fa-shekel::before {
+  content: "\f20b"; }
+
+.fa-sheqel::before {
+  content: "\f20b"; }
+
+.fa-sheqel-sign::before {
+  content: "\f20b"; }
+
+.fa-map::before {
+  content: "\f279"; }
+
+.fa-rocket::before {
+  content: "\f135"; }
+
+.fa-photo-film::before {
+  content: "\f87c"; }
+
+.fa-photo-video::before {
+  content: "\f87c"; }
+
+.fa-folder-minus::before {
+  content: "\f65d"; }
+
+.fa-store::before {
+  content: "\f54e"; }
+
+.fa-arrow-trend-up::before {
+  content: "\e098"; }
+
+.fa-plug-circle-minus::before {
+  content: "\e55e"; }
+
+.fa-sign-hanging::before {
+  content: "\f4d9"; }
+
+.fa-sign::before {
+  content: "\f4d9"; }
+
+.fa-bezier-curve::before {
+  content: "\f55b"; }
+
+.fa-bell-slash::before {
+  content: "\f1f6"; }
+
+.fa-tablet::before {
+  content: "\f3fb"; }
+
+.fa-tablet-android::before {
+  content: "\f3fb"; }
+
+.fa-school-flag::before {
+  content: "\e56e"; }
+
+.fa-fill::before {
+  content: "\f575"; }
+
+.fa-angle-up::before {
+  content: "\f106"; }
+
+.fa-drumstick-bite::before {
+  content: "\f6d7"; }
+
+.fa-holly-berry::before {
+  content: "\f7aa"; }
+
+.fa-chevron-left::before {
+  content: "\f053"; }
+
+.fa-bacteria::before {
+  content: "\e059"; }
+
+.fa-hand-lizard::before {
+  content: "\f258"; }
+
+.fa-notdef::before {
+  content: "\e1fe"; }
+
+.fa-disease::before {
+  content: "\f7fa"; }
+
+.fa-briefcase-medical::before {
+  content: "\f469"; }
+
+.fa-genderless::before {
+  content: "\f22d"; }
+
+.fa-chevron-right::before {
+  content: "\f054"; }
+
+.fa-retweet::before {
+  content: "\f079"; }
+
+.fa-car-rear::before {
+  content: "\f5de"; }
+
+.fa-car-alt::before {
+  content: "\f5de"; }
+
+.fa-pump-soap::before {
+  content: "\e06b"; }
+
+.fa-video-slash::before {
+  content: "\f4e2"; }
+
+.fa-battery-quarter::before {
+  content: "\f243"; }
+
+.fa-battery-2::before {
+  content: "\f243"; }
+
+.fa-radio::before {
+  content: "\f8d7"; }
+
+.fa-baby-carriage::before {
+  content: "\f77d"; }
+
+.fa-carriage-baby::before {
+  content: "\f77d"; }
+
+.fa-traffic-light::before {
+  content: "\f637"; }
+
+.fa-thermometer::before {
+  content: "\f491"; }
+
+.fa-vr-cardboard::before {
+  content: "\f729"; }
+
+.fa-hand-middle-finger::before {
+  content: "\f806"; }
+
+.fa-percent::before {
+  content: "\25"; }
+
+.fa-percentage::before {
+  content: "\25"; }
+
+.fa-truck-moving::before {
+  content: "\f4df"; }
+
+.fa-glass-water-droplet::before {
+  content: "\e4f5"; }
+
+.fa-display::before {
+  content: "\e163"; }
+
+.fa-face-smile::before {
+  content: "\f118"; }
+
+.fa-smile::before {
+  content: "\f118"; }
+
+.fa-thumbtack::before {
+  content: "\f08d"; }
+
+.fa-thumb-tack::before {
+  content: "\f08d"; }
+
+.fa-trophy::before {
+  content: "\f091"; }
+
+.fa-person-praying::before {
+  content: "\f683"; }
+
+.fa-pray::before {
+  content: "\f683"; }
+
+.fa-hammer::before {
+  content: "\f6e3"; }
+
+.fa-hand-peace::before {
+  content: "\f25b"; }
+
+.fa-rotate::before {
+  content: "\f2f1"; }
+
+.fa-sync-alt::before {
+  content: "\f2f1"; }
+
+.fa-spinner::before {
+  content: "\f110"; }
+
+.fa-robot::before {
+  content: "\f544"; }
+
+.fa-peace::before {
+  content: "\f67c"; }
+
+.fa-gears::before {
+  content: "\f085"; }
+
+.fa-cogs::before {
+  content: "\f085"; }
+
+.fa-warehouse::before {
+  content: "\f494"; }
+
+.fa-arrow-up-right-dots::before {
+  content: "\e4b7"; }
+
+.fa-splotch::before {
+  content: "\f5bc"; }
+
+.fa-face-grin-hearts::before {
+  content: "\f584"; }
+
+.fa-grin-hearts::before {
+  content: "\f584"; }
+
+.fa-dice-four::before {
+  content: "\f524"; }
+
+.fa-sim-card::before {
+  content: "\f7c4"; }
+
+.fa-transgender::before {
+  content: "\f225"; }
+
+.fa-transgender-alt::before {
+  content: "\f225"; }
+
+.fa-mercury::before {
+  content: "\f223"; }
+
+.fa-arrow-turn-down::before {
+  content: "\f149"; }
+
+.fa-level-down::before {
+  content: "\f149"; }
+
+.fa-person-falling-burst::before {
+  content: "\e547"; }
+
+.fa-award::before {
+  content: "\f559"; }
+
+.fa-ticket-simple::before {
+  content: "\f3ff"; }
+
+.fa-ticket-alt::before {
+  content: "\f3ff"; }
+
+.fa-building::before {
+  content: "\f1ad"; }
+
+.fa-angles-left::before {
+  content: "\f100"; }
+
+.fa-angle-double-left::before {
+  content: "\f100"; }
+
+.fa-qrcode::before {
+  content: "\f029"; }
+
+.fa-clock-rotate-left::before {
+  content: "\f1da"; }
+
+.fa-history::before {
+  content: "\f1da"; }
+
+.fa-face-grin-beam-sweat::before {
+  content: "\f583"; }
+
+.fa-grin-beam-sweat::before {
+  content: "\f583"; }
+
+.fa-file-export::before {
+  content: "\f56e"; }
+
+.fa-arrow-right-from-file::before {
+  content: "\f56e"; }
+
+.fa-shield::before {
+  content: "\f132"; }
+
+.fa-shield-blank::before {
+  content: "\f132"; }
+
+.fa-arrow-up-short-wide::before {
+  content: "\f885"; }
+
+.fa-sort-amount-up-alt::before {
+  content: "\f885"; }
+
+.fa-house-medical::before {
+  content: "\e3b2"; }
+
+.fa-golf-ball-tee::before {
+  content: "\f450"; }
+
+.fa-golf-ball::before {
+  content: "\f450"; }
+
+.fa-circle-chevron-left::before {
+  content: "\f137"; }
+
+.fa-chevron-circle-left::before {
+  content: "\f137"; }
+
+.fa-house-chimney-window::before {
+  content: "\e00d"; }
+
+.fa-pen-nib::before {
+  content: "\f5ad"; }
+
+.fa-tent-arrow-turn-left::before {
+  content: "\e580"; }
+
+.fa-tents::before {
+  content: "\e582"; }
+
+.fa-wand-magic::before {
+  content: "\f0d0"; }
+
+.fa-magic::before {
+  content: "\f0d0"; }
+
+.fa-dog::before {
+  content: "\f6d3"; }
+
+.fa-carrot::before {
+  content: "\f787"; }
+
+.fa-moon::before {
+  content: "\f186"; }
+
+.fa-wine-glass-empty::before {
+  content: "\f5ce"; }
+
+.fa-wine-glass-alt::before {
+  content: "\f5ce"; }
+
+.fa-cheese::before {
+  content: "\f7ef"; }
+
+.fa-yin-yang::before {
+  content: "\f6ad"; }
+
+.fa-music::before {
+  content: "\f001"; }
+
+.fa-code-commit::before {
+  content: "\f386"; }
+
+.fa-temperature-low::before {
+  content: "\f76b"; }
+
+.fa-person-biking::before {
+  content: "\f84a"; }
+
+.fa-biking::before {
+  content: "\f84a"; }
+
+.fa-broom::before {
+  content: "\f51a"; }
+
+.fa-shield-heart::before {
+  content: "\e574"; }
+
+.fa-gopuram::before {
+  content: "\f664"; }
+
+.fa-earth-oceania::before {
+  content: "\e47b"; }
+
+.fa-globe-oceania::before {
+  content: "\e47b"; }
+
+.fa-square-xmark::before {
+  content: "\f2d3"; }
+
+.fa-times-square::before {
+  content: "\f2d3"; }
+
+.fa-xmark-square::before {
+  content: "\f2d3"; }
+
+.fa-hashtag::before {
+  content: "\23"; }
+
+.fa-up-right-and-down-left-from-center::before {
+  content: "\f424"; }
+
+.fa-expand-alt::before {
+  content: "\f424"; }
+
+.fa-oil-can::before {
+  content: "\f613"; }
+
+.fa-t::before {
+  content: "\54"; }
+
+.fa-hippo::before {
+  content: "\f6ed"; }
+
+.fa-chart-column::before {
+  content: "\e0e3"; }
+
+.fa-infinity::before {
+  content: "\f534"; }
+
+.fa-vial-circle-check::before {
+  content: "\e596"; }
+
+.fa-person-arrow-down-to-line::before {
+  content: "\e538"; }
+
+.fa-voicemail::before {
+  content: "\f897"; }
+
+.fa-fan::before {
+  content: "\f863"; }
+
+.fa-person-walking-luggage::before {
+  content: "\e554"; }
+
+.fa-up-down::before {
+  content: "\f338"; }
+
+.fa-arrows-alt-v::before {
+  content: "\f338"; }
+
+.fa-cloud-moon-rain::before {
+  content: "\f73c"; }
+
+.fa-calendar::before {
+  content: "\f133"; }
+
+.fa-trailer::before {
+  content: "\e041"; }
+
+.fa-bahai::before {
+  content: "\f666"; }
+
+.fa-haykal::before {
+  content: "\f666"; }
+
+.fa-sd-card::before {
+  content: "\f7c2"; }
+
+.fa-dragon::before {
+  content: "\f6d5"; }
+
+.fa-shoe-prints::before {
+  content: "\f54b"; }
+
+.fa-circle-plus::before {
+  content: "\f055"; }
+
+.fa-plus-circle::before {
+  content: "\f055"; }
+
+.fa-face-grin-tongue-wink::before {
+  content: "\f58b"; }
+
+.fa-grin-tongue-wink::before {
+  content: "\f58b"; }
+
+.fa-hand-holding::before {
+  content: "\f4bd"; }
+
+.fa-plug-circle-exclamation::before {
+  content: "\e55d"; }
+
+.fa-link-slash::before {
+  content: "\f127"; }
+
+.fa-chain-broken::before {
+  content: "\f127"; }
+
+.fa-chain-slash::before {
+  content: "\f127"; }
+
+.fa-unlink::before {
+  content: "\f127"; }
+
+.fa-clone::before {
+  content: "\f24d"; }
+
+.fa-person-walking-arrow-loop-left::before {
+  content: "\e551"; }
+
+.fa-arrow-up-z-a::before {
+  content: "\f882"; }
+
+.fa-sort-alpha-up-alt::before {
+  content: "\f882"; }
+
+.fa-fire-flame-curved::before {
+  content: "\f7e4"; }
+
+.fa-fire-alt::before {
+  content: "\f7e4"; }
+
+.fa-tornado::before {
+  content: "\f76f"; }
+
+.fa-file-circle-plus::before {
+  content: "\e494"; }
+
+.fa-book-quran::before {
+  content: "\f687"; }
+
+.fa-quran::before {
+  content: "\f687"; }
+
+.fa-anchor::before {
+  content: "\f13d"; }
+
+.fa-border-all::before {
+  content: "\f84c"; }
+
+.fa-face-angry::before {
+  content: "\f556"; }
+
+.fa-angry::before {
+  content: "\f556"; }
+
+.fa-cookie-bite::before {
+  content: "\f564"; }
+
+.fa-arrow-trend-down::before {
+  content: "\e097"; }
+
+.fa-rss::before {
+  content: "\f09e"; }
+
+.fa-feed::before {
+  content: "\f09e"; }
+
+.fa-draw-polygon::before {
+  content: "\f5ee"; }
+
+.fa-scale-balanced::before {
+  content: "\f24e"; }
+
+.fa-balance-scale::before {
+  content: "\f24e"; }
+
+.fa-gauge-simple-high::before {
+  content: "\f62a"; }
+
+.fa-tachometer::before {
+  content: "\f62a"; }
+
+.fa-tachometer-fast::before {
+  content: "\f62a"; }
+
+.fa-shower::before {
+  content: "\f2cc"; }
+
+.fa-desktop::before {
+  content: "\f390"; }
+
+.fa-desktop-alt::before {
+  content: "\f390"; }
+
+.fa-m::before {
+  content: "\4d"; }
+
+.fa-table-list::before {
+  content: "\f00b"; }
+
+.fa-th-list::before {
+  content: "\f00b"; }
+
+.fa-comment-sms::before {
+  content: "\f7cd"; }
+
+.fa-sms::before {
+  content: "\f7cd"; }
+
+.fa-book::before {
+  content: "\f02d"; }
+
+.fa-user-plus::before {
+  content: "\f234"; }
+
+.fa-check::before {
+  content: "\f00c"; }
+
+.fa-battery-three-quarters::before {
+  content: "\f241"; }
+
+.fa-battery-4::before {
+  content: "\f241"; }
+
+.fa-house-circle-check::before {
+  content: "\e509"; }
+
+.fa-angle-left::before {
+  content: "\f104"; }
+
+.fa-diagram-successor::before {
+  content: "\e47a"; }
+
+.fa-truck-arrow-right::before {
+  content: "\e58b"; }
+
+.fa-arrows-split-up-and-left::before {
+  content: "\e4bc"; }
+
+.fa-hand-fist::before {
+  content: "\f6de"; }
+
+.fa-fist-raised::before {
+  content: "\f6de"; }
+
+.fa-cloud-moon::before {
+  content: "\f6c3"; }
+
+.fa-briefcase::before {
+  content: "\f0b1"; }
+
+.fa-person-falling::before {
+  content: "\e546"; }
+
+.fa-image-portrait::before {
+  content: "\f3e0"; }
+
+.fa-portrait::before {
+  content: "\f3e0"; }
+
+.fa-user-tag::before {
+  content: "\f507"; }
+
+.fa-rug::before {
+  content: "\e569"; }
+
+.fa-earth-europe::before {
+  content: "\f7a2"; }
+
+.fa-globe-europe::before {
+  content: "\f7a2"; }
+
+.fa-cart-flatbed-suitcase::before {
+  content: "\f59d"; }
+
+.fa-luggage-cart::before {
+  content: "\f59d"; }
+
+.fa-rectangle-xmark::before {
+  content: "\f410"; }
+
+.fa-rectangle-times::before {
+  content: "\f410"; }
+
+.fa-times-rectangle::before {
+  content: "\f410"; }
+
+.fa-window-close::before {
+  content: "\f410"; }
+
+.fa-baht-sign::before {
+  content: "\e0ac"; }
+
+.fa-book-open::before {
+  content: "\f518"; }
+
+.fa-book-journal-whills::before {
+  content: "\f66a"; }
+
+.fa-journal-whills::before {
+  content: "\f66a"; }
+
+.fa-handcuffs::before {
+  content: "\e4f8"; }
+
+.fa-triangle-exclamation::before {
+  content: "\f071"; }
+
+.fa-exclamation-triangle::before {
+  content: "\f071"; }
+
+.fa-warning::before {
+  content: "\f071"; }
+
+.fa-database::before {
+  content: "\f1c0"; }
+
+.fa-share::before {
+  content: "\f064"; }
+
+.fa-arrow-turn-right::before {
+  content: "\f064"; }
+
+.fa-mail-forward::before {
+  content: "\f064"; }
+
+.fa-bottle-droplet::before {
+  content: "\e4c4"; }
+
+.fa-mask-face::before {
+  content: "\e1d7"; }
+
+.fa-hill-rockslide::before {
+  content: "\e508"; }
+
+.fa-right-left::before {
+  content: "\f362"; }
+
+.fa-exchange-alt::before {
+  content: "\f362"; }
+
+.fa-paper-plane::before {
+  content: "\f1d8"; }
+
+.fa-road-circle-exclamation::before {
+  content: "\e565"; }
+
+.fa-dungeon::before {
+  content: "\f6d9"; }
+
+.fa-align-right::before {
+  content: "\f038"; }
+
+.fa-money-bill-1-wave::before {
+  content: "\f53b"; }
+
+.fa-money-bill-wave-alt::before {
+  content: "\f53b"; }
+
+.fa-life-ring::before {
+  content: "\f1cd"; }
+
+.fa-hands::before {
+  content: "\f2a7"; }
+
+.fa-sign-language::before {
+  content: "\f2a7"; }
+
+.fa-signing::before {
+  content: "\f2a7"; }
+
+.fa-calendar-day::before {
+  content: "\f783"; }
+
+.fa-water-ladder::before {
+  content: "\f5c5"; }
+
+.fa-ladder-water::before {
+  content: "\f5c5"; }
+
+.fa-swimming-pool::before {
+  content: "\f5c5"; }
+
+.fa-arrows-up-down::before {
+  content: "\f07d"; }
+
+.fa-arrows-v::before {
+  content: "\f07d"; }
+
+.fa-face-grimace::before {
+  content: "\f57f"; }
+
+.fa-grimace::before {
+  content: "\f57f"; }
+
+.fa-wheelchair-move::before {
+  content: "\e2ce"; }
+
+.fa-wheelchair-alt::before {
+  content: "\e2ce"; }
+
+.fa-turn-down::before {
+  content: "\f3be"; }
+
+.fa-level-down-alt::before {
+  content: "\f3be"; }
+
+.fa-person-walking-arrow-right::before {
+  content: "\e552"; }
+
+.fa-square-envelope::before {
+  content: "\f199"; }
+
+.fa-envelope-square::before {
+  content: "\f199"; }
+
+.fa-dice::before {
+  content: "\f522"; }
+
+.fa-bowling-ball::before {
+  content: "\f436"; }
+
+.fa-brain::before {
+  content: "\f5dc"; }
+
+.fa-bandage::before {
+  content: "\f462"; }
+
+.fa-band-aid::before {
+  content: "\f462"; }
+
+.fa-calendar-minus::before {
+  content: "\f272"; }
+
+.fa-circle-xmark::before {
+  content: "\f057"; }
+
+.fa-times-circle::before {
+  content: "\f057"; }
+
+.fa-xmark-circle::before {
+  content: "\f057"; }
+
+.fa-gifts::before {
+  content: "\f79c"; }
+
+.fa-hotel::before {
+  content: "\f594"; }
+
+.fa-earth-asia::before {
+  content: "\f57e"; }
+
+.fa-globe-asia::before {
+  content: "\f57e"; }
+
+.fa-id-card-clip::before {
+  content: "\f47f"; }
+
+.fa-id-card-alt::before {
+  content: "\f47f"; }
+
+.fa-magnifying-glass-plus::before {
+  content: "\f00e"; }
+
+.fa-search-plus::before {
+  content: "\f00e"; }
+
+.fa-thumbs-up::before {
+  content: "\f164"; }
+
+.fa-user-clock::before {
+  content: "\f4fd"; }
+
+.fa-hand-dots::before {
+  content: "\f461"; }
+
+.fa-allergies::before {
+  content: "\f461"; }
+
+.fa-file-invoice::before {
+  content: "\f570"; }
+
+.fa-window-minimize::before {
+  content: "\f2d1"; }
+
+.fa-mug-saucer::before {
+  content: "\f0f4"; }
+
+.fa-coffee::before {
+  content: "\f0f4"; }
+
+.fa-brush::before {
+  content: "\f55d"; }
+
+.fa-mask::before {
+  content: "\f6fa"; }
+
+.fa-magnifying-glass-minus::before {
+  content: "\f010"; }
+
+.fa-search-minus::before {
+  content: "\f010"; }
+
+.fa-ruler-vertical::before {
+  content: "\f548"; }
+
+.fa-user-large::before {
+  content: "\f406"; }
+
+.fa-user-alt::before {
+  content: "\f406"; }
+
+.fa-train-tram::before {
+  content: "\e5b4"; }
+
+.fa-user-nurse::before {
+  content: "\f82f"; }
+
+.fa-syringe::before {
+  content: "\f48e"; }
+
+.fa-cloud-sun::before {
+  content: "\f6c4"; }
+
+.fa-stopwatch-20::before {
+  content: "\e06f"; }
+
+.fa-square-full::before {
+  content: "\f45c"; }
+
+.fa-magnet::before {
+  content: "\f076"; }
+
+.fa-jar::before {
+  content: "\e516"; }
+
+.fa-note-sticky::before {
+  content: "\f249"; }
+
+.fa-sticky-note::before {
+  content: "\f249"; }
+
+.fa-bug-slash::before {
+  content: "\e490"; }
+
+.fa-arrow-up-from-water-pump::before {
+  content: "\e4b6"; }
+
+.fa-bone::before {
+  content: "\f5d7"; }
+
+.fa-user-injured::before {
+  content: "\f728"; }
+
+.fa-face-sad-tear::before {
+  content: "\f5b4"; }
+
+.fa-sad-tear::before {
+  content: "\f5b4"; }
+
+.fa-plane::before {
+  content: "\f072"; }
+
+.fa-tent-arrows-down::before {
+  content: "\e581"; }
+
+.fa-exclamation::before {
+  content: "\21"; }
+
+.fa-arrows-spin::before {
+  content: "\e4bb"; }
+
+.fa-print::before {
+  content: "\f02f"; }
+
+.fa-turkish-lira-sign::before {
+  content: "\e2bb"; }
+
+.fa-try::before {
+  content: "\e2bb"; }
+
+.fa-turkish-lira::before {
+  content: "\e2bb"; }
+
+.fa-dollar-sign::before {
+  content: "\24"; }
+
+.fa-dollar::before {
+  content: "\24"; }
+
+.fa-usd::before {
+  content: "\24"; }
+
+.fa-x::before {
+  content: "\58"; }
+
+.fa-magnifying-glass-dollar::before {
+  content: "\f688"; }
+
+.fa-search-dollar::before {
+  content: "\f688"; }
+
+.fa-users-gear::before {
+  content: "\f509"; }
+
+.fa-users-cog::before {
+  content: "\f509"; }
+
+.fa-person-military-pointing::before {
+  content: "\e54a"; }
+
+.fa-building-columns::before {
+  content: "\f19c"; }
+
+.fa-bank::before {
+  content: "\f19c"; }
+
+.fa-institution::before {
+  content: "\f19c"; }
+
+.fa-museum::before {
+  content: "\f19c"; }
+
+.fa-university::before {
+  content: "\f19c"; }
+
+.fa-umbrella::before {
+  content: "\f0e9"; }
+
+.fa-trowel::before {
+  content: "\e589"; }
+
+.fa-d::before {
+  content: "\44"; }
+
+.fa-stapler::before {
+  content: "\e5af"; }
+
+.fa-masks-theater::before {
+  content: "\f630"; }
+
+.fa-theater-masks::before {
+  content: "\f630"; }
+
+.fa-kip-sign::before {
+  content: "\e1c4"; }
+
+.fa-hand-point-left::before {
+  content: "\f0a5"; }
+
+.fa-handshake-simple::before {
+  content: "\f4c6"; }
+
+.fa-handshake-alt::before {
+  content: "\f4c6"; }
+
+.fa-jet-fighter::before {
+  content: "\f0fb"; }
+
+.fa-fighter-jet::before {
+  content: "\f0fb"; }
+
+.fa-square-share-nodes::before {
+  content: "\f1e1"; }
+
+.fa-share-alt-square::before {
+  content: "\f1e1"; }
+
+.fa-barcode::before {
+  content: "\f02a"; }
+
+.fa-plus-minus::before {
+  content: "\e43c"; }
+
+.fa-video::before {
+  content: "\f03d"; }
+
+.fa-video-camera::before {
+  content: "\f03d"; }
+
+.fa-graduation-cap::before {
+  content: "\f19d"; }
+
+.fa-mortar-board::before {
+  content: "\f19d"; }
+
+.fa-hand-holding-medical::before {
+  content: "\e05c"; }
+
+.fa-person-circle-check::before {
+  content: "\e53e"; }
+
+.fa-turn-up::before {
+  content: "\f3bf"; }
+
+.fa-level-up-alt::before {
+  content: "\f3bf"; }
+
+.sr-only,
+.fa-sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  white-space: nowrap;
+  border-width: 0; }
+
+.sr-only-focusable:not(:focus),
+.fa-sr-only-focusable:not(:focus) {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  white-space: nowrap;
+  border-width: 0; }

文件差异内容过多而无法显示
+ 5 - 0
static/tickets/assets/fontawesome/css/fontawesome.min.css


+ 19 - 0
static/tickets/assets/fontawesome/css/regular.css

@@ -0,0 +1,19 @@
+/*!
+ * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2023 Fonticons, Inc.
+ */
+:root, :host {
+  --fa-style-family-classic: 'Font Awesome 6 Free';
+  --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; }
+
+@font-face {
+  font-family: 'Font Awesome 6 Free';
+  font-style: normal;
+  font-weight: 400;
+  font-display: block;
+  src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
+
+.far,
+.fa-regular {
+  font-weight: 400; }

+ 6 - 0
static/tickets/assets/fontawesome/css/regular.min.css

@@ -0,0 +1,6 @@
+/*!
+ * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2023 Fonticons, Inc.
+ */
+:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}

+ 19 - 0
static/tickets/assets/fontawesome/css/solid.css

@@ -0,0 +1,19 @@
+/*!
+ * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2023 Fonticons, Inc.
+ */
+:root, :host {
+  --fa-style-family-classic: 'Font Awesome 6 Free';
+  --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; }
+
+@font-face {
+  font-family: 'Font Awesome 6 Free';
+  font-style: normal;
+  font-weight: 900;
+  font-display: block;
+  src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
+
+.fas,
+.fa-solid {
+  font-weight: 900; }

+ 6 - 0
static/tickets/assets/fontawesome/css/solid.min.css

@@ -0,0 +1,6 @@
+/*!
+ * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2023 Fonticons, Inc.
+ */
+:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}

+ 639 - 0
static/tickets/assets/fontawesome/css/svg-with-js.css

@@ -0,0 +1,639 @@
+/*!
+ * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2023 Fonticons, Inc.
+ */
+:root, :host {
+  --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Solid';
+  --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Regular';
+  --fa-font-light: normal 300 1em/1 'Font Awesome 6 Light';
+  --fa-font-thin: normal 100 1em/1 'Font Awesome 6 Thin';
+  --fa-font-duotone: normal 900 1em/1 'Font Awesome 6 Duotone';
+  --fa-font-sharp-solid: normal 900 1em/1 'Font Awesome 6 Sharp';
+  --fa-font-sharp-regular: normal 400 1em/1 'Font Awesome 6 Sharp';
+  --fa-font-sharp-light: normal 300 1em/1 'Font Awesome 6 Sharp';
+  --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; }
+
+svg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {
+  overflow: visible;
+  box-sizing: content-box; }
+
+.svg-inline--fa {
+  display: var(--fa-display, inline-block);
+  height: 1em;
+  overflow: visible;
+  vertical-align: -.125em; }
+  .svg-inline--fa.fa-2xs {
+    vertical-align: 0.1em; }
+  .svg-inline--fa.fa-xs {
+    vertical-align: 0em; }
+  .svg-inline--fa.fa-sm {
+    vertical-align: -0.07143em; }
+  .svg-inline--fa.fa-lg {
+    vertical-align: -0.2em; }
+  .svg-inline--fa.fa-xl {
+    vertical-align: -0.25em; }
+  .svg-inline--fa.fa-2xl {
+    vertical-align: -0.3125em; }
+  .svg-inline--fa.fa-pull-left {
+    margin-right: var(--fa-pull-margin, 0.3em);
+    width: auto; }
+  .svg-inline--fa.fa-pull-right {
+    margin-left: var(--fa-pull-margin, 0.3em);
+    width: auto; }
+  .svg-inline--fa.fa-li {
+    width: var(--fa-li-width, 2em);
+    top: 0.25em; }
+  .svg-inline--fa.fa-fw {
+    width: var(--fa-fw-width, 1.25em); }
+
+.fa-layers svg.svg-inline--fa {
+  bottom: 0;
+  left: 0;
+  margin: auto;
+  position: absolute;
+  right: 0;
+  top: 0; }
+
+.fa-layers-text, .fa-layers-counter {
+  display: inline-block;
+  position: absolute;
+  text-align: center; }
+
+.fa-layers {
+  display: inline-block;
+  height: 1em;
+  position: relative;
+  text-align: center;
+  vertical-align: -.125em;
+  width: 1em; }
+  .fa-layers svg.svg-inline--fa {
+    -webkit-transform-origin: center center;
+            transform-origin: center center; }
+
+.fa-layers-text {
+  left: 50%;
+  top: 50%;
+  -webkit-transform: translate(-50%, -50%);
+          transform: translate(-50%, -50%);
+  -webkit-transform-origin: center center;
+          transform-origin: center center; }
+
+.fa-layers-counter {
+  background-color: var(--fa-counter-background-color, #ff253a);
+  border-radius: var(--fa-counter-border-radius, 1em);
+  box-sizing: border-box;
+  color: var(--fa-inverse, #fff);
+  line-height: var(--fa-counter-line-height, 1);
+  max-width: var(--fa-counter-max-width, 5em);
+  min-width: var(--fa-counter-min-width, 1.5em);
+  overflow: hidden;
+  padding: var(--fa-counter-padding, 0.25em 0.5em);
+  right: var(--fa-right, 0);
+  text-overflow: ellipsis;
+  top: var(--fa-top, 0);
+  -webkit-transform: scale(var(--fa-counter-scale, 0.25));
+          transform: scale(var(--fa-counter-scale, 0.25));
+  -webkit-transform-origin: top right;
+          transform-origin: top right; }
+
+.fa-layers-bottom-right {
+  bottom: var(--fa-bottom, 0);
+  right: var(--fa-right, 0);
+  top: auto;
+  -webkit-transform: scale(var(--fa-layers-scale, 0.25));
+          transform: scale(var(--fa-layers-scale, 0.25));
+  -webkit-transform-origin: bottom right;
+          transform-origin: bottom right; }
+
+.fa-layers-bottom-left {
+  bottom: var(--fa-bottom, 0);
+  left: var(--fa-left, 0);
+  right: auto;
+  top: auto;
+  -webkit-transform: scale(var(--fa-layers-scale, 0.25));
+          transform: scale(var(--fa-layers-scale, 0.25));
+  -webkit-transform-origin: bottom left;
+          transform-origin: bottom left; }
+
+.fa-layers-top-right {
+  top: var(--fa-top, 0);
+  right: var(--fa-right, 0);
+  -webkit-transform: scale(var(--fa-layers-scale, 0.25));
+          transform: scale(var(--fa-layers-scale, 0.25));
+  -webkit-transform-origin: top right;
+          transform-origin: top right; }
+
+.fa-layers-top-left {
+  left: var(--fa-left, 0);
+  right: auto;
+  top: var(--fa-top, 0);
+  -webkit-transform: scale(var(--fa-layers-scale, 0.25));
+          transform: scale(var(--fa-layers-scale, 0.25));
+  -webkit-transform-origin: top left;
+          transform-origin: top left; }
+
+.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-2xs {
+  font-size: 0.625em;
+  line-height: 0.1em;
+  vertical-align: 0.225em; }
+
+.fa-xs {
+  font-size: 0.75em;
+  line-height: 0.08333em;
+  vertical-align: 0.125em; }
+
+.fa-sm {
+  font-size: 0.875em;
+  line-height: 0.07143em;
+  vertical-align: 0.05357em; }
+
+.fa-lg {
+  font-size: 1.25em;
+  line-height: 0.05em;
+  vertical-align: -0.075em; }
+
+.fa-xl {
+  font-size: 1.5em;
+  line-height: 0.04167em;
+  vertical-align: -0.125em; }
+
+.fa-2xl {
+  font-size: 2em;
+  line-height: 0.03125em;
+  vertical-align: -0.1875em; }
+
+.fa-fw {
+  text-align: center;
+  width: 1.25em; }
+
+.fa-ul {
+  list-style-type: none;
+  margin-left: var(--fa-li-margin, 2.5em);
+  padding-left: 0; }
+  .fa-ul > li {
+    position: relative; }
+
+.fa-li {
+  left: calc(var(--fa-li-width, 2em) * -1);
+  position: absolute;
+  text-align: center;
+  width: var(--fa-li-width, 2em);
+  line-height: inherit; }
+
+.fa-border {
+  border-color: var(--fa-border-color, #eee);
+  border-radius: var(--fa-border-radius, 0.1em);
+  border-style: var(--fa-border-style, solid);
+  border-width: var(--fa-border-width, 0.08em);
+  padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); }
+
+.fa-pull-left {
+  float: left;
+  margin-right: var(--fa-pull-margin, 0.3em); }
+
+.fa-pull-right {
+  float: right;
+  margin-left: var(--fa-pull-margin, 0.3em); }
+
+.fa-beat {
+  -webkit-animation-name: fa-beat;
+          animation-name: fa-beat;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
+          animation-timing-function: var(--fa-animation-timing, ease-in-out); }
+
+.fa-bounce {
+  -webkit-animation-name: fa-bounce;
+          animation-name: fa-bounce;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));
+          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); }
+
+.fa-fade {
+  -webkit-animation-name: fa-fade;
+          animation-name: fa-fade;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
+          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
+
+.fa-beat-fade {
+  -webkit-animation-name: fa-beat-fade;
+          animation-name: fa-beat-fade;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
+          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
+
+.fa-flip {
+  -webkit-animation-name: fa-flip;
+          animation-name: fa-flip;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
+          animation-timing-function: var(--fa-animation-timing, ease-in-out); }
+
+.fa-shake {
+  -webkit-animation-name: fa-shake;
+          animation-name: fa-shake;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, linear);
+          animation-timing-function: var(--fa-animation-timing, linear); }
+
+.fa-spin {
+  -webkit-animation-name: fa-spin;
+          animation-name: fa-spin;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 2s);
+          animation-duration: var(--fa-animation-duration, 2s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, linear);
+          animation-timing-function: var(--fa-animation-timing, linear); }
+
+.fa-spin-reverse {
+  --fa-animation-direction: reverse; }
+
+.fa-pulse,
+.fa-spin-pulse {
+  -webkit-animation-name: fa-spin;
+          animation-name: fa-spin;
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, steps(8));
+          animation-timing-function: var(--fa-animation-timing, steps(8)); }
+
+@media (prefers-reduced-motion: reduce) {
+  .fa-beat,
+  .fa-bounce,
+  .fa-fade,
+  .fa-beat-fade,
+  .fa-flip,
+  .fa-pulse,
+  .fa-shake,
+  .fa-spin,
+  .fa-spin-pulse {
+    -webkit-animation-delay: -1ms;
+            animation-delay: -1ms;
+    -webkit-animation-duration: 1ms;
+            animation-duration: 1ms;
+    -webkit-animation-iteration-count: 1;
+            animation-iteration-count: 1;
+    -webkit-transition-delay: 0s;
+            transition-delay: 0s;
+    -webkit-transition-duration: 0s;
+            transition-duration: 0s; } }
+
+@-webkit-keyframes fa-beat {
+  0%, 90% {
+    -webkit-transform: scale(1);
+            transform: scale(1); }
+  45% {
+    -webkit-transform: scale(var(--fa-beat-scale, 1.25));
+            transform: scale(var(--fa-beat-scale, 1.25)); } }
+
+@keyframes fa-beat {
+  0%, 90% {
+    -webkit-transform: scale(1);
+            transform: scale(1); }
+  45% {
+    -webkit-transform: scale(var(--fa-beat-scale, 1.25));
+            transform: scale(var(--fa-beat-scale, 1.25)); } }
+
+@-webkit-keyframes fa-bounce {
+  0% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); }
+  10% {
+    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
+            transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
+  30% {
+    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
+            transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
+  50% {
+    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
+            transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
+  57% {
+    -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
+            transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
+  64% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); }
+  100% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); } }
+
+@keyframes fa-bounce {
+  0% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); }
+  10% {
+    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
+            transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
+  30% {
+    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
+            transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
+  50% {
+    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
+            transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
+  57% {
+    -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
+            transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
+  64% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); }
+  100% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); } }
+
+@-webkit-keyframes fa-fade {
+  50% {
+    opacity: var(--fa-fade-opacity, 0.4); } }
+
+@keyframes fa-fade {
+  50% {
+    opacity: var(--fa-fade-opacity, 0.4); } }
+
+@-webkit-keyframes fa-beat-fade {
+  0%, 100% {
+    opacity: var(--fa-beat-fade-opacity, 0.4);
+    -webkit-transform: scale(1);
+            transform: scale(1); }
+  50% {
+    opacity: 1;
+    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
+            transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
+
+@keyframes fa-beat-fade {
+  0%, 100% {
+    opacity: var(--fa-beat-fade-opacity, 0.4);
+    -webkit-transform: scale(1);
+            transform: scale(1); }
+  50% {
+    opacity: 1;
+    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
+            transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
+
+@-webkit-keyframes fa-flip {
+  50% {
+    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
+            transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
+
+@keyframes fa-flip {
+  50% {
+    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
+            transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
+
+@-webkit-keyframes fa-shake {
+  0% {
+    -webkit-transform: rotate(-15deg);
+            transform: rotate(-15deg); }
+  4% {
+    -webkit-transform: rotate(15deg);
+            transform: rotate(15deg); }
+  8%, 24% {
+    -webkit-transform: rotate(-18deg);
+            transform: rotate(-18deg); }
+  12%, 28% {
+    -webkit-transform: rotate(18deg);
+            transform: rotate(18deg); }
+  16% {
+    -webkit-transform: rotate(-22deg);
+            transform: rotate(-22deg); }
+  20% {
+    -webkit-transform: rotate(22deg);
+            transform: rotate(22deg); }
+  32% {
+    -webkit-transform: rotate(-12deg);
+            transform: rotate(-12deg); }
+  36% {
+    -webkit-transform: rotate(12deg);
+            transform: rotate(12deg); }
+  40%, 100% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg); } }
+
+@keyframes fa-shake {
+  0% {
+    -webkit-transform: rotate(-15deg);
+            transform: rotate(-15deg); }
+  4% {
+    -webkit-transform: rotate(15deg);
+            transform: rotate(15deg); }
+  8%, 24% {
+    -webkit-transform: rotate(-18deg);
+            transform: rotate(-18deg); }
+  12%, 28% {
+    -webkit-transform: rotate(18deg);
+            transform: rotate(18deg); }
+  16% {
+    -webkit-transform: rotate(-22deg);
+            transform: rotate(-22deg); }
+  20% {
+    -webkit-transform: rotate(22deg);
+            transform: rotate(22deg); }
+  32% {
+    -webkit-transform: rotate(-12deg);
+            transform: rotate(-12deg); }
+  36% {
+    -webkit-transform: rotate(12deg);
+            transform: rotate(12deg); }
+  40%, 100% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg); } }
+
+@-webkit-keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg); }
+  100% {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg); } }
+
+@keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg); }
+  100% {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg); } }
+
+.fa-rotate-90 {
+  -webkit-transform: rotate(90deg);
+          transform: rotate(90deg); }
+
+.fa-rotate-180 {
+  -webkit-transform: rotate(180deg);
+          transform: rotate(180deg); }
+
+.fa-rotate-270 {
+  -webkit-transform: rotate(270deg);
+          transform: rotate(270deg); }
+
+.fa-flip-horizontal {
+  -webkit-transform: scale(-1, 1);
+          transform: scale(-1, 1); }
+
+.fa-flip-vertical {
+  -webkit-transform: scale(1, -1);
+          transform: scale(1, -1); }
+
+.fa-flip-both,
+.fa-flip-horizontal.fa-flip-vertical {
+  -webkit-transform: scale(-1, -1);
+          transform: scale(-1, -1); }
+
+.fa-rotate-by {
+  -webkit-transform: rotate(var(--fa-rotate-angle, none));
+          transform: rotate(var(--fa-rotate-angle, none)); }
+
+.fa-stack {
+  display: inline-block;
+  vertical-align: middle;
+  height: 2em;
+  position: relative;
+  width: 2.5em; }
+
+.fa-stack-1x,
+.fa-stack-2x {
+  bottom: 0;
+  left: 0;
+  margin: auto;
+  position: absolute;
+  right: 0;
+  top: 0;
+  z-index: var(--fa-stack-z-index, auto); }
+
+.svg-inline--fa.fa-stack-1x {
+  height: 1em;
+  width: 1.25em; }
+
+.svg-inline--fa.fa-stack-2x {
+  height: 2em;
+  width: 2.5em; }
+
+.fa-inverse {
+  color: var(--fa-inverse, #fff); }
+
+.sr-only,
+.fa-sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  white-space: nowrap;
+  border-width: 0; }
+
+.sr-only-focusable:not(:focus),
+.fa-sr-only-focusable:not(:focus) {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  white-space: nowrap;
+  border-width: 0; }
+
+.svg-inline--fa .fa-primary {
+  fill: var(--fa-primary-color, currentColor);
+  opacity: var(--fa-primary-opacity, 1); }
+
+.svg-inline--fa .fa-secondary {
+  fill: var(--fa-secondary-color, currentColor);
+  opacity: var(--fa-secondary-opacity, 0.4); }
+
+.svg-inline--fa.fa-swap-opacity .fa-primary {
+  opacity: var(--fa-secondary-opacity, 0.4); }
+
+.svg-inline--fa.fa-swap-opacity .fa-secondary {
+  opacity: var(--fa-primary-opacity, 1); }
+
+.svg-inline--fa mask .fa-primary,
+.svg-inline--fa mask .fa-secondary {
+  fill: black; }
+
+.fad.fa-inverse,
+.fa-duotone.fa-inverse {
+  color: var(--fa-inverse, #fff); }

文件差异内容过多而无法显示
+ 5 - 0
static/tickets/assets/fontawesome/css/svg-with-js.min.css


+ 26 - 0
static/tickets/assets/fontawesome/css/v4-font-face.css

@@ -0,0 +1,26 @@
+/*!
+ * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2023 Fonticons, Inc.
+ */
+@font-face {
+  font-family: 'FontAwesome';
+  font-display: block;
+  src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
+
+@font-face {
+  font-family: 'FontAwesome';
+  font-display: block;
+  src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
+
+@font-face {
+  font-family: 'FontAwesome';
+  font-display: block;
+  src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype");
+  unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; }
+
+@font-face {
+  font-family: 'FontAwesome';
+  font-display: block;
+  src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype");
+  unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; }

+ 6 - 0
static/tickets/assets/fontawesome/css/v4-font-face.min.css

@@ -0,0 +1,6 @@
+/*!
+ * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2023 Fonticons, Inc.
+ */
+@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}

+ 2194 - 0
static/tickets/assets/fontawesome/css/v4-shims.css

@@ -0,0 +1,2194 @@
+/*!
+ * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2023 Fonticons, Inc.
+ */
+.fa.fa-glass:before {
+  content: "\f000"; }
+
+.fa.fa-envelope-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-envelope-o:before {
+  content: "\f0e0"; }
+
+.fa.fa-star-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-star-o:before {
+  content: "\f005"; }
+
+.fa.fa-remove:before {
+  content: "\f00d"; }
+
+.fa.fa-close:before {
+  content: "\f00d"; }
+
+.fa.fa-gear:before {
+  content: "\f013"; }
+
+.fa.fa-trash-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-trash-o:before {
+  content: "\f2ed"; }
+
+.fa.fa-home:before {
+  content: "\f015"; }
+
+.fa.fa-file-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-file-o:before {
+  content: "\f15b"; }
+
+.fa.fa-clock-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-clock-o:before {
+  content: "\f017"; }
+
+.fa.fa-arrow-circle-o-down {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-arrow-circle-o-down:before {
+  content: "\f358"; }
+
+.fa.fa-arrow-circle-o-up {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-arrow-circle-o-up:before {
+  content: "\f35b"; }
+
+.fa.fa-play-circle-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-play-circle-o:before {
+  content: "\f144"; }
+
+.fa.fa-repeat:before {
+  content: "\f01e"; }
+
+.fa.fa-rotate-right:before {
+  content: "\f01e"; }
+
+.fa.fa-refresh:before {
+  content: "\f021"; }
+
+.fa.fa-list-alt {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-list-alt:before {
+  content: "\f022"; }
+
+.fa.fa-dedent:before {
+  content: "\f03b"; }
+
+.fa.fa-video-camera:before {
+  content: "\f03d"; }
+
+.fa.fa-picture-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-picture-o:before {
+  content: "\f03e"; }
+
+.fa.fa-photo {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-photo:before {
+  content: "\f03e"; }
+
+.fa.fa-image {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-image:before {
+  content: "\f03e"; }
+
+.fa.fa-map-marker:before {
+  content: "\f3c5"; }
+
+.fa.fa-pencil-square-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-pencil-square-o:before {
+  content: "\f044"; }
+
+.fa.fa-edit {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-edit:before {
+  content: "\f044"; }
+
+.fa.fa-share-square-o:before {
+  content: "\f14d"; }
+
+.fa.fa-check-square-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-check-square-o:before {
+  content: "\f14a"; }
+
+.fa.fa-arrows:before {
+  content: "\f0b2"; }
+
+.fa.fa-times-circle-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-times-circle-o:before {
+  content: "\f057"; }
+
+.fa.fa-check-circle-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-check-circle-o:before {
+  content: "\f058"; }
+
+.fa.fa-mail-forward:before {
+  content: "\f064"; }
+
+.fa.fa-expand:before {
+  content: "\f424"; }
+
+.fa.fa-compress:before {
+  content: "\f422"; }
+
+.fa.fa-eye {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-eye-slash {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-warning:before {
+  content: "\f071"; }
+
+.fa.fa-calendar:before {
+  content: "\f073"; }
+
+.fa.fa-arrows-v:before {
+  content: "\f338"; }
+
+.fa.fa-arrows-h:before {
+  content: "\f337"; }
+
+.fa.fa-bar-chart:before {
+  content: "\e0e3"; }
+
+.fa.fa-bar-chart-o:before {
+  content: "\e0e3"; }
+
+.fa.fa-twitter-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-twitter-square:before {
+  content: "\f081"; }
+
+.fa.fa-facebook-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-facebook-square:before {
+  content: "\f082"; }
+
+.fa.fa-gears:before {
+  content: "\f085"; }
+
+.fa.fa-thumbs-o-up {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-thumbs-o-up:before {
+  content: "\f164"; }
+
+.fa.fa-thumbs-o-down {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-thumbs-o-down:before {
+  content: "\f165"; }
+
+.fa.fa-heart-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-heart-o:before {
+  content: "\f004"; }
+
+.fa.fa-sign-out:before {
+  content: "\f2f5"; }
+
+.fa.fa-linkedin-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-linkedin-square:before {
+  content: "\f08c"; }
+
+.fa.fa-thumb-tack:before {
+  content: "\f08d"; }
+
+.fa.fa-external-link:before {
+  content: "\f35d"; }
+
+.fa.fa-sign-in:before {
+  content: "\f2f6"; }
+
+.fa.fa-github-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-github-square:before {
+  content: "\f092"; }
+
+.fa.fa-lemon-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-lemon-o:before {
+  content: "\f094"; }
+
+.fa.fa-square-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-square-o:before {
+  content: "\f0c8"; }
+
+.fa.fa-bookmark-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-bookmark-o:before {
+  content: "\f02e"; }
+
+.fa.fa-twitter {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-facebook {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-facebook:before {
+  content: "\f39e"; }
+
+.fa.fa-facebook-f {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-facebook-f:before {
+  content: "\f39e"; }
+
+.fa.fa-github {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-credit-card {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-feed:before {
+  content: "\f09e"; }
+
+.fa.fa-hdd-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-hdd-o:before {
+  content: "\f0a0"; }
+
+.fa.fa-hand-o-right {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-hand-o-right:before {
+  content: "\f0a4"; }
+
+.fa.fa-hand-o-left {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-hand-o-left:before {
+  content: "\f0a5"; }
+
+.fa.fa-hand-o-up {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-hand-o-up:before {
+  content: "\f0a6"; }
+
+.fa.fa-hand-o-down {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-hand-o-down:before {
+  content: "\f0a7"; }
+
+.fa.fa-globe:before {
+  content: "\f57d"; }
+
+.fa.fa-tasks:before {
+  content: "\f828"; }
+
+.fa.fa-arrows-alt:before {
+  content: "\f31e"; }
+
+.fa.fa-group:before {
+  content: "\f0c0"; }
+
+.fa.fa-chain:before {
+  content: "\f0c1"; }
+
+.fa.fa-cut:before {
+  content: "\f0c4"; }
+
+.fa.fa-files-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-files-o:before {
+  content: "\f0c5"; }
+
+.fa.fa-floppy-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-floppy-o:before {
+  content: "\f0c7"; }
+
+.fa.fa-save {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-save:before {
+  content: "\f0c7"; }
+
+.fa.fa-navicon:before {
+  content: "\f0c9"; }
+
+.fa.fa-reorder:before {
+  content: "\f0c9"; }
+
+.fa.fa-magic:before {
+  content: "\e2ca"; }
+
+.fa.fa-pinterest {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-pinterest-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-pinterest-square:before {
+  content: "\f0d3"; }
+
+.fa.fa-google-plus-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-google-plus-square:before {
+  content: "\f0d4"; }
+
+.fa.fa-google-plus {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-google-plus:before {
+  content: "\f0d5"; }
+
+.fa.fa-money:before {
+  content: "\f3d1"; }
+
+.fa.fa-unsorted:before {
+  content: "\f0dc"; }
+
+.fa.fa-sort-desc:before {
+  content: "\f0dd"; }
+
+.fa.fa-sort-asc:before {
+  content: "\f0de"; }
+
+.fa.fa-linkedin {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-linkedin:before {
+  content: "\f0e1"; }
+
+.fa.fa-rotate-left:before {
+  content: "\f0e2"; }
+
+.fa.fa-legal:before {
+  content: "\f0e3"; }
+
+.fa.fa-tachometer:before {
+  content: "\f625"; }
+
+.fa.fa-dashboard:before {
+  content: "\f625"; }
+
+.fa.fa-comment-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-comment-o:before {
+  content: "\f075"; }
+
+.fa.fa-comments-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-comments-o:before {
+  content: "\f086"; }
+
+.fa.fa-flash:before {
+  content: "\f0e7"; }
+
+.fa.fa-clipboard:before {
+  content: "\f0ea"; }
+
+.fa.fa-lightbulb-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-lightbulb-o:before {
+  content: "\f0eb"; }
+
+.fa.fa-exchange:before {
+  content: "\f362"; }
+
+.fa.fa-cloud-download:before {
+  content: "\f0ed"; }
+
+.fa.fa-cloud-upload:before {
+  content: "\f0ee"; }
+
+.fa.fa-bell-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-bell-o:before {
+  content: "\f0f3"; }
+
+.fa.fa-cutlery:before {
+  content: "\f2e7"; }
+
+.fa.fa-file-text-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-file-text-o:before {
+  content: "\f15c"; }
+
+.fa.fa-building-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-building-o:before {
+  content: "\f1ad"; }
+
+.fa.fa-hospital-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-hospital-o:before {
+  content: "\f0f8"; }
+
+.fa.fa-tablet:before {
+  content: "\f3fa"; }
+
+.fa.fa-mobile:before {
+  content: "\f3cd"; }
+
+.fa.fa-mobile-phone:before {
+  content: "\f3cd"; }
+
+.fa.fa-circle-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-circle-o:before {
+  content: "\f111"; }
+
+.fa.fa-mail-reply:before {
+  content: "\f3e5"; }
+
+.fa.fa-github-alt {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-folder-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-folder-o:before {
+  content: "\f07b"; }
+
+.fa.fa-folder-open-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-folder-open-o:before {
+  content: "\f07c"; }
+
+.fa.fa-smile-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-smile-o:before {
+  content: "\f118"; }
+
+.fa.fa-frown-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-frown-o:before {
+  content: "\f119"; }
+
+.fa.fa-meh-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-meh-o:before {
+  content: "\f11a"; }
+
+.fa.fa-keyboard-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-keyboard-o:before {
+  content: "\f11c"; }
+
+.fa.fa-flag-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-flag-o:before {
+  content: "\f024"; }
+
+.fa.fa-mail-reply-all:before {
+  content: "\f122"; }
+
+.fa.fa-star-half-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-star-half-o:before {
+  content: "\f5c0"; }
+
+.fa.fa-star-half-empty {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-star-half-empty:before {
+  content: "\f5c0"; }
+
+.fa.fa-star-half-full {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-star-half-full:before {
+  content: "\f5c0"; }
+
+.fa.fa-code-fork:before {
+  content: "\f126"; }
+
+.fa.fa-chain-broken:before {
+  content: "\f127"; }
+
+.fa.fa-unlink:before {
+  content: "\f127"; }
+
+.fa.fa-calendar-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-calendar-o:before {
+  content: "\f133"; }
+
+.fa.fa-maxcdn {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-html5 {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-css3 {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-unlock-alt:before {
+  content: "\f09c"; }
+
+.fa.fa-minus-square-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-minus-square-o:before {
+  content: "\f146"; }
+
+.fa.fa-level-up:before {
+  content: "\f3bf"; }
+
+.fa.fa-level-down:before {
+  content: "\f3be"; }
+
+.fa.fa-pencil-square:before {
+  content: "\f14b"; }
+
+.fa.fa-external-link-square:before {
+  content: "\f360"; }
+
+.fa.fa-compass {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-caret-square-o-down {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-caret-square-o-down:before {
+  content: "\f150"; }
+
+.fa.fa-toggle-down {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-toggle-down:before {
+  content: "\f150"; }
+
+.fa.fa-caret-square-o-up {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-caret-square-o-up:before {
+  content: "\f151"; }
+
+.fa.fa-toggle-up {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-toggle-up:before {
+  content: "\f151"; }
+
+.fa.fa-caret-square-o-right {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-caret-square-o-right:before {
+  content: "\f152"; }
+
+.fa.fa-toggle-right {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-toggle-right:before {
+  content: "\f152"; }
+
+.fa.fa-eur:before {
+  content: "\f153"; }
+
+.fa.fa-euro:before {
+  content: "\f153"; }
+
+.fa.fa-gbp:before {
+  content: "\f154"; }
+
+.fa.fa-usd:before {
+  content: "\24"; }
+
+.fa.fa-dollar:before {
+  content: "\24"; }
+
+.fa.fa-inr:before {
+  content: "\e1bc"; }
+
+.fa.fa-rupee:before {
+  content: "\e1bc"; }
+
+.fa.fa-jpy:before {
+  content: "\f157"; }
+
+.fa.fa-cny:before {
+  content: "\f157"; }
+
+.fa.fa-rmb:before {
+  content: "\f157"; }
+
+.fa.fa-yen:before {
+  content: "\f157"; }
+
+.fa.fa-rub:before {
+  content: "\f158"; }
+
+.fa.fa-ruble:before {
+  content: "\f158"; }
+
+.fa.fa-rouble:before {
+  content: "\f158"; }
+
+.fa.fa-krw:before {
+  content: "\f159"; }
+
+.fa.fa-won:before {
+  content: "\f159"; }
+
+.fa.fa-btc {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-bitcoin {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-bitcoin:before {
+  content: "\f15a"; }
+
+.fa.fa-file-text:before {
+  content: "\f15c"; }
+
+.fa.fa-sort-alpha-asc:before {
+  content: "\f15d"; }
+
+.fa.fa-sort-alpha-desc:before {
+  content: "\f881"; }
+
+.fa.fa-sort-amount-asc:before {
+  content: "\f884"; }
+
+.fa.fa-sort-amount-desc:before {
+  content: "\f160"; }
+
+.fa.fa-sort-numeric-asc:before {
+  content: "\f162"; }
+
+.fa.fa-sort-numeric-desc:before {
+  content: "\f886"; }
+
+.fa.fa-youtube-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-youtube-square:before {
+  content: "\f431"; }
+
+.fa.fa-youtube {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-xing {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-xing-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-xing-square:before {
+  content: "\f169"; }
+
+.fa.fa-youtube-play {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-youtube-play:before {
+  content: "\f167"; }
+
+.fa.fa-dropbox {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-stack-overflow {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-instagram {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-flickr {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-adn {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-bitbucket {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-bitbucket-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-bitbucket-square:before {
+  content: "\f171"; }
+
+.fa.fa-tumblr {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-tumblr-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-tumblr-square:before {
+  content: "\f174"; }
+
+.fa.fa-long-arrow-down:before {
+  content: "\f309"; }
+
+.fa.fa-long-arrow-up:before {
+  content: "\f30c"; }
+
+.fa.fa-long-arrow-left:before {
+  content: "\f30a"; }
+
+.fa.fa-long-arrow-right:before {
+  content: "\f30b"; }
+
+.fa.fa-apple {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-windows {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-android {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-linux {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-dribbble {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-skype {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-foursquare {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-trello {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-gratipay {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-gittip {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-gittip:before {
+  content: "\f184"; }
+
+.fa.fa-sun-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-sun-o:before {
+  content: "\f185"; }
+
+.fa.fa-moon-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-moon-o:before {
+  content: "\f186"; }
+
+.fa.fa-vk {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-weibo {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-renren {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-pagelines {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-stack-exchange {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-arrow-circle-o-right {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-arrow-circle-o-right:before {
+  content: "\f35a"; }
+
+.fa.fa-arrow-circle-o-left {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-arrow-circle-o-left:before {
+  content: "\f359"; }
+
+.fa.fa-caret-square-o-left {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-caret-square-o-left:before {
+  content: "\f191"; }
+
+.fa.fa-toggle-left {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-toggle-left:before {
+  content: "\f191"; }
+
+.fa.fa-dot-circle-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-dot-circle-o:before {
+  content: "\f192"; }
+
+.fa.fa-vimeo-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-vimeo-square:before {
+  content: "\f194"; }
+
+.fa.fa-try:before {
+  content: "\e2bb"; }
+
+.fa.fa-turkish-lira:before {
+  content: "\e2bb"; }
+
+.fa.fa-plus-square-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-plus-square-o:before {
+  content: "\f0fe"; }
+
+.fa.fa-slack {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-wordpress {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-openid {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-institution:before {
+  content: "\f19c"; }
+
+.fa.fa-bank:before {
+  content: "\f19c"; }
+
+.fa.fa-mortar-board:before {
+  content: "\f19d"; }
+
+.fa.fa-yahoo {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-google {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-reddit {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-reddit-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-reddit-square:before {
+  content: "\f1a2"; }
+
+.fa.fa-stumbleupon-circle {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-stumbleupon {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-delicious {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-digg {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-pied-piper-pp {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-pied-piper-alt {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-drupal {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-joomla {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-behance {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-behance-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-behance-square:before {
+  content: "\f1b5"; }
+
+.fa.fa-steam {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-steam-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-steam-square:before {
+  content: "\f1b7"; }
+
+.fa.fa-automobile:before {
+  content: "\f1b9"; }
+
+.fa.fa-cab:before {
+  content: "\f1ba"; }
+
+.fa.fa-spotify {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-deviantart {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-soundcloud {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-file-pdf-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-file-pdf-o:before {
+  content: "\f1c1"; }
+
+.fa.fa-file-word-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-file-word-o:before {
+  content: "\f1c2"; }
+
+.fa.fa-file-excel-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-file-excel-o:before {
+  content: "\f1c3"; }
+
+.fa.fa-file-powerpoint-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-file-powerpoint-o:before {
+  content: "\f1c4"; }
+
+.fa.fa-file-image-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-file-image-o:before {
+  content: "\f1c5"; }
+
+.fa.fa-file-photo-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-file-photo-o:before {
+  content: "\f1c5"; }
+
+.fa.fa-file-picture-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-file-picture-o:before {
+  content: "\f1c5"; }
+
+.fa.fa-file-archive-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-file-archive-o:before {
+  content: "\f1c6"; }
+
+.fa.fa-file-zip-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-file-zip-o:before {
+  content: "\f1c6"; }
+
+.fa.fa-file-audio-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-file-audio-o:before {
+  content: "\f1c7"; }
+
+.fa.fa-file-sound-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-file-sound-o:before {
+  content: "\f1c7"; }
+
+.fa.fa-file-video-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-file-video-o:before {
+  content: "\f1c8"; }
+
+.fa.fa-file-movie-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-file-movie-o:before {
+  content: "\f1c8"; }
+
+.fa.fa-file-code-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-file-code-o:before {
+  content: "\f1c9"; }
+
+.fa.fa-vine {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-codepen {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-jsfiddle {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-life-bouy:before {
+  content: "\f1cd"; }
+
+.fa.fa-life-buoy:before {
+  content: "\f1cd"; }
+
+.fa.fa-life-saver:before {
+  content: "\f1cd"; }
+
+.fa.fa-support:before {
+  content: "\f1cd"; }
+
+.fa.fa-circle-o-notch:before {
+  content: "\f1ce"; }
+
+.fa.fa-rebel {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-ra {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-ra:before {
+  content: "\f1d0"; }
+
+.fa.fa-resistance {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-resistance:before {
+  content: "\f1d0"; }
+
+.fa.fa-empire {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-ge {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-ge:before {
+  content: "\f1d1"; }
+
+.fa.fa-git-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-git-square:before {
+  content: "\f1d2"; }
+
+.fa.fa-git {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-hacker-news {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-y-combinator-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-y-combinator-square:before {
+  content: "\f1d4"; }
+
+.fa.fa-yc-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-yc-square:before {
+  content: "\f1d4"; }
+
+.fa.fa-tencent-weibo {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-qq {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-weixin {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-wechat {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-wechat:before {
+  content: "\f1d7"; }
+
+.fa.fa-send:before {
+  content: "\f1d8"; }
+
+.fa.fa-paper-plane-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-paper-plane-o:before {
+  content: "\f1d8"; }
+
+.fa.fa-send-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-send-o:before {
+  content: "\f1d8"; }
+
+.fa.fa-circle-thin {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-circle-thin:before {
+  content: "\f111"; }
+
+.fa.fa-header:before {
+  content: "\f1dc"; }
+
+.fa.fa-futbol-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-futbol-o:before {
+  content: "\f1e3"; }
+
+.fa.fa-soccer-ball-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-soccer-ball-o:before {
+  content: "\f1e3"; }
+
+.fa.fa-slideshare {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-twitch {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-yelp {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-newspaper-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-newspaper-o:before {
+  content: "\f1ea"; }
+
+.fa.fa-paypal {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-google-wallet {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-cc-visa {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-cc-mastercard {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-cc-discover {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-cc-amex {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-cc-paypal {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-cc-stripe {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-bell-slash-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-bell-slash-o:before {
+  content: "\f1f6"; }
+
+.fa.fa-trash:before {
+  content: "\f2ed"; }
+
+.fa.fa-copyright {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-eyedropper:before {
+  content: "\f1fb"; }
+
+.fa.fa-area-chart:before {
+  content: "\f1fe"; }
+
+.fa.fa-pie-chart:before {
+  content: "\f200"; }
+
+.fa.fa-line-chart:before {
+  content: "\f201"; }
+
+.fa.fa-lastfm {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-lastfm-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-lastfm-square:before {
+  content: "\f203"; }
+
+.fa.fa-ioxhost {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-angellist {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-cc {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-cc:before {
+  content: "\f20a"; }
+
+.fa.fa-ils:before {
+  content: "\f20b"; }
+
+.fa.fa-shekel:before {
+  content: "\f20b"; }
+
+.fa.fa-sheqel:before {
+  content: "\f20b"; }
+
+.fa.fa-buysellads {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-connectdevelop {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-dashcube {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-forumbee {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-leanpub {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-sellsy {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-shirtsinbulk {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-simplybuilt {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-skyatlas {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-diamond {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-diamond:before {
+  content: "\f3a5"; }
+
+.fa.fa-transgender:before {
+  content: "\f224"; }
+
+.fa.fa-intersex:before {
+  content: "\f224"; }
+
+.fa.fa-transgender-alt:before {
+  content: "\f225"; }
+
+.fa.fa-facebook-official {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-facebook-official:before {
+  content: "\f09a"; }
+
+.fa.fa-pinterest-p {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-whatsapp {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-hotel:before {
+  content: "\f236"; }
+
+.fa.fa-viacoin {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-medium {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-y-combinator {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-yc {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-yc:before {
+  content: "\f23b"; }
+
+.fa.fa-optin-monster {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-opencart {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-expeditedssl {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-battery-4:before {
+  content: "\f240"; }
+
+.fa.fa-battery:before {
+  content: "\f240"; }
+
+.fa.fa-battery-3:before {
+  content: "\f241"; }
+
+.fa.fa-battery-2:before {
+  content: "\f242"; }
+
+.fa.fa-battery-1:before {
+  content: "\f243"; }
+
+.fa.fa-battery-0:before {
+  content: "\f244"; }
+
+.fa.fa-object-group {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-object-ungroup {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-sticky-note-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-sticky-note-o:before {
+  content: "\f249"; }
+
+.fa.fa-cc-jcb {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-cc-diners-club {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-clone {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-hourglass-o:before {
+  content: "\f254"; }
+
+.fa.fa-hourglass-1:before {
+  content: "\f251"; }
+
+.fa.fa-hourglass-2:before {
+  content: "\f252"; }
+
+.fa.fa-hourglass-3:before {
+  content: "\f253"; }
+
+.fa.fa-hand-rock-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-hand-rock-o:before {
+  content: "\f255"; }
+
+.fa.fa-hand-grab-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-hand-grab-o:before {
+  content: "\f255"; }
+
+.fa.fa-hand-paper-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-hand-paper-o:before {
+  content: "\f256"; }
+
+.fa.fa-hand-stop-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-hand-stop-o:before {
+  content: "\f256"; }
+
+.fa.fa-hand-scissors-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-hand-scissors-o:before {
+  content: "\f257"; }
+
+.fa.fa-hand-lizard-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-hand-lizard-o:before {
+  content: "\f258"; }
+
+.fa.fa-hand-spock-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-hand-spock-o:before {
+  content: "\f259"; }
+
+.fa.fa-hand-pointer-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-hand-pointer-o:before {
+  content: "\f25a"; }
+
+.fa.fa-hand-peace-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-hand-peace-o:before {
+  content: "\f25b"; }
+
+.fa.fa-registered {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-creative-commons {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-gg {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-gg-circle {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-odnoklassniki {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-odnoklassniki-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-odnoklassniki-square:before {
+  content: "\f264"; }
+
+.fa.fa-get-pocket {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-wikipedia-w {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-safari {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-chrome {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-firefox {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-opera {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-internet-explorer {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-television:before {
+  content: "\f26c"; }
+
+.fa.fa-contao {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-500px {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-amazon {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-calendar-plus-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-calendar-plus-o:before {
+  content: "\f271"; }
+
+.fa.fa-calendar-minus-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-calendar-minus-o:before {
+  content: "\f272"; }
+
+.fa.fa-calendar-times-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-calendar-times-o:before {
+  content: "\f273"; }
+
+.fa.fa-calendar-check-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-calendar-check-o:before {
+  content: "\f274"; }
+
+.fa.fa-map-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-map-o:before {
+  content: "\f279"; }
+
+.fa.fa-commenting:before {
+  content: "\f4ad"; }
+
+.fa.fa-commenting-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-commenting-o:before {
+  content: "\f4ad"; }
+
+.fa.fa-houzz {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-vimeo {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-vimeo:before {
+  content: "\f27d"; }
+
+.fa.fa-black-tie {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-fonticons {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-reddit-alien {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-edge {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-credit-card-alt:before {
+  content: "\f09d"; }
+
+.fa.fa-codiepie {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-modx {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-fort-awesome {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-usb {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-product-hunt {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-mixcloud {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-scribd {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-pause-circle-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-pause-circle-o:before {
+  content: "\f28b"; }
+
+.fa.fa-stop-circle-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-stop-circle-o:before {
+  content: "\f28d"; }
+
+.fa.fa-bluetooth {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-bluetooth-b {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-gitlab {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-wpbeginner {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-wpforms {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-envira {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-wheelchair-alt {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-wheelchair-alt:before {
+  content: "\f368"; }
+
+.fa.fa-question-circle-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-question-circle-o:before {
+  content: "\f059"; }
+
+.fa.fa-volume-control-phone:before {
+  content: "\f2a0"; }
+
+.fa.fa-asl-interpreting:before {
+  content: "\f2a3"; }
+
+.fa.fa-deafness:before {
+  content: "\f2a4"; }
+
+.fa.fa-hard-of-hearing:before {
+  content: "\f2a4"; }
+
+.fa.fa-glide {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-glide-g {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-signing:before {
+  content: "\f2a7"; }
+
+.fa.fa-viadeo {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-viadeo-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-viadeo-square:before {
+  content: "\f2aa"; }
+
+.fa.fa-snapchat {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-snapchat-ghost {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-snapchat-ghost:before {
+  content: "\f2ab"; }
+
+.fa.fa-snapchat-square {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-snapchat-square:before {
+  content: "\f2ad"; }
+
+.fa.fa-pied-piper {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-first-order {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-yoast {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-themeisle {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-google-plus-official {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-google-plus-official:before {
+  content: "\f2b3"; }
+
+.fa.fa-google-plus-circle {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-google-plus-circle:before {
+  content: "\f2b3"; }
+
+.fa.fa-font-awesome {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-fa {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-fa:before {
+  content: "\f2b4"; }
+
+.fa.fa-handshake-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-handshake-o:before {
+  content: "\f2b5"; }
+
+.fa.fa-envelope-open-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-envelope-open-o:before {
+  content: "\f2b6"; }
+
+.fa.fa-linode {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-address-book-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-address-book-o:before {
+  content: "\f2b9"; }
+
+.fa.fa-vcard:before {
+  content: "\f2bb"; }
+
+.fa.fa-address-card-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-address-card-o:before {
+  content: "\f2bb"; }
+
+.fa.fa-vcard-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-vcard-o:before {
+  content: "\f2bb"; }
+
+.fa.fa-user-circle-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-user-circle-o:before {
+  content: "\f2bd"; }
+
+.fa.fa-user-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-user-o:before {
+  content: "\f007"; }
+
+.fa.fa-id-badge {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-drivers-license:before {
+  content: "\f2c2"; }
+
+.fa.fa-id-card-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-id-card-o:before {
+  content: "\f2c2"; }
+
+.fa.fa-drivers-license-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-drivers-license-o:before {
+  content: "\f2c2"; }
+
+.fa.fa-quora {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-free-code-camp {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-telegram {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-thermometer-4:before {
+  content: "\f2c7"; }
+
+.fa.fa-thermometer:before {
+  content: "\f2c7"; }
+
+.fa.fa-thermometer-3:before {
+  content: "\f2c8"; }
+
+.fa.fa-thermometer-2:before {
+  content: "\f2c9"; }
+
+.fa.fa-thermometer-1:before {
+  content: "\f2ca"; }
+
+.fa.fa-thermometer-0:before {
+  content: "\f2cb"; }
+
+.fa.fa-bathtub:before {
+  content: "\f2cd"; }
+
+.fa.fa-s15:before {
+  content: "\f2cd"; }
+
+.fa.fa-window-maximize {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-window-restore {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-times-rectangle:before {
+  content: "\f410"; }
+
+.fa.fa-window-close-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-window-close-o:before {
+  content: "\f410"; }
+
+.fa.fa-times-rectangle-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-times-rectangle-o:before {
+  content: "\f410"; }
+
+.fa.fa-bandcamp {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-grav {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-etsy {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-imdb {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-ravelry {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-eercast {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-eercast:before {
+  content: "\f2da"; }
+
+.fa.fa-snowflake-o {
+  font-family: 'Font Awesome 6 Free';
+  font-weight: 400; }
+
+.fa.fa-snowflake-o:before {
+  content: "\f2dc"; }
+
+.fa.fa-superpowers {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-wpexplorer {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }
+
+.fa.fa-meetup {
+  font-family: 'Font Awesome 6 Brands';
+  font-weight: 400; }

文件差异内容过多而无法显示
+ 5 - 0
static/tickets/assets/fontawesome/css/v4-shims.min.css


+ 22 - 0
static/tickets/assets/fontawesome/css/v5-font-face.css

@@ -0,0 +1,22 @@
+/*!
+ * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2023 Fonticons, Inc.
+ */
+@font-face {
+  font-family: 'Font Awesome 5 Brands';
+  font-display: block;
+  font-weight: 400;
+  src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
+
+@font-face {
+  font-family: 'Font Awesome 5 Free';
+  font-display: block;
+  font-weight: 900;
+  src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
+
+@font-face {
+  font-family: 'Font Awesome 5 Free';
+  font-display: block;
+  font-weight: 400;
+  src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }

+ 6 - 0
static/tickets/assets/fontawesome/css/v5-font-face.min.css

@@ -0,0 +1,6 @@
+/*!
+ * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2023 Fonticons, Inc.
+ */
+@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}

二进制
static/tickets/assets/fontawesome/webfonts/fa-brands-400.ttf


二进制
static/tickets/assets/fontawesome/webfonts/fa-brands-400.woff2


二进制
static/tickets/assets/fontawesome/webfonts/fa-regular-400.ttf


二进制
static/tickets/assets/fontawesome/webfonts/fa-regular-400.woff2


二进制
static/tickets/assets/fontawesome/webfonts/fa-solid-900.ttf


二进制
static/tickets/assets/fontawesome/webfonts/fa-solid-900.woff2


二进制
static/tickets/assets/fontawesome/webfonts/fa-v4compatibility.ttf


二进制
static/tickets/assets/fontawesome/webfonts/fa-v4compatibility.woff2


文件差异内容过多而无法显示
+ 4 - 0
static/tickets/css/bootstrap.min.css


文件差异内容过多而无法显示
+ 0 - 0
static/tickets/css/bootstrap.min.css.map


+ 8 - 0
static/tickets/css/style.css

@@ -0,0 +1,8 @@
+html {
+  position: relative;
+  min-height: 100%;
+}
+
+main {
+  padding-top: 72px;
+}

二进制
static/tickets/favicon.ico


文件差异内容过多而无法显示
+ 5 - 0
static/tickets/js/bootstrap.bundle.min.js


文件差异内容过多而无法显示
+ 0 - 0
static/tickets/js/bootstrap.bundle.min.js.map


文件差异内容过多而无法显示
+ 1 - 0
static/tickets/js/jquery-3.7.0.min.js


+ 117 - 0
static/tickets/js/jquery.cookie.js

@@ -0,0 +1,117 @@
+/*!
+ * jQuery Cookie Plugin v1.4.1
+ * https://github.com/carhartl/jquery-cookie
+ *
+ * Copyright 2013 Klaus Hartl
+ * Released under the MIT license
+ */
+(function (factory) {
+	if (typeof define === 'function' && define.amd) {
+		// AMD
+		define(['jquery'], factory);
+	} else if (typeof exports === 'object') {
+		// CommonJS
+		factory(require('jquery'));
+	} else {
+		// Browser globals
+		factory(jQuery);
+	}
+}(function ($) {
+
+	var pluses = /\+/g;
+
+	function encode(s) {
+		return config.raw ? s : encodeURIComponent(s);
+	}
+
+	function decode(s) {
+		return config.raw ? s : decodeURIComponent(s);
+	}
+
+	function stringifyCookieValue(value) {
+		return encode(config.json ? JSON.stringify(value) : String(value));
+	}
+
+	function parseCookieValue(s) {
+		if (s.indexOf('"') === 0) {
+			// This is a quoted cookie as according to RFC2068, unescape...
+			s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
+		}
+
+		try {
+			// Replace server-side written pluses with spaces.
+			// If we can't decode the cookie, ignore it, it's unusable.
+			// If we can't parse the cookie, ignore it, it's unusable.
+			s = decodeURIComponent(s.replace(pluses, ' '));
+			return config.json ? JSON.parse(s) : s;
+		} catch(e) {}
+	}
+
+	function read(s, converter) {
+		var value = config.raw ? s : parseCookieValue(s);
+		return $.isFunction(converter) ? converter(value) : value;
+	}
+
+	var config = $.cookie = function (key, value, options) {
+
+		// Write
+
+		if (value !== undefined && !$.isFunction(value)) {
+			options = $.extend({}, config.defaults, options);
+
+			if (typeof options.expires === 'number') {
+				var days = options.expires, t = options.expires = new Date();
+				t.setTime(+t + days * 864e+5);
+			}
+
+			return (document.cookie = [
+				encode(key), '=', stringifyCookieValue(value),
+				options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
+				options.path    ? '; path=' + options.path : '',
+				options.domain  ? '; domain=' + options.domain : '',
+				options.secure  ? '; secure' : ''
+			].join(''));
+		}
+
+		// Read
+
+		var result = key ? undefined : {};
+
+		// To prevent the for loop in the first place assign an empty array
+		// in case there are no cookies at all. Also prevents odd result when
+		// calling $.cookie().
+		var cookies = document.cookie ? document.cookie.split('; ') : [];
+
+		for (var i = 0, l = cookies.length; i < l; i++) {
+			var parts = cookies[i].split('=');
+			var name = decode(parts.shift());
+			var cookie = parts.join('=');
+
+			if (key && key === name) {
+				// If second argument (value) is a function it's a converter...
+				result = read(cookie, value);
+				break;
+			}
+
+			// Prevent storing a cookie that we couldn't decode.
+			if (!key && (cookie = read(cookie)) !== undefined) {
+				result[name] = cookie;
+			}
+		}
+
+		return result;
+	};
+
+	config.defaults = {};
+
+	$.removeCookie = function (key, options) {
+		if ($.cookie(key) === undefined) {
+			return false;
+		}
+
+		// Must not alter options, thus extending a fresh object...
+		$.cookie(key, '', $.extend({}, options, { expires: -1 }));
+		return !$.cookie(key);
+	};
+
+}));

+ 14 - 0
static/tickets/js/search.js

@@ -0,0 +1,14 @@
+const searchInput = $('#search-input');
+const searchButton = $('#search-button');
+
+// Checking the search field
+function validateSearch() {
+  if (searchInput.val().trim() === '') {
+    searchButton.prop('disabled', true); // Disable "Find" button
+  } else {
+    searchButton.prop('disabled', false); // Activate "Find" button
+  }
+}
+
+// Input event listener for checking when the field value changes
+searchInput.on('input', validateSearch);

+ 76 - 0
templates/tickets/base.html

@@ -0,0 +1,76 @@
+{% load static %}
+
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <title>ShariX Open Tickets</title>
+    
+    <link rel="icon" href="{% static 'tickets/favicon.ico' %}">
+    <link rel="stylesheet" href="{% static 'tickets/css/style.css' %}">
+    <link rel="stylesheet" href="{% static 'tickets/css/bootstrap.min.css' %}">
+    <link rel="stylesheet" href="{% static 'tickets/assets/fontawesome/css/fontawesome.css' %}">
+    <link rel="stylesheet" href="{% static 'tickets/assets/fontawesome/css/solid.css' %}">  
+    
+    {% block extrahead %}{% endblock extrahead %}
+  </head>
+  
+  <body>
+    <header>
+      <nav class="navbar bg-body-tertiary navbar-expand-md fixed-top">
+        <div class="container">
+          <a class="navbar-brand" href="{% url 'tickets:ticket_list_list' %}">
+            <img src="{% static 'tickets/favicon.ico' %}" width="30" height="30" class="d-inline-block align-top">
+            ShariX Open Tickets
+          </a>
+          
+          {% if user.is_authenticated %}
+            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
+              <span class="navbar-toggler-icon"></span>
+            </button>
+          
+            <div class="collapse navbar-collapse" id="navbarCollapse">
+              <ul class="navbar-nav">
+                <li class="nav-item"><a href="{% url 'tickets:my_tickets' %}" class="nav-link">My Tickets</a></li>
+                <li class="nav-item"><a href="{% url 'tickets:assignments' %}" class="nav-link">Assignments</a></li>
+              </ul>            
+              
+              <!--Search input-->
+              <form class="form-inline ms-auto" action="{% url 'tickets:search' %}" method="get">
+                {% csrf_token %}
+                <div class="input-group input-group">
+                  <input type="text" name="search" id="search-input" placeholder="Any ticket details" class="form-control">
+                  
+                  <button class="btn btn-primary" id="search-button" disabled type="submit">
+                    <i class="fa-solid fa-magnifying-glass"></i>
+                  </button>
+                </div>
+              </form>
+            </div>          
+          {% endif %}
+        </div>
+      </nav>
+    </header>
+      
+    <main role="main" class="container">
+      {% if messages %}
+        {% for message in messages %}
+          <div class="alert {% if message.tags %}alert-{{ message.tags }}{% endif %}">{{ message }}</div>
+        {% endfor %}
+      {% endif %}
+      
+      {% block content %}{% endblock %}
+    </main>
+    
+    <script src="{% static "tickets/js/jquery-3.7.0.min.js" %}"></script>
+    <script src="{% static "tickets/js/jquery.cookie.js" %}"></script>
+    <script src="{% static "tickets/js/bootstrap.bundle.min.js" %}"></script>
+
+    {% if user.is_authenticated %}
+      <script src="{% static "tickets/js/search.js" %}"></script>
+    {% endif %}
+
+    {% block extra_js %}{% endblock extra_js %}
+  </body>
+</html>

+ 23 - 0
templates/tickets/include/form.html

@@ -0,0 +1,23 @@
+{% csrf_token %}
+{% for field in form %}
+    <div class="mb-3">
+    <label for="{{ field.id_for_label }}" class="form-label">{{ field.label }}</label>
+    {{ field }}
+    {% if field.help_text %}
+        <small class="form-text d-block text-muted mt-1">{{ field.help_text }}</small>
+    {% endif %}
+    {% for error in field.errors %}
+        <div class="invalid-feedback">
+            {{ error }}
+        </div>
+    {% endfor %}
+    </div>
+{% endfor %}
+
+{% if form.non_field_errors %}
+    <div class="alert alert-danger">
+        {% for error in form.non_field_errors %}
+            {{ error }}
+        {% endfor %}
+    </div>
+{% endif %}

+ 33 - 0
templates/tickets/search.html

@@ -0,0 +1,33 @@
+{% extends "tickets/base.html" %}
+
+{% block content %}
+  <h2>{{ found_tickets|length|default:0 }} search results for term "{{ query_string }}"</h2>
+  {% for ticket in found_tickets %}
+    <div class="card mb-3">
+      <div class="row">
+        <div class="col-md-8">
+          <div class="card-body">
+            <h5 class="card-title"><a href="{% url 'tickets:ticket_detail' ticket.pk %}">{{ ticket.title|truncatechars:24 }}</a></h5>
+            <p class="card-text">{{ ticket.note|truncatechars:96 }}</p>
+            <section class="card-text">
+              <small class="text-body-secondary">Created at: {{ ticket.created_at }}</small><br>
+              <small class="text-body-secondary">Due date: {{ ticket.due_date }}</small>
+            </section>
+          </div>
+        </div>
+        <div class="col-md-4">
+          <div class="card-body">
+            In list: <a href="{% url 'tickets:ticket_list_detail' ticket.ticket_list.pk %}">{{ ticket.ticket_list.name }}</a><br>
+            Created by: {{ ticket.created_by_username }}<br>
+            Assigned to: {% if ticket.assigned_to_username %}{{ ticket.assigned_to_username }}{% else %}Anyone{% endif %}<br>
+            Type: {{ ticket.get_ticket_type_display }}<br>
+            Status: {{ ticket.status }}<br>
+            Priority: {{ ticket.priority }}
+          </div>
+        </div>
+      </div>
+    </div>
+  {% empty %}
+    <h4> No results to show :(</h4>
+  {% endfor %}
+{% endblock %}

+ 238 - 0
templates/tickets/ticket_detail.html

@@ -0,0 +1,238 @@
+{% extends "tickets/base.html" %}
+{% load static %}
+
+{% block content %}
+  <div class="row">
+    <div class="col-12 col-md-8 mb-2 mb-md-0">
+      <div class="card h-100">
+        <div class="card-body">
+          <h3 class="card-title">{{ ticket.title }}</h3>
+            {% if ticket.note %}
+              <div class="card-text overflow-auto">{{ ticket.note|safe|urlize|linebreaks }}</div>
+            {% endif %}
+        </div>
+      </div>
+    </div>
+    <div class="col-12 col-md-4">
+      <div class="card">
+        <ul class="list-group list-group-flush">
+          <li class="list-group-item">
+            <strong>In list:</strong>
+            <a href="{% url 'tickets:ticket_list_detail' ticket.ticket_list.pk %}">
+              {{ ticket.ticket_list }}
+            </a>
+          </li>
+          <li class="list-group-item">
+            <strong>Created by:</strong> 
+            {{ ticket.created_by.username }}
+          </li>
+          <li class="list-group-item">
+            <strong>Assigned to:</strong>
+            {% if ticket.assigned_to.username %}{{ ticket.assigned_to.username }}{% else %}Anyone{% endif %}
+          </li>
+          <li class="list-group-item">
+            <strong>Type:</strong>
+            {{ ticket.get_ticket_type_display }}
+          </li>
+          <li class="list-group-item">
+            <strong>Status:</strong>
+            {{ ticket.status }}
+          </li>
+          <li class="list-group-item">
+            <strong>Priority:</strong>
+            {{ ticket.priority }}
+          </li>
+          <li class="list-group-item">
+            <strong>Created at:</strong>
+            {{ ticket.created_at }}
+          </li>
+          <li class="list-group-item">
+            <strong>Due date:</strong>
+            {{ ticket.due_date }}
+          </li>
+          <li class="list-group-item">
+            <strong>Updated at:</strong>
+            {{ ticket.updated_at }}
+          </li>
+        </ul>
+      </div>
+
+      {% if available_statuses %}
+        <form class="my-3" method="POST">
+          {% csrf_token %}
+          
+          <label for="select-ticket-status" class="form-label">Available statuses</label>
+          <div class="input-group">
+            <select class="form-select" id="select-ticket-status" name="ticket-status">
+              {% for status in available_statuses %}
+                <option {% if forloop.first %}selected{% endif %} value="{{ status }}">{{ status }}</option>
+              {% endfor %}
+            </select>
+            
+            <button class="btn btn-outline-secondary" type="submit">Change</button>
+          </div>
+        </form>
+      {% else %}
+        <p class="my-3">No available statuses</p>
+      {% endif %}
+      
+      {% if user.is_staff or user.is_superuser %}
+        <div class="d-flex justify-content-between">
+          <button type="button" data-bs-toggle="modal" data-bs-target="#ticket-edit-modal" class="btn btn-primary">
+            <i class="fa-solid fa-pen-to-square pe-1"></i>
+            Edit ticket
+          </button>
+          <button type="button" class="btn btn-outline-danger" data-bs-toggle="modal" data-bs-target="#ticket-delete-modal">
+            <i class="fa-solid fa-trash-can"></i>
+          </button>  
+        </div>
+
+        <!--ticket edit modal-->
+        <div class="modal fade" id="ticket-edit-modal" tabindex="-1">
+          <div class="modal-dialog modal-dialog-centered">
+            <div class="modal-content">
+              <div class="modal-header">
+                <h1 class="modal-title fs-5">
+                  <i class="fa-solid fa-pen-to-square pe-1"></i>
+                  Edit Ticket
+              </div>
+              <div class="modal-body">
+                <form id="ticket-create-form" action="{% url 'tickets:ticket_edit' ticket.pk %}" method="post">
+                  {% include 'tickets/include/form.html' %}
+                </form>
+              </div>
+              <div class="modal-footer">
+                <button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">
+                  <i class="fa-solid fa-xmark pe-1"></i>
+                  Close
+                </button>
+                <button class="btn btn-primary" type="submit" form="ticket-create-form">
+                  <i class="fa-solid fa-check pe-1"></i>
+                  Confirm
+                </button>
+              </div>
+            </div>
+          </div>
+        </div>
+
+        <!--ticket delete modal-->
+        <div class="modal fade" id="ticket-delete-modal" tabindex="-1">
+          <div class="modal-dialog modal-dialog-centered">
+            <div class="modal-content">
+              <div class="modal-header">
+                <h1 class="modal-title fs-5">
+                  <i class="fa-solid fa-trash-can pe-1"></i>
+                  Delete Ticket
+                </h1>
+              </div>
+              <div class="modal-body">
+                Are you sure you want to delete the ticket "{{ ticket.title }}"?
+              </div>
+              <div class="modal-footer">
+                <button type="button" class="btn btn-primary" data-bs-dismiss="modal">
+                  <i class="fa-solid fa-xmark pe-1"></i>
+                  Close
+                </button>
+                <form method="post" action="{% url "tickets:ticket_delete" ticket.pk %}">
+                  {% csrf_token %}
+                  <button class="btn btn-outline-danger" type="submit">
+                    <i class="fa-solid fa-check pe-1"></i>
+                    Confirm
+                  </button>
+                </form>
+              </div>
+            </div>
+          </div>
+        </div>
+      {% endif %}
+    </div>
+  </div>
+
+  <!--Attachments block-->
+  <h4 class="mt-4">Attachments</h4>
+  {% if ticket.attachment_set.count %}
+    <div class="table-responsive">
+      <table class="table mb-3">
+        <thead>
+          <tr>
+            <th>File</th>
+            <th>Uploaded</th>
+            <th>By</th>
+            <th>Remove</th>
+          </tr>
+        </thead>
+        <tbody>
+          {% for attachment in attachments %}
+            <tr>
+              <td><a href="{{ attachment.file.url }}">{{ attachment.filename }}</a></td>
+              <td>{{ attachment.timestamp }}</td>
+              <td>{{ attachment.added_by_username }}</td>
+              <td>
+                <form action="{% url "tickets:remove_attachment" attachment.id %}" method="POST">
+                  {% csrf_token %}
+                  <button type="submit" class="btn btn-danger btn-sm">
+                    <i class="fa-solid fa-xmark"></i>
+                  </button>
+                </form>
+              </td>
+            </tr>
+          {% endfor %}
+        </tbody>
+      </table>
+    </div>
+  {% endif %}
+
+  <form method="post" enctype="multipart/form-data">
+    {% csrf_token %}
+    <div class="input-group">
+      <input type="file" class="form-control" id="attachment_file_input" name="attachment_file_input">
+      <button class="btn btn-primary">
+        <i class="fa-solid fa-upload pe-1"></i>
+        Upload
+      </button>
+    </div>
+  </form>
+
+  <!--Discussion block-->
+  <h4 class="mt-4">Discussion</h4>
+  <form class="mb-3" method="post">
+    {% csrf_token %}
+    <textarea class="form-control" name="comment-body" rows="2" placeholder="Write your comment here" required></textarea>
+    <button class="btn btn-primary mt-2" type="submit">
+      <i class="fa-solid fa-paper-plane pe-1"></i>
+      Comment
+    </button>
+  </form>
+  
+  {% if comment_list %}
+    {% for comment in comment_list %}
+      <div class="card mb-2">
+        <div class="card-body">
+          <h5>
+            {{ comment.author_username }}
+            <small class="text-muted">{{ comment.author_email }}</small>
+          </h5>
+          
+          <div class="container">
+            {{ comment.body|safe|urlize|linebreaks }}
+          </div>
+          
+          <p class="card-text"><small class="text-body-secondary">{{ comment.date }}</small></p>
+        </div>
+      </div>
+    {% endfor %}
+  {% endif %}
+
+{% endblock %}
+
+{% block extra_js %}
+  <script>
+    // Support file attachment uploader
+    $('#attachment_file_input').on('change',function(){
+      // Get the file name and remove browser-added "fakepath."
+      // Then replace the "Choose a file" label.
+      var fileName = $(this).val().replace('C:\\fakepath\\', " ");
+      $(this).next('.custom-file-label').html(fileName);
+    })
+  </script>
+{% endblock extra_js %}

+ 181 - 0
templates/tickets/ticket_list_detail.html

@@ -0,0 +1,181 @@
+{% extends "tickets/base.html" %}
+{% load static %}
+
+{% block content %}
+  {% if my_tickets %}
+    <h1>My Tickets (in all groups)</h1>
+  {% elif assignments %}
+    <h1>Assignments (in all groups)</h1>
+  {% else %}
+    <h1>{{ ticket_list.group }} > {{ ticket_list.name }}</h1>
+    
+    <div class="d-flex justify-content-between">
+      <button type="button" data-bs-toggle="modal" data-bs-target="#ticket-create-modal" class="btn btn-primary">
+        <i class="fa-solid fa-plus pe-1"></i>
+        New Ticket
+      </button>
+      {% if user.is_staff or user.is_superuser %}
+        <button type="button" class="btn btn-outline-danger" data-bs-toggle="modal" data-bs-target="#ticket_list-delete-modal">
+          <i class="fa-solid fa-trash-can"></i>
+        </button>  
+      {% endif %}    
+    </div>
+
+    {% if user.is_staff or user.is_superuser %}
+      <!--List delete modal-->
+      <div class="modal fade" id="ticket_list-delete-modal" tabindex="-1">
+        <div class="modal-dialog modal-dialog-centered">
+          <div class="modal-content">
+            <div class="modal-header">
+              <h1 class="modal-title fs-5">
+                <i class="fa-solid fa-trash-can pe-1"></i>
+                Delete List
+              </h1>
+            </div>
+            <div class="modal-body">
+              Are you sure you want to delete the list "{{ ticket_list.name }}"? All related tickets will also be deleted.
+            </div>
+            <div class="modal-footer">
+              <button type="button" class="btn btn-primary" data-bs-dismiss="modal">
+                <i class="fa-solid fa-xmark pe-1"></i>
+                Close
+              </button>
+              <form action="{% url 'tickets:ticket_list_delete' ticket_list.pk %}" method="post">
+                {% csrf_token %}
+                <button class="btn btn-outline-danger" type="submit">
+                  <i class="fa-solid fa-check pe-1"></i>
+                  Confirm
+                </button>
+              </form>
+            </div>
+          </div>
+        </div>
+      </div>
+    {% endif %}
+
+    <!--ticket create modal-->
+    <div class="modal fade" id="ticket-create-modal" tabindex="-1">
+      <div class="modal-dialog modal-dialog-centered">
+        <div class="modal-content">
+          <div class="modal-header">
+            <h1 class="modal-title fs-5">
+              <i class="fa-solid fa-plus pe-1"></i>
+              New Ticket
+          </div>
+          <div class="modal-body">
+            <form id="ticket-create-form" action="{% url 'tickets:ticket_create' ticket_list.pk %}" method="post">
+              {% include 'tickets/include/form.html' %}
+            </form>
+          </div>
+          <div class="modal-footer">
+            <button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">
+              <i class="fa-solid fa-xmark pe-1"></i>
+              Close
+            </button>
+            <button class="btn btn-primary" type="submit" form="ticket-create-form">
+              <i class="fa-solid fa-check pe-1"></i>
+              Confirm
+            </button>
+          </div>
+        </div>
+      </div>
+    </div>
+  {% endif %}
+  
+  <hr>
+  {% if tickets %} 
+    {% for ticket_type in ticket_types %}
+      <input type="radio" class="btn-check ticket_type-filter" name="btnradio" id="{{ ticket_type }}-radio">
+      <label class="btn btn-outline-secondary" for="{{ ticket_type }}-radio">
+        {{ ticket_type }}
+      </label>
+    {% endfor %}
+    <hr>
+
+    <table class="table" id="tickettable">
+      <thead>
+        <tr class="nodrop">
+          <th>ID</th>
+          <th>Title</th>
+          <th>Created at</th>
+          <th>Due on</th>
+          <th>Owner</th>
+          <th>Assigned</th>
+          <th>Status</th>
+          <th>Priority</th>
+        </tr>
+      </thead>
+
+      <tbody>
+        {% for ticket in tickets %}
+          <tr class="ticket" id="{{ ticket.pk }}" data-ticket-type="{{ ticket.get_ticket_type_display }}">
+            <td>
+              {{ ticket.pk }}
+            </td>
+            <td>
+              <a href="{% url 'tickets:ticket_detail' ticket.pk %}">{{ ticket.title|truncatewords:10 }}</a>
+            </td>
+            <td>
+                {{ ticket.created_at }}
+            </td>
+            <td>
+                {{ ticket.due_date }}
+            </td>
+            <td>
+              {{ ticket.created_by_username }}
+            </td>
+            <td>
+              {% if ticket.assigned_to_username %}{{ ticket.assigned_to_username }}{% else %}Anyone{% endif %}
+            </td>
+            <td>
+              {{ ticket.status }}
+            </td>
+            <td>
+              {{ ticket.priority }}
+            </td>
+          </tr>
+        {% endfor %}
+      </tbody>
+    </table>
+    
+  {% else %}
+    <h4>There are no Tickets!</h4>
+  {% endif %}
+{% endblock %}
+
+{% block extra_js %}
+  {% if tickets %}
+    <script>
+      // State filters
+      let tickets = $(".ticket");
+      let filters = $(".ticket_type-filter");
+      
+      filters.on("click", function() {
+        localStorage.setItem("checked", this.id);
+        apply_filters();
+      });
+
+      function apply_filters() {
+        tickets.hide();
+    
+        let checkedFilterId = localStorage.getItem("checked");
+        let checkedFilterEl = document.getElementById(checkedFilterId);
+        if (checkedFilterEl) {
+          checkedFilterEl.checked = true;
+        } else {
+          filters[0].checked = true;
+          checkedFilterId = filters[0].id;
+        }
+
+        let ticket_type = checkedFilterId.split("-")[0];
+        let filteredtickets = tickets.filter(function() {
+          return $(this).data("ticket-type") === ticket_type;
+        });
+    
+        filteredtickets.show();
+      }
+
+      document.addEventListener("DOMContentLoaded", apply_filters);
+    </script>
+  {% endif %}
+{% endblock extra_js %}

+ 57 - 0
templates/tickets/ticket_list_list.html

@@ -0,0 +1,57 @@
+{% extends "tickets/base.html" %}
+
+{% block content %}
+  <h1>Lists</h1>
+
+  {% if user.is_staff or user.is_superuser %}
+    <button type="button" data-bs-toggle="modal" data-bs-target="#ticket_list-create-modal" class="btn btn-primary">
+      <i class="fa-solid fa-plus pe-1"></i>
+      New List
+    </button>
+    <hr>
+
+    <!--List create modal-->
+    <div class="modal fade" id="ticket_list-create-modal" tabindex="-1">
+      <div class="modal-dialog modal-dialog-centered">
+        <div class="modal-content">
+          <div class="modal-header">
+            <h1 class="modal-title fs-5">
+              <i class="fa-solid fa-plus pe-1"></i>
+              New List
+          </div>
+          <div class="modal-body">
+            <form id="ticket_list-create-form" action="{% url 'tickets:ticket_list_create' %}" method="post">
+              {% include 'tickets/include/form.html' %}
+            </form>
+          </div>
+          <div class="modal-footer">
+            <button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">
+              <i class="fa-solid fa-xmark pe-1"></i>
+              Close
+            </button>
+            <button class="btn btn-primary" type="submit" form="ticket_list-create-form">
+              <i class="fa-solid fa-check pe-1"></i>
+              Confirm
+            </button>
+          </div>
+        </div>
+      </div>
+    </div>
+  {% endif %}
+
+  {% if ticket_lists %}
+    {% regroup ticket_lists by group as section_ticket_list %}
+    {% for group in section_ticket_list %}
+      <h3>{{ group.grouper }}</h3>
+      <ul class="list-group mb-4">
+        {% for ticket_list in group.list %}
+          <li class="list-group-item d-flex align-items-center justify-content-between">
+            <a href="{% url 'tickets:ticket_list_detail' ticket_list.pk %}">{{ ticket_list.name }}</a>
+          </li>
+        {% endfor %}
+      </ul>
+    {% endfor %}
+  {% else %}
+    <h4>There are no lists!</h4>
+  {% endif %}
+{% endblock %}

+ 34 - 0
urls.py

@@ -0,0 +1,34 @@
+from django.urls import path, include
+
+from tickets.views import *
+# from .apiviews import *
+# from rest_framework import routers
+
+
+# router = routers.DefaultRouter()
+# router.register(r'tickets', ticketMVS)
+# router.register(r'list', ticketListMVS)
+# router.register(r'type', TicketTypeMVS)
+# router.register(r'comment', CommentMVS)
+# router.register(r'attachments', AttachmentMVS)
+
+app_name = "tickets"
+
+urlpatterns = [
+    path("", TicketListView.as_view(), name="ticket_list_list"),
+    path("search/", search, name="search"),
+    path("ticket_list_create/", TicketListCreateView.as_view(), name="ticket_list_create"),
+    path("my_tickets/", ticket_list_detail, {"my_tickets": True}, name="my_tickets"),
+    path("assignments/", ticket_list_detail, {"assignments": True}, name="assignments"),
+        
+    path("<int:pk>/", ticket_list_detail, name="ticket_list_detail"),
+    path("<int:pk>/ticket_create/", TicketCreateView.as_view(), name="ticket_create"),
+    path("<int:pk>/delete", TicketListDeleteView.as_view(), name="ticket_list_delete"),
+    
+    path("ticket/<int:pk>/", TicketDetailView.as_view(), name="ticket_detail"),
+    path("ticket/<int:pk>/edit", TicketEditView.as_view(), name="ticket_edit"),
+    path("ticket/<int:pk>/delete", TicketDeleteView.as_view(), name="ticket_delete"),
+    path("attachment/remove/<int:attachment_id>/", remove_attachment, name="remove_attachment"),
+
+    # path("api/", include(router.urls))
+]

+ 43 - 0
utils.py

@@ -0,0 +1,43 @@
+import logging
+import os
+
+from django.contrib.auth.mixins import UserPassesTestMixin
+from django.shortcuts import get_object_or_404
+
+from tickets.models import *
+
+
+log = logging.getLogger(__name__)
+
+
+class SuperuserStaffRequiredMixin(UserPassesTestMixin):
+    def test_func(self):
+        return self.request.user.is_superuser or self.request.user.is_staff
+
+
+class UserCanReadTicketListMixin(UserPassesTestMixin):
+    def test_func(self):
+        ticket_list = get_object_or_404(TicketList.objects.select_related('group'), pk=self.kwargs.get('pk'))
+        return self.request.user.is_superuser or ticket_list.group in self.request.user.groups.all()
+
+
+class UserCanReadTicketMixin(UserPassesTestMixin):
+    def test_func(self):
+        ticket = get_object_or_404(Ticket.objects.select_related('ticket_list', 'ticket_list__group'), pk=self.kwargs.get('pk'))
+        return self.request.user.is_superuser or ticket.ticket_list.group in self.request.user.groups.all()
+
+
+def remove_attachment_file(attachment_id: int) -> bool:
+    """Delete an Attachment object and its corresponding file from the filesystem."""
+    try:
+        attachment = Attachment.objects.get(id=attachment_id)
+        if attachment.file:
+            if os.path.isfile(attachment.file.path):
+                os.remove(attachment.file.path)
+
+        attachment.delete()
+        return True
+
+    except Attachment.DoesNotExist:
+        log.info(f"Attachment {attachment_id} not found.")
+        return False

+ 9 - 0
views/__init__.py

@@ -0,0 +1,9 @@
+from tickets.views.ticket_list_list import TicketListView
+from tickets.views.ticket_list_create import TicketListCreateView
+from tickets.views.delete import TicketDeleteView, TicketListDeleteView
+from tickets.views.ticket_list_detail import ticket_list_detail
+from tickets.views.ticket_create import TicketCreateView
+from tickets.views.search import search
+from tickets.views.ticket_edit import TicketEditView
+from tickets.views.attachment_remove import remove_attachment
+from tickets.views.ticket_detail import TicketDetailView

+ 28 - 0
views/attachment_remove.py

@@ -0,0 +1,28 @@
+from django.contrib import messages
+from django.contrib.auth.decorators import login_required
+from django.core.exceptions import PermissionDenied
+from django.shortcuts import get_object_or_404, redirect
+from django.urls import reverse
+
+from tickets.models import Attachment
+from tickets.utils import remove_attachment_file
+
+
+@login_required
+def remove_attachment(request, attachment_id):
+    if request.method == "POST":
+        attachment = get_object_or_404(Attachment, pk=attachment_id)
+
+        # Permissions
+        if not (attachment.ticket.ticket_list.group in request.user.groups.all()or request.user.is_superuser):
+            raise PermissionDenied
+
+        if remove_attachment_file(attachment.id):
+            messages.success(request, f"The attachment has been successfully deleted.")
+        else:
+            messages.error(request, f"Sorry, there was a problem deleting attachment.")
+
+        return redirect(reverse("tickets:ticket_detail", kwargs={"pk": attachment.ticket.pk}))
+
+    else:
+        raise PermissionDenied

+ 36 - 0
views/delete.py

@@ -0,0 +1,36 @@
+from django.views import View
+from django.contrib.auth.mixins import LoginRequiredMixin
+from django.contrib import messages
+from django.urls import reverse_lazy
+from django.shortcuts import get_object_or_404, redirect
+from django.views import View
+
+from tickets.models import TicketList, Ticket
+from tickets.utils import SuperuserStaffRequiredMixin, UserCanReadTicketListMixin, UserCanReadTicketMixin
+
+
+class BaseDeleteView(LoginRequiredMixin, SuperuserStaffRequiredMixin, View):
+    model = None
+    success_message = None
+    redirect_url = None
+
+    def post(self, request, pk):
+        object = get_object_or_404(self.model, pk=pk)
+        
+        if self.success_message:
+            messages.success(self.request, self.success_message.format(object))
+
+        object.delete()
+        return redirect(self.redirect_url)
+
+
+class TicketListDeleteView(BaseDeleteView, UserCanReadTicketListMixin):
+    model = TicketList
+    success_message = 'The "{0.name}" list has been successfully deleted from "{0.group.name}" group.'
+    redirect_url = "tickets:ticket_list_list"
+
+
+class TicketDeleteView(BaseDeleteView, UserCanReadTicketMixin):
+    model = Ticket
+    success_message = 'The "{0.title}" ticket has been successfully deleted from {0.ticket_list} > {0.ticket_list.group}.'
+    redirect_url = "tickets:ticket_list_list"

+ 44 - 0
views/search.py

@@ -0,0 +1,44 @@
+from django.contrib.auth.decorators import login_required
+from django.db.models import Q, F
+from django.shortcuts import render
+from django.db.models.functions import Concat
+
+from tickets.models import Ticket
+
+@login_required
+def search(request):
+    found_tickets = None
+    query_string = ""
+    
+    if request.GET:
+        if ("search" in request.GET) and request.GET["search"].strip():
+            query_string = request.GET["search"]
+
+            found_tickets = Ticket.objects.all()
+            if not request.user.is_superuser:
+                found_tickets = found_tickets.filter(
+                    Q(ticket_list__group__in=request.user.groups.all())
+                    | Q(assigned_to=request.user)
+                )
+            
+            found_tickets = found_tickets.annotate(created_by_username=F("created_by__username"))
+            found_tickets = found_tickets.annotate(assigned_to_username=F("assigned_to__username"))
+
+            found_tickets = found_tickets.filter(
+                Q(title__icontains=query_string)
+                | Q(ticket_list__name__icontains=query_string)
+                | Q(note__icontains=query_string)
+                | Q(created_by_username__icontains=query_string)
+                | Q(assigned_to_username__icontains=query_string)
+                | Q(status__icontains=query_string)
+            )
+
+            found_tickets = found_tickets.select_related("ticket_list")
+            found_tickets = found_tickets.order_by("-priority")
+
+    context = {
+        "query_string": query_string,
+        "found_tickets": found_tickets
+    }
+
+    return render(request, "tickets/search.html", context)

+ 27 - 0
views/ticket_create.py

@@ -0,0 +1,27 @@
+import bleach
+
+from django.contrib.auth.mixins import LoginRequiredMixin
+from django.contrib import messages
+from django.urls import reverse_lazy
+from django.shortcuts import redirect
+from django.views import View
+
+from tickets.forms import TicketForm
+from tickets.utils import UserCanReadTicketListMixin
+
+
+class TicketCreateView(LoginRequiredMixin, UserCanReadTicketListMixin, View):
+    def post(self, request, pk):
+        form = TicketForm(request.user, request.POST)
+
+        if form.is_valid():
+            new_ticket = form.save(commit=False)
+            new_ticket.created_by = request.user
+            new_ticket.note = bleach.clean(form.cleaned_data["note"], strip=True)
+            new_ticket.save()
+
+            messages.success(self.request, f'The "{new_ticket.title}" ticket has been successfully created in {new_ticket.ticket_list.group} > {new_ticket.ticket_list}.')
+        else:
+            messages.error(self.request, "Failed to create the ticket.")
+
+        return redirect(reverse_lazy('tickets:ticket_list_detail', kwargs={'pk': pk}))

+ 70 - 0
views/ticket_detail.py

@@ -0,0 +1,70 @@
+import bleach
+import os
+
+from django.contrib import messages
+from django.contrib.auth.mixins import LoginRequiredMixin
+from django.shortcuts import redirect
+from django.db.models import F
+from django.views.generic import DetailView
+
+from tickets.defaults import defaults
+from tickets.forms import TicketForm
+from tickets.models import Attachment, Comment, Ticket
+from tickets.utils import UserCanReadTicketMixin
+
+
+class TicketDetailView(LoginRequiredMixin, UserCanReadTicketMixin, DetailView):
+    model = Ticket
+    template_name = 'tickets/ticket_detail.html'
+    context_object_name = 'ticket'
+
+    def get_queryset(self):
+        queryset = super().get_queryset()
+        return queryset.select_related("created_by", "assigned_to")
+
+    def get_context_data(self, **kwargs):
+        context = super().get_context_data(**kwargs)
+        context['form'] = TicketForm(self.request.user, instance=self.object)
+        context['comment_list'] = Comment.objects.filter(ticket=self.object.pk).order_by("-date").annotate(
+            author_username=F("author__username"), author_email=F("author__email")
+        )
+        context['attachments'] = Attachment.objects.filter(ticket=self.object.pk).annotate(
+            added_by_username=F("added_by__username")
+        )
+        context['available_statuses'] = self.object.get_available_statuses()
+        return context
+
+    def post(self, request, *args, **kwargs):
+        ticket = self.get_object()
+
+        if request.POST.get("ticket-status"):
+            status = request.POST.get("ticket-status")
+            
+            if status in ticket.get_available_statuses():
+                ticket.status = status
+                ticket.save()
+                messages.success(request, f"Status successfully changed.")
+            else:
+                messages.error(request, f"Status change error.")
+
+        if request.POST.get("comment-body"):
+            Comment.objects.create(
+                author=request.user,
+                ticket=ticket,
+                body=bleach.clean(request.POST.get("comment-body"), strip=True)
+            )
+            messages.success(request, "Comment posted")
+
+        if request.FILES.get("attachment_file_input"):
+            uploaded_file = request.FILES.get("attachment_file_input")
+            name, extension = os.path.splitext(uploaded_file.name)
+
+            if uploaded_file.size > defaults("TICKETS_MAXIMUM_ATTACHMENT_SIZE"):
+                messages.error(request, f"File exceeds maximum attachment size.")
+            elif extension not in defaults("TICKETS_LIMIT_FILE_ATTACHMENTS"):
+                messages.error(request, f"This site does not allow upload of {extension} files.")
+            else:
+                Attachment.objects.create(ticket=ticket, added_by=request.user, file=uploaded_file)
+                messages.success(request, f"File attached successfully.")
+
+        return redirect("tickets:ticket_detail", pk=ticket.pk)

+ 27 - 0
views/ticket_edit.py

@@ -0,0 +1,27 @@
+import bleach
+
+from django.contrib.auth.mixins import LoginRequiredMixin
+from django.contrib import messages
+from django.urls import reverse_lazy
+from django.shortcuts import redirect, get_object_or_404
+from django.views import View
+
+from tickets.forms import TicketForm
+from tickets.utils import SuperuserStaffRequiredMixin, UserCanReadTicketMixin
+from tickets.models import Ticket
+
+class TicketEditView(LoginRequiredMixin, SuperuserStaffRequiredMixin, UserCanReadTicketMixin, View):
+    def post(self, request, pk):
+        ticket = get_object_or_404(Ticket, pk=pk)
+        form = TicketForm(request.user, request.POST, instance=ticket)
+
+        if form.is_valid():
+            ticket = form.save(commit=False)
+            ticket.note = bleach.clean(form.cleaned_data["note"], strip=True)
+            ticket.save()
+
+            messages.success(self.request, f'The "{ticket.title}" ticket has been successfully edited in {ticket.ticket_list.group} > {ticket.ticket_list}.')
+        else:
+            messages.error(self.request, "Failed to edit the ticket.")
+
+        return redirect(reverse_lazy('tickets:ticket_detail', kwargs={'pk': pk}))

+ 21 - 0
views/ticket_list_create.py

@@ -0,0 +1,21 @@
+from django.contrib.auth.mixins import LoginRequiredMixin
+from django.contrib import messages
+from django.urls import reverse_lazy
+from django.shortcuts import redirect
+from django.views import View
+
+from tickets.forms import TicketListForm
+from tickets.utils import SuperuserStaffRequiredMixin
+
+
+class TicketListCreateView(LoginRequiredMixin, SuperuserStaffRequiredMixin, View):
+    def post(self, request):
+        form = TicketListForm(request.user, request.POST)
+
+        if form.is_valid():
+            new_ticket_list = form.save()
+            messages.success(self.request, f'The "{new_ticket_list.name}" list has been successfully created in {new_ticket_list.group}.')
+        else:
+            messages.error(self.request, "Failed to create the list. Maybe you specified an already existing list name in the group?")
+
+        return redirect(reverse_lazy('tickets:ticket_list_list'))

+ 49 - 0
views/ticket_list_detail.py

@@ -0,0 +1,49 @@
+from django.contrib import messages
+from django.contrib.auth.decorators import login_required
+from django.core.exceptions import PermissionDenied
+from django.shortcuts import get_object_or_404, redirect, render
+from django.db.models import F, Count
+
+from tickets.forms import TicketForm
+from tickets.models import Ticket, TicketList
+
+
+@login_required
+def ticket_list_detail(request, pk=None, my_tickets=False, assignments=False):
+    form = None
+    ticket_list = None
+    
+    if my_tickets:
+        tickets = Ticket.objects.filter(assigned_to=request.user) 
+    elif assignments:
+        tickets = Ticket.objects.filter(created_by=request.user)
+    else:
+        ticket_list = get_object_or_404(TicketList.objects.select_related('group'), id=pk)
+        if ticket_list.group not in request.user.groups.all() and not request.user.is_superuser:
+            raise PermissionDenied
+
+        tickets = Ticket.objects.filter(ticket_list=ticket_list)
+
+        form = TicketForm(
+            request.user,
+            initial={
+                "ticket_list": ticket_list
+            }
+        )
+    
+    tickets = tickets.annotate(created_by_username=F("created_by__username"))
+    tickets = tickets.annotate(assigned_to_username=F("assigned_to__username"))
+    
+    ticket_types = tickets.values('ticket_type')
+    ticket_types_list = dict(Ticket.TICKET_TYPES).values
+
+    context = {
+        "ticket_list": ticket_list,
+        "tickets": tickets,
+        "form": form,
+        "my_tickets": my_tickets,
+        "assignments": assignments,
+        "ticket_types": dict(Ticket.TICKET_TYPES).values
+    }
+
+    return render(request, "tickets/ticket_list_detail.html", context)

+ 32 - 0
views/ticket_list_list.py

@@ -0,0 +1,32 @@
+from django.contrib import messages
+from django.contrib.auth.mixins import LoginRequiredMixin
+from django.db.models import Count, Sum, Q
+from django.views.generic import ListView
+
+from tickets.models import TicketList
+from tickets.forms import TicketListForm
+
+
+class TicketListView(LoginRequiredMixin, ListView):
+    model = TicketList
+    template_name = "tickets/ticket_list_list.html"
+    context_object_name = "ticket_lists"
+
+    def get_queryset(self):
+        user = self.request.user
+        user_groups_ids = user.groups.all().values_list("pk", flat=True)
+        ticket_lists  = TicketList.objects.select_related("group").order_by("group__name", "name")
+        
+        if not user.is_superuser:
+            if user_groups_ids:
+                ticket_lists = ticket_lists.filter(group__id__in=user_groups_ids)
+            else:
+                messages.warning(self.request, "You do not yet belong to any groups. Ask your administrator to add you to one.")
+                return None
+
+        return ticket_lists
+    
+    def get_context_data(self, **kwargs):
+        context = super().get_context_data(**kwargs)
+        context["form"] = TicketListForm(self.request.user)
+        return context

部分文件因为文件数量过多而无法显示